##// END OF EJS Templates
%quickref
vivainio -
Show More
@@ -1,2866 +1,2869 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 1090 2006-01-27 21:24:05Z vivainio $"""
4 $Id: Magic.py 1092 2006-01-27 23:56:32Z 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
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 opts,args = getopt(argv,opt_str,*long_opts)
309 opts,args = getopt(argv,opt_str,*long_opts)
310 for o,a in opts:
310 for o,a in opts:
311 if o.startswith('--'):
311 if o.startswith('--'):
312 o = o[2:]
312 o = o[2:]
313 else:
313 else:
314 o = o[1:]
314 o = o[1:]
315 try:
315 try:
316 odict[o].append(a)
316 odict[o].append(a)
317 except AttributeError:
317 except AttributeError:
318 odict[o] = [odict[o],a]
318 odict[o] = [odict[o],a]
319 except KeyError:
319 except KeyError:
320 if list_all:
320 if list_all:
321 odict[o] = [a]
321 odict[o] = [a]
322 else:
322 else:
323 odict[o] = a
323 odict[o] = a
324
324
325 # Prepare opts,args for return
325 # Prepare opts,args for return
326 opts = Struct(odict)
326 opts = Struct(odict)
327 if mode == 'string':
327 if mode == 'string':
328 args = ' '.join(args)
328 args = ' '.join(args)
329
329
330 return opts,args
330 return opts,args
331
331
332 #......................................................................
332 #......................................................................
333 # And now the actual magic functions
333 # And now the actual magic functions
334
334
335 # Functions for IPython shell work (vars,funcs, config, etc)
335 # Functions for IPython shell work (vars,funcs, config, etc)
336 def magic_lsmagic(self, parameter_s = ''):
336 def magic_lsmagic(self, parameter_s = ''):
337 """List currently available magic functions."""
337 """List currently available magic functions."""
338 mesc = self.shell.ESC_MAGIC
338 mesc = self.shell.ESC_MAGIC
339 print 'Available magic functions:\n'+mesc+\
339 print 'Available magic functions:\n'+mesc+\
340 (' '+mesc).join(self.lsmagic())
340 (' '+mesc).join(self.lsmagic())
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
342 return None
342 return None
343
343
344 def magic_magic(self, parameter_s = ''):
344 def magic_magic(self, parameter_s = ''):
345 """Print information about the magic function system."""
345 """Print information about the magic function system."""
346
346
347 mode = ''
347 mode = ''
348 try:
348 try:
349 if parameter_s.split()[0] == '-latex':
349 if parameter_s.split()[0] == '-latex':
350 mode = 'latex'
350 mode = 'latex'
351 except:
351 except:
352 pass
352 pass
353
353
354 magic_docs = []
354 magic_docs = []
355 for fname in self.lsmagic():
355 for fname in self.lsmagic():
356 mname = 'magic_' + fname
356 mname = 'magic_' + fname
357 for space in (Magic,self,self.__class__):
357 for space in (Magic,self,self.__class__):
358 try:
358 try:
359 fn = space.__dict__[mname]
359 fn = space.__dict__[mname]
360 except KeyError:
360 except KeyError:
361 pass
361 pass
362 else:
362 else:
363 break
363 break
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
365 fname,fn.__doc__))
365 fname,fn.__doc__))
366 magic_docs = ''.join(magic_docs)
366 magic_docs = ''.join(magic_docs)
367
367
368 if mode == 'latex':
368 if mode == 'latex':
369 print self.format_latex(magic_docs)
369 print self.format_latex(magic_docs)
370 return
370 return
371 else:
371 else:
372 magic_docs = self.format_screen(magic_docs)
372 magic_docs = self.format_screen(magic_docs)
373
373
374 outmsg = """
374 outmsg = """
375 IPython's 'magic' functions
375 IPython's 'magic' functions
376 ===========================
376 ===========================
377
377
378 The magic function system provides a series of functions which allow you to
378 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
379 control the behavior of IPython itself, plus a lot of system-type
380 features. All these functions are prefixed with a % character, but parameters
380 features. All these functions are prefixed with a % character, but parameters
381 are given without parentheses or quotes.
381 are given without parentheses or quotes.
382
382
383 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 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,
384 %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.
385 IPython ships with automagic on, so you should only rarely need the % escape.
386
386
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
388 to 'mydir', if it exists.
388 to 'mydir', if it exists.
389
389
390 You can define your own magic functions to extend the system. See the supplied
390 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
391 ipythonrc and example-magic.py files for details (in your ipython
392 configuration directory, typically $HOME/.ipython/).
392 configuration directory, typically $HOME/.ipython/).
393
393
394 You can also define your own aliased names for magic functions. In your
394 You can also define your own aliased names for magic functions. In your
395 ipythonrc file, placing a line like:
395 ipythonrc file, placing a line like:
396
396
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
398
398
399 will define %pf as a new name for %profile.
399 will define %pf as a new name for %profile.
400
400
401 You can also call magics in code using the ipmagic() function, which IPython
401 You can also call magics in code using the ipmagic() function, which IPython
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
403
403
404 For a list of the available magic functions, use %lsmagic. For a description
404 For a list of the available magic functions, use %lsmagic. For a description
405 of any of them, type %magic_name?, e.g. '%cd?'.
405 of any of them, type %magic_name?, e.g. '%cd?'.
406
406
407 Currently the magic system has the following functions:\n"""
407 Currently the magic system has the following functions:\n"""
408
408
409 mesc = self.shell.ESC_MAGIC
409 mesc = self.shell.ESC_MAGIC
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
411 "\n\n%s%s\n\n%s" % (outmsg,
411 "\n\n%s%s\n\n%s" % (outmsg,
412 magic_docs,mesc,mesc,
412 magic_docs,mesc,mesc,
413 (' '+mesc).join(self.lsmagic()),
413 (' '+mesc).join(self.lsmagic()),
414 Magic.auto_status[self.shell.rc.automagic] ) )
414 Magic.auto_status[self.shell.rc.automagic] ) )
415
415
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
417
417
418 def magic_automagic(self, parameter_s = ''):
418 def magic_automagic(self, parameter_s = ''):
419 """Make magic functions callable without having to type the initial %.
419 """Make magic functions callable without having to type the initial %.
420
420
421 Toggles on/off (when off, you must call it as %automagic, of
421 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
422 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
423 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,
424 won't work for that function (you get the variable instead). However,
425 if you delete the variable (del var), the previously shadowed magic
425 if you delete the variable (del var), the previously shadowed magic
426 function becomes visible to automagic again."""
426 function becomes visible to automagic again."""
427
427
428 rc = self.shell.rc
428 rc = self.shell.rc
429 rc.automagic = not rc.automagic
429 rc.automagic = not rc.automagic
430 print '\n' + Magic.auto_status[rc.automagic]
430 print '\n' + Magic.auto_status[rc.automagic]
431
431
432 def magic_autocall(self, parameter_s = ''):
432 def magic_autocall(self, parameter_s = ''):
433 """Make functions callable without having to type parentheses.
433 """Make functions callable without having to type parentheses.
434
434
435 Usage:
435 Usage:
436
436
437 %autocall [mode]
437 %autocall [mode]
438
438
439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
439 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)."""
440 value is toggled on and off (remembering the previous state)."""
441
441
442 rc = self.shell.rc
442 rc = self.shell.rc
443
443
444 if parameter_s:
444 if parameter_s:
445 arg = int(parameter_s)
445 arg = int(parameter_s)
446 else:
446 else:
447 arg = 'toggle'
447 arg = 'toggle'
448
448
449 if not arg in (0,1,2,'toggle'):
449 if not arg in (0,1,2,'toggle'):
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
451 return
451 return
452
452
453 if arg in (0,1,2):
453 if arg in (0,1,2):
454 rc.autocall = arg
454 rc.autocall = arg
455 else: # toggle
455 else: # toggle
456 if rc.autocall:
456 if rc.autocall:
457 self._magic_state.autocall_save = rc.autocall
457 self._magic_state.autocall_save = rc.autocall
458 rc.autocall = 0
458 rc.autocall = 0
459 else:
459 else:
460 try:
460 try:
461 rc.autocall = self._magic_state.autocall_save
461 rc.autocall = self._magic_state.autocall_save
462 except AttributeError:
462 except AttributeError:
463 rc.autocall = self._magic_state.autocall_save = 1
463 rc.autocall = self._magic_state.autocall_save = 1
464
464
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
466
466
467 def magic_autoindent(self, parameter_s = ''):
467 def magic_autoindent(self, parameter_s = ''):
468 """Toggle autoindent on/off (if available)."""
468 """Toggle autoindent on/off (if available)."""
469
469
470 self.shell.set_autoindent()
470 self.shell.set_autoindent()
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
472
472
473 def magic_system_verbose(self, parameter_s = ''):
473 def magic_system_verbose(self, parameter_s = ''):
474 """Toggle verbose printing of system calls on/off."""
474 """Toggle verbose printing of system calls on/off."""
475
475
476 self.shell.rc_set_toggle('system_verbose')
476 self.shell.rc_set_toggle('system_verbose')
477 print "System verbose printing is:",\
477 print "System verbose printing is:",\
478 ['OFF','ON'][self.shell.rc.system_verbose]
478 ['OFF','ON'][self.shell.rc.system_verbose]
479
479
480 def magic_history(self, parameter_s = ''):
480 def magic_history(self, parameter_s = ''):
481 """Print input history (_i<n> variables), with most recent last.
481 """Print input history (_i<n> variables), with most recent last.
482
482
483 %history -> print at most 40 inputs (some may be multi-line)\\
483 %history -> print at most 40 inputs (some may be multi-line)\\
484 %history n -> print at most n inputs\\
484 %history n -> print at most n inputs\\
485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
486
486
487 Each input's number <n> is shown, and is accessible as the
487 Each input's number <n> is shown, and is accessible as the
488 automatically generated variable _i<n>. Multi-line statements are
488 automatically generated variable _i<n>. Multi-line statements are
489 printed starting at a new line for easy copy/paste.
489 printed starting at a new line for easy copy/paste.
490
490
491
491
492 Options:
492 Options:
493
493
494 -n: do NOT print line numbers. This is useful if you want to get a
494 -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
495 printout of many lines which can be directly pasted into a text
496 editor.
496 editor.
497
497
498 This feature is only available if numbered prompts are in use.
498 This feature is only available if numbered prompts are in use.
499
499
500 -r: print the 'raw' history. IPython filters your input and
500 -r: print the 'raw' history. IPython filters your input and
501 converts it all into valid Python source before executing it (things
501 converts it all into valid Python source before executing it (things
502 like magics or aliases are turned into function calls, for
502 like magics or aliases are turned into function calls, for
503 example). With this option, you'll see the unfiltered history
503 example). With this option, you'll see the unfiltered history
504 instead of the filtered version: '%cd /' will be seen as '%cd /'
504 instead of the filtered version: '%cd /' will be seen as '%cd /'
505 instead of 'ipmagic("%cd /")'.
505 instead of 'ipmagic("%cd /")'.
506 """
506 """
507
507
508 shell = self.shell
508 shell = self.shell
509 if not shell.outputcache.do_full_cache:
509 if not shell.outputcache.do_full_cache:
510 print 'This feature is only available if numbered prompts are in use.'
510 print 'This feature is only available if numbered prompts are in use.'
511 return
511 return
512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
513
513
514 if opts.has_key('r'):
514 if opts.has_key('r'):
515 input_hist = shell.input_hist_raw
515 input_hist = shell.input_hist_raw
516 else:
516 else:
517 input_hist = shell.input_hist
517 input_hist = shell.input_hist
518
518
519 default_length = 40
519 default_length = 40
520 if len(args) == 0:
520 if len(args) == 0:
521 final = len(input_hist)
521 final = len(input_hist)
522 init = max(1,final-default_length)
522 init = max(1,final-default_length)
523 elif len(args) == 1:
523 elif len(args) == 1:
524 final = len(input_hist)
524 final = len(input_hist)
525 init = max(1,final-int(args[0]))
525 init = max(1,final-int(args[0]))
526 elif len(args) == 2:
526 elif len(args) == 2:
527 init,final = map(int,args)
527 init,final = map(int,args)
528 else:
528 else:
529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
530 print self.magic_hist.__doc__
530 print self.magic_hist.__doc__
531 return
531 return
532 width = len(str(final))
532 width = len(str(final))
533 line_sep = ['','\n']
533 line_sep = ['','\n']
534 print_nums = not opts.has_key('n')
534 print_nums = not opts.has_key('n')
535 for in_num in range(init,final):
535 for in_num in range(init,final):
536 inline = input_hist[in_num]
536 inline = input_hist[in_num]
537 multiline = int(inline.count('\n') > 1)
537 multiline = int(inline.count('\n') > 1)
538 if print_nums:
538 if print_nums:
539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
540 print inline,
540 print inline,
541
541
542 def magic_hist(self, parameter_s=''):
542 def magic_hist(self, parameter_s=''):
543 """Alternate name for %history."""
543 """Alternate name for %history."""
544 return self.magic_history(parameter_s)
544 return self.magic_history(parameter_s)
545
545
546 def magic_p(self, parameter_s=''):
546 def magic_p(self, parameter_s=''):
547 """Just a short alias for Python's 'print'."""
547 """Just a short alias for Python's 'print'."""
548 exec 'print ' + parameter_s in self.shell.user_ns
548 exec 'print ' + parameter_s in self.shell.user_ns
549
549
550 def magic_r(self, parameter_s=''):
550 def magic_r(self, parameter_s=''):
551 """Repeat previous input.
551 """Repeat previous input.
552
552
553 If given an argument, repeats the previous command which starts with
553 If given an argument, repeats the previous command which starts with
554 the same string, otherwise it just repeats the previous input.
554 the same string, otherwise it just repeats the previous input.
555
555
556 Shell escaped commands (with ! as first character) are not recognized
556 Shell escaped commands (with ! as first character) are not recognized
557 by this system, only pure python code and magic commands.
557 by this system, only pure python code and magic commands.
558 """
558 """
559
559
560 start = parameter_s.strip()
560 start = parameter_s.strip()
561 esc_magic = self.shell.ESC_MAGIC
561 esc_magic = self.shell.ESC_MAGIC
562 # Identify magic commands even if automagic is on (which means
562 # Identify magic commands even if automagic is on (which means
563 # the in-memory version is different from that typed by the user).
563 # the in-memory version is different from that typed by the user).
564 if self.shell.rc.automagic:
564 if self.shell.rc.automagic:
565 start_magic = esc_magic+start
565 start_magic = esc_magic+start
566 else:
566 else:
567 start_magic = start
567 start_magic = start
568 # Look through the input history in reverse
568 # Look through the input history in reverse
569 for n in range(len(self.shell.input_hist)-2,0,-1):
569 for n in range(len(self.shell.input_hist)-2,0,-1):
570 input = self.shell.input_hist[n]
570 input = self.shell.input_hist[n]
571 # skip plain 'r' lines so we don't recurse to infinity
571 # skip plain 'r' lines so we don't recurse to infinity
572 if input != 'ipmagic("r")\n' and \
572 if input != 'ipmagic("r")\n' and \
573 (input.startswith(start) or input.startswith(start_magic)):
573 (input.startswith(start) or input.startswith(start_magic)):
574 #print 'match',`input` # dbg
574 #print 'match',`input` # dbg
575 print 'Executing:',input,
575 print 'Executing:',input,
576 self.shell.runlines(input)
576 self.shell.runlines(input)
577 return
577 return
578 print 'No previous input matching `%s` found.' % start
578 print 'No previous input matching `%s` found.' % start
579
579
580 def magic_page(self, parameter_s=''):
580 def magic_page(self, parameter_s=''):
581 """Pretty print the object and display it through a pager.
581 """Pretty print the object and display it through a pager.
582
582
583 If no parameter is given, use _ (last output)."""
583 If no parameter is given, use _ (last output)."""
584 # After a function contributed by Olivier Aubert, slightly modified.
584 # After a function contributed by Olivier Aubert, slightly modified.
585
585
586 oname = parameter_s and parameter_s or '_'
586 oname = parameter_s and parameter_s or '_'
587 info = self._ofind(oname)
587 info = self._ofind(oname)
588 if info['found']:
588 if info['found']:
589 page(pformat(info['obj']))
589 page(pformat(info['obj']))
590 else:
590 else:
591 print 'Object `%s` not found' % oname
591 print 'Object `%s` not found' % oname
592
592
593 def magic_profile(self, parameter_s=''):
593 def magic_profile(self, parameter_s=''):
594 """Print your currently active IPyhton profile."""
594 """Print your currently active IPyhton profile."""
595 if self.shell.rc.profile:
595 if self.shell.rc.profile:
596 printpl('Current IPython profile: $self.shell.rc.profile.')
596 printpl('Current IPython profile: $self.shell.rc.profile.')
597 else:
597 else:
598 print 'No profile active.'
598 print 'No profile active.'
599
599
600 def _inspect(self,meth,oname,**kw):
600 def _inspect(self,meth,oname,**kw):
601 """Generic interface to the inspector system.
601 """Generic interface to the inspector system.
602
602
603 This function is meant to be called by pdef, pdoc & friends."""
603 This function is meant to be called by pdef, pdoc & friends."""
604
604
605 oname = oname.strip()
605 oname = oname.strip()
606 info = Struct(self._ofind(oname))
606 info = Struct(self._ofind(oname))
607 if info.found:
607 if info.found:
608 pmethod = getattr(self.shell.inspector,meth)
608 pmethod = getattr(self.shell.inspector,meth)
609 formatter = info.ismagic and self.format_screen or None
609 formatter = info.ismagic and self.format_screen or None
610 if meth == 'pdoc':
610 if meth == 'pdoc':
611 pmethod(info.obj,oname,formatter)
611 pmethod(info.obj,oname,formatter)
612 elif meth == 'pinfo':
612 elif meth == 'pinfo':
613 pmethod(info.obj,oname,formatter,info,**kw)
613 pmethod(info.obj,oname,formatter,info,**kw)
614 else:
614 else:
615 pmethod(info.obj,oname)
615 pmethod(info.obj,oname)
616 else:
616 else:
617 print 'Object `%s` not found.' % oname
617 print 'Object `%s` not found.' % oname
618 return 'not found' # so callers can take other action
618 return 'not found' # so callers can take other action
619
619
620 def magic_pdef(self, parameter_s=''):
620 def magic_pdef(self, parameter_s=''):
621 """Print the definition header for any callable object.
621 """Print the definition header for any callable object.
622
622
623 If the object is a class, print the constructor information."""
623 If the object is a class, print the constructor information."""
624 self._inspect('pdef',parameter_s)
624 self._inspect('pdef',parameter_s)
625
625
626 def magic_pdoc(self, parameter_s=''):
626 def magic_pdoc(self, parameter_s=''):
627 """Print the docstring for an object.
627 """Print the docstring for an object.
628
628
629 If the given object is a class, it will print both the class and the
629 If the given object is a class, it will print both the class and the
630 constructor docstrings."""
630 constructor docstrings."""
631 self._inspect('pdoc',parameter_s)
631 self._inspect('pdoc',parameter_s)
632
632
633 def magic_psource(self, parameter_s=''):
633 def magic_psource(self, parameter_s=''):
634 """Print (or run through pager) the source code for an object."""
634 """Print (or run through pager) the source code for an object."""
635 self._inspect('psource',parameter_s)
635 self._inspect('psource',parameter_s)
636
636
637 def magic_pfile(self, parameter_s=''):
637 def magic_pfile(self, parameter_s=''):
638 """Print (or run through pager) the file where an object is defined.
638 """Print (or run through pager) the file where an object is defined.
639
639
640 The file opens at the line where the object definition begins. IPython
640 The file opens at the line where the object definition begins. IPython
641 will honor the environment variable PAGER if set, and otherwise will
641 will honor the environment variable PAGER if set, and otherwise will
642 do its best to print the file in a convenient form.
642 do its best to print the file in a convenient form.
643
643
644 If the given argument is not an object currently defined, IPython will
644 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
645 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
646 if needed). You can thus use %pfile as a syntax highlighting code
647 viewer."""
647 viewer."""
648
648
649 # first interpret argument as an object name
649 # first interpret argument as an object name
650 out = self._inspect('pfile',parameter_s)
650 out = self._inspect('pfile',parameter_s)
651 # if not, try the input as a filename
651 # if not, try the input as a filename
652 if out == 'not found':
652 if out == 'not found':
653 try:
653 try:
654 filename = get_py_filename(parameter_s)
654 filename = get_py_filename(parameter_s)
655 except IOError,msg:
655 except IOError,msg:
656 print msg
656 print msg
657 return
657 return
658 page(self.shell.inspector.format(file(filename).read()))
658 page(self.shell.inspector.format(file(filename).read()))
659
659
660 def magic_pinfo(self, parameter_s=''):
660 def magic_pinfo(self, parameter_s=''):
661 """Provide detailed information about an object.
661 """Provide detailed information about an object.
662
662
663 '%pinfo object' is just a synonym for object? or ?object."""
663 '%pinfo object' is just a synonym for object? or ?object."""
664
664
665 #print 'pinfo par: <%s>' % parameter_s # dbg
665 #print 'pinfo par: <%s>' % parameter_s # dbg
666
666
667 # detail_level: 0 -> obj? , 1 -> obj??
667 # detail_level: 0 -> obj? , 1 -> obj??
668 detail_level = 0
668 detail_level = 0
669 # We need to detect if we got called as 'pinfo pinfo foo', which can
669 # 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.
670 # happen if the user types 'pinfo foo?' at the cmd line.
671 pinfo,qmark1,oname,qmark2 = \
671 pinfo,qmark1,oname,qmark2 = \
672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
673 if pinfo or qmark1 or qmark2:
673 if pinfo or qmark1 or qmark2:
674 detail_level = 1
674 detail_level = 1
675 if "*" in oname:
675 if "*" in oname:
676 self.magic_psearch(oname)
676 self.magic_psearch(oname)
677 else:
677 else:
678 self._inspect('pinfo',oname,detail_level=detail_level)
678 self._inspect('pinfo',oname,detail_level=detail_level)
679
679
680 def magic_psearch(self, parameter_s=''):
680 def magic_psearch(self, parameter_s=''):
681 """Search for object in namespaces by wildcard.
681 """Search for object in namespaces by wildcard.
682
682
683 %psearch [options] PATTERN [OBJECT TYPE]
683 %psearch [options] PATTERN [OBJECT TYPE]
684
684
685 Note: ? can be used as a synonym for %psearch, at the beginning or at
685 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
686 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
687 rest of the command line must be unchanged (options come first), so
688 for example the following forms are equivalent
688 for example the following forms are equivalent
689
689
690 %psearch -i a* function
690 %psearch -i a* function
691 -i a* function?
691 -i a* function?
692 ?-i a* function
692 ?-i a* function
693
693
694 Arguments:
694 Arguments:
695
695
696 PATTERN
696 PATTERN
697
697
698 where PATTERN is a string containing * as a wildcard similar to its
698 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
699 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
700 search path. By default objects starting with a single _ are not
701 matched, many IPython generated objects have a single
701 matched, many IPython generated objects have a single
702 underscore. The default is case insensitive matching. Matching is
702 underscore. The default is case insensitive matching. Matching is
703 also done on the attributes of objects and not only on the objects
703 also done on the attributes of objects and not only on the objects
704 in a module.
704 in a module.
705
705
706 [OBJECT TYPE]
706 [OBJECT TYPE]
707
707
708 Is the name of a python type from the types module. The name is
708 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
709 given in lowercase without the ending type, ex. StringType is
710 written string. By adding a type here only objects matching the
710 written string. By adding a type here only objects matching the
711 given type are matched. Using all here makes the pattern match all
711 given type are matched. Using all here makes the pattern match all
712 types (this is the default).
712 types (this is the default).
713
713
714 Options:
714 Options:
715
715
716 -a: makes the pattern match even objects whose names start with a
716 -a: makes the pattern match even objects whose names start with a
717 single underscore. These names are normally ommitted from the
717 single underscore. These names are normally ommitted from the
718 search.
718 search.
719
719
720 -i/-c: make the pattern case insensitive/sensitive. If neither of
720 -i/-c: make the pattern case insensitive/sensitive. If neither of
721 these options is given, the default is read from your ipythonrc
721 these options is given, the default is read from your ipythonrc
722 file. The option name which sets this value is
722 file. The option name which sets this value is
723 'wildcards_case_sensitive'. If this option is not specified in your
723 'wildcards_case_sensitive'. If this option is not specified in your
724 ipythonrc file, IPython's internal default is to do a case sensitive
724 ipythonrc file, IPython's internal default is to do a case sensitive
725 search.
725 search.
726
726
727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
728 specifiy can be searched in any of the following namespaces:
728 specifiy can be searched in any of the following namespaces:
729 'builtin', 'user', 'user_global','internal', 'alias', where
729 'builtin', 'user', 'user_global','internal', 'alias', where
730 'builtin' and 'user' are the search defaults. Note that you should
730 'builtin' and 'user' are the search defaults. Note that you should
731 not use quotes when specifying namespaces.
731 not use quotes when specifying namespaces.
732
732
733 'Builtin' contains the python module builtin, 'user' contains all
733 'Builtin' contains the python module builtin, 'user' contains all
734 user data, 'alias' only contain the shell aliases and no python
734 user data, 'alias' only contain the shell aliases and no python
735 objects, 'internal' contains objects used by IPython. The
735 objects, 'internal' contains objects used by IPython. The
736 'user_global' namespace is only used by embedded IPython instances,
736 'user_global' namespace is only used by embedded IPython instances,
737 and it contains module-level globals. You can add namespaces to the
737 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
738 search with -s or exclude them with -e (these options can be given
739 more than once).
739 more than once).
740
740
741 Examples:
741 Examples:
742
742
743 %psearch a* -> objects beginning with an a
743 %psearch a* -> objects beginning with an a
744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
745 %psearch a* function -> all functions beginning with an a
745 %psearch a* function -> all functions beginning with an a
746 %psearch re.e* -> objects beginning with an e in module re
746 %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
747 %psearch r*.e* -> objects that start with e in modules starting in r
748 %psearch r*.* string -> all strings in modules beginning with r
748 %psearch r*.* string -> all strings in modules beginning with r
749
749
750 Case sensitve search:
750 Case sensitve search:
751
751
752 %psearch -c a* list all object beginning with lower case a
752 %psearch -c a* list all object beginning with lower case a
753
753
754 Show objects beginning with a single _:
754 Show objects beginning with a single _:
755
755
756 %psearch -a _* list objects beginning with a single underscore"""
756 %psearch -a _* list objects beginning with a single underscore"""
757
757
758 # default namespaces to be searched
758 # default namespaces to be searched
759 def_search = ['user','builtin']
759 def_search = ['user','builtin']
760
760
761 # Process options/args
761 # Process options/args
762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
763 opt = opts.get
763 opt = opts.get
764 shell = self.shell
764 shell = self.shell
765 psearch = shell.inspector.psearch
765 psearch = shell.inspector.psearch
766
766
767 # select case options
767 # select case options
768 if opts.has_key('i'):
768 if opts.has_key('i'):
769 ignore_case = True
769 ignore_case = True
770 elif opts.has_key('c'):
770 elif opts.has_key('c'):
771 ignore_case = False
771 ignore_case = False
772 else:
772 else:
773 ignore_case = not shell.rc.wildcards_case_sensitive
773 ignore_case = not shell.rc.wildcards_case_sensitive
774
774
775 # Build list of namespaces to search from user options
775 # Build list of namespaces to search from user options
776 def_search.extend(opt('s',[]))
776 def_search.extend(opt('s',[]))
777 ns_exclude = ns_exclude=opt('e',[])
777 ns_exclude = ns_exclude=opt('e',[])
778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
779
779
780 # Call the actual search
780 # Call the actual search
781 try:
781 try:
782 psearch(args,shell.ns_table,ns_search,
782 psearch(args,shell.ns_table,ns_search,
783 show_all=opt('a'),ignore_case=ignore_case)
783 show_all=opt('a'),ignore_case=ignore_case)
784 except:
784 except:
785 shell.showtraceback()
785 shell.showtraceback()
786
786
787 def magic_who_ls(self, parameter_s=''):
787 def magic_who_ls(self, parameter_s=''):
788 """Return a sorted list of all interactive variables.
788 """Return a sorted list of all interactive variables.
789
789
790 If arguments are given, only variables of types matching these
790 If arguments are given, only variables of types matching these
791 arguments are returned."""
791 arguments are returned."""
792
792
793 user_ns = self.shell.user_ns
793 user_ns = self.shell.user_ns
794 internal_ns = self.shell.internal_ns
794 internal_ns = self.shell.internal_ns
795 user_config_ns = self.shell.user_config_ns
795 user_config_ns = self.shell.user_config_ns
796 out = []
796 out = []
797 typelist = parameter_s.split()
797 typelist = parameter_s.split()
798
798
799 for i in user_ns:
799 for i in user_ns:
800 if not (i.startswith('_') or i.startswith('_i')) \
800 if not (i.startswith('_') or i.startswith('_i')) \
801 and not (i in internal_ns or i in user_config_ns):
801 and not (i in internal_ns or i in user_config_ns):
802 if typelist:
802 if typelist:
803 if type(user_ns[i]).__name__ in typelist:
803 if type(user_ns[i]).__name__ in typelist:
804 out.append(i)
804 out.append(i)
805 else:
805 else:
806 out.append(i)
806 out.append(i)
807 out.sort()
807 out.sort()
808 return out
808 return out
809
809
810 def magic_who(self, parameter_s=''):
810 def magic_who(self, parameter_s=''):
811 """Print all interactive variables, with some minimal formatting.
811 """Print all interactive variables, with some minimal formatting.
812
812
813 If any arguments are given, only variables whose type matches one of
813 If any arguments are given, only variables whose type matches one of
814 these are printed. For example:
814 these are printed. For example:
815
815
816 %who function str
816 %who function str
817
817
818 will only list functions and strings, excluding all other types of
818 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
819 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:
820 command line to see how python prints type names. For example:
821
821
822 In [1]: type('hello')\\
822 In [1]: type('hello')\\
823 Out[1]: <type 'str'>
823 Out[1]: <type 'str'>
824
824
825 indicates that the type name for strings is 'str'.
825 indicates that the type name for strings is 'str'.
826
826
827 %who always excludes executed names loaded through your configuration
827 %who always excludes executed names loaded through your configuration
828 file and things which are internal to IPython.
828 file and things which are internal to IPython.
829
829
830 This is deliberate, as typically you may load many modules and the
830 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."""
831 purpose of %who is to show you only what you've manually defined."""
832
832
833 varlist = self.magic_who_ls(parameter_s)
833 varlist = self.magic_who_ls(parameter_s)
834 if not varlist:
834 if not varlist:
835 print 'Interactive namespace is empty.'
835 print 'Interactive namespace is empty.'
836 return
836 return
837
837
838 # if we have variables, move on...
838 # if we have variables, move on...
839
839
840 # stupid flushing problem: when prompts have no separators, stdout is
840 # 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
841 # 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
842 # to force a flush with a print because even a sys.stdout.flush
843 # doesn't seem to do anything!
843 # doesn't seem to do anything!
844
844
845 count = 0
845 count = 0
846 for i in varlist:
846 for i in varlist:
847 print i+'\t',
847 print i+'\t',
848 count += 1
848 count += 1
849 if count > 8:
849 if count > 8:
850 count = 0
850 count = 0
851 print
851 print
852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
853
853
854 print # well, this does force a flush at the expense of an extra \n
854 print # well, this does force a flush at the expense of an extra \n
855
855
856 def magic_whos(self, parameter_s=''):
856 def magic_whos(self, parameter_s=''):
857 """Like %who, but gives some extra information about each variable.
857 """Like %who, but gives some extra information about each variable.
858
858
859 The same type filtering of %who can be applied here.
859 The same type filtering of %who can be applied here.
860
860
861 For all variables, the type is printed. Additionally it prints:
861 For all variables, the type is printed. Additionally it prints:
862
862
863 - For {},[],(): their length.
863 - For {},[],(): their length.
864
864
865 - For Numeric arrays, a summary with shape, number of elements,
865 - For Numeric arrays, a summary with shape, number of elements,
866 typecode and size in memory.
866 typecode and size in memory.
867
867
868 - Everything else: a string representation, snipping their middle if
868 - Everything else: a string representation, snipping their middle if
869 too long."""
869 too long."""
870
870
871 varnames = self.magic_who_ls(parameter_s)
871 varnames = self.magic_who_ls(parameter_s)
872 if not varnames:
872 if not varnames:
873 print 'Interactive namespace is empty.'
873 print 'Interactive namespace is empty.'
874 return
874 return
875
875
876 # if we have variables, move on...
876 # if we have variables, move on...
877
877
878 # for these types, show len() instead of data:
878 # for these types, show len() instead of data:
879 seq_types = [types.DictType,types.ListType,types.TupleType]
879 seq_types = [types.DictType,types.ListType,types.TupleType]
880
880
881 # for Numeric arrays, display summary info
881 # for Numeric arrays, display summary info
882 try:
882 try:
883 import Numeric
883 import Numeric
884 except ImportError:
884 except ImportError:
885 array_type = None
885 array_type = None
886 else:
886 else:
887 array_type = Numeric.ArrayType.__name__
887 array_type = Numeric.ArrayType.__name__
888
888
889 # Find all variable names and types so we can figure out column sizes
889 # Find all variable names and types so we can figure out column sizes
890 get_vars = lambda i: self.shell.user_ns[i]
890 get_vars = lambda i: self.shell.user_ns[i]
891 type_name = lambda v: type(v).__name__
891 type_name = lambda v: type(v).__name__
892 varlist = map(get_vars,varnames)
892 varlist = map(get_vars,varnames)
893
893
894 typelist = []
894 typelist = []
895 for vv in varlist:
895 for vv in varlist:
896 tt = type_name(vv)
896 tt = type_name(vv)
897 if tt=='instance':
897 if tt=='instance':
898 typelist.append(str(vv.__class__))
898 typelist.append(str(vv.__class__))
899 else:
899 else:
900 typelist.append(tt)
900 typelist.append(tt)
901
901
902 # column labels and # of spaces as separator
902 # column labels and # of spaces as separator
903 varlabel = 'Variable'
903 varlabel = 'Variable'
904 typelabel = 'Type'
904 typelabel = 'Type'
905 datalabel = 'Data/Info'
905 datalabel = 'Data/Info'
906 colsep = 3
906 colsep = 3
907 # variable format strings
907 # variable format strings
908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
910 aformat = "%s: %s elems, type `%s`, %s bytes"
910 aformat = "%s: %s elems, type `%s`, %s bytes"
911 # find the size of the columns to format the output nicely
911 # find the size of the columns to format the output nicely
912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
914 # table header
914 # table header
915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
917 # and the table itself
917 # and the table itself
918 kb = 1024
918 kb = 1024
919 Mb = 1048576 # kb**2
919 Mb = 1048576 # kb**2
920 for vname,var,vtype in zip(varnames,varlist,typelist):
920 for vname,var,vtype in zip(varnames,varlist,typelist):
921 print itpl(vformat),
921 print itpl(vformat),
922 if vtype in seq_types:
922 if vtype in seq_types:
923 print len(var)
923 print len(var)
924 elif vtype==array_type:
924 elif vtype==array_type:
925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
926 vsize = Numeric.size(var)
926 vsize = Numeric.size(var)
927 vbytes = vsize*var.itemsize()
927 vbytes = vsize*var.itemsize()
928 if vbytes < 100000:
928 if vbytes < 100000:
929 print aformat % (vshape,vsize,var.typecode(),vbytes)
929 print aformat % (vshape,vsize,var.typecode(),vbytes)
930 else:
930 else:
931 print aformat % (vshape,vsize,var.typecode(),vbytes),
931 print aformat % (vshape,vsize,var.typecode(),vbytes),
932 if vbytes < Mb:
932 if vbytes < Mb:
933 print '(%s kb)' % (vbytes/kb,)
933 print '(%s kb)' % (vbytes/kb,)
934 else:
934 else:
935 print '(%s Mb)' % (vbytes/Mb,)
935 print '(%s Mb)' % (vbytes/Mb,)
936 else:
936 else:
937 vstr = str(var).replace('\n','\\n')
937 vstr = str(var).replace('\n','\\n')
938 if len(vstr) < 50:
938 if len(vstr) < 50:
939 print vstr
939 print vstr
940 else:
940 else:
941 printpl(vfmt_short)
941 printpl(vfmt_short)
942
942
943 def magic_reset(self, parameter_s=''):
943 def magic_reset(self, parameter_s=''):
944 """Resets the namespace by removing all names defined by the user.
944 """Resets the namespace by removing all names defined by the user.
945
945
946 Input/Output history are left around in case you need them."""
946 Input/Output history are left around in case you need them."""
947
947
948 ans = raw_input(
948 ans = raw_input(
949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
950 if not ans.lower() == 'y':
950 if not ans.lower() == 'y':
951 print 'Nothing done.'
951 print 'Nothing done.'
952 return
952 return
953 user_ns = self.shell.user_ns
953 user_ns = self.shell.user_ns
954 for i in self.magic_who_ls():
954 for i in self.magic_who_ls():
955 del(user_ns[i])
955 del(user_ns[i])
956
956
957 def magic_config(self,parameter_s=''):
957 def magic_config(self,parameter_s=''):
958 """Show IPython's internal configuration."""
958 """Show IPython's internal configuration."""
959
959
960 page('Current configuration structure:\n'+
960 page('Current configuration structure:\n'+
961 pformat(self.shell.rc.dict()))
961 pformat(self.shell.rc.dict()))
962
962
963 def magic_logstart(self,parameter_s=''):
963 def magic_logstart(self,parameter_s=''):
964 """Start logging anywhere in a session.
964 """Start logging anywhere in a session.
965
965
966 %logstart [-o|-t] [log_name [log_mode]]
966 %logstart [-o|-t] [log_name [log_mode]]
967
967
968 If no name is given, it defaults to a file named 'ipython_log.py' in your
968 If no name is given, it defaults to a file named 'ipython_log.py' in your
969 current directory, in 'rotate' mode (see below).
969 current directory, in 'rotate' mode (see below).
970
970
971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
972 history up to that point and then continues logging.
972 history up to that point and then continues logging.
973
973
974 %logstart takes a second optional parameter: logging mode. This can be one
974 %logstart takes a second optional parameter: logging mode. This can be one
975 of (note that the modes are given unquoted):\\
975 of (note that the modes are given unquoted):\\
976 append: well, that says it.\\
976 append: well, that says it.\\
977 backup: rename (if exists) to name~ and start name.\\
977 backup: rename (if exists) to name~ and start name.\\
978 global: single logfile in your home dir, appended to.\\
978 global: single logfile in your home dir, appended to.\\
979 over : overwrite existing log.\\
979 over : overwrite existing log.\\
980 rotate: create rotating logs name.1~, name.2~, etc.
980 rotate: create rotating logs name.1~, name.2~, etc.
981
981
982 Options:
982 Options:
983
983
984 -o: log also IPython's output. In this mode, all commands which
984 -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
985 generate an Out[NN] prompt are recorded to the logfile, right after
986 their corresponding input line. The output lines are always
986 their corresponding input line. The output lines are always
987 prepended with a '#[Out]# ' marker, so that the log remains valid
987 prepended with a '#[Out]# ' marker, so that the log remains valid
988 Python code.
988 Python code.
989
989
990 Since this marker is always the same, filtering only the output from
990 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:
991 a log is very easy, using for example a simple awk call:
992
992
993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
994
994
995 -t: put timestamps before each input line logged (these are put in
995 -t: put timestamps before each input line logged (these are put in
996 comments)."""
996 comments)."""
997
997
998 opts,par = self.parse_options(parameter_s,'ot')
998 opts,par = self.parse_options(parameter_s,'ot')
999 log_output = 'o' in opts
999 log_output = 'o' in opts
1000 timestamp = 't' in opts
1000 timestamp = 't' in opts
1001
1001
1002 rc = self.shell.rc
1002 rc = self.shell.rc
1003 logger = self.shell.logger
1003 logger = self.shell.logger
1004
1004
1005 # if no args are given, the defaults set in the logger constructor by
1005 # if no args are given, the defaults set in the logger constructor by
1006 # ipytohn remain valid
1006 # ipytohn remain valid
1007 if par:
1007 if par:
1008 try:
1008 try:
1009 logfname,logmode = par.split()
1009 logfname,logmode = par.split()
1010 except:
1010 except:
1011 logfname = par
1011 logfname = par
1012 logmode = 'backup'
1012 logmode = 'backup'
1013 else:
1013 else:
1014 logfname = logger.logfname
1014 logfname = logger.logfname
1015 logmode = logger.logmode
1015 logmode = logger.logmode
1016 # put logfname into rc struct as if it had been called on the command
1016 # 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
1017 # line, so it ends up saved in the log header Save it in case we need
1018 # to restore it...
1018 # to restore it...
1019 old_logfile = rc.opts.get('logfile','')
1019 old_logfile = rc.opts.get('logfile','')
1020 if logfname:
1020 if logfname:
1021 logfname = os.path.expanduser(logfname)
1021 logfname = os.path.expanduser(logfname)
1022 rc.opts.logfile = logfname
1022 rc.opts.logfile = logfname
1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1024 try:
1024 try:
1025 started = logger.logstart(logfname,loghead,logmode,
1025 started = logger.logstart(logfname,loghead,logmode,
1026 log_output,timestamp)
1026 log_output,timestamp)
1027 except:
1027 except:
1028 rc.opts.logfile = old_logfile
1028 rc.opts.logfile = old_logfile
1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1030 else:
1030 else:
1031 # log input history up to this point, optionally interleaving
1031 # log input history up to this point, optionally interleaving
1032 # output if requested
1032 # output if requested
1033
1033
1034 if timestamp:
1034 if timestamp:
1035 # disable timestamping for the previous history, since we've
1035 # disable timestamping for the previous history, since we've
1036 # lost those already (no time machine here).
1036 # lost those already (no time machine here).
1037 logger.timestamp = False
1037 logger.timestamp = False
1038 if log_output:
1038 if log_output:
1039 log_write = logger.log_write
1039 log_write = logger.log_write
1040 input_hist = self.shell.input_hist
1040 input_hist = self.shell.input_hist
1041 output_hist = self.shell.output_hist
1041 output_hist = self.shell.output_hist
1042 for n in range(1,len(input_hist)-1):
1042 for n in range(1,len(input_hist)-1):
1043 log_write(input_hist[n].rstrip())
1043 log_write(input_hist[n].rstrip())
1044 if n in output_hist:
1044 if n in output_hist:
1045 log_write(repr(output_hist[n]),'output')
1045 log_write(repr(output_hist[n]),'output')
1046 else:
1046 else:
1047 logger.log_write(self.shell.input_hist[1:])
1047 logger.log_write(self.shell.input_hist[1:])
1048 if timestamp:
1048 if timestamp:
1049 # re-enable timestamping
1049 # re-enable timestamping
1050 logger.timestamp = True
1050 logger.timestamp = True
1051
1051
1052 print ('Activating auto-logging. '
1052 print ('Activating auto-logging. '
1053 'Current session state plus future input saved.')
1053 'Current session state plus future input saved.')
1054 logger.logstate()
1054 logger.logstate()
1055
1055
1056 def magic_logoff(self,parameter_s=''):
1056 def magic_logoff(self,parameter_s=''):
1057 """Temporarily stop logging.
1057 """Temporarily stop logging.
1058
1058
1059 You must have previously started logging."""
1059 You must have previously started logging."""
1060 self.shell.logger.switch_log(0)
1060 self.shell.logger.switch_log(0)
1061
1061
1062 def magic_logon(self,parameter_s=''):
1062 def magic_logon(self,parameter_s=''):
1063 """Restart logging.
1063 """Restart logging.
1064
1064
1065 This function is for restarting logging which you've temporarily
1065 This function is for restarting logging which you've temporarily
1066 stopped with %logoff. For starting logging for the first time, you
1066 stopped with %logoff. For starting logging for the first time, you
1067 must use the %logstart function, which allows you to specify an
1067 must use the %logstart function, which allows you to specify an
1068 optional log filename."""
1068 optional log filename."""
1069
1069
1070 self.shell.logger.switch_log(1)
1070 self.shell.logger.switch_log(1)
1071
1071
1072 def magic_logstate(self,parameter_s=''):
1072 def magic_logstate(self,parameter_s=''):
1073 """Print the status of the logging system."""
1073 """Print the status of the logging system."""
1074
1074
1075 self.shell.logger.logstate()
1075 self.shell.logger.logstate()
1076
1076
1077 def magic_pdb(self, parameter_s=''):
1077 def magic_pdb(self, parameter_s=''):
1078 """Control the calling of the pdb interactive debugger.
1078 """Control the calling of the pdb interactive debugger.
1079
1079
1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1081 argument it works as a toggle.
1081 argument it works as a toggle.
1082
1082
1083 When an exception is triggered, IPython can optionally call the
1083 When an exception is triggered, IPython can optionally call the
1084 interactive pdb debugger after the traceback printout. %pdb toggles
1084 interactive pdb debugger after the traceback printout. %pdb toggles
1085 this feature on and off."""
1085 this feature on and off."""
1086
1086
1087 par = parameter_s.strip().lower()
1087 par = parameter_s.strip().lower()
1088
1088
1089 if par:
1089 if par:
1090 try:
1090 try:
1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1092 except KeyError:
1092 except KeyError:
1093 print ('Incorrect argument. Use on/1, off/0, '
1093 print ('Incorrect argument. Use on/1, off/0, '
1094 'or nothing for a toggle.')
1094 'or nothing for a toggle.')
1095 return
1095 return
1096 else:
1096 else:
1097 # toggle
1097 # toggle
1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1099
1099
1100 # set on the shell
1100 # set on the shell
1101 self.shell.call_pdb = new_pdb
1101 self.shell.call_pdb = new_pdb
1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1103
1103
1104 def magic_prun(self, parameter_s ='',user_mode=1,
1104 def magic_prun(self, parameter_s ='',user_mode=1,
1105 opts=None,arg_lst=None,prog_ns=None):
1105 opts=None,arg_lst=None,prog_ns=None):
1106
1106
1107 """Run a statement through the python code profiler.
1107 """Run a statement through the python code profiler.
1108
1108
1109 Usage:\\
1109 Usage:\\
1110 %prun [options] statement
1110 %prun [options] statement
1111
1111
1112 The given statement (which doesn't require quote marks) is run via the
1112 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.
1113 python profiler in a manner similar to the profile.run() function.
1114 Namespaces are internally managed to work correctly; profile.run
1114 Namespaces are internally managed to work correctly; profile.run
1115 cannot be used in IPython because it makes certain assumptions about
1115 cannot be used in IPython because it makes certain assumptions about
1116 namespaces which do not hold under IPython.
1116 namespaces which do not hold under IPython.
1117
1117
1118 Options:
1118 Options:
1119
1119
1120 -l <limit>: you can place restrictions on what or how much of the
1120 -l <limit>: you can place restrictions on what or how much of the
1121 profile gets printed. The limit value can be:
1121 profile gets printed. The limit value can be:
1122
1122
1123 * A string: only information for function names containing this string
1123 * A string: only information for function names containing this string
1124 is printed.
1124 is printed.
1125
1125
1126 * An integer: only these many lines are printed.
1126 * An integer: only these many lines are printed.
1127
1127
1128 * A float (between 0 and 1): this fraction of the report is printed
1128 * 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).
1129 (for example, use a limit of 0.4 to see the topmost 40% only).
1130
1130
1131 You can combine several limits with repeated use of the option. For
1131 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
1132 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1133 information about class constructors.
1133 information about class constructors.
1134
1134
1135 -r: return the pstats.Stats object generated by the profiling. This
1135 -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
1136 object has all the information about the profile in it, and you can
1137 later use it for further analysis or in other functions.
1137 later use it for further analysis or in other functions.
1138
1138
1139 Since magic functions have a particular form of calling which prevents
1139 Since magic functions have a particular form of calling which prevents
1140 you from writing something like:\\
1140 you from writing something like:\\
1141 In [1]: p = %prun -r print 4 # invalid!\\
1141 In [1]: p = %prun -r print 4 # invalid!\\
1142 you must instead use IPython's automatic variables to assign this:\\
1142 you must instead use IPython's automatic variables to assign this:\\
1143 In [1]: %prun -r print 4 \\
1143 In [1]: %prun -r print 4 \\
1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1145 In [2]: stats = _
1145 In [2]: stats = _
1146
1146
1147 If you really need to assign this value via an explicit function call,
1147 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
1148 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
1149 by using the ipmagic function (which IPython automatically adds to the
1150 builtins):\\
1150 builtins):\\
1151 In [3]: stats = ipmagic('prun','-r print 4')
1151 In [3]: stats = ipmagic('prun','-r print 4')
1152
1152
1153 You can type ipmagic? for more details on ipmagic.
1153 You can type ipmagic? for more details on ipmagic.
1154
1154
1155 -s <key>: sort profile by given key. You can provide more than one key
1155 -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
1156 by using the option several times: '-s key1 -s key2 -s key3...'. The
1157 default sorting key is 'time'.
1157 default sorting key is 'time'.
1158
1158
1159 The following is copied verbatim from the profile documentation
1159 The following is copied verbatim from the profile documentation
1160 referenced below:
1160 referenced below:
1161
1161
1162 When more than one key is provided, additional keys are used as
1162 When more than one key is provided, additional keys are used as
1163 secondary criteria when the there is equality in all keys selected
1163 secondary criteria when the there is equality in all keys selected
1164 before them.
1164 before them.
1165
1165
1166 Abbreviations can be used for any key names, as long as the
1166 Abbreviations can be used for any key names, as long as the
1167 abbreviation is unambiguous. The following are the keys currently
1167 abbreviation is unambiguous. The following are the keys currently
1168 defined:
1168 defined:
1169
1169
1170 Valid Arg Meaning\\
1170 Valid Arg Meaning\\
1171 "calls" call count\\
1171 "calls" call count\\
1172 "cumulative" cumulative time\\
1172 "cumulative" cumulative time\\
1173 "file" file name\\
1173 "file" file name\\
1174 "module" file name\\
1174 "module" file name\\
1175 "pcalls" primitive call count\\
1175 "pcalls" primitive call count\\
1176 "line" line number\\
1176 "line" line number\\
1177 "name" function name\\
1177 "name" function name\\
1178 "nfl" name/file/line\\
1178 "nfl" name/file/line\\
1179 "stdname" standard name\\
1179 "stdname" standard name\\
1180 "time" internal time
1180 "time" internal time
1181
1181
1182 Note that all sorts on statistics are in descending order (placing
1182 Note that all sorts on statistics are in descending order (placing
1183 most time consuming items first), where as name, file, and line number
1183 most time consuming items first), where as name, file, and line number
1184 searches are in ascending order (i.e., alphabetical). The subtle
1184 searches are in ascending order (i.e., alphabetical). The subtle
1185 distinction between "nfl" and "stdname" is that the standard name is a
1185 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
1186 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
1187 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
1188 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
1189 "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
1190 line numbers. In fact, sort_stats("nfl") is the same as
1191 sort_stats("name", "file", "line").
1191 sort_stats("name", "file", "line").
1192
1192
1193 -T <filename>: save profile results as shown on screen to a text
1193 -T <filename>: save profile results as shown on screen to a text
1194 file. The profile is still shown on screen.
1194 file. The profile is still shown on screen.
1195
1195
1196 -D <filename>: save (via dump_stats) profile statistics to given
1196 -D <filename>: save (via dump_stats) profile statistics to given
1197 filename. This data is in a format understod by the pstats module, and
1197 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
1198 is generated by a call to the dump_stats() method of profile
1199 objects. The profile is still shown on screen.
1199 objects. The profile is still shown on screen.
1200
1200
1201 If you want to run complete programs under the profiler's control, use
1201 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
1202 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1203 contains profiler specific options as described here.
1203 contains profiler specific options as described here.
1204
1204
1205 You can read the complete documentation for the profile module with:\\
1205 You can read the complete documentation for the profile module with:\\
1206 In [1]: import profile; profile.help() """
1206 In [1]: import profile; profile.help() """
1207
1207
1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1209 # protect user quote marks
1209 # protect user quote marks
1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1211
1211
1212 if user_mode: # regular user call
1212 if user_mode: # regular user call
1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1214 list_all=1)
1214 list_all=1)
1215 namespace = self.shell.user_ns
1215 namespace = self.shell.user_ns
1216 else: # called to run a program by %run -p
1216 else: # called to run a program by %run -p
1217 try:
1217 try:
1218 filename = get_py_filename(arg_lst[0])
1218 filename = get_py_filename(arg_lst[0])
1219 except IOError,msg:
1219 except IOError,msg:
1220 error(msg)
1220 error(msg)
1221 return
1221 return
1222
1222
1223 arg_str = 'execfile(filename,prog_ns)'
1223 arg_str = 'execfile(filename,prog_ns)'
1224 namespace = locals()
1224 namespace = locals()
1225
1225
1226 opts.merge(opts_def)
1226 opts.merge(opts_def)
1227
1227
1228 prof = profile.Profile()
1228 prof = profile.Profile()
1229 try:
1229 try:
1230 prof = prof.runctx(arg_str,namespace,namespace)
1230 prof = prof.runctx(arg_str,namespace,namespace)
1231 sys_exit = ''
1231 sys_exit = ''
1232 except SystemExit:
1232 except SystemExit:
1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1234
1234
1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1236
1236
1237 lims = opts.l
1237 lims = opts.l
1238 if lims:
1238 if lims:
1239 lims = [] # rebuild lims with ints/floats/strings
1239 lims = [] # rebuild lims with ints/floats/strings
1240 for lim in opts.l:
1240 for lim in opts.l:
1241 try:
1241 try:
1242 lims.append(int(lim))
1242 lims.append(int(lim))
1243 except ValueError:
1243 except ValueError:
1244 try:
1244 try:
1245 lims.append(float(lim))
1245 lims.append(float(lim))
1246 except ValueError:
1246 except ValueError:
1247 lims.append(lim)
1247 lims.append(lim)
1248
1248
1249 # trap output
1249 # trap output
1250 sys_stdout = sys.stdout
1250 sys_stdout = sys.stdout
1251 stdout_trap = StringIO()
1251 stdout_trap = StringIO()
1252 try:
1252 try:
1253 sys.stdout = stdout_trap
1253 sys.stdout = stdout_trap
1254 stats.print_stats(*lims)
1254 stats.print_stats(*lims)
1255 finally:
1255 finally:
1256 sys.stdout = sys_stdout
1256 sys.stdout = sys_stdout
1257 output = stdout_trap.getvalue()
1257 output = stdout_trap.getvalue()
1258 output = output.rstrip()
1258 output = output.rstrip()
1259
1259
1260 page(output,screen_lines=self.shell.rc.screen_length)
1260 page(output,screen_lines=self.shell.rc.screen_length)
1261 print sys_exit,
1261 print sys_exit,
1262
1262
1263 dump_file = opts.D[0]
1263 dump_file = opts.D[0]
1264 text_file = opts.T[0]
1264 text_file = opts.T[0]
1265 if dump_file:
1265 if dump_file:
1266 prof.dump_stats(dump_file)
1266 prof.dump_stats(dump_file)
1267 print '\n*** Profile stats marshalled to file',\
1267 print '\n*** Profile stats marshalled to file',\
1268 `dump_file`+'.',sys_exit
1268 `dump_file`+'.',sys_exit
1269 if text_file:
1269 if text_file:
1270 file(text_file,'w').write(output)
1270 file(text_file,'w').write(output)
1271 print '\n*** Profile printout saved to text file',\
1271 print '\n*** Profile printout saved to text file',\
1272 `text_file`+'.',sys_exit
1272 `text_file`+'.',sys_exit
1273
1273
1274 if opts.has_key('r'):
1274 if opts.has_key('r'):
1275 return stats
1275 return stats
1276 else:
1276 else:
1277 return None
1277 return None
1278
1278
1279 def magic_run(self, parameter_s ='',runner=None):
1279 def magic_run(self, parameter_s ='',runner=None):
1280 """Run the named file inside IPython as a program.
1280 """Run the named file inside IPython as a program.
1281
1281
1282 Usage:\\
1282 Usage:\\
1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1284
1284
1285 Parameters after the filename are passed as command-line arguments to
1285 Parameters after the filename are passed as command-line arguments to
1286 the program (put in sys.argv). Then, control returns to IPython's
1286 the program (put in sys.argv). Then, control returns to IPython's
1287 prompt.
1287 prompt.
1288
1288
1289 This is similar to running at a system prompt:\\
1289 This is similar to running at a system prompt:\\
1290 $ python file args\\
1290 $ python file args\\
1291 but with the advantage of giving you IPython's tracebacks, and of
1291 but with the advantage of giving you IPython's tracebacks, and of
1292 loading all variables into your interactive namespace for further use
1292 loading all variables into your interactive namespace for further use
1293 (unless -p is used, see below).
1293 (unless -p is used, see below).
1294
1294
1295 The file is executed in a namespace initially consisting only of
1295 The file is executed in a namespace initially consisting only of
1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1297 sees its environment as if it were being run as a stand-alone
1297 sees its environment as if it were being run as a stand-alone
1298 program. But after execution, the IPython interactive namespace gets
1298 program. But after execution, the IPython interactive namespace gets
1299 updated with all variables defined in the program (except for __name__
1299 updated with all variables defined in the program (except for __name__
1300 and sys.argv). This allows for very convenient loading of code for
1300 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.
1301 interactive work, while giving each program a 'clean sheet' to run in.
1302
1302
1303 Options:
1303 Options:
1304
1304
1305 -n: __name__ is NOT set to '__main__', but to the running file's name
1305 -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
1306 without extension (as python does under import). This allows running
1307 scripts and reloading the definitions in them without calling code
1307 scripts and reloading the definitions in them without calling code
1308 protected by an ' if __name__ == "__main__" ' clause.
1308 protected by an ' if __name__ == "__main__" ' clause.
1309
1309
1310 -i: run the file in IPython's namespace instead of an empty one. This
1310 -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
1311 is useful if you are experimenting with code written in a text editor
1312 which depends on variables defined interactively.
1312 which depends on variables defined interactively.
1313
1313
1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1315 being run. This is particularly useful if IPython is being used to
1315 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
1316 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
1317 cases you are interested in the output of the test results, not in
1318 seeing a traceback of the unittest module.
1318 seeing a traceback of the unittest module.
1319
1319
1320 -t: print timing information at the end of the run. IPython will give
1320 -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
1321 you an estimated CPU time consumption for your script, which under
1322 Unix uses the resource module to avoid the wraparound problems of
1322 Unix uses the resource module to avoid the wraparound problems of
1323 time.clock(). Under Unix, an estimate of time spent on system tasks
1323 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).
1324 is also given (for Windows platforms this is reported as 0.0).
1325
1325
1326 If -t is given, an additional -N<N> option can be given, where <N>
1326 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
1327 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.
1328 run. The final timing report will include total and per run results.
1329
1329
1330 For example (testing the script uniq_stable.py):
1330 For example (testing the script uniq_stable.py):
1331
1331
1332 In [1]: run -t uniq_stable
1332 In [1]: run -t uniq_stable
1333
1333
1334 IPython CPU timings (estimated):\\
1334 IPython CPU timings (estimated):\\
1335 User : 0.19597 s.\\
1335 User : 0.19597 s.\\
1336 System: 0.0 s.\\
1336 System: 0.0 s.\\
1337
1337
1338 In [2]: run -t -N5 uniq_stable
1338 In [2]: run -t -N5 uniq_stable
1339
1339
1340 IPython CPU timings (estimated):\\
1340 IPython CPU timings (estimated):\\
1341 Total runs performed: 5\\
1341 Total runs performed: 5\\
1342 Times : Total Per run\\
1342 Times : Total Per run\\
1343 User : 0.910862 s, 0.1821724 s.\\
1343 User : 0.910862 s, 0.1821724 s.\\
1344 System: 0.0 s, 0.0 s.
1344 System: 0.0 s, 0.0 s.
1345
1345
1346 -d: run your program under the control of pdb, the Python debugger.
1346 -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,
1347 This allows you to execute your program step by step, watch variables,
1348 etc. Internally, what IPython does is similar to calling:
1348 etc. Internally, what IPython does is similar to calling:
1349
1349
1350 pdb.run('execfile("YOURFILENAME")')
1350 pdb.run('execfile("YOURFILENAME")')
1351
1351
1352 with a breakpoint set on line 1 of your file. You can change the line
1352 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
1353 number for this automatic breakpoint to be <N> by using the -bN option
1354 (where N must be an integer). For example:
1354 (where N must be an integer). For example:
1355
1355
1356 %run -d -b40 myscript
1356 %run -d -b40 myscript
1357
1357
1358 will set the first breakpoint at line 40 in myscript.py. Note that
1358 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
1359 the first breakpoint must be set on a line which actually does
1360 something (not a comment or docstring) for it to stop execution.
1360 something (not a comment or docstring) for it to stop execution.
1361
1361
1362 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1362 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
1363 first enter 'c' (without qoutes) to start execution up to the first
1364 breakpoint.
1364 breakpoint.
1365
1365
1366 Entering 'help' gives information about the use of the debugger. You
1366 Entering 'help' gives information about the use of the debugger. You
1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1368 at a prompt.
1368 at a prompt.
1369
1369
1370 -p: run program under the control of the Python profiler module (which
1370 -p: run program under the control of the Python profiler module (which
1371 prints a detailed report of execution times, function calls, etc).
1371 prints a detailed report of execution times, function calls, etc).
1372
1372
1373 You can pass other options after -p which affect the behavior of the
1373 You can pass other options after -p which affect the behavior of the
1374 profiler itself. See the docs for %prun for details.
1374 profiler itself. See the docs for %prun for details.
1375
1375
1376 In this mode, the program's variables do NOT propagate back to the
1376 In this mode, the program's variables do NOT propagate back to the
1377 IPython interactive namespace (because they remain in the namespace
1377 IPython interactive namespace (because they remain in the namespace
1378 where the profiler executes them).
1378 where the profiler executes them).
1379
1379
1380 Internally this triggers a call to %prun, see its documentation for
1380 Internally this triggers a call to %prun, see its documentation for
1381 details on the options available specifically for profiling."""
1381 details on the options available specifically for profiling."""
1382
1382
1383 # get arguments and set sys.argv for program to be run.
1383 # 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',
1384 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1385 mode='list',list_all=1)
1385 mode='list',list_all=1)
1386
1386
1387 try:
1387 try:
1388 filename = get_py_filename(arg_lst[0])
1388 filename = get_py_filename(arg_lst[0])
1389 except IndexError:
1389 except IndexError:
1390 warn('you must provide at least a filename.')
1390 warn('you must provide at least a filename.')
1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1392 return
1392 return
1393 except IOError,msg:
1393 except IOError,msg:
1394 error(msg)
1394 error(msg)
1395 return
1395 return
1396
1396
1397 # Control the response to exit() calls made by the script being run
1397 # Control the response to exit() calls made by the script being run
1398 exit_ignore = opts.has_key('e')
1398 exit_ignore = opts.has_key('e')
1399
1399
1400 # Make sure that the running script gets a proper sys.argv as if it
1400 # Make sure that the running script gets a proper sys.argv as if it
1401 # were run from a system shell.
1401 # were run from a system shell.
1402 save_argv = sys.argv # save it for later restoring
1402 save_argv = sys.argv # save it for later restoring
1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1404
1404
1405 if opts.has_key('i'):
1405 if opts.has_key('i'):
1406 prog_ns = self.shell.user_ns
1406 prog_ns = self.shell.user_ns
1407 __name__save = self.shell.user_ns['__name__']
1407 __name__save = self.shell.user_ns['__name__']
1408 prog_ns['__name__'] = '__main__'
1408 prog_ns['__name__'] = '__main__'
1409 else:
1409 else:
1410 if opts.has_key('n'):
1410 if opts.has_key('n'):
1411 name = os.path.splitext(os.path.basename(filename))[0]
1411 name = os.path.splitext(os.path.basename(filename))[0]
1412 else:
1412 else:
1413 name = '__main__'
1413 name = '__main__'
1414 prog_ns = {'__name__':name}
1414 prog_ns = {'__name__':name}
1415
1415
1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1417 # set the __file__ global in the script's namespace
1417 # set the __file__ global in the script's namespace
1418 prog_ns['__file__'] = filename
1418 prog_ns['__file__'] = filename
1419
1419
1420 # pickle fix. See iplib for an explanation. But we need to make sure
1420 # 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
1421 # that, if we overwrite __main__, we replace it at the end
1422 if prog_ns['__name__'] == '__main__':
1422 if prog_ns['__name__'] == '__main__':
1423 restore_main = sys.modules['__main__']
1423 restore_main = sys.modules['__main__']
1424 else:
1424 else:
1425 restore_main = False
1425 restore_main = False
1426
1426
1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1428
1428
1429 stats = None
1429 stats = None
1430 try:
1430 try:
1431 if opts.has_key('p'):
1431 if opts.has_key('p'):
1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1433 else:
1433 else:
1434 if opts.has_key('d'):
1434 if opts.has_key('d'):
1435 deb = Debugger.Pdb(self.shell.rc.colors)
1435 deb = Debugger.Pdb(self.shell.rc.colors)
1436 # reset Breakpoint state, which is moronically kept
1436 # reset Breakpoint state, which is moronically kept
1437 # in a class
1437 # in a class
1438 bdb.Breakpoint.next = 1
1438 bdb.Breakpoint.next = 1
1439 bdb.Breakpoint.bplist = {}
1439 bdb.Breakpoint.bplist = {}
1440 bdb.Breakpoint.bpbynumber = [None]
1440 bdb.Breakpoint.bpbynumber = [None]
1441 # Set an initial breakpoint to stop execution
1441 # Set an initial breakpoint to stop execution
1442 maxtries = 10
1442 maxtries = 10
1443 bp = int(opts.get('b',[1])[0])
1443 bp = int(opts.get('b',[1])[0])
1444 checkline = deb.checkline(filename,bp)
1444 checkline = deb.checkline(filename,bp)
1445 if not checkline:
1445 if not checkline:
1446 for bp in range(bp+1,bp+maxtries+1):
1446 for bp in range(bp+1,bp+maxtries+1):
1447 if deb.checkline(filename,bp):
1447 if deb.checkline(filename,bp):
1448 break
1448 break
1449 else:
1449 else:
1450 msg = ("\nI failed to find a valid line to set "
1450 msg = ("\nI failed to find a valid line to set "
1451 "a breakpoint\n"
1451 "a breakpoint\n"
1452 "after trying up to line: %s.\n"
1452 "after trying up to line: %s.\n"
1453 "Please set a valid breakpoint manually "
1453 "Please set a valid breakpoint manually "
1454 "with the -b option." % bp)
1454 "with the -b option." % bp)
1455 error(msg)
1455 error(msg)
1456 return
1456 return
1457 # if we find a good linenumber, set the breakpoint
1457 # if we find a good linenumber, set the breakpoint
1458 deb.do_break('%s:%s' % (filename,bp))
1458 deb.do_break('%s:%s' % (filename,bp))
1459 # Start file run
1459 # Start file run
1460 print "NOTE: Enter 'c' at the",
1460 print "NOTE: Enter 'c' at the",
1461 print "ipdb> prompt to start your script."
1461 print "ipdb> prompt to start your script."
1462 try:
1462 try:
1463 deb.run('execfile("%s")' % filename,prog_ns)
1463 deb.run('execfile("%s")' % filename,prog_ns)
1464 except:
1464 except:
1465 etype, value, tb = sys.exc_info()
1465 etype, value, tb = sys.exc_info()
1466 # Skip three frames in the traceback: the %run one,
1466 # Skip three frames in the traceback: the %run one,
1467 # one inside bdb.py, and the command-line typed by the
1467 # one inside bdb.py, and the command-line typed by the
1468 # user (run by exec in pdb itself).
1468 # user (run by exec in pdb itself).
1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1470 else:
1470 else:
1471 if runner is None:
1471 if runner is None:
1472 runner = self.shell.safe_execfile
1472 runner = self.shell.safe_execfile
1473 if opts.has_key('t'):
1473 if opts.has_key('t'):
1474 try:
1474 try:
1475 nruns = int(opts['N'][0])
1475 nruns = int(opts['N'][0])
1476 if nruns < 1:
1476 if nruns < 1:
1477 error('Number of runs must be >=1')
1477 error('Number of runs must be >=1')
1478 return
1478 return
1479 except (KeyError):
1479 except (KeyError):
1480 nruns = 1
1480 nruns = 1
1481 if nruns == 1:
1481 if nruns == 1:
1482 t0 = clock2()
1482 t0 = clock2()
1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1484 t1 = clock2()
1484 t1 = clock2()
1485 t_usr = t1[0]-t0[0]
1485 t_usr = t1[0]-t0[0]
1486 t_sys = t1[1]-t1[1]
1486 t_sys = t1[1]-t1[1]
1487 print "\nIPython CPU timings (estimated):"
1487 print "\nIPython CPU timings (estimated):"
1488 print " User : %10s s." % t_usr
1488 print " User : %10s s." % t_usr
1489 print " System: %10s s." % t_sys
1489 print " System: %10s s." % t_sys
1490 else:
1490 else:
1491 runs = range(nruns)
1491 runs = range(nruns)
1492 t0 = clock2()
1492 t0 = clock2()
1493 for nr in runs:
1493 for nr in runs:
1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1495 t1 = clock2()
1495 t1 = clock2()
1496 t_usr = t1[0]-t0[0]
1496 t_usr = t1[0]-t0[0]
1497 t_sys = t1[1]-t1[1]
1497 t_sys = t1[1]-t1[1]
1498 print "\nIPython CPU timings (estimated):"
1498 print "\nIPython CPU timings (estimated):"
1499 print "Total runs performed:",nruns
1499 print "Total runs performed:",nruns
1500 print " Times : %10s %10s" % ('Total','Per run')
1500 print " Times : %10s %10s" % ('Total','Per run')
1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1503
1503
1504 else:
1504 else:
1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1506 if opts.has_key('i'):
1506 if opts.has_key('i'):
1507 self.shell.user_ns['__name__'] = __name__save
1507 self.shell.user_ns['__name__'] = __name__save
1508 else:
1508 else:
1509 # update IPython interactive namespace
1509 # update IPython interactive namespace
1510 del prog_ns['__name__']
1510 del prog_ns['__name__']
1511 self.shell.user_ns.update(prog_ns)
1511 self.shell.user_ns.update(prog_ns)
1512 finally:
1512 finally:
1513 sys.argv = save_argv
1513 sys.argv = save_argv
1514 if restore_main:
1514 if restore_main:
1515 sys.modules['__main__'] = restore_main
1515 sys.modules['__main__'] = restore_main
1516 return stats
1516 return stats
1517
1517
1518 def magic_runlog(self, parameter_s =''):
1518 def magic_runlog(self, parameter_s =''):
1519 """Run files as logs.
1519 """Run files as logs.
1520
1520
1521 Usage:\\
1521 Usage:\\
1522 %runlog file1 file2 ...
1522 %runlog file1 file2 ...
1523
1523
1524 Run the named files (treating them as log files) in sequence inside
1524 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
1525 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
1526 %run because each line is executed in a try/except block, but it
1527 allows running files with syntax errors in them.
1527 allows running files with syntax errors in them.
1528
1528
1529 Normally IPython will guess when a file is one of its own logfiles, so
1529 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
1530 you can typically use %run even for logs. This shorthand allows you to
1531 force any file to be treated as a log file."""
1531 force any file to be treated as a log file."""
1532
1532
1533 for f in parameter_s.split():
1533 for f in parameter_s.split():
1534 self.shell.safe_execfile(f,self.shell.user_ns,
1534 self.shell.safe_execfile(f,self.shell.user_ns,
1535 self.shell.user_ns,islog=1)
1535 self.shell.user_ns,islog=1)
1536
1536
1537 def magic_time(self,parameter_s = ''):
1537 def magic_time(self,parameter_s = ''):
1538 """Time execution of a Python statement or expression.
1538 """Time execution of a Python statement or expression.
1539
1539
1540 The CPU and wall clock times are printed, and the value of the
1540 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
1541 expression (if any) is returned. Note that under Win32, system time
1542 is always reported as 0, since it can not be measured.
1542 is always reported as 0, since it can not be measured.
1543
1543
1544 This function provides very basic timing functionality. In Python
1544 This function provides very basic timing functionality. In Python
1545 2.3, the timeit module offers more control and sophistication, but for
1545 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
1546 now IPython supports Python 2.2, so we can not rely on timeit being
1547 present.
1547 present.
1548
1548
1549 Some examples:
1549 Some examples:
1550
1550
1551 In [1]: time 2**128
1551 In [1]: time 2**128
1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1553 Wall time: 0.00
1553 Wall time: 0.00
1554 Out[1]: 340282366920938463463374607431768211456L
1554 Out[1]: 340282366920938463463374607431768211456L
1555
1555
1556 In [2]: n = 1000000
1556 In [2]: n = 1000000
1557
1557
1558 In [3]: time sum(range(n))
1558 In [3]: time sum(range(n))
1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1560 Wall time: 1.37
1560 Wall time: 1.37
1561 Out[3]: 499999500000L
1561 Out[3]: 499999500000L
1562
1562
1563 In [4]: time print 'hello world'
1563 In [4]: time print 'hello world'
1564 hello world
1564 hello world
1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1566 Wall time: 0.00
1566 Wall time: 0.00
1567 """
1567 """
1568
1568
1569 # fail immediately if the given expression can't be compiled
1569 # fail immediately if the given expression can't be compiled
1570 try:
1570 try:
1571 mode = 'eval'
1571 mode = 'eval'
1572 code = compile(parameter_s,'<timed eval>',mode)
1572 code = compile(parameter_s,'<timed eval>',mode)
1573 except SyntaxError:
1573 except SyntaxError:
1574 mode = 'exec'
1574 mode = 'exec'
1575 code = compile(parameter_s,'<timed exec>',mode)
1575 code = compile(parameter_s,'<timed exec>',mode)
1576 # skew measurement as little as possible
1576 # skew measurement as little as possible
1577 glob = self.shell.user_ns
1577 glob = self.shell.user_ns
1578 clk = clock2
1578 clk = clock2
1579 wtime = time.time
1579 wtime = time.time
1580 # time execution
1580 # time execution
1581 wall_st = wtime()
1581 wall_st = wtime()
1582 if mode=='eval':
1582 if mode=='eval':
1583 st = clk()
1583 st = clk()
1584 out = eval(code,glob)
1584 out = eval(code,glob)
1585 end = clk()
1585 end = clk()
1586 else:
1586 else:
1587 st = clk()
1587 st = clk()
1588 exec code in glob
1588 exec code in glob
1589 end = clk()
1589 end = clk()
1590 out = None
1590 out = None
1591 wall_end = wtime()
1591 wall_end = wtime()
1592 # Compute actual times and report
1592 # Compute actual times and report
1593 wall_time = wall_end-wall_st
1593 wall_time = wall_end-wall_st
1594 cpu_user = end[0]-st[0]
1594 cpu_user = end[0]-st[0]
1595 cpu_sys = end[1]-st[1]
1595 cpu_sys = end[1]-st[1]
1596 cpu_tot = cpu_user+cpu_sys
1596 cpu_tot = cpu_user+cpu_sys
1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1598 (cpu_user,cpu_sys,cpu_tot)
1598 (cpu_user,cpu_sys,cpu_tot)
1599 print "Wall time: %.2f" % wall_time
1599 print "Wall time: %.2f" % wall_time
1600 return out
1600 return out
1601
1601
1602 def magic_macro(self,parameter_s = ''):
1602 def magic_macro(self,parameter_s = ''):
1603 """Define a set of input lines as a macro for future re-execution.
1603 """Define a set of input lines as a macro for future re-execution.
1604
1604
1605 Usage:\\
1605 Usage:\\
1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1607
1607
1608 This will define a global variable called `name` which is a string
1608 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
1609 made of joining the slices and lines you specify (n1,n2,... numbers
1610 above) from your input history into a single string. This variable
1610 above) from your input history into a single string. This variable
1611 acts like an automatic function which re-executes those lines as if
1611 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
1612 you had typed them. You just type 'name' at the prompt and the code
1613 executes.
1613 executes.
1614
1614
1615 The notation for indicating number ranges is: n1-n2 means 'use line
1615 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
1616 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1617 using the lines numbered 5,6 and 7.
1617 using the lines numbered 5,6 and 7.
1618
1618
1619 Note: as a 'hidden' feature, you can also use traditional python slice
1619 Note: as a 'hidden' feature, you can also use traditional python slice
1620 notation, where N:M means numbers N through M-1.
1620 notation, where N:M means numbers N through M-1.
1621
1621
1622 For example, if your history contains (%hist prints it):
1622 For example, if your history contains (%hist prints it):
1623
1623
1624 44: x=1\\
1624 44: x=1\\
1625 45: y=3\\
1625 45: y=3\\
1626 46: z=x+y\\
1626 46: z=x+y\\
1627 47: print x\\
1627 47: print x\\
1628 48: a=5\\
1628 48: a=5\\
1629 49: print 'x',x,'y',y\\
1629 49: print 'x',x,'y',y\\
1630
1630
1631 you can create a macro with lines 44 through 47 (included) and line 49
1631 you can create a macro with lines 44 through 47 (included) and line 49
1632 called my_macro with:
1632 called my_macro with:
1633
1633
1634 In [51]: %macro my_macro 44-47 49
1634 In [51]: %macro my_macro 44-47 49
1635
1635
1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1637 in one pass.
1637 in one pass.
1638
1638
1639 You don't need to give the line-numbers in order, and any given line
1639 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
1640 number can appear multiple times. You can assemble macros with any
1641 lines from your input history in any order.
1641 lines from your input history in any order.
1642
1642
1643 The macro is a simple object which holds its value in an attribute,
1643 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
1644 but IPython's display system checks for macros and executes them as
1645 code instead of printing them when you type their name.
1645 code instead of printing them when you type their name.
1646
1646
1647 You can view a macro's contents by explicitly printing it with:
1647 You can view a macro's contents by explicitly printing it with:
1648
1648
1649 'print macro_name'.
1649 'print macro_name'.
1650
1650
1651 For one-off cases which DON'T contain magic function calls in them you
1651 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
1652 can obtain similar results by explicitly executing slices from your
1653 input history with:
1653 input history with:
1654
1654
1655 In [60]: exec In[44:48]+In[49]"""
1655 In [60]: exec In[44:48]+In[49]"""
1656
1656
1657 args = parameter_s.split()
1657 args = parameter_s.split()
1658 name,ranges = args[0], args[1:]
1658 name,ranges = args[0], args[1:]
1659 #print 'rng',ranges # dbg
1659 #print 'rng',ranges # dbg
1660 lines = self.extract_input_slices(ranges)
1660 lines = self.extract_input_slices(ranges)
1661 macro = Macro(lines)
1661 macro = Macro(lines)
1662 self.shell.user_ns.update({name:macro})
1662 self.shell.user_ns.update({name:macro})
1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1664 print 'Macro contents:'
1664 print 'Macro contents:'
1665 print macro,
1665 print macro,
1666
1666
1667 def magic_save(self,parameter_s = ''):
1667 def magic_save(self,parameter_s = ''):
1668 """Save a set of lines to a given filename.
1668 """Save a set of lines to a given filename.
1669
1669
1670 Usage:\\
1670 Usage:\\
1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1672
1672
1673 This function uses the same syntax as %macro for line extraction, but
1673 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
1674 instead of creating a macro it saves the resulting string to the
1675 filename you specify.
1675 filename you specify.
1676
1676
1677 It adds a '.py' extension to the file if you don't do so yourself, and
1677 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."""
1678 it asks for confirmation before overwriting existing files."""
1679
1679
1680 args = parameter_s.split()
1680 args = parameter_s.split()
1681 fname,ranges = args[0], args[1:]
1681 fname,ranges = args[0], args[1:]
1682 if not fname.endswith('.py'):
1682 if not fname.endswith('.py'):
1683 fname += '.py'
1683 fname += '.py'
1684 if os.path.isfile(fname):
1684 if os.path.isfile(fname):
1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1686 if ans.lower() not in ['y','yes']:
1686 if ans.lower() not in ['y','yes']:
1687 print 'Operation cancelled.'
1687 print 'Operation cancelled.'
1688 return
1688 return
1689 cmds = ''.join(self.extract_input_slices(ranges))
1689 cmds = ''.join(self.extract_input_slices(ranges))
1690 f = file(fname,'w')
1690 f = file(fname,'w')
1691 f.write(cmds)
1691 f.write(cmds)
1692 f.close()
1692 f.close()
1693 print 'The following commands were written to file `%s`:' % fname
1693 print 'The following commands were written to file `%s`:' % fname
1694 print cmds
1694 print cmds
1695
1695
1696 def _edit_macro(self,mname,macro):
1696 def _edit_macro(self,mname,macro):
1697 """open an editor with the macro data in a file"""
1697 """open an editor with the macro data in a file"""
1698 filename = self.shell.mktempfile(macro.value)
1698 filename = self.shell.mktempfile(macro.value)
1699 self.shell.hooks.editor(filename)
1699 self.shell.hooks.editor(filename)
1700
1700
1701 # and make a new macro object, to replace the old one
1701 # and make a new macro object, to replace the old one
1702 mfile = open(filename)
1702 mfile = open(filename)
1703 mvalue = mfile.read()
1703 mvalue = mfile.read()
1704 mfile.close()
1704 mfile.close()
1705 self.shell.user_ns[mname] = Macro(mvalue)
1705 self.shell.user_ns[mname] = Macro(mvalue)
1706
1706
1707 def magic_ed(self,parameter_s=''):
1707 def magic_ed(self,parameter_s=''):
1708 """Alias to %edit."""
1708 """Alias to %edit."""
1709 return self.magic_edit(parameter_s)
1709 return self.magic_edit(parameter_s)
1710
1710
1711 def magic_edit(self,parameter_s='',last_call=['','']):
1711 def magic_edit(self,parameter_s='',last_call=['','']):
1712 """Bring up an editor and execute the resulting code.
1712 """Bring up an editor and execute the resulting code.
1713
1713
1714 Usage:
1714 Usage:
1715 %edit [options] [args]
1715 %edit [options] [args]
1716
1716
1717 %edit runs IPython's editor hook. The default version of this hook is
1717 %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
1718 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
1719 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
1720 vi under Linux/Unix and to notepad under Windows. See the end of this
1721 docstring for how to change the editor hook.
1721 docstring for how to change the editor hook.
1722
1722
1723 You can also set the value of this editor via the command line option
1723 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
1724 '-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
1725 specifically for IPython an editor different from your typical default
1726 (and for Windows users who typically don't set environment variables).
1726 (and for Windows users who typically don't set environment variables).
1727
1727
1728 This command allows you to conveniently edit multi-line code right in
1728 This command allows you to conveniently edit multi-line code right in
1729 your IPython session.
1729 your IPython session.
1730
1730
1731 If called without arguments, %edit opens up an empty editor with a
1731 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
1732 temporary file and will execute the contents of this file when you
1733 close it (don't forget to save it!).
1733 close it (don't forget to save it!).
1734
1734
1735
1735
1736 Options:
1736 Options:
1737
1737
1738 -p: this will call the editor with the same data as the previous time
1738 -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
1739 it was used, regardless of how long ago (in your current session) it
1740 was.
1740 was.
1741
1741
1742 -x: do not execute the edited code immediately upon exit. This is
1742 -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
1743 mainly useful if you are editing programs which need to be called with
1744 command line arguments, which you can then do using %run.
1744 command line arguments, which you can then do using %run.
1745
1745
1746
1746
1747 Arguments:
1747 Arguments:
1748
1748
1749 If arguments are given, the following possibilites exist:
1749 If arguments are given, the following possibilites exist:
1750
1750
1751 - The arguments are numbers or pairs of colon-separated numbers (like
1751 - 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
1752 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.
1753 loaded into the editor. The syntax is the same of the %macro command.
1754
1754
1755 - If the argument doesn't start with a number, it is evaluated as a
1755 - 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
1756 variable and its contents loaded into the editor. You can thus edit
1757 any string which contains python code (including the result of
1757 any string which contains python code (including the result of
1758 previous edits).
1758 previous edits).
1759
1759
1760 - If the argument is the name of an object (other than a string),
1760 - 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
1761 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`
1762 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,
1763 to load an editor exactly at the point where 'function' is defined,
1764 edit it and have the file be executed automatically.
1764 edit it and have the file be executed automatically.
1765
1765
1766 If the object is a macro (see %macro for details), this opens up your
1766 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.
1767 specified editor with a temporary file containing the macro's data.
1768 Upon exit, the macro is reloaded with the contents of the file.
1768 Upon exit, the macro is reloaded with the contents of the file.
1769
1769
1770 Note: opening at an exact line is only supported under Unix, and some
1770 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
1771 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1772 '+NUMBER' parameter necessary for this feature. Good editors like
1772 '+NUMBER' parameter necessary for this feature. Good editors like
1773 (X)Emacs, vi, jed, pico and joe all do.
1773 (X)Emacs, vi, jed, pico and joe all do.
1774
1774
1775 - If the argument is not found as a variable, IPython will look for a
1775 - 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
1776 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,
1777 editor. It will execute its contents with execfile() when you exit,
1778 loading any code in the file into your interactive namespace.
1778 loading any code in the file into your interactive namespace.
1779
1779
1780 After executing your code, %edit will return as output the code you
1780 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
1781 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,
1782 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
1783 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1784 the output.
1784 the output.
1785
1785
1786 Note that %edit is also available through the alias %ed.
1786 Note that %edit is also available through the alias %ed.
1787
1787
1788 This is an example of creating a simple function inside the editor and
1788 This is an example of creating a simple function inside the editor and
1789 then modifying it. First, start up the editor:
1789 then modifying it. First, start up the editor:
1790
1790
1791 In [1]: ed\\
1791 In [1]: ed\\
1792 Editing... done. Executing edited code...\\
1792 Editing... done. Executing edited code...\\
1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1794
1794
1795 We can then call the function foo():
1795 We can then call the function foo():
1796
1796
1797 In [2]: foo()\\
1797 In [2]: foo()\\
1798 foo() was defined in an editing session
1798 foo() was defined in an editing session
1799
1799
1800 Now we edit foo. IPython automatically loads the editor with the
1800 Now we edit foo. IPython automatically loads the editor with the
1801 (temporary) file where foo() was previously defined:
1801 (temporary) file where foo() was previously defined:
1802
1802
1803 In [3]: ed foo\\
1803 In [3]: ed foo\\
1804 Editing... done. Executing edited code...
1804 Editing... done. Executing edited code...
1805
1805
1806 And if we call foo() again we get the modified version:
1806 And if we call foo() again we get the modified version:
1807
1807
1808 In [4]: foo()\\
1808 In [4]: foo()\\
1809 foo() has now been changed!
1809 foo() has now been changed!
1810
1810
1811 Here is an example of how to edit a code snippet successive
1811 Here is an example of how to edit a code snippet successive
1812 times. First we call the editor:
1812 times. First we call the editor:
1813
1813
1814 In [8]: ed\\
1814 In [8]: ed\\
1815 Editing... done. Executing edited code...\\
1815 Editing... done. Executing edited code...\\
1816 hello\\
1816 hello\\
1817 Out[8]: "print 'hello'\\n"
1817 Out[8]: "print 'hello'\\n"
1818
1818
1819 Now we call it again with the previous output (stored in _):
1819 Now we call it again with the previous output (stored in _):
1820
1820
1821 In [9]: ed _\\
1821 In [9]: ed _\\
1822 Editing... done. Executing edited code...\\
1822 Editing... done. Executing edited code...\\
1823 hello world\\
1823 hello world\\
1824 Out[9]: "print 'hello world'\\n"
1824 Out[9]: "print 'hello world'\\n"
1825
1825
1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1827
1827
1828 In [10]: ed _8\\
1828 In [10]: ed _8\\
1829 Editing... done. Executing edited code...\\
1829 Editing... done. Executing edited code...\\
1830 hello again\\
1830 hello again\\
1831 Out[10]: "print 'hello again'\\n"
1831 Out[10]: "print 'hello again'\\n"
1832
1832
1833
1833
1834 Changing the default editor hook:
1834 Changing the default editor hook:
1835
1835
1836 If you wish to write your own editor hook, you can put it in a
1836 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
1837 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
1838 is defined in the IPython.hooks module, and you can use that as a
1839 starting example for further modifications. That file also has
1839 starting example for further modifications. That file also has
1840 general instructions on how to set a new hook for use once you've
1840 general instructions on how to set a new hook for use once you've
1841 defined it."""
1841 defined it."""
1842
1842
1843 # FIXME: This function has become a convoluted mess. It needs a
1843 # FIXME: This function has become a convoluted mess. It needs a
1844 # ground-up rewrite with clean, simple logic.
1844 # ground-up rewrite with clean, simple logic.
1845
1845
1846 def make_filename(arg):
1846 def make_filename(arg):
1847 "Make a filename from the given args"
1847 "Make a filename from the given args"
1848 try:
1848 try:
1849 filename = get_py_filename(arg)
1849 filename = get_py_filename(arg)
1850 except IOError:
1850 except IOError:
1851 if args.endswith('.py'):
1851 if args.endswith('.py'):
1852 filename = arg
1852 filename = arg
1853 else:
1853 else:
1854 filename = None
1854 filename = None
1855 return filename
1855 return filename
1856
1856
1857 # custom exceptions
1857 # custom exceptions
1858 class DataIsObject(Exception): pass
1858 class DataIsObject(Exception): pass
1859
1859
1860 opts,args = self.parse_options(parameter_s,'px')
1860 opts,args = self.parse_options(parameter_s,'px')
1861
1861
1862 # Default line number value
1862 # Default line number value
1863 lineno = None
1863 lineno = None
1864 if opts.has_key('p'):
1864 if opts.has_key('p'):
1865 args = '_%s' % last_call[0]
1865 args = '_%s' % last_call[0]
1866 if not self.shell.user_ns.has_key(args):
1866 if not self.shell.user_ns.has_key(args):
1867 args = last_call[1]
1867 args = last_call[1]
1868
1868
1869 # use last_call to remember the state of the previous call, but don't
1869 # use last_call to remember the state of the previous call, but don't
1870 # let it be clobbered by successive '-p' calls.
1870 # let it be clobbered by successive '-p' calls.
1871 try:
1871 try:
1872 last_call[0] = self.shell.outputcache.prompt_count
1872 last_call[0] = self.shell.outputcache.prompt_count
1873 if not opts.has_key('p'):
1873 if not opts.has_key('p'):
1874 last_call[1] = parameter_s
1874 last_call[1] = parameter_s
1875 except:
1875 except:
1876 pass
1876 pass
1877
1877
1878 # by default this is done with temp files, except when the given
1878 # by default this is done with temp files, except when the given
1879 # arg is a filename
1879 # arg is a filename
1880 use_temp = 1
1880 use_temp = 1
1881
1881
1882 if re.match(r'\d',args):
1882 if re.match(r'\d',args):
1883 # Mode where user specifies ranges of lines, like in %macro.
1883 # Mode where user specifies ranges of lines, like in %macro.
1884 # This means that you can't edit files whose names begin with
1884 # This means that you can't edit files whose names begin with
1885 # numbers this way. Tough.
1885 # numbers this way. Tough.
1886 ranges = args.split()
1886 ranges = args.split()
1887 data = ''.join(self.extract_input_slices(ranges))
1887 data = ''.join(self.extract_input_slices(ranges))
1888 elif args.endswith('.py'):
1888 elif args.endswith('.py'):
1889 filename = make_filename(args)
1889 filename = make_filename(args)
1890 data = ''
1890 data = ''
1891 use_temp = 0
1891 use_temp = 0
1892 elif args:
1892 elif args:
1893 try:
1893 try:
1894 # Load the parameter given as a variable. If not a string,
1894 # Load the parameter given as a variable. If not a string,
1895 # process it as an object instead (below)
1895 # process it as an object instead (below)
1896
1896
1897 #print '*** args',args,'type',type(args) # dbg
1897 #print '*** args',args,'type',type(args) # dbg
1898 data = eval(args,self.shell.user_ns)
1898 data = eval(args,self.shell.user_ns)
1899 if not type(data) in StringTypes:
1899 if not type(data) in StringTypes:
1900 raise DataIsObject
1900 raise DataIsObject
1901
1901
1902 except (NameError,SyntaxError):
1902 except (NameError,SyntaxError):
1903 # given argument is not a variable, try as a filename
1903 # given argument is not a variable, try as a filename
1904 filename = make_filename(args)
1904 filename = make_filename(args)
1905 if filename is None:
1905 if filename is None:
1906 warn("Argument given (%s) can't be found as a variable "
1906 warn("Argument given (%s) can't be found as a variable "
1907 "or as a filename." % args)
1907 "or as a filename." % args)
1908 return
1908 return
1909
1909
1910 data = ''
1910 data = ''
1911 use_temp = 0
1911 use_temp = 0
1912 except DataIsObject:
1912 except DataIsObject:
1913
1913
1914 # macros have a special edit function
1914 # macros have a special edit function
1915 if isinstance(data,Macro):
1915 if isinstance(data,Macro):
1916 self._edit_macro(args,data)
1916 self._edit_macro(args,data)
1917 return
1917 return
1918
1918
1919 # For objects, try to edit the file where they are defined
1919 # For objects, try to edit the file where they are defined
1920 try:
1920 try:
1921 filename = inspect.getabsfile(data)
1921 filename = inspect.getabsfile(data)
1922 datafile = 1
1922 datafile = 1
1923 except TypeError:
1923 except TypeError:
1924 filename = make_filename(args)
1924 filename = make_filename(args)
1925 datafile = 1
1925 datafile = 1
1926 warn('Could not find file where `%s` is defined.\n'
1926 warn('Could not find file where `%s` is defined.\n'
1927 'Opening a file named `%s`' % (args,filename))
1927 'Opening a file named `%s`' % (args,filename))
1928 # Now, make sure we can actually read the source (if it was in
1928 # Now, make sure we can actually read the source (if it was in
1929 # a temp file it's gone by now).
1929 # a temp file it's gone by now).
1930 if datafile:
1930 if datafile:
1931 try:
1931 try:
1932 lineno = inspect.getsourcelines(data)[1]
1932 lineno = inspect.getsourcelines(data)[1]
1933 except IOError:
1933 except IOError:
1934 filename = make_filename(args)
1934 filename = make_filename(args)
1935 if filename is None:
1935 if filename is None:
1936 warn('The file `%s` where `%s` was defined cannot '
1936 warn('The file `%s` where `%s` was defined cannot '
1937 'be read.' % (filename,data))
1937 'be read.' % (filename,data))
1938 return
1938 return
1939 use_temp = 0
1939 use_temp = 0
1940 else:
1940 else:
1941 data = ''
1941 data = ''
1942
1942
1943 if use_temp:
1943 if use_temp:
1944 filename = self.shell.mktempfile(data)
1944 filename = self.shell.mktempfile(data)
1945 print 'IPython will make a temporary file named:',filename
1945 print 'IPython will make a temporary file named:',filename
1946
1946
1947 # do actual editing here
1947 # do actual editing here
1948 print 'Editing...',
1948 print 'Editing...',
1949 sys.stdout.flush()
1949 sys.stdout.flush()
1950 self.shell.hooks.editor(filename,lineno)
1950 self.shell.hooks.editor(filename,lineno)
1951 if opts.has_key('x'): # -x prevents actual execution
1951 if opts.has_key('x'): # -x prevents actual execution
1952 print
1952 print
1953 else:
1953 else:
1954 print 'done. Executing edited code...'
1954 print 'done. Executing edited code...'
1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1956 if use_temp:
1956 if use_temp:
1957 try:
1957 try:
1958 return open(filename).read()
1958 return open(filename).read()
1959 except IOError,msg:
1959 except IOError,msg:
1960 if msg.filename == filename:
1960 if msg.filename == filename:
1961 warn('File not found. Did you forget to save?')
1961 warn('File not found. Did you forget to save?')
1962 return
1962 return
1963 else:
1963 else:
1964 self.shell.showtraceback()
1964 self.shell.showtraceback()
1965
1965
1966 def magic_xmode(self,parameter_s = ''):
1966 def magic_xmode(self,parameter_s = ''):
1967 """Switch modes for the exception handlers.
1967 """Switch modes for the exception handlers.
1968
1968
1969 Valid modes: Plain, Context and Verbose.
1969 Valid modes: Plain, Context and Verbose.
1970
1970
1971 If called without arguments, acts as a toggle."""
1971 If called without arguments, acts as a toggle."""
1972
1972
1973 def xmode_switch_err(name):
1973 def xmode_switch_err(name):
1974 warn('Error changing %s exception modes.\n%s' %
1974 warn('Error changing %s exception modes.\n%s' %
1975 (name,sys.exc_info()[1]))
1975 (name,sys.exc_info()[1]))
1976
1976
1977 shell = self.shell
1977 shell = self.shell
1978 new_mode = parameter_s.strip().capitalize()
1978 new_mode = parameter_s.strip().capitalize()
1979 try:
1979 try:
1980 shell.InteractiveTB.set_mode(mode=new_mode)
1980 shell.InteractiveTB.set_mode(mode=new_mode)
1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1982 except:
1982 except:
1983 xmode_switch_err('user')
1983 xmode_switch_err('user')
1984
1984
1985 # threaded shells use a special handler in sys.excepthook
1985 # threaded shells use a special handler in sys.excepthook
1986 if shell.isthreaded:
1986 if shell.isthreaded:
1987 try:
1987 try:
1988 shell.sys_excepthook.set_mode(mode=new_mode)
1988 shell.sys_excepthook.set_mode(mode=new_mode)
1989 except:
1989 except:
1990 xmode_switch_err('threaded')
1990 xmode_switch_err('threaded')
1991
1991
1992 def magic_colors(self,parameter_s = ''):
1992 def magic_colors(self,parameter_s = ''):
1993 """Switch color scheme for prompts, info system and exception handlers.
1993 """Switch color scheme for prompts, info system and exception handlers.
1994
1994
1995 Currently implemented schemes: NoColor, Linux, LightBG.
1995 Currently implemented schemes: NoColor, Linux, LightBG.
1996
1996
1997 Color scheme names are not case-sensitive."""
1997 Color scheme names are not case-sensitive."""
1998
1998
1999 def color_switch_err(name):
1999 def color_switch_err(name):
2000 warn('Error changing %s color schemes.\n%s' %
2000 warn('Error changing %s color schemes.\n%s' %
2001 (name,sys.exc_info()[1]))
2001 (name,sys.exc_info()[1]))
2002
2002
2003
2003
2004 new_scheme = parameter_s.strip()
2004 new_scheme = parameter_s.strip()
2005 if not new_scheme:
2005 if not new_scheme:
2006 print 'You must specify a color scheme.'
2006 print 'You must specify a color scheme.'
2007 return
2007 return
2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2009 # for ANSI coloring
2009 # for ANSI coloring
2010 if os.name in ['nt','dos']:
2010 if os.name in ['nt','dos']:
2011 try:
2011 try:
2012 import readline
2012 import readline
2013 except ImportError:
2013 except ImportError:
2014 has_readline = 0
2014 has_readline = 0
2015 else:
2015 else:
2016 try:
2016 try:
2017 readline.GetOutputFile()
2017 readline.GetOutputFile()
2018 except AttributeError:
2018 except AttributeError:
2019 has_readline = 0
2019 has_readline = 0
2020 else:
2020 else:
2021 has_readline = 1
2021 has_readline = 1
2022 if not has_readline:
2022 if not has_readline:
2023 msg = """\
2023 msg = """\
2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2025 You can find it at:
2025 You can find it at:
2026 http://sourceforge.net/projects/uncpythontools
2026 http://sourceforge.net/projects/uncpythontools
2027 Gary's readline needs the ctypes module, from:
2027 Gary's readline needs the ctypes module, from:
2028 http://starship.python.net/crew/theller/ctypes
2028 http://starship.python.net/crew/theller/ctypes
2029
2029
2030 Defaulting color scheme to 'NoColor'"""
2030 Defaulting color scheme to 'NoColor'"""
2031 new_scheme = 'NoColor'
2031 new_scheme = 'NoColor'
2032 warn(msg)
2032 warn(msg)
2033 # local shortcut
2033 # local shortcut
2034 shell = self.shell
2034 shell = self.shell
2035
2035
2036 # Set prompt colors
2036 # Set prompt colors
2037 try:
2037 try:
2038 shell.outputcache.set_colors(new_scheme)
2038 shell.outputcache.set_colors(new_scheme)
2039 except:
2039 except:
2040 color_switch_err('prompt')
2040 color_switch_err('prompt')
2041 else:
2041 else:
2042 shell.rc.colors = \
2042 shell.rc.colors = \
2043 shell.outputcache.color_table.active_scheme_name
2043 shell.outputcache.color_table.active_scheme_name
2044 # Set exception colors
2044 # Set exception colors
2045 try:
2045 try:
2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2048 except:
2048 except:
2049 color_switch_err('exception')
2049 color_switch_err('exception')
2050
2050
2051 # threaded shells use a verbose traceback in sys.excepthook
2051 # threaded shells use a verbose traceback in sys.excepthook
2052 if shell.isthreaded:
2052 if shell.isthreaded:
2053 try:
2053 try:
2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2055 except:
2055 except:
2056 color_switch_err('system exception handler')
2056 color_switch_err('system exception handler')
2057
2057
2058 # Set info (for 'object?') colors
2058 # Set info (for 'object?') colors
2059 if shell.rc.color_info:
2059 if shell.rc.color_info:
2060 try:
2060 try:
2061 shell.inspector.set_active_scheme(new_scheme)
2061 shell.inspector.set_active_scheme(new_scheme)
2062 except:
2062 except:
2063 color_switch_err('object inspector')
2063 color_switch_err('object inspector')
2064 else:
2064 else:
2065 shell.inspector.set_active_scheme('NoColor')
2065 shell.inspector.set_active_scheme('NoColor')
2066
2066
2067 def magic_color_info(self,parameter_s = ''):
2067 def magic_color_info(self,parameter_s = ''):
2068 """Toggle color_info.
2068 """Toggle color_info.
2069
2069
2070 The color_info configuration parameter controls whether colors are
2070 The color_info configuration parameter controls whether colors are
2071 used for displaying object details (by things like %psource, %pfile or
2071 used for displaying object details (by things like %psource, %pfile or
2072 the '?' system). This function toggles this value with each call.
2072 the '?' system). This function toggles this value with each call.
2073
2073
2074 Note that unless you have a fairly recent pager (less works better
2074 Note that unless you have a fairly recent pager (less works better
2075 than more) in your system, using colored object information displays
2075 than more) in your system, using colored object information displays
2076 will not work properly. Test it and see."""
2076 will not work properly. Test it and see."""
2077
2077
2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2079 self.magic_colors(self.shell.rc.colors)
2079 self.magic_colors(self.shell.rc.colors)
2080 print 'Object introspection functions have now coloring:',
2080 print 'Object introspection functions have now coloring:',
2081 print ['OFF','ON'][self.shell.rc.color_info]
2081 print ['OFF','ON'][self.shell.rc.color_info]
2082
2082
2083 def magic_Pprint(self, parameter_s=''):
2083 def magic_Pprint(self, parameter_s=''):
2084 """Toggle pretty printing on/off."""
2084 """Toggle pretty printing on/off."""
2085
2085
2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2087 print 'Pretty printing has been turned', \
2087 print 'Pretty printing has been turned', \
2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2089
2089
2090 def magic_exit(self, parameter_s=''):
2090 def magic_exit(self, parameter_s=''):
2091 """Exit IPython, confirming if configured to do so.
2091 """Exit IPython, confirming if configured to do so.
2092
2092
2093 You can configure whether IPython asks for confirmation upon exit by
2093 You can configure whether IPython asks for confirmation upon exit by
2094 setting the confirm_exit flag in the ipythonrc file."""
2094 setting the confirm_exit flag in the ipythonrc file."""
2095
2095
2096 self.shell.exit()
2096 self.shell.exit()
2097
2097
2098 def magic_quit(self, parameter_s=''):
2098 def magic_quit(self, parameter_s=''):
2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2100
2100
2101 self.shell.exit()
2101 self.shell.exit()
2102
2102
2103 def magic_Exit(self, parameter_s=''):
2103 def magic_Exit(self, parameter_s=''):
2104 """Exit IPython without confirmation."""
2104 """Exit IPython without confirmation."""
2105
2105
2106 self.shell.exit_now = True
2106 self.shell.exit_now = True
2107
2107
2108 def magic_Quit(self, parameter_s=''):
2108 def magic_Quit(self, parameter_s=''):
2109 """Exit IPython without confirmation (like %Exit)."""
2109 """Exit IPython without confirmation (like %Exit)."""
2110
2110
2111 self.shell.exit_now = True
2111 self.shell.exit_now = True
2112
2112
2113 #......................................................................
2113 #......................................................................
2114 # Functions to implement unix shell-type things
2114 # Functions to implement unix shell-type things
2115
2115
2116 def magic_alias(self, parameter_s = ''):
2116 def magic_alias(self, parameter_s = ''):
2117 """Define an alias for a system command.
2117 """Define an alias for a system command.
2118
2118
2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2120
2120
2121 Then, typing 'alias_name params' will execute the system command 'cmd
2121 Then, typing 'alias_name params' will execute the system command 'cmd
2122 params' (from your underlying operating system).
2122 params' (from your underlying operating system).
2123
2123
2124 Aliases have lower precedence than magic functions and Python normal
2124 Aliases have lower precedence than magic functions and Python normal
2125 variables, so if 'foo' is both a Python variable and an alias, the
2125 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.
2126 alias can not be executed until 'del foo' removes the Python variable.
2127
2127
2128 You can use the %l specifier in an alias definition to represent the
2128 You can use the %l specifier in an alias definition to represent the
2129 whole line when the alias is called. For example:
2129 whole line when the alias is called. For example:
2130
2130
2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2132 In [3]: all hello world\\
2132 In [3]: all hello world\\
2133 Input in brackets: <hello world>
2133 Input in brackets: <hello world>
2134
2134
2135 You can also define aliases with parameters using %s specifiers (one
2135 You can also define aliases with parameters using %s specifiers (one
2136 per parameter):
2136 per parameter):
2137
2137
2138 In [1]: alias parts echo first %s second %s\\
2138 In [1]: alias parts echo first %s second %s\\
2139 In [2]: %parts A B\\
2139 In [2]: %parts A B\\
2140 first A second B\\
2140 first A second B\\
2141 In [3]: %parts A\\
2141 In [3]: %parts A\\
2142 Incorrect number of arguments: 2 expected.\\
2142 Incorrect number of arguments: 2 expected.\\
2143 parts is an alias to: 'echo first %s second %s'
2143 parts is an alias to: 'echo first %s second %s'
2144
2144
2145 Note that %l and %s are mutually exclusive. You can only use one or
2145 Note that %l and %s are mutually exclusive. You can only use one or
2146 the other in your aliases.
2146 the other in your aliases.
2147
2147
2148 Aliases expand Python variables just like system calls using ! or !!
2148 Aliases expand Python variables just like system calls using ! or !!
2149 do: all expressions prefixed with '$' get expanded. For details of
2149 do: all expressions prefixed with '$' get expanded. For details of
2150 the semantic rules, see PEP-215:
2150 the semantic rules, see PEP-215:
2151 http://www.python.org/peps/pep-0215.html. This is the library used by
2151 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
2152 IPython for variable expansion. If you want to access a true shell
2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2154
2154
2155 In [6]: alias show echo\\
2155 In [6]: alias show echo\\
2156 In [7]: PATH='A Python string'\\
2156 In [7]: PATH='A Python string'\\
2157 In [8]: show $PATH\\
2157 In [8]: show $PATH\\
2158 A Python string\\
2158 A Python string\\
2159 In [9]: show $$PATH\\
2159 In [9]: show $$PATH\\
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2161
2161
2162 You can use the alias facility to acess all of $PATH. See the %rehash
2162 You can use the alias facility to acess all of $PATH. See the %rehash
2163 and %rehashx functions, which automatically create aliases for the
2163 and %rehashx functions, which automatically create aliases for the
2164 contents of your $PATH.
2164 contents of your $PATH.
2165
2165
2166 If called with no parameters, %alias prints the current alias table."""
2166 If called with no parameters, %alias prints the current alias table."""
2167
2167
2168 par = parameter_s.strip()
2168 par = parameter_s.strip()
2169 if not par:
2169 if not par:
2170 if self.shell.rc.automagic:
2170 if self.shell.rc.automagic:
2171 prechar = ''
2171 prechar = ''
2172 else:
2172 else:
2173 prechar = self.shell.ESC_MAGIC
2173 prechar = self.shell.ESC_MAGIC
2174 #print 'Alias\t\tSystem Command\n'+'-'*30
2174 #print 'Alias\t\tSystem Command\n'+'-'*30
2175 atab = self.shell.alias_table
2175 atab = self.shell.alias_table
2176 aliases = atab.keys()
2176 aliases = atab.keys()
2177 aliases.sort()
2177 aliases.sort()
2178 res = []
2178 res = []
2179 for alias in aliases:
2179 for alias in aliases:
2180 res.append((alias, atab[alias][1]))
2180 res.append((alias, atab[alias][1]))
2181 print "Total number of aliases:",len(aliases)
2181 print "Total number of aliases:",len(aliases)
2182 return res
2182 return res
2183 try:
2183 try:
2184 alias,cmd = par.split(None,1)
2184 alias,cmd = par.split(None,1)
2185 except:
2185 except:
2186 print OInspect.getdoc(self.magic_alias)
2186 print OInspect.getdoc(self.magic_alias)
2187 else:
2187 else:
2188 nargs = cmd.count('%s')
2188 nargs = cmd.count('%s')
2189 if nargs>0 and cmd.find('%l')>=0:
2189 if nargs>0 and cmd.find('%l')>=0:
2190 error('The %s and %l specifiers are mutually exclusive '
2190 error('The %s and %l specifiers are mutually exclusive '
2191 'in alias definitions.')
2191 'in alias definitions.')
2192 else: # all looks OK
2192 else: # all looks OK
2193 self.shell.alias_table[alias] = (nargs,cmd)
2193 self.shell.alias_table[alias] = (nargs,cmd)
2194 self.shell.alias_table_validate(verbose=1)
2194 self.shell.alias_table_validate(verbose=1)
2195 # end magic_alias
2195 # end magic_alias
2196
2196
2197 def magic_unalias(self, parameter_s = ''):
2197 def magic_unalias(self, parameter_s = ''):
2198 """Remove an alias"""
2198 """Remove an alias"""
2199
2199
2200 aname = parameter_s.strip()
2200 aname = parameter_s.strip()
2201 if aname in self.shell.alias_table:
2201 if aname in self.shell.alias_table:
2202 del self.shell.alias_table[aname]
2202 del self.shell.alias_table[aname]
2203
2203
2204 def magic_rehash(self, parameter_s = ''):
2204 def magic_rehash(self, parameter_s = ''):
2205 """Update the alias table with all entries in $PATH.
2205 """Update the alias table with all entries in $PATH.
2206
2206
2207 This version does no checks on execute permissions or whether the
2207 This version does no checks on execute permissions or whether the
2208 contents of $PATH are truly files (instead of directories or something
2208 contents of $PATH are truly files (instead of directories or something
2209 else). For such a safer (but slower) version, use %rehashx."""
2209 else). For such a safer (but slower) version, use %rehashx."""
2210
2210
2211 # This function (and rehashx) manipulate the alias_table directly
2211 # This function (and rehashx) manipulate the alias_table directly
2212 # rather than calling magic_alias, for speed reasons. A rehash on a
2212 # rather than calling magic_alias, for speed reasons. A rehash on a
2213 # typical Linux box involves several thousand entries, so efficiency
2213 # typical Linux box involves several thousand entries, so efficiency
2214 # here is a top concern.
2214 # here is a top concern.
2215
2215
2216 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2216 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2217 alias_table = self.shell.alias_table
2217 alias_table = self.shell.alias_table
2218 for pdir in path:
2218 for pdir in path:
2219 for ff in os.listdir(pdir):
2219 for ff in os.listdir(pdir):
2220 # each entry in the alias table must be (N,name), where
2220 # each entry in the alias table must be (N,name), where
2221 # N is the number of positional arguments of the alias.
2221 # N is the number of positional arguments of the alias.
2222 alias_table[ff] = (0,ff)
2222 alias_table[ff] = (0,ff)
2223 # Make sure the alias table doesn't contain keywords or builtins
2223 # Make sure the alias table doesn't contain keywords or builtins
2224 self.shell.alias_table_validate()
2224 self.shell.alias_table_validate()
2225 # Call again init_auto_alias() so we get 'rm -i' and other modified
2225 # Call again init_auto_alias() so we get 'rm -i' and other modified
2226 # aliases since %rehash will probably clobber them
2226 # aliases since %rehash will probably clobber them
2227 self.shell.init_auto_alias()
2227 self.shell.init_auto_alias()
2228
2228
2229 def magic_rehashx(self, parameter_s = ''):
2229 def magic_rehashx(self, parameter_s = ''):
2230 """Update the alias table with all executable files in $PATH.
2230 """Update the alias table with all executable files in $PATH.
2231
2231
2232 This version explicitly checks that every entry in $PATH is a file
2232 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.
2233 with execute access (os.X_OK), so it is much slower than %rehash.
2234
2234
2235 Under Windows, it checks executability as a match agains a
2235 Under Windows, it checks executability as a match agains a
2236 '|'-separated string of extensions, stored in the IPython config
2236 '|'-separated string of extensions, stored in the IPython config
2237 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2237 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2238
2238
2239 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2239 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2240 alias_table = self.shell.alias_table
2240 alias_table = self.shell.alias_table
2241
2241
2242 if os.name == 'posix':
2242 if os.name == 'posix':
2243 isexec = lambda fname:os.path.isfile(fname) and \
2243 isexec = lambda fname:os.path.isfile(fname) and \
2244 os.access(fname,os.X_OK)
2244 os.access(fname,os.X_OK)
2245 else:
2245 else:
2246
2246
2247 try:
2247 try:
2248 winext = os.environ['pathext'].replace(';','|').replace('.','')
2248 winext = os.environ['pathext'].replace(';','|').replace('.','')
2249 except KeyError:
2249 except KeyError:
2250 winext = 'exe|com|bat'
2250 winext = 'exe|com|bat'
2251
2251
2252 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2252 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2253 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2253 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2254 savedir = os.getcwd()
2254 savedir = os.getcwd()
2255 try:
2255 try:
2256 # write the whole loop for posix/Windows so we don't have an if in
2256 # write the whole loop for posix/Windows so we don't have an if in
2257 # the innermost part
2257 # the innermost part
2258 if os.name == 'posix':
2258 if os.name == 'posix':
2259 for pdir in path:
2259 for pdir in path:
2260 os.chdir(pdir)
2260 os.chdir(pdir)
2261 for ff in os.listdir(pdir):
2261 for ff in os.listdir(pdir):
2262 if isexec(ff):
2262 if isexec(ff):
2263 # each entry in the alias table must be (N,name),
2263 # each entry in the alias table must be (N,name),
2264 # where N is the number of positional arguments of the
2264 # where N is the number of positional arguments of the
2265 # alias.
2265 # alias.
2266 alias_table[ff] = (0,ff)
2266 alias_table[ff] = (0,ff)
2267 else:
2267 else:
2268 for pdir in path:
2268 for pdir in path:
2269 os.chdir(pdir)
2269 os.chdir(pdir)
2270 for ff in os.listdir(pdir):
2270 for ff in os.listdir(pdir):
2271 if isexec(ff):
2271 if isexec(ff):
2272 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2272 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2273 # Make sure the alias table doesn't contain keywords or builtins
2273 # Make sure the alias table doesn't contain keywords or builtins
2274 self.shell.alias_table_validate()
2274 self.shell.alias_table_validate()
2275 # Call again init_auto_alias() so we get 'rm -i' and other
2275 # Call again init_auto_alias() so we get 'rm -i' and other
2276 # modified aliases since %rehashx will probably clobber them
2276 # modified aliases since %rehashx will probably clobber them
2277 self.shell.init_auto_alias()
2277 self.shell.init_auto_alias()
2278 finally:
2278 finally:
2279 os.chdir(savedir)
2279 os.chdir(savedir)
2280
2280
2281 def magic_pwd(self, parameter_s = ''):
2281 def magic_pwd(self, parameter_s = ''):
2282 """Return the current working directory path."""
2282 """Return the current working directory path."""
2283 return os.getcwd()
2283 return os.getcwd()
2284
2284
2285 def magic_cd(self, parameter_s=''):
2285 def magic_cd(self, parameter_s=''):
2286 """Change the current working directory.
2286 """Change the current working directory.
2287
2287
2288 This command automatically maintains an internal list of directories
2288 This command automatically maintains an internal list of directories
2289 you visit during your IPython session, in the variable _dh. The
2289 you visit during your IPython session, in the variable _dh. The
2290 command %dhist shows this history nicely formatted.
2290 command %dhist shows this history nicely formatted.
2291
2291
2292 Usage:
2292 Usage:
2293
2293
2294 cd 'dir': changes to directory 'dir'.
2294 cd 'dir': changes to directory 'dir'.
2295
2295
2296 cd -: changes to the last visited directory.
2296 cd -: changes to the last visited directory.
2297
2297
2298 cd -<n>: changes to the n-th directory in the directory history.
2298 cd -<n>: changes to the n-th directory in the directory history.
2299
2299
2300 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2300 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2301 (note: cd <bookmark_name> is enough if there is no
2301 (note: cd <bookmark_name> is enough if there is no
2302 directory <bookmark_name>, but a bookmark with the name exists.)
2302 directory <bookmark_name>, but a bookmark with the name exists.)
2303
2303
2304 Options:
2304 Options:
2305
2305
2306 -q: quiet. Do not print the working directory after the cd command is
2306 -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,
2307 executed. By default IPython's cd command does print this directory,
2308 since the default prompts do not display path information.
2308 since the default prompts do not display path information.
2309
2309
2310 Note that !cd doesn't work for this purpose because the shell where
2310 Note that !cd doesn't work for this purpose because the shell where
2311 !command runs is immediately discarded after executing 'command'."""
2311 !command runs is immediately discarded after executing 'command'."""
2312
2312
2313 parameter_s = parameter_s.strip()
2313 parameter_s = parameter_s.strip()
2314 bkms = self.shell.persist.get("bookmarks",{})
2314 bkms = self.shell.persist.get("bookmarks",{})
2315
2315
2316 numcd = re.match(r'(-)(\d+)$',parameter_s)
2316 numcd = re.match(r'(-)(\d+)$',parameter_s)
2317 # jump in directory history by number
2317 # jump in directory history by number
2318 if numcd:
2318 if numcd:
2319 nn = int(numcd.group(2))
2319 nn = int(numcd.group(2))
2320 try:
2320 try:
2321 ps = self.shell.user_ns['_dh'][nn]
2321 ps = self.shell.user_ns['_dh'][nn]
2322 except IndexError:
2322 except IndexError:
2323 print 'The requested directory does not exist in history.'
2323 print 'The requested directory does not exist in history.'
2324 return
2324 return
2325 else:
2325 else:
2326 opts = {}
2326 opts = {}
2327 else:
2327 else:
2328 #turn all non-space-escaping backslashes to slashes,
2328 #turn all non-space-escaping backslashes to slashes,
2329 # for c:\windows\directory\names\
2329 # for c:\windows\directory\names\
2330 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2330 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2331 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2331 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2332 # jump to previous
2332 # jump to previous
2333 if ps == '-':
2333 if ps == '-':
2334 try:
2334 try:
2335 ps = self.shell.user_ns['_dh'][-2]
2335 ps = self.shell.user_ns['_dh'][-2]
2336 except IndexError:
2336 except IndexError:
2337 print 'No previous directory to change to.'
2337 print 'No previous directory to change to.'
2338 return
2338 return
2339 # jump to bookmark
2339 # jump to bookmark
2340 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2340 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2341 if bkms.has_key(ps):
2341 if bkms.has_key(ps):
2342 target = bkms[ps]
2342 target = bkms[ps]
2343 print '(bookmark:%s) -> %s' % (ps,target)
2343 print '(bookmark:%s) -> %s' % (ps,target)
2344 ps = target
2344 ps = target
2345 else:
2345 else:
2346 if bkms:
2346 if bkms:
2347 error("Bookmark '%s' not found. "
2347 error("Bookmark '%s' not found. "
2348 "Use '%%bookmark -l' to see your bookmarks." % ps)
2348 "Use '%%bookmark -l' to see your bookmarks." % ps)
2349 else:
2349 else:
2350 print "Bookmarks not set - use %bookmark <bookmarkname>"
2350 print "Bookmarks not set - use %bookmark <bookmarkname>"
2351 return
2351 return
2352
2352
2353 # at this point ps should point to the target dir
2353 # at this point ps should point to the target dir
2354 if ps:
2354 if ps:
2355 try:
2355 try:
2356 os.chdir(os.path.expanduser(ps))
2356 os.chdir(os.path.expanduser(ps))
2357 ttitle = ("IPy:" + (
2357 ttitle = ("IPy:" + (
2358 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2358 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2359 platutils.set_term_title(ttitle)
2359 platutils.set_term_title(ttitle)
2360 except OSError:
2360 except OSError:
2361 print sys.exc_info()[1]
2361 print sys.exc_info()[1]
2362 else:
2362 else:
2363 self.shell.user_ns['_dh'].append(os.getcwd())
2363 self.shell.user_ns['_dh'].append(os.getcwd())
2364 else:
2364 else:
2365 os.chdir(self.shell.home_dir)
2365 os.chdir(self.shell.home_dir)
2366 platutils.set_term_title("IPy:~")
2366 platutils.set_term_title("IPy:~")
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2368 if not 'q' in opts:
2368 if not 'q' in opts:
2369 print self.shell.user_ns['_dh'][-1]
2369 print self.shell.user_ns['_dh'][-1]
2370
2370
2371 def magic_dhist(self, parameter_s=''):
2371 def magic_dhist(self, parameter_s=''):
2372 """Print your history of visited directories.
2372 """Print your history of visited directories.
2373
2373
2374 %dhist -> print full history\\
2374 %dhist -> print full history\\
2375 %dhist n -> print last n entries only\\
2375 %dhist n -> print last n entries only\\
2376 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2376 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2377
2377
2378 This history is automatically maintained by the %cd command, and
2378 This history is automatically maintained by the %cd command, and
2379 always available as the global list variable _dh. You can use %cd -<n>
2379 always available as the global list variable _dh. You can use %cd -<n>
2380 to go to directory number <n>."""
2380 to go to directory number <n>."""
2381
2381
2382 dh = self.shell.user_ns['_dh']
2382 dh = self.shell.user_ns['_dh']
2383 if parameter_s:
2383 if parameter_s:
2384 try:
2384 try:
2385 args = map(int,parameter_s.split())
2385 args = map(int,parameter_s.split())
2386 except:
2386 except:
2387 self.arg_err(Magic.magic_dhist)
2387 self.arg_err(Magic.magic_dhist)
2388 return
2388 return
2389 if len(args) == 1:
2389 if len(args) == 1:
2390 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2390 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2391 elif len(args) == 2:
2391 elif len(args) == 2:
2392 ini,fin = args
2392 ini,fin = args
2393 else:
2393 else:
2394 self.arg_err(Magic.magic_dhist)
2394 self.arg_err(Magic.magic_dhist)
2395 return
2395 return
2396 else:
2396 else:
2397 ini,fin = 0,len(dh)
2397 ini,fin = 0,len(dh)
2398 nlprint(dh,
2398 nlprint(dh,
2399 header = 'Directory history (kept in _dh)',
2399 header = 'Directory history (kept in _dh)',
2400 start=ini,stop=fin)
2400 start=ini,stop=fin)
2401
2401
2402 def magic_env(self, parameter_s=''):
2402 def magic_env(self, parameter_s=''):
2403 """List environment variables."""
2403 """List environment variables."""
2404
2404
2405 return os.environ.data
2405 return os.environ.data
2406
2406
2407 def magic_pushd(self, parameter_s=''):
2407 def magic_pushd(self, parameter_s=''):
2408 """Place the current dir on stack and change directory.
2408 """Place the current dir on stack and change directory.
2409
2409
2410 Usage:\\
2410 Usage:\\
2411 %pushd ['dirname']
2411 %pushd ['dirname']
2412
2412
2413 %pushd with no arguments does a %pushd to your home directory.
2413 %pushd with no arguments does a %pushd to your home directory.
2414 """
2414 """
2415 if parameter_s == '': parameter_s = '~'
2415 if parameter_s == '': parameter_s = '~'
2416 dir_s = self.shell.dir_stack
2416 dir_s = self.shell.dir_stack
2417 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2417 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2418 os.path.expanduser(self.shell.dir_stack[0]):
2418 os.path.expanduser(self.shell.dir_stack[0]):
2419 try:
2419 try:
2420 self.magic_cd(parameter_s)
2420 self.magic_cd(parameter_s)
2421 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2421 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2422 self.magic_dirs()
2422 self.magic_dirs()
2423 except:
2423 except:
2424 print 'Invalid directory'
2424 print 'Invalid directory'
2425 else:
2425 else:
2426 print 'You are already there!'
2426 print 'You are already there!'
2427
2427
2428 def magic_popd(self, parameter_s=''):
2428 def magic_popd(self, parameter_s=''):
2429 """Change to directory popped off the top of the stack.
2429 """Change to directory popped off the top of the stack.
2430 """
2430 """
2431 if len (self.shell.dir_stack) > 1:
2431 if len (self.shell.dir_stack) > 1:
2432 self.shell.dir_stack.pop(0)
2432 self.shell.dir_stack.pop(0)
2433 self.magic_cd(self.shell.dir_stack[0])
2433 self.magic_cd(self.shell.dir_stack[0])
2434 print self.shell.dir_stack[0]
2434 print self.shell.dir_stack[0]
2435 else:
2435 else:
2436 print "You can't remove the starting directory from the stack:",\
2436 print "You can't remove the starting directory from the stack:",\
2437 self.shell.dir_stack
2437 self.shell.dir_stack
2438
2438
2439 def magic_dirs(self, parameter_s=''):
2439 def magic_dirs(self, parameter_s=''):
2440 """Return the current directory stack."""
2440 """Return the current directory stack."""
2441
2441
2442 return self.shell.dir_stack[:]
2442 return self.shell.dir_stack[:]
2443
2443
2444 def magic_sc(self, parameter_s=''):
2444 def magic_sc(self, parameter_s=''):
2445 """Shell capture - execute a shell command and capture its output.
2445 """Shell capture - execute a shell command and capture its output.
2446
2446
2447 DEPRECATED. Suboptimal, retained for backwards compatibility.
2447 DEPRECATED. Suboptimal, retained for backwards compatibility.
2448
2448
2449 You should use the form 'var = !command' instead. Example:
2449 You should use the form 'var = !command' instead. Example:
2450
2450
2451 "%sc -l myfiles = ls ~" should now be written as
2451 "%sc -l myfiles = ls ~" should now be written as
2452
2452
2453 "myfiles = !ls ~"
2453 "myfiles = !ls ~"
2454
2454
2455 myfiles.s, myfiles.l and myfiles.n still apply as documented
2455 myfiles.s, myfiles.l and myfiles.n still apply as documented
2456 below.
2456 below.
2457
2457
2458 --
2458 --
2459 %sc [options] varname=command
2459 %sc [options] varname=command
2460
2460
2461 IPython will run the given command using commands.getoutput(), and
2461 IPython will run the given command using commands.getoutput(), and
2462 will then update the user's interactive namespace with a variable
2462 will then update the user's interactive namespace with a variable
2463 called varname, containing the value of the call. Your command can
2463 called varname, containing the value of the call. Your command can
2464 contain shell wildcards, pipes, etc.
2464 contain shell wildcards, pipes, etc.
2465
2465
2466 The '=' sign in the syntax is mandatory, and the variable name you
2466 The '=' sign in the syntax is mandatory, and the variable name you
2467 supply must follow Python's standard conventions for valid names.
2467 supply must follow Python's standard conventions for valid names.
2468
2468
2469 (A special format without variable name exists for internal use)
2469 (A special format without variable name exists for internal use)
2470
2470
2471 Options:
2471 Options:
2472
2472
2473 -l: list output. Split the output on newlines into a list before
2473 -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
2474 assigning it to the given variable. By default the output is stored
2475 as a single string.
2475 as a single string.
2476
2476
2477 -v: verbose. Print the contents of the variable.
2477 -v: verbose. Print the contents of the variable.
2478
2478
2479 In most cases you should not need to split as a list, because the
2479 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
2480 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
2481 provide its contents either as a list (split on newlines) or as a
2482 space-separated string. These are convenient, respectively, either
2482 space-separated string. These are convenient, respectively, either
2483 for sequential processing or to be passed to a shell command.
2483 for sequential processing or to be passed to a shell command.
2484
2484
2485 For example:
2485 For example:
2486
2486
2487 # Capture into variable a
2487 # Capture into variable a
2488 In [9]: sc a=ls *py
2488 In [9]: sc a=ls *py
2489
2489
2490 # a is a string with embedded newlines
2490 # a is a string with embedded newlines
2491 In [10]: a
2491 In [10]: a
2492 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2492 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2493
2493
2494 # which can be seen as a list:
2494 # which can be seen as a list:
2495 In [11]: a.l
2495 In [11]: a.l
2496 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2496 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2497
2497
2498 # or as a whitespace-separated string:
2498 # or as a whitespace-separated string:
2499 In [12]: a.s
2499 In [12]: a.s
2500 Out[12]: 'setup.py win32_manual_post_install.py'
2500 Out[12]: 'setup.py win32_manual_post_install.py'
2501
2501
2502 # a.s is useful to pass as a single command line:
2502 # a.s is useful to pass as a single command line:
2503 In [13]: !wc -l $a.s
2503 In [13]: !wc -l $a.s
2504 146 setup.py
2504 146 setup.py
2505 130 win32_manual_post_install.py
2505 130 win32_manual_post_install.py
2506 276 total
2506 276 total
2507
2507
2508 # while the list form is useful to loop over:
2508 # while the list form is useful to loop over:
2509 In [14]: for f in a.l:
2509 In [14]: for f in a.l:
2510 ....: !wc -l $f
2510 ....: !wc -l $f
2511 ....:
2511 ....:
2512 146 setup.py
2512 146 setup.py
2513 130 win32_manual_post_install.py
2513 130 win32_manual_post_install.py
2514
2514
2515 Similiarly, the lists returned by the -l option are also special, in
2515 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
2516 the sense that you can equally invoke the .s attribute on them to
2517 automatically get a whitespace-separated string from their contents:
2517 automatically get a whitespace-separated string from their contents:
2518
2518
2519 In [1]: sc -l b=ls *py
2519 In [1]: sc -l b=ls *py
2520
2520
2521 In [2]: b
2521 In [2]: b
2522 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2522 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2523
2523
2524 In [3]: b.s
2524 In [3]: b.s
2525 Out[3]: 'setup.py win32_manual_post_install.py'
2525 Out[3]: 'setup.py win32_manual_post_install.py'
2526
2526
2527 In summary, both the lists and strings used for ouptut capture have
2527 In summary, both the lists and strings used for ouptut capture have
2528 the following special attributes:
2528 the following special attributes:
2529
2529
2530 .l (or .list) : value as list.
2530 .l (or .list) : value as list.
2531 .n (or .nlstr): value as newline-separated string.
2531 .n (or .nlstr): value as newline-separated string.
2532 .s (or .spstr): value as space-separated string.
2532 .s (or .spstr): value as space-separated string.
2533 """
2533 """
2534
2534
2535 opts,args = self.parse_options(parameter_s,'lv')
2535 opts,args = self.parse_options(parameter_s,'lv')
2536 # Try to get a variable name and command to run
2536 # Try to get a variable name and command to run
2537 try:
2537 try:
2538 # the variable name must be obtained from the parse_options
2538 # the variable name must be obtained from the parse_options
2539 # output, which uses shlex.split to strip options out.
2539 # output, which uses shlex.split to strip options out.
2540 var,_ = args.split('=',1)
2540 var,_ = args.split('=',1)
2541 var = var.strip()
2541 var = var.strip()
2542 # But the the command has to be extracted from the original input
2542 # But the the command has to be extracted from the original input
2543 # parameter_s, not on what parse_options returns, to avoid the
2543 # parameter_s, not on what parse_options returns, to avoid the
2544 # quote stripping which shlex.split performs on it.
2544 # quote stripping which shlex.split performs on it.
2545 _,cmd = parameter_s.split('=',1)
2545 _,cmd = parameter_s.split('=',1)
2546 except ValueError:
2546 except ValueError:
2547 var,cmd = '',''
2547 var,cmd = '',''
2548 # If all looks ok, proceed
2548 # If all looks ok, proceed
2549 out,err = self.shell.getoutputerror(cmd)
2549 out,err = self.shell.getoutputerror(cmd)
2550 if err:
2550 if err:
2551 print >> Term.cerr,err
2551 print >> Term.cerr,err
2552 if opts.has_key('l'):
2552 if opts.has_key('l'):
2553 out = SList(out.split('\n'))
2553 out = SList(out.split('\n'))
2554 else:
2554 else:
2555 out = LSString(out)
2555 out = LSString(out)
2556 if opts.has_key('v'):
2556 if opts.has_key('v'):
2557 print '%s ==\n%s' % (var,pformat(out))
2557 print '%s ==\n%s' % (var,pformat(out))
2558 if var:
2558 if var:
2559 self.shell.user_ns.update({var:out})
2559 self.shell.user_ns.update({var:out})
2560 else:
2560 else:
2561 return out
2561 return out
2562
2562
2563 def magic_sx(self, parameter_s=''):
2563 def magic_sx(self, parameter_s=''):
2564 """Shell execute - run a shell command and capture its output.
2564 """Shell execute - run a shell command and capture its output.
2565
2565
2566 %sx command
2566 %sx command
2567
2567
2568 IPython will run the given command using commands.getoutput(), and
2568 IPython will run the given command using commands.getoutput(), and
2569 return the result formatted as a list (split on '\\n'). Since the
2569 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
2570 output is _returned_, it will be stored in ipython's regular output
2571 cache Out[N] and in the '_N' automatic variables.
2571 cache Out[N] and in the '_N' automatic variables.
2572
2572
2573 Notes:
2573 Notes:
2574
2574
2575 1) If an input line begins with '!!', then %sx is automatically
2575 1) If an input line begins with '!!', then %sx is automatically
2576 invoked. That is, while:
2576 invoked. That is, while:
2577 !ls
2577 !ls
2578 causes ipython to simply issue system('ls'), typing
2578 causes ipython to simply issue system('ls'), typing
2579 !!ls
2579 !!ls
2580 is a shorthand equivalent to:
2580 is a shorthand equivalent to:
2581 %sx ls
2581 %sx ls
2582
2582
2583 2) %sx differs from %sc in that %sx automatically splits into a list,
2583 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
2584 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.
2585 to process line-oriented shell output via further python commands.
2586 %sc is meant to provide much finer control, but requires more
2586 %sc is meant to provide much finer control, but requires more
2587 typing.
2587 typing.
2588
2588
2589 3) Just like %sc -l, this is a list with special attributes:
2589 3) Just like %sc -l, this is a list with special attributes:
2590
2590
2591 .l (or .list) : value as list.
2591 .l (or .list) : value as list.
2592 .n (or .nlstr): value as newline-separated string.
2592 .n (or .nlstr): value as newline-separated string.
2593 .s (or .spstr): value as whitespace-separated string.
2593 .s (or .spstr): value as whitespace-separated string.
2594
2594
2595 This is very useful when trying to use such lists as arguments to
2595 This is very useful when trying to use such lists as arguments to
2596 system commands."""
2596 system commands."""
2597
2597
2598 if parameter_s:
2598 if parameter_s:
2599 out,err = self.shell.getoutputerror(parameter_s)
2599 out,err = self.shell.getoutputerror(parameter_s)
2600 if err:
2600 if err:
2601 print >> Term.cerr,err
2601 print >> Term.cerr,err
2602 return SList(out.split('\n'))
2602 return SList(out.split('\n'))
2603
2603
2604 def magic_bg(self, parameter_s=''):
2604 def magic_bg(self, parameter_s=''):
2605 """Run a job in the background, in a separate thread.
2605 """Run a job in the background, in a separate thread.
2606
2606
2607 For example,
2607 For example,
2608
2608
2609 %bg myfunc(x,y,z=1)
2609 %bg myfunc(x,y,z=1)
2610
2610
2611 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2611 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
2612 execution starts, a message will be printed indicating the job
2613 number. If your job number is 5, you can use
2613 number. If your job number is 5, you can use
2614
2614
2615 myvar = jobs.result(5) or myvar = jobs[5].result
2615 myvar = jobs.result(5) or myvar = jobs[5].result
2616
2616
2617 to assign this result to variable 'myvar'.
2617 to assign this result to variable 'myvar'.
2618
2618
2619 IPython has a job manager, accessible via the 'jobs' object. You can
2619 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
2620 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
2621 its attributes. All attributes not starting with an underscore are
2622 meant for public use.
2622 meant for public use.
2623
2623
2624 In particular, look at the jobs.new() method, which is used to create
2624 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
2625 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
2626 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
2627 new job with an explicit function object and arguments, you must call
2628 jobs.new() directly.
2628 jobs.new() directly.
2629
2629
2630 The jobs.new docstring also describes in detail several important
2630 The jobs.new docstring also describes in detail several important
2631 caveats associated with a thread-based model for background job
2631 caveats associated with a thread-based model for background job
2632 execution. Type jobs.new? for details.
2632 execution. Type jobs.new? for details.
2633
2633
2634 You can check the status of all jobs with jobs.status().
2634 You can check the status of all jobs with jobs.status().
2635
2635
2636 The jobs variable is set by IPython into the Python builtin namespace.
2636 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
2637 If you ever declare a variable named 'jobs', you will shadow this
2638 name. You can either delete your global jobs variable to regain
2638 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
2639 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
2640 to the manager (stored in IPython's namespace). For example, to
2641 assign the job manager to the Jobs name, use:
2641 assign the job manager to the Jobs name, use:
2642
2642
2643 Jobs = __builtins__.jobs"""
2643 Jobs = __builtins__.jobs"""
2644
2644
2645 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2645 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2646
2646
2647 def magic_store(self, parameter_s=''):
2647 def magic_store(self, parameter_s=''):
2648 """Lightweight persistence for python variables.
2648 """Lightweight persistence for python variables.
2649
2649
2650 Example:
2650 Example:
2651
2651
2652 ville@badger[~]|1> A = ['hello',10,'world']\\
2652 ville@badger[~]|1> A = ['hello',10,'world']\\
2653 ville@badger[~]|2> %store A\\
2653 ville@badger[~]|2> %store A\\
2654 ville@badger[~]|3> Exit
2654 ville@badger[~]|3> Exit
2655
2655
2656 (IPython session is closed and started again...)
2656 (IPython session is closed and started again...)
2657
2657
2658 ville@badger:~$ ipython -p pysh\\
2658 ville@badger:~$ ipython -p pysh\\
2659 ville@badger[~]|1> print A
2659 ville@badger[~]|1> print A
2660
2660
2661 ['hello', 10, 'world']
2661 ['hello', 10, 'world']
2662
2662
2663 Usage:
2663 Usage:
2664
2664
2665 %store - Show list of all variables and their current values\\
2665 %store - Show list of all variables and their current values\\
2666 %store <var> - Store the *current* value of the variable to disk\\
2666 %store <var> - Store the *current* value of the variable to disk\\
2667 %store -d <var> - Remove the variable and its value from storage\\
2667 %store -d <var> - Remove the variable and its value from storage\\
2668 %store -r - Remove all variables from storage\\
2668 %store -r - Remove all variables from storage\\
2669 %store foo >a.txt - Store value of foo to new file a.txt\\
2669 %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\\
2670 %store foo >>a.txt - Append value of foo to file a.txt\\
2671
2671
2672 It should be noted that if you change the value of a variable, you
2672 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.
2673 need to %store it again if you want to persist the new value.
2674
2674
2675 Note also that the variables will need to be pickleable; most basic
2675 Note also that the variables will need to be pickleable; most basic
2676 python types can be safely %stored.
2676 python types can be safely %stored.
2677 """
2677 """
2678
2678
2679 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2679 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2680 args = argsl.split(None,1)
2680 args = argsl.split(None,1)
2681 ip = self.getapi()
2681 ip = self.getapi()
2682 # delete
2682 # delete
2683 if opts.has_key('d'):
2683 if opts.has_key('d'):
2684 try:
2684 try:
2685 todel = args[0]
2685 todel = args[0]
2686 except IndexError:
2686 except IndexError:
2687 error('You must provide the variable to forget')
2687 error('You must provide the variable to forget')
2688 else:
2688 else:
2689 try:
2689 try:
2690 del self.shell.persist['S:' + todel]
2690 del self.shell.persist['S:' + todel]
2691 except:
2691 except:
2692 error("Can't delete variable '%s'" % todel)
2692 error("Can't delete variable '%s'" % todel)
2693 # reset
2693 # reset
2694 elif opts.has_key('r'):
2694 elif opts.has_key('r'):
2695 for k in self.shell.persist.keys():
2695 for k in self.shell.persist.keys():
2696 if k.startswith('S:'):
2696 if k.startswith('S:'):
2697 del self.shell.persist[k]
2697 del self.shell.persist[k]
2698
2698
2699 # run without arguments -> list variables & values
2699 # run without arguments -> list variables & values
2700 elif not args:
2700 elif not args:
2701 vars = [v[2:] for v in self.shell.persist.keys()
2701 vars = [v[2:] for v in self.shell.persist.keys()
2702 if v.startswith('S:')]
2702 if v.startswith('S:')]
2703 vars.sort()
2703 vars.sort()
2704 if vars:
2704 if vars:
2705 size = max(map(len,vars))
2705 size = max(map(len,vars))
2706 else:
2706 else:
2707 size = 0
2707 size = 0
2708
2708
2709 print 'Stored variables and their in-memory values:'
2709 print 'Stored variables and their in-memory values:'
2710 fmt = '%-'+str(size)+'s -> %s'
2710 fmt = '%-'+str(size)+'s -> %s'
2711 get = self.shell.user_ns.get
2711 get = self.shell.user_ns.get
2712 for var in vars:
2712 for var in vars:
2713 # print 30 first characters from every var
2713 # print 30 first characters from every var
2714 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2714 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2715
2715
2716 # default action - store the variable
2716 # default action - store the variable
2717 else:
2717 else:
2718 # %store foo >file.txt or >>file.txt
2718 # %store foo >file.txt or >>file.txt
2719 if len(args) > 1 and args[1].startswith('>'):
2719 if len(args) > 1 and args[1].startswith('>'):
2720 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2720 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2721 if args[1].startswith('>>'):
2721 if args[1].startswith('>>'):
2722 fil = open(fnam,'a')
2722 fil = open(fnam,'a')
2723 else:
2723 else:
2724 fil = open(fnam,'w')
2724 fil = open(fnam,'w')
2725 obj = ip.ev(args[0])
2725 obj = ip.ev(args[0])
2726 print "Writing '%s' (%s) to file '%s'." % (args[0],
2726 print "Writing '%s' (%s) to file '%s'." % (args[0],
2727 obj.__class__.__name__, fnam)
2727 obj.__class__.__name__, fnam)
2728
2728
2729
2729
2730 if not isinstance (obj,basestring):
2730 if not isinstance (obj,basestring):
2731 pprint(obj,fil)
2731 pprint(obj,fil)
2732 else:
2732 else:
2733 fil.write(obj)
2733 fil.write(obj)
2734 if not obj.endswith('\n'):
2734 if not obj.endswith('\n'):
2735 fil.write('\n')
2735 fil.write('\n')
2736
2736
2737 fil.close()
2737 fil.close()
2738 return
2738 return
2739
2739
2740 # %store foo
2740 # %store foo
2741 obj = self.shell.user_ns[args[0] ]
2741 obj = self.shell.user_ns[args[0] ]
2742 if isinstance(inspect.getmodule(obj), FakeModule):
2742 if isinstance(inspect.getmodule(obj), FakeModule):
2743 print textwrap.dedent("""\
2743 print textwrap.dedent("""\
2744 Warning:%s is %s
2744 Warning:%s is %s
2745 Proper storage of interactively declared classes (or instances
2745 Proper storage of interactively declared classes (or instances
2746 of those classes) is not possible! Only instances
2746 of those classes) is not possible! Only instances
2747 of classes in real modules on file system can be %%store'd.
2747 of classes in real modules on file system can be %%store'd.
2748 """ % (args[0], obj) )
2748 """ % (args[0], obj) )
2749 return
2749 return
2750 pickled = pickle.dumps(obj)
2750 pickled = pickle.dumps(obj)
2751 self.shell.persist[ 'S:' + args[0] ] = pickled
2751 self.shell.persist[ 'S:' + args[0] ] = pickled
2752 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2752 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2753
2753
2754 def magic_bookmark(self, parameter_s=''):
2754 def magic_bookmark(self, parameter_s=''):
2755 """Manage IPython's bookmark system.
2755 """Manage IPython's bookmark system.
2756
2756
2757 %bookmark <name> - set bookmark to current dir
2757 %bookmark <name> - set bookmark to current dir
2758 %bookmark <name> <dir> - set bookmark to <dir>
2758 %bookmark <name> <dir> - set bookmark to <dir>
2759 %bookmark -l - list all bookmarks
2759 %bookmark -l - list all bookmarks
2760 %bookmark -d <name> - remove bookmark
2760 %bookmark -d <name> - remove bookmark
2761 %bookmark -r - remove all bookmarks
2761 %bookmark -r - remove all bookmarks
2762
2762
2763 You can later on access a bookmarked folder with:
2763 You can later on access a bookmarked folder with:
2764 %cd -b <name>
2764 %cd -b <name>
2765 or simply '%cd <name>' if there is no directory called <name> AND
2765 or simply '%cd <name>' if there is no directory called <name> AND
2766 there is such a bookmark defined.
2766 there is such a bookmark defined.
2767
2767
2768 Your bookmarks persist through IPython sessions, but they are
2768 Your bookmarks persist through IPython sessions, but they are
2769 associated with each profile."""
2769 associated with each profile."""
2770
2770
2771 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2771 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2772 if len(args) > 2:
2772 if len(args) > 2:
2773 error('You can only give at most two arguments')
2773 error('You can only give at most two arguments')
2774 return
2774 return
2775
2775
2776 bkms = self.shell.persist.get('bookmarks',{})
2776 bkms = self.shell.persist.get('bookmarks',{})
2777
2777
2778 if opts.has_key('d'):
2778 if opts.has_key('d'):
2779 try:
2779 try:
2780 todel = args[0]
2780 todel = args[0]
2781 except IndexError:
2781 except IndexError:
2782 error('You must provide a bookmark to delete')
2782 error('You must provide a bookmark to delete')
2783 else:
2783 else:
2784 try:
2784 try:
2785 del bkms[todel]
2785 del bkms[todel]
2786 except:
2786 except:
2787 error("Can't delete bookmark '%s'" % todel)
2787 error("Can't delete bookmark '%s'" % todel)
2788 elif opts.has_key('r'):
2788 elif opts.has_key('r'):
2789 bkms = {}
2789 bkms = {}
2790 elif opts.has_key('l'):
2790 elif opts.has_key('l'):
2791 bks = bkms.keys()
2791 bks = bkms.keys()
2792 bks.sort()
2792 bks.sort()
2793 if bks:
2793 if bks:
2794 size = max(map(len,bks))
2794 size = max(map(len,bks))
2795 else:
2795 else:
2796 size = 0
2796 size = 0
2797 fmt = '%-'+str(size)+'s -> %s'
2797 fmt = '%-'+str(size)+'s -> %s'
2798 print 'Current bookmarks:'
2798 print 'Current bookmarks:'
2799 for bk in bks:
2799 for bk in bks:
2800 print fmt % (bk,bkms[bk])
2800 print fmt % (bk,bkms[bk])
2801 else:
2801 else:
2802 if not args:
2802 if not args:
2803 error("You must specify the bookmark name")
2803 error("You must specify the bookmark name")
2804 elif len(args)==1:
2804 elif len(args)==1:
2805 bkms[args[0]] = os.getcwd()
2805 bkms[args[0]] = os.getcwd()
2806 elif len(args)==2:
2806 elif len(args)==2:
2807 bkms[args[0]] = args[1]
2807 bkms[args[0]] = args[1]
2808 self.shell.persist['bookmarks'] = bkms
2808 self.shell.persist['bookmarks'] = bkms
2809
2809
2810 def magic_pycat(self, parameter_s=''):
2810 def magic_pycat(self, parameter_s=''):
2811 """Show a syntax-highlighted file through a pager.
2811 """Show a syntax-highlighted file through a pager.
2812
2812
2813 This magic is similar to the cat utility, but it will assume the file
2813 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. """
2814 to be Python source and will show it with syntax highlighting. """
2815
2815
2816 filename = get_py_filename(parameter_s)
2816 filename = get_py_filename(parameter_s)
2817 page(self.shell.pycolorize(file_read(filename)),
2817 page(self.shell.pycolorize(file_read(filename)),
2818 screen_lines=self.shell.rc.screen_length)
2818 screen_lines=self.shell.rc.screen_length)
2819
2819
2820 def magic_cpaste(self, parameter_s=''):
2820 def magic_cpaste(self, parameter_s=''):
2821 """Allows you to paste & execute a pre-formatted code block from
2821 """Allows you to paste & execute a pre-formatted code block from
2822 clipboard.
2822 clipboard.
2823
2823
2824 You must terminate the block with '--' (two minus-signs) alone on the
2824 You must terminate the block with '--' (two minus-signs) alone on the
2825 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2825 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2826 is the new sentinel for this operation)
2826 is the new sentinel for this operation)
2827
2827
2828 The block is dedented prior to execution to enable execution of
2828 The block is dedented prior to execution to enable execution of
2829 method definitions. The executed block is also assigned to variable
2829 method definitions. The executed block is also assigned to variable
2830 named 'pasted_block' for later editing with '%edit pasted_block'.
2830 named 'pasted_block' for later editing with '%edit pasted_block'.
2831
2831
2832 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2832 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
2833 This assigns the pasted block to variable 'foo' as string, without
2834 dedenting or executing it.
2834 dedenting or executing it.
2835
2835
2836 Do not be alarmed by garbled output on Windows (it's a readline bug).
2836 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
2837 Just press enter and type -- (and press enter again) and the block
2838 will be what was just pasted.
2838 will be what was just pasted.
2839
2839
2840 IPython statements (magics, shell escapes) are not supported (yet).
2840 IPython statements (magics, shell escapes) are not supported (yet).
2841 """
2841 """
2842 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2842 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2843 par = args.strip()
2843 par = args.strip()
2844 sentinel = opts.get('s','--')
2844 sentinel = opts.get('s','--')
2845
2845
2846 from IPython import iplib
2846 from IPython import iplib
2847 lines = []
2847 lines = []
2848 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2848 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2849 while 1:
2849 while 1:
2850 l = iplib.raw_input_original(':')
2850 l = iplib.raw_input_original(':')
2851 if l ==sentinel:
2851 if l ==sentinel:
2852 break
2852 break
2853 lines.append(l)
2853 lines.append(l)
2854 block = "\n".join(lines) + '\n'
2854 block = "\n".join(lines) + '\n'
2855 #print "block:\n",block
2855 #print "block:\n",block
2856 if not par:
2856 if not par:
2857 b = textwrap.dedent(block)
2857 b = textwrap.dedent(block)
2858 exec b in self.user_ns
2858 exec b in self.user_ns
2859 self.user_ns['pasted_block'] = b
2859 self.user_ns['pasted_block'] = b
2860 else:
2860 else:
2861 self.user_ns[par] = block
2861 self.user_ns[par] = block
2862 print "Block assigned to '%s'" % par
2862 print "Block assigned to '%s'" % par
2863
2863 def magic_quickref(self,arg):
2864 import IPython.usage
2865 page(IPython.usage.quick_reference)
2866 del IPython.usage
2864
2867
2865
2868
2866 # end Magic
2869 # end Magic
@@ -1,720 +1,729 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or better.
5 Requires Python 2.1 or better.
6
6
7 This file contains the main make_IPython() starter function.
7 This file contains the main make_IPython() starter function.
8
8
9 $Id: ipmaker.py 1088 2006-01-27 17:16:45Z vivainio $"""
9 $Id: ipmaker.py 1092 2006-01-27 23:56:32Z vivainio $"""
10
10
11 #*****************************************************************************
11 #*****************************************************************************
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 #
13 #
14 # Distributed under the terms of the BSD License. The full license is in
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
15 # the file COPYING, distributed as part of this software.
16 #*****************************************************************************
16 #*****************************************************************************
17
17
18 from IPython import Release
18 from IPython import Release
19 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __license__ = Release.license
20 __license__ = Release.license
21 __version__ = Release.version
21 __version__ = Release.version
22
22
23 credits._Printer__data = """
23 credits._Printer__data = """
24 Python: %s
24 Python: %s
25
25
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
27 See http://ipython.scipy.org for more information.""" \
27 See http://ipython.scipy.org for more information.""" \
28 % credits._Printer__data
28 % credits._Printer__data
29
29
30 copyright._Printer__data += """
30 copyright._Printer__data += """
31
31
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
33 All Rights Reserved."""
33 All Rights Reserved."""
34
34
35 #****************************************************************************
35 #****************************************************************************
36 # Required modules
36 # Required modules
37
37
38 # From the standard library
38 # From the standard library
39 import __main__
39 import __main__
40 import __builtin__
40 import __builtin__
41 import os
41 import os
42 import re
42 import re
43 import sys
43 import sys
44 import types
44 import types
45 from pprint import pprint,pformat
45 from pprint import pprint,pformat
46
46
47 # Our own
47 # Our own
48 from IPython import DPyGetOpt
48 from IPython import DPyGetOpt
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.OutputTrap import OutputTrap
50 from IPython.OutputTrap import OutputTrap
51 from IPython.ConfigLoader import ConfigLoader
51 from IPython.ConfigLoader import ConfigLoader
52 from IPython.iplib import InteractiveShell
52 from IPython.iplib import InteractiveShell
53 from IPython.usage import cmd_line_usage,interactive_usage
53 from IPython.usage import cmd_line_usage,interactive_usage
54 from IPython.genutils import *
54 from IPython.genutils import *
55
55
56 #-----------------------------------------------------------------------------
56 #-----------------------------------------------------------------------------
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
58 rc_override=None,shell_class=InteractiveShell,
58 rc_override=None,shell_class=InteractiveShell,
59 embedded=False,**kw):
59 embedded=False,**kw):
60 """This is a dump of IPython into a single function.
60 """This is a dump of IPython into a single function.
61
61
62 Later it will have to be broken up in a sensible manner.
62 Later it will have to be broken up in a sensible manner.
63
63
64 Arguments:
64 Arguments:
65
65
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
67 script name, b/c DPyGetOpt strips the first argument only for the real
67 script name, b/c DPyGetOpt strips the first argument only for the real
68 sys.argv.
68 sys.argv.
69
69
70 - user_ns: a dict to be used as the user's namespace."""
70 - user_ns: a dict to be used as the user's namespace."""
71
71
72 #----------------------------------------------------------------------
72 #----------------------------------------------------------------------
73 # Defaults and initialization
73 # Defaults and initialization
74
74
75 # For developer debugging, deactivates crash handler and uses pdb.
75 # For developer debugging, deactivates crash handler and uses pdb.
76 DEVDEBUG = False
76 DEVDEBUG = False
77
77
78 if argv is None:
78 if argv is None:
79 argv = sys.argv
79 argv = sys.argv
80
80
81 # __IP is the main global that lives throughout and represents the whole
81 # __IP is the main global that lives throughout and represents the whole
82 # application. If the user redefines it, all bets are off as to what
82 # application. If the user redefines it, all bets are off as to what
83 # happens.
83 # happens.
84
84
85 # __IP is the name of he global which the caller will have accessible as
85 # __IP is the name of he global which the caller will have accessible as
86 # __IP.name. We set its name via the first parameter passed to
86 # __IP.name. We set its name via the first parameter passed to
87 # InteractiveShell:
87 # InteractiveShell:
88
88
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
90 embedded=embedded,**kw)
90 embedded=embedded,**kw)
91
91
92 # Put 'help' in the user namespace
92 # Put 'help' in the user namespace
93 from site import _Helper
93 from site import _Helper
94 IP.user_ns['help'] = _Helper()
94 IP.user_ns['help'] = _Helper()
95
95
96
96
97 if DEVDEBUG:
97 if DEVDEBUG:
98 # For developer debugging only (global flag)
98 # For developer debugging only (global flag)
99 from IPython import ultraTB
99 from IPython import ultraTB
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
101
101
102 IP.BANNER_PARTS = ['Python %s\n'
102 IP.BANNER_PARTS = ['Python %s\n'
103 'Type "copyright", "credits" or "license" '
103 'Type "copyright", "credits" or "license" '
104 'for more information.\n'
104 'for more information.\n'
105 % (sys.version.split('\n')[0],),
105 % (sys.version.split('\n')[0],),
106 "IPython %s -- An enhanced Interactive Python."
106 "IPython %s -- An enhanced Interactive Python."
107 % (__version__,),
107 % (__version__,),
108 """? -> Introduction to IPython's features.
108 """? -> Introduction to IPython's features.
109 %magic -> Information about IPython's 'magic' % functions.
109 %magic -> Information about IPython's 'magic' % functions.
110 help -> Python's own help system.
110 help -> Python's own help system.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
112 """ ]
112 """ ]
113
113
114 IP.usage = interactive_usage
114 IP.usage = interactive_usage
115
115
116 # Platform-dependent suffix and directory names. We use _ipython instead
116 # Platform-dependent suffix and directory names. We use _ipython instead
117 # of .ipython under win32 b/c there's software that breaks with .named
117 # of .ipython under win32 b/c there's software that breaks with .named
118 # directories on that platform.
118 # directories on that platform.
119 if os.name == 'posix':
119 if os.name == 'posix':
120 rc_suffix = ''
120 rc_suffix = ''
121 ipdir_def = '.ipython'
121 ipdir_def = '.ipython'
122 else:
122 else:
123 rc_suffix = '.ini'
123 rc_suffix = '.ini'
124 ipdir_def = '_ipython'
124 ipdir_def = '_ipython'
125
125
126 # default directory for configuration
126 # default directory for configuration
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
128 os.path.join(IP.home_dir,ipdir_def)))
128 os.path.join(IP.home_dir,ipdir_def)))
129
129
130 # we need the directory where IPython itself is installed
130 # we need the directory where IPython itself is installed
131 import IPython
131 import IPython
132 IPython_dir = os.path.dirname(IPython.__file__)
132 IPython_dir = os.path.dirname(IPython.__file__)
133 del IPython
133 del IPython
134
134
135 #-------------------------------------------------------------------------
135 #-------------------------------------------------------------------------
136 # Command line handling
136 # Command line handling
137
137
138 # Valid command line options (uses DPyGetOpt syntax, like Perl's
138 # Valid command line options (uses DPyGetOpt syntax, like Perl's
139 # GetOpt::Long)
139 # GetOpt::Long)
140
140
141 # Any key not listed here gets deleted even if in the file (like session
141 # Any key not listed here gets deleted even if in the file (like session
142 # or profile). That's deliberate, to maintain the rc namespace clean.
142 # or profile). That's deliberate, to maintain the rc namespace clean.
143
143
144 # Each set of options appears twice: under _conv only the names are
144 # Each set of options appears twice: under _conv only the names are
145 # listed, indicating which type they must be converted to when reading the
145 # listed, indicating which type they must be converted to when reading the
146 # ipythonrc file. And under DPyGetOpt they are listed with the regular
146 # ipythonrc file. And under DPyGetOpt they are listed with the regular
147 # DPyGetOpt syntax (=s,=i,:f,etc).
147 # DPyGetOpt syntax (=s,=i,:f,etc).
148
148
149 # Make sure there's a space before each end of line (they get auto-joined!)
149 # Make sure there's a space before each end of line (they get auto-joined!)
150 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
150 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
151 'c=s classic|cl color_info! colors=s confirm_exit! '
151 'c=s classic|cl color_info! colors=s confirm_exit! '
152 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
152 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
153 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
153 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
154 'quick screen_length|sl=i prompts_pad_left=i '
154 'quick screen_length|sl=i prompts_pad_left=i '
155 'logfile|lf=s logplay|lp=s profile|p=s '
155 'logfile|lf=s logplay|lp=s profile|p=s '
156 'readline! readline_merge_completions! '
156 'readline! readline_merge_completions! '
157 'readline_omit__names! '
157 'readline_omit__names! '
158 'rcfile=s separate_in|si=s separate_out|so=s '
158 'rcfile=s separate_in|si=s separate_out|so=s '
159 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
159 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
160 'magic_docstrings system_verbose! '
160 'magic_docstrings system_verbose! '
161 'multi_line_specials! '
161 'multi_line_specials! '
162 'wxversion=s '
162 'wxversion=s '
163 'autoedit_syntax!')
163 'autoedit_syntax!')
164
164
165 # Options that can *only* appear at the cmd line (not in rcfiles).
165 # Options that can *only* appear at the cmd line (not in rcfiles).
166
166
167 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
167 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
168 # the 'C-c !' command in emacs automatically appends a -i option at the end.
168 # the 'C-c !' command in emacs automatically appends a -i option at the end.
169 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
169 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
170 'gthread! qthread! wthread! pylab! tk!')
170 'gthread! qthread! wthread! pylab! tk!')
171
171
172 # Build the actual name list to be used by DPyGetOpt
172 # Build the actual name list to be used by DPyGetOpt
173 opts_names = qw(cmdline_opts) + qw(cmdline_only)
173 opts_names = qw(cmdline_opts) + qw(cmdline_only)
174
174
175 # Set sensible command line defaults.
175 # Set sensible command line defaults.
176 # This should have everything from cmdline_opts and cmdline_only
176 # This should have everything from cmdline_opts and cmdline_only
177 opts_def = Struct(autocall = 1,
177 opts_def = Struct(autocall = 1,
178 autoedit_syntax = 1,
178 autoedit_syntax = 1,
179 autoindent=0,
179 autoindent=0,
180 automagic = 1,
180 automagic = 1,
181 banner = 1,
181 banner = 1,
182 cache_size = 1000,
182 cache_size = 1000,
183 c = '',
183 c = '',
184 classic = 0,
184 classic = 0,
185 colors = 'NoColor',
185 colors = 'NoColor',
186 color_info = 0,
186 color_info = 0,
187 confirm_exit = 1,
187 confirm_exit = 1,
188 debug = 0,
188 debug = 0,
189 deep_reload = 0,
189 deep_reload = 0,
190 editor = '0',
190 editor = '0',
191 help = 0,
191 help = 0,
192 ignore = 0,
192 ignore = 0,
193 ipythondir = ipythondir,
193 ipythondir = ipythondir,
194 log = 0,
194 log = 0,
195 logfile = '',
195 logfile = '',
196 logplay = '',
196 logplay = '',
197 multi_line_specials = 1,
197 multi_line_specials = 1,
198 messages = 1,
198 messages = 1,
199 nosep = 0,
199 nosep = 0,
200 pdb = 0,
200 pdb = 0,
201 pprint = 0,
201 pprint = 0,
202 profile = '',
202 profile = '',
203 prompt_in1 = 'In [\\#]: ',
203 prompt_in1 = 'In [\\#]: ',
204 prompt_in2 = ' .\\D.: ',
204 prompt_in2 = ' .\\D.: ',
205 prompt_out = 'Out[\\#]: ',
205 prompt_out = 'Out[\\#]: ',
206 prompts_pad_left = 1,
206 prompts_pad_left = 1,
207 quick = 0,
207 quick = 0,
208 readline = 1,
208 readline = 1,
209 readline_merge_completions = 1,
209 readline_merge_completions = 1,
210 readline_omit__names = 0,
210 readline_omit__names = 0,
211 rcfile = 'ipythonrc' + rc_suffix,
211 rcfile = 'ipythonrc' + rc_suffix,
212 screen_length = 0,
212 screen_length = 0,
213 separate_in = '\n',
213 separate_in = '\n',
214 separate_out = '\n',
214 separate_out = '\n',
215 separate_out2 = '',
215 separate_out2 = '',
216 system_verbose = 0,
216 system_verbose = 0,
217 gthread = 0,
217 gthread = 0,
218 qthread = 0,
218 qthread = 0,
219 wthread = 0,
219 wthread = 0,
220 pylab = 0,
220 pylab = 0,
221 tk = 0,
221 tk = 0,
222 upgrade = 0,
222 upgrade = 0,
223 Version = 0,
223 Version = 0,
224 xmode = 'Verbose',
224 xmode = 'Verbose',
225 wildcards_case_sensitive = 1,
225 wildcards_case_sensitive = 1,
226 wxversion = '0',
226 wxversion = '0',
227 magic_docstrings = 0, # undocumented, for doc generation
227 magic_docstrings = 0, # undocumented, for doc generation
228 )
228 )
229
229
230 # Things that will *only* appear in rcfiles (not at the command line).
230 # Things that will *only* appear in rcfiles (not at the command line).
231 # Make sure there's a space before each end of line (they get auto-joined!)
231 # Make sure there's a space before each end of line (they get auto-joined!)
232 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
232 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
233 qw_lol: 'import_some ',
233 qw_lol: 'import_some ',
234 # for things with embedded whitespace:
234 # for things with embedded whitespace:
235 list_strings:'execute alias readline_parse_and_bind ',
235 list_strings:'execute alias readline_parse_and_bind ',
236 # Regular strings need no conversion:
236 # Regular strings need no conversion:
237 None:'readline_remove_delims ',
237 None:'readline_remove_delims ',
238 }
238 }
239 # Default values for these
239 # Default values for these
240 rc_def = Struct(include = [],
240 rc_def = Struct(include = [],
241 import_mod = [],
241 import_mod = [],
242 import_all = [],
242 import_all = [],
243 import_some = [[]],
243 import_some = [[]],
244 execute = [],
244 execute = [],
245 execfile = [],
245 execfile = [],
246 alias = [],
246 alias = [],
247 readline_parse_and_bind = [],
247 readline_parse_and_bind = [],
248 readline_remove_delims = '',
248 readline_remove_delims = '',
249 )
249 )
250
250
251 # Build the type conversion dictionary from the above tables:
251 # Build the type conversion dictionary from the above tables:
252 typeconv = rcfile_opts.copy()
252 typeconv = rcfile_opts.copy()
253 typeconv.update(optstr2types(cmdline_opts))
253 typeconv.update(optstr2types(cmdline_opts))
254
254
255 # FIXME: the None key appears in both, put that back together by hand. Ugly!
255 # FIXME: the None key appears in both, put that back together by hand. Ugly!
256 typeconv[None] += ' ' + rcfile_opts[None]
256 typeconv[None] += ' ' + rcfile_opts[None]
257
257
258 # Remove quotes at ends of all strings (used to protect spaces)
258 # Remove quotes at ends of all strings (used to protect spaces)
259 typeconv[unquote_ends] = typeconv[None]
259 typeconv[unquote_ends] = typeconv[None]
260 del typeconv[None]
260 del typeconv[None]
261
261
262 # Build the list we'll use to make all config decisions with defaults:
262 # Build the list we'll use to make all config decisions with defaults:
263 opts_all = opts_def.copy()
263 opts_all = opts_def.copy()
264 opts_all.update(rc_def)
264 opts_all.update(rc_def)
265
265
266 # Build conflict resolver for recursive loading of config files:
266 # Build conflict resolver for recursive loading of config files:
267 # - preserve means the outermost file maintains the value, it is not
267 # - preserve means the outermost file maintains the value, it is not
268 # overwritten if an included file has the same key.
268 # overwritten if an included file has the same key.
269 # - add_flip applies + to the two values, so it better make sense to add
269 # - add_flip applies + to the two values, so it better make sense to add
270 # those types of keys. But it flips them first so that things loaded
270 # those types of keys. But it flips them first so that things loaded
271 # deeper in the inclusion chain have lower precedence.
271 # deeper in the inclusion chain have lower precedence.
272 conflict = {'preserve': ' '.join([ typeconv[int],
272 conflict = {'preserve': ' '.join([ typeconv[int],
273 typeconv[unquote_ends] ]),
273 typeconv[unquote_ends] ]),
274 'add_flip': ' '.join([ typeconv[qwflat],
274 'add_flip': ' '.join([ typeconv[qwflat],
275 typeconv[qw_lol],
275 typeconv[qw_lol],
276 typeconv[list_strings] ])
276 typeconv[list_strings] ])
277 }
277 }
278
278
279 # Now actually process the command line
279 # Now actually process the command line
280 getopt = DPyGetOpt.DPyGetOpt()
280 getopt = DPyGetOpt.DPyGetOpt()
281 getopt.setIgnoreCase(0)
281 getopt.setIgnoreCase(0)
282
282
283 getopt.parseConfiguration(opts_names)
283 getopt.parseConfiguration(opts_names)
284
284
285 try:
285 try:
286 getopt.processArguments(argv)
286 getopt.processArguments(argv)
287 except:
287 except:
288 print cmd_line_usage
288 print cmd_line_usage
289 warn('\nError in Arguments: ' + `sys.exc_value`)
289 warn('\nError in Arguments: ' + `sys.exc_value`)
290 sys.exit(1)
290 sys.exit(1)
291
291
292 # convert the options dict to a struct for much lighter syntax later
292 # convert the options dict to a struct for much lighter syntax later
293 opts = Struct(getopt.optionValues)
293 opts = Struct(getopt.optionValues)
294 args = getopt.freeValues
294 args = getopt.freeValues
295
295
296 # this is the struct (which has default values at this point) with which
296 # this is the struct (which has default values at this point) with which
297 # we make all decisions:
297 # we make all decisions:
298 opts_all.update(opts)
298 opts_all.update(opts)
299
299
300 # Options that force an immediate exit
300 # Options that force an immediate exit
301 if opts_all.help:
301 if opts_all.help:
302 page(cmd_line_usage)
302 page(cmd_line_usage)
303 sys.exit()
303 sys.exit()
304
304
305 if opts_all.Version:
305 if opts_all.Version:
306 print __version__
306 print __version__
307 sys.exit()
307 sys.exit()
308
308
309 if opts_all.magic_docstrings:
309 if opts_all.magic_docstrings:
310 IP.magic_magic('-latex')
310 IP.magic_magic('-latex')
311 sys.exit()
311 sys.exit()
312
312
313 # Create user config directory if it doesn't exist. This must be done
313 # Create user config directory if it doesn't exist. This must be done
314 # *after* getting the cmd line options.
314 # *after* getting the cmd line options.
315 if not os.path.isdir(opts_all.ipythondir):
315 if not os.path.isdir(opts_all.ipythondir):
316 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
316 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
317
317
318 # upgrade user config files while preserving a copy of the originals
318 # upgrade user config files while preserving a copy of the originals
319 if opts_all.upgrade:
319 if opts_all.upgrade:
320 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
320 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
321
321
322 # check mutually exclusive options in the *original* command line
322 # check mutually exclusive options in the *original* command line
323 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
323 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
324 qw('classic profile'),qw('classic rcfile')])
324 qw('classic profile'),qw('classic rcfile')])
325
325
326 #---------------------------------------------------------------------------
326 #---------------------------------------------------------------------------
327 # Log replay
327 # Log replay
328
328
329 # if -logplay, we need to 'become' the other session. That basically means
329 # if -logplay, we need to 'become' the other session. That basically means
330 # replacing the current command line environment with that of the old
330 # replacing the current command line environment with that of the old
331 # session and moving on.
331 # session and moving on.
332
332
333 # this is needed so that later we know we're in session reload mode, as
333 # this is needed so that later we know we're in session reload mode, as
334 # opts_all will get overwritten:
334 # opts_all will get overwritten:
335 load_logplay = 0
335 load_logplay = 0
336
336
337 if opts_all.logplay:
337 if opts_all.logplay:
338 load_logplay = opts_all.logplay
338 load_logplay = opts_all.logplay
339 opts_debug_save = opts_all.debug
339 opts_debug_save = opts_all.debug
340 try:
340 try:
341 logplay = open(opts_all.logplay)
341 logplay = open(opts_all.logplay)
342 except IOError:
342 except IOError:
343 if opts_all.debug: IP.InteractiveTB()
343 if opts_all.debug: IP.InteractiveTB()
344 warn('Could not open logplay file '+`opts_all.logplay`)
344 warn('Could not open logplay file '+`opts_all.logplay`)
345 # restore state as if nothing had happened and move on, but make
345 # restore state as if nothing had happened and move on, but make
346 # sure that later we don't try to actually load the session file
346 # sure that later we don't try to actually load the session file
347 logplay = None
347 logplay = None
348 load_logplay = 0
348 load_logplay = 0
349 del opts_all.logplay
349 del opts_all.logplay
350 else:
350 else:
351 try:
351 try:
352 logplay.readline()
352 logplay.readline()
353 logplay.readline();
353 logplay.readline();
354 # this reloads that session's command line
354 # this reloads that session's command line
355 cmd = logplay.readline()[6:]
355 cmd = logplay.readline()[6:]
356 exec cmd
356 exec cmd
357 # restore the true debug flag given so that the process of
357 # restore the true debug flag given so that the process of
358 # session loading itself can be monitored.
358 # session loading itself can be monitored.
359 opts.debug = opts_debug_save
359 opts.debug = opts_debug_save
360 # save the logplay flag so later we don't overwrite the log
360 # save the logplay flag so later we don't overwrite the log
361 opts.logplay = load_logplay
361 opts.logplay = load_logplay
362 # now we must update our own structure with defaults
362 # now we must update our own structure with defaults
363 opts_all.update(opts)
363 opts_all.update(opts)
364 # now load args
364 # now load args
365 cmd = logplay.readline()[6:]
365 cmd = logplay.readline()[6:]
366 exec cmd
366 exec cmd
367 logplay.close()
367 logplay.close()
368 except:
368 except:
369 logplay.close()
369 logplay.close()
370 if opts_all.debug: IP.InteractiveTB()
370 if opts_all.debug: IP.InteractiveTB()
371 warn("Logplay file lacking full configuration information.\n"
371 warn("Logplay file lacking full configuration information.\n"
372 "I'll try to read it, but some things may not work.")
372 "I'll try to read it, but some things may not work.")
373
373
374 #-------------------------------------------------------------------------
374 #-------------------------------------------------------------------------
375 # set up output traps: catch all output from files, being run, modules
375 # set up output traps: catch all output from files, being run, modules
376 # loaded, etc. Then give it to the user in a clean form at the end.
376 # loaded, etc. Then give it to the user in a clean form at the end.
377
377
378 msg_out = 'Output messages. '
378 msg_out = 'Output messages. '
379 msg_err = 'Error messages. '
379 msg_err = 'Error messages. '
380 msg_sep = '\n'
380 msg_sep = '\n'
381 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
381 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
382 msg_err,msg_sep,debug,
382 msg_err,msg_sep,debug,
383 quiet_out=1),
383 quiet_out=1),
384 user_exec = OutputTrap('User File Execution',msg_out,
384 user_exec = OutputTrap('User File Execution',msg_out,
385 msg_err,msg_sep,debug),
385 msg_err,msg_sep,debug),
386 logplay = OutputTrap('Log Loader',msg_out,
386 logplay = OutputTrap('Log Loader',msg_out,
387 msg_err,msg_sep,debug),
387 msg_err,msg_sep,debug),
388 summary = ''
388 summary = ''
389 )
389 )
390
390
391 #-------------------------------------------------------------------------
391 #-------------------------------------------------------------------------
392 # Process user ipythonrc-type configuration files
392 # Process user ipythonrc-type configuration files
393
393
394 # turn on output trapping and log to msg.config
394 # turn on output trapping and log to msg.config
395 # remember that with debug on, trapping is actually disabled
395 # remember that with debug on, trapping is actually disabled
396 msg.config.trap_all()
396 msg.config.trap_all()
397
397
398 # look for rcfile in current or default directory
398 # look for rcfile in current or default directory
399 try:
399 try:
400 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
400 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
401 except IOError:
401 except IOError:
402 if opts_all.debug: IP.InteractiveTB()
402 if opts_all.debug: IP.InteractiveTB()
403 warn('Configuration file %s not found. Ignoring request.'
403 warn('Configuration file %s not found. Ignoring request.'
404 % (opts_all.rcfile) )
404 % (opts_all.rcfile) )
405
405
406 # 'profiles' are a shorthand notation for config filenames
406 # 'profiles' are a shorthand notation for config filenames
407 if opts_all.profile:
407 if opts_all.profile:
408
408 try:
409 try:
409 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
410 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
410 + rc_suffix,
411 + rc_suffix,
411 opts_all.ipythondir)
412 opts_all.ipythondir)
412 except IOError:
413 except IOError:
413 if opts_all.debug: IP.InteractiveTB()
414 if opts_all.debug: IP.InteractiveTB()
414 opts.profile = '' # remove profile from options if invalid
415 opts.profile = '' # remove profile from options if invalid
415 warn('Profile configuration file %s not found. Ignoring request.'
416 warn('Profile configuration file %s not found. Ignoring request.'
416 % (opts_all.profile) )
417 % (opts_all.profile) )
417
418
418
419
419 # load the config file
420 # load the config file
420 rcfiledata = None
421 rcfiledata = None
421 if opts_all.quick:
422 if opts_all.quick:
422 print 'Launching IPython in quick mode. No config file read.'
423 print 'Launching IPython in quick mode. No config file read.'
423 elif opts_all.classic:
424 elif opts_all.classic:
424 print 'Launching IPython in classic mode. No config file read.'
425 print 'Launching IPython in classic mode. No config file read.'
425 elif opts_all.rcfile:
426 elif opts_all.rcfile:
426 try:
427 try:
427 cfg_loader = ConfigLoader(conflict)
428 cfg_loader = ConfigLoader(conflict)
428 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
429 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
429 'include',opts_all.ipythondir,
430 'include',opts_all.ipythondir,
430 purge = 1,
431 purge = 1,
431 unique = conflict['preserve'])
432 unique = conflict['preserve'])
432 except:
433 except:
433 IP.InteractiveTB()
434 IP.InteractiveTB()
434 warn('Problems loading configuration file '+
435 warn('Problems loading configuration file '+
435 `opts_all.rcfile`+
436 `opts_all.rcfile`+
436 '\nStarting with default -bare bones- configuration.')
437 '\nStarting with default -bare bones- configuration.')
437 else:
438 else:
438 warn('No valid configuration file found in either currrent directory\n'+
439 warn('No valid configuration file found in either currrent directory\n'+
439 'or in the IPython config. directory: '+`opts_all.ipythondir`+
440 'or in the IPython config. directory: '+`opts_all.ipythondir`+
440 '\nProceeding with internal defaults.')
441 '\nProceeding with internal defaults.')
441
442
442 #------------------------------------------------------------------------
443 #------------------------------------------------------------------------
443 # Set exception handlers in mode requested by user.
444 # Set exception handlers in mode requested by user.
444 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
445 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
445 IP.magic_xmode(opts_all.xmode)
446 IP.magic_xmode(opts_all.xmode)
446 otrap.release_out()
447 otrap.release_out()
447
448
448 #------------------------------------------------------------------------
449 #------------------------------------------------------------------------
449 # Execute user config
450 # Execute user config
450
451
451 # Create a valid config structure with the right precedence order:
452 # Create a valid config structure with the right precedence order:
452 # defaults < rcfile < command line. This needs to be in the instance, so
453 # defaults < rcfile < command line. This needs to be in the instance, so
453 # that method calls below that rely on it find it.
454 # that method calls below that rely on it find it.
454 IP.rc = rc_def.copy()
455 IP.rc = rc_def.copy()
455
456
456 # Work with a local alias inside this routine to avoid unnecessary
457 # Work with a local alias inside this routine to avoid unnecessary
457 # attribute lookups.
458 # attribute lookups.
458 IP_rc = IP.rc
459 IP_rc = IP.rc
459
460
460 IP_rc.update(opts_def)
461 IP_rc.update(opts_def)
461 if rcfiledata:
462 if rcfiledata:
462 # now we can update
463 # now we can update
463 IP_rc.update(rcfiledata)
464 IP_rc.update(rcfiledata)
464 IP_rc.update(opts)
465 IP_rc.update(opts)
465 IP_rc.update(rc_override)
466 IP_rc.update(rc_override)
466
467
467 # Store the original cmd line for reference:
468 # Store the original cmd line for reference:
468 IP_rc.opts = opts
469 IP_rc.opts = opts
469 IP_rc.args = args
470 IP_rc.args = args
470
471
471 # create a *runtime* Struct like rc for holding parameters which may be
472 # create a *runtime* Struct like rc for holding parameters which may be
472 # created and/or modified by runtime user extensions.
473 # created and/or modified by runtime user extensions.
473 IP.runtime_rc = Struct()
474 IP.runtime_rc = Struct()
474
475
475 # from this point on, all config should be handled through IP_rc,
476 # from this point on, all config should be handled through IP_rc,
476 # opts* shouldn't be used anymore.
477 # opts* shouldn't be used anymore.
477
478
478 # add personal .ipython dir to sys.path so that users can put things in
479 # add personal .ipython dir to sys.path so that users can put things in
479 # there for customization
480 # there for customization
480 sys.path.append(IP_rc.ipythondir)
481 sys.path.append(IP_rc.ipythondir)
481
482
482 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
483 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
483
484
484 # update IP_rc with some special things that need manual
485 # update IP_rc with some special things that need manual
485 # tweaks. Basically options which affect other options. I guess this
486 # tweaks. Basically options which affect other options. I guess this
486 # should just be written so that options are fully orthogonal and we
487 # should just be written so that options are fully orthogonal and we
487 # wouldn't worry about this stuff!
488 # wouldn't worry about this stuff!
488
489
489 if IP_rc.classic:
490 if IP_rc.classic:
490 IP_rc.quick = 1
491 IP_rc.quick = 1
491 IP_rc.cache_size = 0
492 IP_rc.cache_size = 0
492 IP_rc.pprint = 0
493 IP_rc.pprint = 0
493 IP_rc.prompt_in1 = '>>> '
494 IP_rc.prompt_in1 = '>>> '
494 IP_rc.prompt_in2 = '... '
495 IP_rc.prompt_in2 = '... '
495 IP_rc.prompt_out = ''
496 IP_rc.prompt_out = ''
496 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
497 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
497 IP_rc.colors = 'NoColor'
498 IP_rc.colors = 'NoColor'
498 IP_rc.xmode = 'Plain'
499 IP_rc.xmode = 'Plain'
499
500
500 # configure readline
501 # configure readline
501 # Define the history file for saving commands in between sessions
502 # Define the history file for saving commands in between sessions
502 if IP_rc.profile:
503 if IP_rc.profile:
503 histfname = 'history-%s' % IP_rc.profile
504 histfname = 'history-%s' % IP_rc.profile
504 else:
505 else:
505 histfname = 'history'
506 histfname = 'history'
506 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
507 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
507
508
508 # update exception handlers with rc file status
509 # update exception handlers with rc file status
509 otrap.trap_out() # I don't want these messages ever.
510 otrap.trap_out() # I don't want these messages ever.
510 IP.magic_xmode(IP_rc.xmode)
511 IP.magic_xmode(IP_rc.xmode)
511 otrap.release_out()
512 otrap.release_out()
512
513
513 # activate logging if requested and not reloading a log
514 # activate logging if requested and not reloading a log
514 if IP_rc.logplay:
515 if IP_rc.logplay:
515 IP.magic_logstart(IP_rc.logplay + ' append')
516 IP.magic_logstart(IP_rc.logplay + ' append')
516 elif IP_rc.logfile:
517 elif IP_rc.logfile:
517 IP.magic_logstart(IP_rc.logfile)
518 IP.magic_logstart(IP_rc.logfile)
518 elif IP_rc.log:
519 elif IP_rc.log:
519 IP.magic_logstart()
520 IP.magic_logstart()
520
521
521 # find user editor so that it we don't have to look it up constantly
522 # find user editor so that it we don't have to look it up constantly
522 if IP_rc.editor.strip()=='0':
523 if IP_rc.editor.strip()=='0':
523 try:
524 try:
524 ed = os.environ['EDITOR']
525 ed = os.environ['EDITOR']
525 except KeyError:
526 except KeyError:
526 if os.name == 'posix':
527 if os.name == 'posix':
527 ed = 'vi' # the only one guaranteed to be there!
528 ed = 'vi' # the only one guaranteed to be there!
528 else:
529 else:
529 ed = 'notepad' # same in Windows!
530 ed = 'notepad' # same in Windows!
530 IP_rc.editor = ed
531 IP_rc.editor = ed
531
532
532 # Keep track of whether this is an embedded instance or not (useful for
533 # Keep track of whether this is an embedded instance or not (useful for
533 # post-mortems).
534 # post-mortems).
534 IP_rc.embedded = IP.embedded
535 IP_rc.embedded = IP.embedded
535
536
536 # Recursive reload
537 # Recursive reload
537 try:
538 try:
538 from IPython import deep_reload
539 from IPython import deep_reload
539 if IP_rc.deep_reload:
540 if IP_rc.deep_reload:
540 __builtin__.reload = deep_reload.reload
541 __builtin__.reload = deep_reload.reload
541 else:
542 else:
542 __builtin__.dreload = deep_reload.reload
543 __builtin__.dreload = deep_reload.reload
543 del deep_reload
544 del deep_reload
544 except ImportError:
545 except ImportError:
545 pass
546 pass
546
547
547 # Save the current state of our namespace so that the interactive shell
548 # Save the current state of our namespace so that the interactive shell
548 # can later know which variables have been created by us from config files
549 # can later know which variables have been created by us from config files
549 # and loading. This way, loading a file (in any way) is treated just like
550 # and loading. This way, loading a file (in any way) is treated just like
550 # defining things on the command line, and %who works as expected.
551 # defining things on the command line, and %who works as expected.
551
552
552 # DON'T do anything that affects the namespace beyond this point!
553 # DON'T do anything that affects the namespace beyond this point!
553 IP.internal_ns.update(__main__.__dict__)
554 IP.internal_ns.update(__main__.__dict__)
554
555
555 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
556 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
556
557
557 # Now run through the different sections of the users's config
558 # Now run through the different sections of the users's config
558 if IP_rc.debug:
559 if IP_rc.debug:
559 print 'Trying to execute the following configuration structure:'
560 print 'Trying to execute the following configuration structure:'
560 print '(Things listed first are deeper in the inclusion tree and get'
561 print '(Things listed first are deeper in the inclusion tree and get'
561 print 'loaded first).\n'
562 print 'loaded first).\n'
562 pprint(IP_rc.__dict__)
563 pprint(IP_rc.__dict__)
563
564
564 # Make it easy to import extensions
565 # Make it easy to import extensions
565 sys.path.append(os.path.join(IPython_dir,"Extensions"))
566 sys.path.append(os.path.join(IPython_dir,"Extensions"))
566 for mod in IP_rc.import_mod:
567 for mod in IP_rc.import_mod:
567 try:
568 try:
568 exec 'import '+mod in IP.user_ns
569 exec 'import '+mod in IP.user_ns
569 except :
570 except :
570 IP.InteractiveTB()
571 IP.InteractiveTB()
571 import_fail_info(mod)
572 import_fail_info(mod)
572
573
573 for mod_fn in IP_rc.import_some:
574 for mod_fn in IP_rc.import_some:
574 if mod_fn == []: break
575 if mod_fn == []: break
575 mod,fn = mod_fn[0],','.join(mod_fn[1:])
576 mod,fn = mod_fn[0],','.join(mod_fn[1:])
576 try:
577 try:
577 exec 'from '+mod+' import '+fn in IP.user_ns
578 exec 'from '+mod+' import '+fn in IP.user_ns
578 except :
579 except :
579 IP.InteractiveTB()
580 IP.InteractiveTB()
580 import_fail_info(mod,fn)
581 import_fail_info(mod,fn)
581
582
582 for mod in IP_rc.import_all:
583 for mod in IP_rc.import_all:
583 try:
584 try:
584 exec 'from '+mod+' import *' in IP.user_ns
585 exec 'from '+mod+' import *' in IP.user_ns
585 except :
586 except :
586 IP.InteractiveTB()
587 IP.InteractiveTB()
587 import_fail_info(mod)
588 import_fail_info(mod)
588
589
589 for code in IP_rc.execute:
590 for code in IP_rc.execute:
590 try:
591 try:
591 exec code in IP.user_ns
592 exec code in IP.user_ns
592 except:
593 except:
593 IP.InteractiveTB()
594 IP.InteractiveTB()
594 warn('Failure executing code: ' + `code`)
595 warn('Failure executing code: ' + `code`)
595
596
596 # Execute the files the user wants in ipythonrc
597 # Execute the files the user wants in ipythonrc
597 for file in IP_rc.execfile:
598 for file in IP_rc.execfile:
598 try:
599 try:
599 file = filefind(file,sys.path+[IPython_dir])
600 file = filefind(file,sys.path+[IPython_dir])
600 except IOError:
601 except IOError:
601 warn(itpl('File $file not found. Skipping it.'))
602 warn(itpl('File $file not found. Skipping it.'))
602 else:
603 else:
603 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
604 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
604
605
605 # finally, try importing ipy_*_conf for final configuration
606 # finally, try importing ipy_*_conf for final configuration
606 try:
607 try:
607 import ipy_system_conf
608 import ipy_system_conf
608 import ipy_user_conf
609
610 except ImportError:
609 except ImportError:
610 warn("Could not import 'ipy_system_conf'")
611 pass
611 pass
612 #IP.InteractiveTB() XXX uncomment in a later release
612 if opts_all.profile:
613 profmodname = 'ipy_profile_' + opts_all.profile
614 try:
615 __import__(profmodname)
616 except ImportError:
617 warn("Could not import '%s'" % profmodname)
618 try:
619 import ipy_user_conf
620 except ImportError:
621 warn('Could not import ipy_user_conf')
613
622
614 # release stdout and stderr and save config log into a global summary
623 # release stdout and stderr and save config log into a global summary
615 msg.config.release_all()
624 msg.config.release_all()
616 if IP_rc.messages:
625 if IP_rc.messages:
617 msg.summary += msg.config.summary_all()
626 msg.summary += msg.config.summary_all()
618
627
619 #------------------------------------------------------------------------
628 #------------------------------------------------------------------------
620 # Setup interactive session
629 # Setup interactive session
621
630
622 # Now we should be fully configured. We can then execute files or load
631 # Now we should be fully configured. We can then execute files or load
623 # things only needed for interactive use. Then we'll open the shell.
632 # things only needed for interactive use. Then we'll open the shell.
624
633
625 # Take a snapshot of the user namespace before opening the shell. That way
634 # Take a snapshot of the user namespace before opening the shell. That way
626 # we'll be able to identify which things were interactively defined and
635 # we'll be able to identify which things were interactively defined and
627 # which were defined through config files.
636 # which were defined through config files.
628 IP.user_config_ns = IP.user_ns.copy()
637 IP.user_config_ns = IP.user_ns.copy()
629
638
630 # Force reading a file as if it were a session log. Slower but safer.
639 # Force reading a file as if it were a session log. Slower but safer.
631 if load_logplay:
640 if load_logplay:
632 print 'Replaying log...'
641 print 'Replaying log...'
633 try:
642 try:
634 if IP_rc.debug:
643 if IP_rc.debug:
635 logplay_quiet = 0
644 logplay_quiet = 0
636 else:
645 else:
637 logplay_quiet = 1
646 logplay_quiet = 1
638
647
639 msg.logplay.trap_all()
648 msg.logplay.trap_all()
640 IP.safe_execfile(load_logplay,IP.user_ns,
649 IP.safe_execfile(load_logplay,IP.user_ns,
641 islog = 1, quiet = logplay_quiet)
650 islog = 1, quiet = logplay_quiet)
642 msg.logplay.release_all()
651 msg.logplay.release_all()
643 if IP_rc.messages:
652 if IP_rc.messages:
644 msg.summary += msg.logplay.summary_all()
653 msg.summary += msg.logplay.summary_all()
645 except:
654 except:
646 warn('Problems replaying logfile %s.' % load_logplay)
655 warn('Problems replaying logfile %s.' % load_logplay)
647 IP.InteractiveTB()
656 IP.InteractiveTB()
648
657
649 # Load remaining files in command line
658 # Load remaining files in command line
650 msg.user_exec.trap_all()
659 msg.user_exec.trap_all()
651
660
652 # Do NOT execute files named in the command line as scripts to be loaded
661 # Do NOT execute files named in the command line as scripts to be loaded
653 # by embedded instances. Doing so has the potential for an infinite
662 # by embedded instances. Doing so has the potential for an infinite
654 # recursion if there are exceptions thrown in the process.
663 # recursion if there are exceptions thrown in the process.
655
664
656 # XXX FIXME: the execution of user files should be moved out to after
665 # XXX FIXME: the execution of user files should be moved out to after
657 # ipython is fully initialized, just as if they were run via %run at the
666 # ipython is fully initialized, just as if they were run via %run at the
658 # ipython prompt. This would also give them the benefit of ipython's
667 # ipython prompt. This would also give them the benefit of ipython's
659 # nice tracebacks.
668 # nice tracebacks.
660
669
661 if not embedded and IP_rc.args:
670 if not embedded and IP_rc.args:
662 name_save = IP.user_ns['__name__']
671 name_save = IP.user_ns['__name__']
663 IP.user_ns['__name__'] = '__main__'
672 IP.user_ns['__name__'] = '__main__'
664 # Set our own excepthook in case the user code tries to call it
673 # Set our own excepthook in case the user code tries to call it
665 # directly. This prevents triggering the IPython crash handler.
674 # directly. This prevents triggering the IPython crash handler.
666 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
675 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
667
676
668 save_argv = sys.argv[:] # save it for later restoring
677 save_argv = sys.argv[:] # save it for later restoring
669
678
670 sys.argv = args
679 sys.argv = args
671
680
672 try:
681 try:
673 IP.safe_execfile(args[0], IP.user_ns)
682 IP.safe_execfile(args[0], IP.user_ns)
674 finally:
683 finally:
675 # Reset our crash handler in place
684 # Reset our crash handler in place
676 sys.excepthook = old_excepthook
685 sys.excepthook = old_excepthook
677 sys.argv = save_argv
686 sys.argv = save_argv
678 IP.user_ns['__name__'] = name_save
687 IP.user_ns['__name__'] = name_save
679
688
680 msg.user_exec.release_all()
689 msg.user_exec.release_all()
681 if IP_rc.messages:
690 if IP_rc.messages:
682 msg.summary += msg.user_exec.summary_all()
691 msg.summary += msg.user_exec.summary_all()
683
692
684 # since we can't specify a null string on the cmd line, 0 is the equivalent:
693 # since we can't specify a null string on the cmd line, 0 is the equivalent:
685 if IP_rc.nosep:
694 if IP_rc.nosep:
686 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
695 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
687 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
696 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
688 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
697 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
689 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
698 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
690 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
699 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
691 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
700 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
692 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
701 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
693
702
694 # Determine how many lines at the bottom of the screen are needed for
703 # Determine how many lines at the bottom of the screen are needed for
695 # showing prompts, so we can know wheter long strings are to be printed or
704 # showing prompts, so we can know wheter long strings are to be printed or
696 # paged:
705 # paged:
697 num_lines_bot = IP_rc.separate_in.count('\n')+1
706 num_lines_bot = IP_rc.separate_in.count('\n')+1
698 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
707 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
699
708
700 # configure startup banner
709 # configure startup banner
701 if IP_rc.c: # regular python doesn't print the banner with -c
710 if IP_rc.c: # regular python doesn't print the banner with -c
702 IP_rc.banner = 0
711 IP_rc.banner = 0
703 if IP_rc.banner:
712 if IP_rc.banner:
704 BANN_P = IP.BANNER_PARTS
713 BANN_P = IP.BANNER_PARTS
705 else:
714 else:
706 BANN_P = []
715 BANN_P = []
707
716
708 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
717 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
709
718
710 # add message log (possibly empty)
719 # add message log (possibly empty)
711 if msg.summary: BANN_P.append(msg.summary)
720 if msg.summary: BANN_P.append(msg.summary)
712 # Final banner is a string
721 # Final banner is a string
713 IP.BANNER = '\n'.join(BANN_P)
722 IP.BANNER = '\n'.join(BANN_P)
714
723
715 # Finalize the IPython instance. This assumes the rc structure is fully
724 # Finalize the IPython instance. This assumes the rc structure is fully
716 # in place.
725 # in place.
717 IP.post_config_initialization()
726 IP.post_config_initialization()
718
727
719 return IP
728 return IP
720 #************************ end of file <ipmaker.py> **************************
729 #************************ end of file <ipmaker.py> **************************
@@ -1,599 +1,640 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 #*****************************************************************************
2 #*****************************************************************************
3 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
3 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
4 #
4 #
5 # Distributed under the terms of the BSD License. The full license is in
5 # Distributed under the terms of the BSD License. The full license is in
6 # the file COPYING, distributed as part of this software.
6 # the file COPYING, distributed as part of this software.
7 #*****************************************************************************
7 #*****************************************************************************
8
8
9 # $Id: usage.py 998 2006-01-09 06:57:40Z fperez $
9 # $Id: usage.py 1092 2006-01-27 23:56:32Z vivainio $
10
10
11 from IPython import Release
11 from IPython import Release
12 __author__ = '%s <%s>' % Release.authors['Fernando']
12 __author__ = '%s <%s>' % Release.authors['Fernando']
13 __license__ = Release.license
13 __license__ = Release.license
14 __version__ = Release.version
14 __version__ = Release.version
15
15
16 __doc__ = """
16 __doc__ = """
17 IPython -- An enhanced Interactive Python
17 IPython -- An enhanced Interactive Python
18 =========================================
18 =========================================
19
19
20 A Python shell with automatic history (input and output), dynamic object
20 A Python shell with automatic history (input and output), dynamic object
21 introspection, easier configuration, command completion, access to the system
21 introspection, easier configuration, command completion, access to the system
22 shell and more.
22 shell and more.
23
23
24 IPython can also be embedded in running programs. See EMBEDDING below.
24 IPython can also be embedded in running programs. See EMBEDDING below.
25
25
26
26
27 USAGE
27 USAGE
28 ipython [options] files
28 ipython [options] files
29
29
30 If invoked with no options, it executes all the files listed in
30 If invoked with no options, it executes all the files listed in
31 sequence and drops you into the interpreter while still acknowledging
31 sequence and drops you into the interpreter while still acknowledging
32 any options you may have set in your ipythonrc file. This behavior is
32 any options you may have set in your ipythonrc file. This behavior is
33 different from standard Python, which when called as python -i will
33 different from standard Python, which when called as python -i will
34 only execute one file and will ignore your configuration setup.
34 only execute one file and will ignore your configuration setup.
35
35
36 Please note that some of the configuration options are not available at
36 Please note that some of the configuration options are not available at
37 the command line, simply because they are not practical here. Look into
37 the command line, simply because they are not practical here. Look into
38 your ipythonrc configuration file for details on those. This file
38 your ipythonrc configuration file for details on those. This file
39 typically installed in the $HOME/.ipython directory.
39 typically installed in the $HOME/.ipython directory.
40
40
41 For Windows users, $HOME resolves to C:\\Documents and
41 For Windows users, $HOME resolves to C:\\Documents and
42 Settings\\YourUserName in most instances, and _ipython is used instead
42 Settings\\YourUserName in most instances, and _ipython is used instead
43 of .ipython, since some Win32 programs have problems with dotted names
43 of .ipython, since some Win32 programs have problems with dotted names
44 in directories.
44 in directories.
45
45
46 In the rest of this text, we will refer to this directory as
46 In the rest of this text, we will refer to this directory as
47 IPYTHONDIR.
47 IPYTHONDIR.
48
48
49
49
50 SPECIAL THREADING OPTIONS
50 SPECIAL THREADING OPTIONS
51 The following special options are ONLY valid at the beginning of the
51 The following special options are ONLY valid at the beginning of the
52 command line, and not later. This is because they control the initial-
52 command line, and not later. This is because they control the initial-
53 ization of ipython itself, before the normal option-handling mechanism
53 ization of ipython itself, before the normal option-handling mechanism
54 is active.
54 is active.
55
55
56 -gthread, -qthread, -wthread, -pylab
56 -gthread, -qthread, -wthread, -pylab
57
57
58 Only ONE of these can be given, and it can only be given as the
58 Only ONE of these can be given, and it can only be given as the
59 first option passed to IPython (it will have no effect in any
59 first option passed to IPython (it will have no effect in any
60 other position). They provide threading support for the GTK, QT
60 other position). They provide threading support for the GTK, QT
61 and WXWidgets toolkits, and for the matplotlib library.
61 and WXWidgets toolkits, and for the matplotlib library.
62
62
63 With any of the first three options, IPython starts running a
63 With any of the first three options, IPython starts running a
64 separate thread for the graphical toolkit's operation, so that
64 separate thread for the graphical toolkit's operation, so that
65 you can open and control graphical elements from within an
65 you can open and control graphical elements from within an
66 IPython command line, without blocking. All three provide
66 IPython command line, without blocking. All three provide
67 essentially the same functionality, respectively for GTK, QT and
67 essentially the same functionality, respectively for GTK, QT and
68 WXWidgets (via their Python interfaces).
68 WXWidgets (via their Python interfaces).
69
69
70 Note that with -wthread, you can additionally use the -wxversion
70 Note that with -wthread, you can additionally use the -wxversion
71 option to request a specific version of wx to be used. This
71 option to request a specific version of wx to be used. This
72 requires that you have the 'wxversion' Python module installed,
72 requires that you have the 'wxversion' Python module installed,
73 which is part of recent wxPython distributions.
73 which is part of recent wxPython distributions.
74
74
75 If -pylab is given, IPython loads special support for the mat-
75 If -pylab is given, IPython loads special support for the mat-
76 plotlib library (http://matplotlib.sourceforge.net), allowing
76 plotlib library (http://matplotlib.sourceforge.net), allowing
77 interactive usage of any of its backends as defined in the
77 interactive usage of any of its backends as defined in the
78 user's .matplotlibrc file. It automatically activates GTK, QT
78 user's .matplotlibrc file. It automatically activates GTK, QT
79 or WX threading for IPyhton if the choice of matplotlib backend
79 or WX threading for IPyhton if the choice of matplotlib backend
80 requires it. It also modifies the %run command to correctly
80 requires it. It also modifies the %run command to correctly
81 execute (without blocking) any matplotlib-based script which
81 execute (without blocking) any matplotlib-based script which
82 calls show() at the end.
82 calls show() at the end.
83
83
84 -tk The -g/q/wthread options, and -pylab (if matplotlib is
84 -tk The -g/q/wthread options, and -pylab (if matplotlib is
85 configured to use GTK, QT or WX), will normally block Tk
85 configured to use GTK, QT or WX), will normally block Tk
86 graphical interfaces. This means that when GTK, QT or WX
86 graphical interfaces. This means that when GTK, QT or WX
87 threading is active, any attempt to open a Tk GUI will result in
87 threading is active, any attempt to open a Tk GUI will result in
88 a dead window, and possibly cause the Python interpreter to
88 a dead window, and possibly cause the Python interpreter to
89 crash. An extra option, -tk, is available to address this
89 crash. An extra option, -tk, is available to address this
90 issue. It can ONLY be given as a SECOND option after any of the
90 issue. It can ONLY be given as a SECOND option after any of the
91 above (-gthread, -qthread, -wthread or -pylab).
91 above (-gthread, -qthread, -wthread or -pylab).
92
92
93 If -tk is given, IPython will try to coordinate Tk threading
93 If -tk is given, IPython will try to coordinate Tk threading
94 with GTK, QT or WX. This is however potentially unreliable, and
94 with GTK, QT or WX. This is however potentially unreliable, and
95 you will have to test on your platform and Python configuration
95 you will have to test on your platform and Python configuration
96 to determine whether it works for you. Debian users have
96 to determine whether it works for you. Debian users have
97 reported success, apparently due to the fact that Debian builds
97 reported success, apparently due to the fact that Debian builds
98 all of Tcl, Tk, Tkinter and Python with pthreads support. Under
98 all of Tcl, Tk, Tkinter and Python with pthreads support. Under
99 other Linux environments (such as Fedora Core 2/3), this option
99 other Linux environments (such as Fedora Core 2/3), this option
100 has caused random crashes and lockups of the Python interpreter.
100 has caused random crashes and lockups of the Python interpreter.
101 Under other operating systems (Mac OSX and Windows), you'll need
101 Under other operating systems (Mac OSX and Windows), you'll need
102 to try it to find out, since currently no user reports are
102 to try it to find out, since currently no user reports are
103 available.
103 available.
104
104
105 There is unfortunately no way for IPython to determine at run-
105 There is unfortunately no way for IPython to determine at run-
106 time whether -tk will work reliably or not, so you will need to
106 time whether -tk will work reliably or not, so you will need to
107 do some experiments before relying on it for regular work.
107 do some experiments before relying on it for regular work.
108
108
109 A WARNING ABOUT SIGNALS AND THREADS
109 A WARNING ABOUT SIGNALS AND THREADS
110
110
111 When any of the thread systems (GTK, QT or WX) are active, either
111 When any of the thread systems (GTK, QT or WX) are active, either
112 directly or via -pylab with a threaded backend, it is impossible to
112 directly or via -pylab with a threaded backend, it is impossible to
113 interrupt long-running Python code via Ctrl-C. IPython can not pass
113 interrupt long-running Python code via Ctrl-C. IPython can not pass
114 the KeyboardInterrupt exception (or the underlying SIGINT) across
114 the KeyboardInterrupt exception (or the underlying SIGINT) across
115 threads, so any long-running process started from IPython will run to
115 threads, so any long-running process started from IPython will run to
116 completion, or will have to be killed via an external (OS-based)
116 completion, or will have to be killed via an external (OS-based)
117 mechanism.
117 mechanism.
118
118
119 To the best of my knowledge, this limitation is imposed by the Python
119 To the best of my knowledge, this limitation is imposed by the Python
120 interpreter itself, and it comes from the difficulty of writing
120 interpreter itself, and it comes from the difficulty of writing
121 portable signal/threaded code. If any user is an expert on this topic
121 portable signal/threaded code. If any user is an expert on this topic
122 and can suggest a better solution, I would love to hear about it. In
122 and can suggest a better solution, I would love to hear about it. In
123 the IPython sources, look at the Shell.py module, and in particular at
123 the IPython sources, look at the Shell.py module, and in particular at
124 the runcode() method.
124 the runcode() method.
125
125
126 REGULAR OPTIONS
126 REGULAR OPTIONS
127 After the above threading options have been given, regular options can
127 After the above threading options have been given, regular options can
128 follow in any order. All options can be abbreviated to their shortest
128 follow in any order. All options can be abbreviated to their shortest
129 non-ambiguous form and are case-sensitive. One or two dashes can be
129 non-ambiguous form and are case-sensitive. One or two dashes can be
130 used. Some options have an alternate short form, indicated after a |.
130 used. Some options have an alternate short form, indicated after a |.
131
131
132 Most options can also be set from your ipythonrc configuration file.
132 Most options can also be set from your ipythonrc configuration file.
133 See the provided examples for assistance. Options given on the comman-
133 See the provided examples for assistance. Options given on the comman-
134 dline override the values set in the ipythonrc file.
134 dline override the values set in the ipythonrc file.
135
135
136 All options with a [no] prepended can be specified in negated form
136 All options with a [no] prepended can be specified in negated form
137 (using -nooption instead of -option) to turn the feature off.
137 (using -nooption instead of -option) to turn the feature off.
138
138
139 -h, --help
139 -h, --help
140 Show summary of options.
140 Show summary of options.
141
141
142 -pylab This can only be given as the first option passed to IPython (it
142 -pylab This can only be given as the first option passed to IPython (it
143 will have no effect in any other position). It adds special sup-
143 will have no effect in any other position). It adds special sup-
144 port for the matplotlib library (http://matplotlib.source-
144 port for the matplotlib library (http://matplotlib.source-
145 forge.net), allowing interactive usage of any of its backends as
145 forge.net), allowing interactive usage of any of its backends as
146 defined in the user’s .matplotlibrc file. It automatically
146 defined in the user’s .matplotlibrc file. It automatically
147 activates GTK or WX threading for IPyhton if the choice of mat-
147 activates GTK or WX threading for IPyhton if the choice of mat-
148 plotlib backend requires it. It also modifies the @run command
148 plotlib backend requires it. It also modifies the @run command
149 to correctly execute (without blocking) any matplotlib-based
149 to correctly execute (without blocking) any matplotlib-based
150 script which calls show() at the end.
150 script which calls show() at the end.
151
151
152 -autocall <val>
152 -autocall <val>
153 Make IPython automatically call any callable object even if you
153 Make IPython automatically call any callable object even if you
154 didn't type explicit parentheses. For example, 'str 43' becomes
154 didn't type explicit parentheses. For example, 'str 43' becomes
155 'str(43)' automatically. The value can be '0' to disable the
155 'str(43)' automatically. The value can be '0' to disable the
156 feature, '1' for 'smart' autocall, where it is not applied if
156 feature, '1' for 'smart' autocall, where it is not applied if
157 there are no more arguments on the line, and '2' for 'full'
157 there are no more arguments on the line, and '2' for 'full'
158 autocall, where all callable objects are automatically called
158 autocall, where all callable objects are automatically called
159 (even if no arguments are present). The default is '1'.
159 (even if no arguments are present). The default is '1'.
160
160
161 -[no]autoindent
161 -[no]autoindent
162 Turn automatic indentation on/off.
162 Turn automatic indentation on/off.
163
163
164 -[no]automagic
164 -[no]automagic
165 Make magic commands automatic (without needing their first char-
165 Make magic commands automatic (without needing their first char-
166 acter to be %). Type %magic at the IPython prompt for more
166 acter to be %). Type %magic at the IPython prompt for more
167 information.
167 information.
168
168
169 -[no]autoedit_syntax
169 -[no]autoedit_syntax
170 When a syntax error occurs after editing a file, automatically
170 When a syntax error occurs after editing a file, automatically
171 open the file to the trouble causing line for convenient fixing.
171 open the file to the trouble causing line for convenient fixing.
172
172
173 -[no]banner
173 -[no]banner
174 Print the intial information banner (default on).
174 Print the intial information banner (default on).
175
175
176 -c <command>
176 -c <command>
177 Execute the given command string, and set sys.argv to [’c’].
177 Execute the given command string, and set sys.argv to [’c’].
178 This is similar to the -c option in the normal Python inter-
178 This is similar to the -c option in the normal Python inter-
179 preter.
179 preter.
180
180
181 -cache_size|cs <n>
181 -cache_size|cs <n>
182 Size of the output cache (maximum number of entries to hold in
182 Size of the output cache (maximum number of entries to hold in
183 memory). The default is 1000, you can change it permanently in
183 memory). The default is 1000, you can change it permanently in
184 your config file. Setting it to 0 completely disables the
184 your config file. Setting it to 0 completely disables the
185 caching system, and the minimum value accepted is 20 (if you
185 caching system, and the minimum value accepted is 20 (if you
186 provide a value less than 20, it is reset to 0 and a warning is
186 provide a value less than 20, it is reset to 0 and a warning is
187 issued). This limit is defined because otherwise you’ll spend
187 issued). This limit is defined because otherwise you’ll spend
188 more time re-flushing a too small cache than working.
188 more time re-flushing a too small cache than working.
189
189
190 -classic|cl
190 -classic|cl
191 Gives IPython a similar feel to the classic Python prompt.
191 Gives IPython a similar feel to the classic Python prompt.
192
192
193 -colors <scheme>
193 -colors <scheme>
194 Color scheme for prompts and exception reporting. Currently
194 Color scheme for prompts and exception reporting. Currently
195 implemented: NoColor, Linux, and LightBG.
195 implemented: NoColor, Linux, and LightBG.
196
196
197 -[no]color_info
197 -[no]color_info
198 IPython can display information about objects via a set of func-
198 IPython can display information about objects via a set of func-
199 tions, and optionally can use colors for this, syntax highlight-
199 tions, and optionally can use colors for this, syntax highlight-
200 ing source code and various other elements. However, because
200 ing source code and various other elements. However, because
201 this information is passed through a pager (like ’less’) and
201 this information is passed through a pager (like ’less’) and
202 many pagers get confused with color codes, this option is off by
202 many pagers get confused with color codes, this option is off by
203 default. You can test it and turn it on permanently in your
203 default. You can test it and turn it on permanently in your
204 ipythonrc file if it works for you. As a reference, the ’less’
204 ipythonrc file if it works for you. As a reference, the ’less’
205 pager supplied with Mandrake 8.2 works ok, but that in RedHat
205 pager supplied with Mandrake 8.2 works ok, but that in RedHat
206 7.2 doesn’t.
206 7.2 doesn’t.
207
207
208 Test it and turn it on permanently if it works with your system.
208 Test it and turn it on permanently if it works with your system.
209 The magic function @color_info allows you to toggle this inter-
209 The magic function @color_info allows you to toggle this inter-
210 actively for testing.
210 actively for testing.
211
211
212 -[no]confirm_exit
212 -[no]confirm_exit
213 Set to confirm when you try to exit IPython with an EOF (Con-
213 Set to confirm when you try to exit IPython with an EOF (Con-
214 trol-D in Unix, Control-Z/Enter in Windows). Note that using the
214 trol-D in Unix, Control-Z/Enter in Windows). Note that using the
215 magic functions @Exit or @Quit you can force a direct exit,
215 magic functions @Exit or @Quit you can force a direct exit,
216 bypassing any confirmation.
216 bypassing any confirmation.
217
217
218 -[no]debug
218 -[no]debug
219 Show information about the loading process. Very useful to pin
219 Show information about the loading process. Very useful to pin
220 down problems with your configuration files or to get details
220 down problems with your configuration files or to get details
221 about session restores.
221 about session restores.
222
222
223 -[no]deep_reload
223 -[no]deep_reload
224 IPython can use the deep_reload module which reloads changes in
224 IPython can use the deep_reload module which reloads changes in
225 modules recursively (it replaces the reload() function, so you
225 modules recursively (it replaces the reload() function, so you
226 don’t need to change anything to use it). deep_reload() forces a
226 don’t need to change anything to use it). deep_reload() forces a
227 full reload of modules whose code may have changed, which the
227 full reload of modules whose code may have changed, which the
228 default reload() function does not.
228 default reload() function does not.
229
229
230 When deep_reload is off, IPython will use the normal reload(),
230 When deep_reload is off, IPython will use the normal reload(),
231 but deep_reload will still be available as dreload(). This fea-
231 but deep_reload will still be available as dreload(). This fea-
232 ture is off by default [which means that you have both normal
232 ture is off by default [which means that you have both normal
233 reload() and dreload()].
233 reload() and dreload()].
234
234
235 -editor <name>
235 -editor <name>
236 Which editor to use with the @edit command. By default, IPython
236 Which editor to use with the @edit command. By default, IPython
237 will honor your EDITOR environment variable (if not set, vi is
237 will honor your EDITOR environment variable (if not set, vi is
238 the Unix default and notepad the Windows one). Since this editor
238 the Unix default and notepad the Windows one). Since this editor
239 is invoked on the fly by IPython and is meant for editing small
239 is invoked on the fly by IPython and is meant for editing small
240 code snippets, you may want to use a small, lightweight editor
240 code snippets, you may want to use a small, lightweight editor
241 here (in case your default EDITOR is something like Emacs).
241 here (in case your default EDITOR is something like Emacs).
242
242
243 -ipythondir <name>
243 -ipythondir <name>
244 The name of your IPython configuration directory IPYTHONDIR.
244 The name of your IPython configuration directory IPYTHONDIR.
245 This can also be specified through the environment variable
245 This can also be specified through the environment variable
246 IPYTHONDIR.
246 IPYTHONDIR.
247
247
248 -log|l Generate a log file of all input. The file is named
248 -log|l Generate a log file of all input. The file is named
249 ipython_log.py in your current directory (which prevents logs
249 ipython_log.py in your current directory (which prevents logs
250 from multiple IPython sessions from trampling each other). You
250 from multiple IPython sessions from trampling each other). You
251 can use this to later restore a session by loading your logfile
251 can use this to later restore a session by loading your logfile
252 as a file to be executed with option -logplay (see below).
252 as a file to be executed with option -logplay (see below).
253
253
254 -logfile|lf
254 -logfile|lf
255 Specify the name of your logfile.
255 Specify the name of your logfile.
256
256
257 -logplay|lp
257 -logplay|lp
258 Replay a previous log. For restoring a session as close as pos-
258 Replay a previous log. For restoring a session as close as pos-
259 sible to the state you left it in, use this option (don’t just
259 sible to the state you left it in, use this option (don’t just
260 run the logfile). With -logplay, IPython will try to reconstruct
260 run the logfile). With -logplay, IPython will try to reconstruct
261 the previous working environment in full, not just execute the
261 the previous working environment in full, not just execute the
262 commands in the logfile.
262 commands in the logfile.
263 When a session is restored, logging is automatically turned on
263 When a session is restored, logging is automatically turned on
264 again with the name of the logfile it was invoked with (it is
264 again with the name of the logfile it was invoked with (it is
265 read from the log header). So once you’ve turned logging on for
265 read from the log header). So once you’ve turned logging on for
266 a session, you can quit IPython and reload it as many times as
266 a session, you can quit IPython and reload it as many times as
267 you want and it will continue to log its history and restore
267 you want and it will continue to log its history and restore
268 from the beginning every time.
268 from the beginning every time.
269
269
270 Caveats: there are limitations in this option. The history vari-
270 Caveats: there are limitations in this option. The history vari-
271 ables _i*,_* and _dh don’t get restored properly. In the future
271 ables _i*,_* and _dh don’t get restored properly. In the future
272 we will try to implement full session saving by writing and
272 we will try to implement full session saving by writing and
273 retrieving a failed because of inherent limitations of Python’s
273 retrieving a failed because of inherent limitations of Python’s
274 Pickle module, so this may have to wait.
274 Pickle module, so this may have to wait.
275
275
276 -[no]messages
276 -[no]messages
277 Print messages which IPython collects about its startup process
277 Print messages which IPython collects about its startup process
278 (default on).
278 (default on).
279
279
280 -[no]pdb
280 -[no]pdb
281 Automatically call the pdb debugger after every uncaught excep-
281 Automatically call the pdb debugger after every uncaught excep-
282 tion. If you are used to debugging using pdb, this puts you
282 tion. If you are used to debugging using pdb, this puts you
283 automatically inside of it after any call (either in IPython or
283 automatically inside of it after any call (either in IPython or
284 in code called by it) which triggers an exception which goes
284 in code called by it) which triggers an exception which goes
285 uncaught.
285 uncaught.
286
286
287 -[no]pprint
287 -[no]pprint
288 IPython can optionally use the pprint (pretty printer) module
288 IPython can optionally use the pprint (pretty printer) module
289 for displaying results. pprint tends to give a nicer display of
289 for displaying results. pprint tends to give a nicer display of
290 nested data structures. If you like it, you can turn it on per-
290 nested data structures. If you like it, you can turn it on per-
291 manently in your config file (default off).
291 manently in your config file (default off).
292
292
293 -profile|p <name>
293 -profile|p <name>
294 Assume that your config file is ipythonrc-<name> (looks in cur-
294 Assume that your config file is ipythonrc-<name> (looks in cur-
295 rent dir first, then in IPYTHONDIR). This is a quick way to keep
295 rent dir first, then in IPYTHONDIR). This is a quick way to keep
296 and load multiple config files for different tasks, especially
296 and load multiple config files for different tasks, especially
297 if you use the include option of config files. You can keep a
297 if you use the include option of config files. You can keep a
298 basic IPYTHONDIR/ipythonrc file and then have other ’profiles’
298 basic IPYTHONDIR/ipythonrc file and then have other ’profiles’
299 which include this one and load extra things for particular
299 which include this one and load extra things for particular
300 tasks. For example:
300 tasks. For example:
301
301
302 1) $HOME/.ipython/ipythonrc : load basic things you always want.
302 1) $HOME/.ipython/ipythonrc : load basic things you always want.
303 2) $HOME/.ipython/ipythonrc-math : load (1) and basic math-
303 2) $HOME/.ipython/ipythonrc-math : load (1) and basic math-
304 related modules.
304 related modules.
305 3) $HOME/.ipython/ipythonrc-numeric : load (1) and Numeric and
305 3) $HOME/.ipython/ipythonrc-numeric : load (1) and Numeric and
306 plotting modules.
306 plotting modules.
307
307
308 Since it is possible to create an endless loop by having circu-
308 Since it is possible to create an endless loop by having circu-
309 lar file inclusions, IPython will stop if it reaches 15 recur-
309 lar file inclusions, IPython will stop if it reaches 15 recur-
310 sive inclusions.
310 sive inclusions.
311
311
312 -prompt_in1|pi1 <string>
312 -prompt_in1|pi1 <string>
313 Specify the string used for input prompts. Note that if you are
313 Specify the string used for input prompts. Note that if you are
314 using numbered prompts, the number is represented with a ’\#’ in
314 using numbered prompts, the number is represented with a ’\#’ in
315 the string. Don’t forget to quote strings with spaces embedded
315 the string. Don’t forget to quote strings with spaces embedded
316 in them. Default: ’In [\#]:’.
316 in them. Default: ’In [\#]:’.
317
317
318 Most bash-like escapes can be used to customize IPython’s
318 Most bash-like escapes can be used to customize IPython’s
319 prompts, as well as a few additional ones which are IPython-spe-
319 prompts, as well as a few additional ones which are IPython-spe-
320 cific. All valid prompt escapes are described in detail in the
320 cific. All valid prompt escapes are described in detail in the
321 Customization section of the IPython HTML/PDF manual.
321 Customization section of the IPython HTML/PDF manual.
322
322
323 -prompt_in2|pi2 <string>
323 -prompt_in2|pi2 <string>
324 Similar to the previous option, but used for the continuation
324 Similar to the previous option, but used for the continuation
325 prompts. The special sequence ’\D’ is similar to ’\#’, but with
325 prompts. The special sequence ’\D’ is similar to ’\#’, but with
326 all digits replaced dots (so you can have your continuation
326 all digits replaced dots (so you can have your continuation
327 prompt aligned with your input prompt). Default: ’ .\D.:’
327 prompt aligned with your input prompt). Default: ’ .\D.:’
328 (note three spaces at the start for alignment with ’In [\#]’).
328 (note three spaces at the start for alignment with ’In [\#]’).
329
329
330 -prompt_out|po <string>
330 -prompt_out|po <string>
331 String used for output prompts, also uses numbers like
331 String used for output prompts, also uses numbers like
332 prompt_in1. Default: ’Out[\#]:’.
332 prompt_in1. Default: ’Out[\#]:’.
333
333
334 -quick Start in bare bones mode (no config file loaded).
334 -quick Start in bare bones mode (no config file loaded).
335
335
336 -rcfile <name>
336 -rcfile <name>
337 Name of your IPython resource configuration file. normally
337 Name of your IPython resource configuration file. normally
338 IPython loads ipythonrc (from current directory) or
338 IPython loads ipythonrc (from current directory) or
339 IPYTHONDIR/ipythonrc. If the loading of your config file fails,
339 IPYTHONDIR/ipythonrc. If the loading of your config file fails,
340 IPython starts with a bare bones configuration (no modules
340 IPython starts with a bare bones configuration (no modules
341 loaded at all).
341 loaded at all).
342
342
343 -[no]readline
343 -[no]readline
344 Use the readline library, which is needed to support name com-
344 Use the readline library, which is needed to support name com-
345 pletion and command history, among other things. It is enabled
345 pletion and command history, among other things. It is enabled
346 by default, but may cause problems for users of X/Emacs in
346 by default, but may cause problems for users of X/Emacs in
347 Python comint or shell buffers.
347 Python comint or shell buffers.
348
348
349 Note that emacs ’eterm’ buffers (opened with M-x term) support
349 Note that emacs ’eterm’ buffers (opened with M-x term) support
350 IPython’s readline and syntax coloring fine, only ’emacs’ (M-x
350 IPython’s readline and syntax coloring fine, only ’emacs’ (M-x
351 shell and C-c !) buffers do not.
351 shell and C-c !) buffers do not.
352
352
353 -screen_length|sl <n>
353 -screen_length|sl <n>
354 Number of lines of your screen. This is used to control print-
354 Number of lines of your screen. This is used to control print-
355 ing of very long strings. Strings longer than this number of
355 ing of very long strings. Strings longer than this number of
356 lines will be sent through a pager instead of directly printed.
356 lines will be sent through a pager instead of directly printed.
357
357
358 The default value for this is 0, which means IPython will auto-
358 The default value for this is 0, which means IPython will auto-
359 detect your screen size every time it needs to print certain
359 detect your screen size every time it needs to print certain
360 potentially long strings (this doesn’t change the behavior of
360 potentially long strings (this doesn’t change the behavior of
361 the ’print’ keyword, it’s only triggered internally). If for
361 the ’print’ keyword, it’s only triggered internally). If for
362 some reason this isn’t working well (it needs curses support),
362 some reason this isn’t working well (it needs curses support),
363 specify it yourself. Otherwise don’t change the default.
363 specify it yourself. Otherwise don’t change the default.
364
364
365 -separate_in|si <string>
365 -separate_in|si <string>
366 Separator before input prompts. Default ’0.
366 Separator before input prompts. Default ’0.
367
367
368 -separate_out|so <string>
368 -separate_out|so <string>
369 Separator before output prompts. Default: 0 (nothing).
369 Separator before output prompts. Default: 0 (nothing).
370
370
371 -separate_out2|so2 <string>
371 -separate_out2|so2 <string>
372 Separator after output prompts. Default: 0 (nothing).
372 Separator after output prompts. Default: 0 (nothing).
373
373
374 -nosep Shorthand for ’-separate_in 0 -separate_out 0 -separate_out2 0’.
374 -nosep Shorthand for ’-separate_in 0 -separate_out 0 -separate_out2 0’.
375 Simply removes all input/output separators.
375 Simply removes all input/output separators.
376
376
377 -upgrade
377 -upgrade
378 Allows you to upgrade your IPYTHONDIR configuration when you
378 Allows you to upgrade your IPYTHONDIR configuration when you
379 install a new version of IPython. Since new versions may
379 install a new version of IPython. Since new versions may
380 include new command lines options or example files, this copies
380 include new command lines options or example files, this copies
381 updated ipythonrc-type files. However, it backs up (with a .old
381 updated ipythonrc-type files. However, it backs up (with a .old
382 extension) all files which it overwrites so that you can merge
382 extension) all files which it overwrites so that you can merge
383 back any custimizations you might have in your personal files.
383 back any custimizations you might have in your personal files.
384
384
385 -Version
385 -Version
386 Print version information and exit.
386 Print version information and exit.
387
387
388 -wxversion <string>
388 -wxversion <string>
389 Select a specific version of wxPython (used in conjunction with
389 Select a specific version of wxPython (used in conjunction with
390 -wthread). Requires the wxversion module, part of recent
390 -wthread). Requires the wxversion module, part of recent
391 wxPython distributions.
391 wxPython distributions.
392
392
393 -xmode <modename>
393 -xmode <modename>
394 Mode for exception reporting. The valid modes are Plain, Con-
394 Mode for exception reporting. The valid modes are Plain, Con-
395 text, and Verbose.
395 text, and Verbose.
396
396
397 - Plain: similar to python’s normal traceback printing.
397 - Plain: similar to python’s normal traceback printing.
398
398
399 - Context: prints 5 lines of context source code around each
399 - Context: prints 5 lines of context source code around each
400 line in the traceback.
400 line in the traceback.
401
401
402 - Verbose: similar to Context, but additionally prints the vari-
402 - Verbose: similar to Context, but additionally prints the vari-
403 ables currently visible where the exception happened (shortening
403 ables currently visible where the exception happened (shortening
404 their strings if too long). This can potentially be very slow,
404 their strings if too long). This can potentially be very slow,
405 if you happen to have a huge data structure whose string repre-
405 if you happen to have a huge data structure whose string repre-
406 sentation is complex to compute. Your computer may appear to
406 sentation is complex to compute. Your computer may appear to
407 freeze for a while with cpu usage at 100%. If this occurs, you
407 freeze for a while with cpu usage at 100%. If this occurs, you
408 can cancel the traceback with Ctrl-C (maybe hitting it more than
408 can cancel the traceback with Ctrl-C (maybe hitting it more than
409 once).
409 once).
410
410
411
411
412 EMBEDDING
412 EMBEDDING
413 It is possible to start an IPython instance inside your own Python pro-
413 It is possible to start an IPython instance inside your own Python pro-
414 grams. In the documentation example files there are some illustrations
414 grams. In the documentation example files there are some illustrations
415 on how to do this.
415 on how to do this.
416
416
417 This feature allows you to evalutate dynamically the state of your
417 This feature allows you to evalutate dynamically the state of your
418 code, operate with your variables, analyze them, etc. Note however
418 code, operate with your variables, analyze them, etc. Note however
419 that any changes you make to values while in the shell do NOT propagate
419 that any changes you make to values while in the shell do NOT propagate
420 back to the running code, so it is safe to modify your values because
420 back to the running code, so it is safe to modify your values because
421 you won’t break your code in bizarre ways by doing so.
421 you won’t break your code in bizarre ways by doing so.
422 """
422 """
423
423
424 cmd_line_usage = __doc__
424 cmd_line_usage = __doc__
425
425
426 #---------------------------------------------------------------------------
426 #---------------------------------------------------------------------------
427 interactive_usage = """
427 interactive_usage = """
428 IPython -- An enhanced Interactive Python
428 IPython -- An enhanced Interactive Python
429 =========================================
429 =========================================
430
430
431 IPython offers a combination of convenient shell features, special commands
431 IPython offers a combination of convenient shell features, special commands
432 and a history mechanism for both input (command history) and output (results
432 and a history mechanism for both input (command history) and output (results
433 caching, similar to Mathematica). It is intended to be a fully compatible
433 caching, similar to Mathematica). It is intended to be a fully compatible
434 replacement for the standard Python interpreter, while offering vastly
434 replacement for the standard Python interpreter, while offering vastly
435 improved functionality and flexibility.
435 improved functionality and flexibility.
436
436
437 At your system command line, type 'ipython -help' to see the command line
437 At your system command line, type 'ipython -help' to see the command line
438 options available. This document only describes interactive features.
438 options available. This document only describes interactive features.
439
439
440 Warning: IPython relies on the existence of a global variable called __IP which
440 Warning: IPython relies on the existence of a global variable called __IP which
441 controls the shell itself. If you redefine __IP to anything, bizarre behavior
441 controls the shell itself. If you redefine __IP to anything, bizarre behavior
442 will quickly occur.
442 will quickly occur.
443
443
444 MAIN FEATURES
444 MAIN FEATURES
445
445
446 * Access to the standard Python help. As of Python 2.1, a help system is
446 * Access to the standard Python help. As of Python 2.1, a help system is
447 available with access to object docstrings and the Python manuals. Simply
447 available with access to object docstrings and the Python manuals. Simply
448 type 'help' (no quotes) to access it.
448 type 'help' (no quotes) to access it.
449
449
450 * Magic commands: type %magic for information on the magic subsystem.
450 * Magic commands: type %magic for information on the magic subsystem.
451
451
452 * System command aliases, via the %alias command or the ipythonrc config file.
452 * System command aliases, via the %alias command or the ipythonrc config file.
453
453
454 * Dynamic object information:
454 * Dynamic object information:
455
455
456 Typing ?word or word? prints detailed information about an object. If
456 Typing ?word or word? prints detailed information about an object. If
457 certain strings in the object are too long (docstrings, code, etc.) they get
457 certain strings in the object are too long (docstrings, code, etc.) they get
458 snipped in the center for brevity.
458 snipped in the center for brevity.
459
459
460 Typing ??word or word?? gives access to the full information without
460 Typing ??word or word?? gives access to the full information without
461 snipping long strings. Long strings are sent to the screen through the less
461 snipping long strings. Long strings are sent to the screen through the less
462 pager if longer than the screen, printed otherwise.
462 pager if longer than the screen, printed otherwise.
463
463
464 The ?/?? system gives access to the full source code for any object (if
464 The ?/?? system gives access to the full source code for any object (if
465 available), shows function prototypes and other useful information.
465 available), shows function prototypes and other useful information.
466
466
467 If you just want to see an object's docstring, type '%pdoc object' (without
467 If you just want to see an object's docstring, type '%pdoc object' (without
468 quotes, and without % if you have automagic on).
468 quotes, and without % if you have automagic on).
469
469
470 Both %pdoc and ?/?? give you access to documentation even on things which are
470 Both %pdoc and ?/?? give you access to documentation even on things which are
471 not explicitely defined. Try for example typing {}.get? or after import os,
471 not explicitely defined. Try for example typing {}.get? or after import os,
472 type os.path.abspath??. The magic functions %pdef, %source and %file operate
472 type os.path.abspath??. The magic functions %pdef, %source and %file operate
473 similarly.
473 similarly.
474
474
475 * Completion in the local namespace, by typing TAB at the prompt.
475 * Completion in the local namespace, by typing TAB at the prompt.
476
476
477 At any time, hitting tab will complete any available python commands or
477 At any time, hitting tab will complete any available python commands or
478 variable names, and show you a list of the possible completions if there's
478 variable names, and show you a list of the possible completions if there's
479 no unambiguous one. It will also complete filenames in the current directory.
479 no unambiguous one. It will also complete filenames in the current directory.
480
480
481 This feature requires the readline and rlcomplete modules, so it won't work
481 This feature requires the readline and rlcomplete modules, so it won't work
482 if your Python lacks readline support (such as under Windows).
482 if your Python lacks readline support (such as under Windows).
483
483
484 * Search previous command history in two ways (also requires readline):
484 * Search previous command history in two ways (also requires readline):
485
485
486 - Start typing, and then use Ctrl-p (previous,up) and Ctrl-n (next,down) to
486 - Start typing, and then use Ctrl-p (previous,up) and Ctrl-n (next,down) to
487 search through only the history items that match what you've typed so
487 search through only the history items that match what you've typed so
488 far. If you use Ctrl-p/Ctrl-n at a blank prompt, they just behave like
488 far. If you use Ctrl-p/Ctrl-n at a blank prompt, they just behave like
489 normal arrow keys.
489 normal arrow keys.
490
490
491 - Hit Ctrl-r: opens a search prompt. Begin typing and the system searches
491 - Hit Ctrl-r: opens a search prompt. Begin typing and the system searches
492 your history for lines that match what you've typed so far, completing as
492 your history for lines that match what you've typed so far, completing as
493 much as it can.
493 much as it can.
494
494
495 * Persistent command history across sessions (readline required).
495 * Persistent command history across sessions (readline required).
496
496
497 * Logging of input with the ability to save and restore a working session.
497 * Logging of input with the ability to save and restore a working session.
498
498
499 * System escape with !. Typing !ls will run 'ls' in the current directory.
499 * System escape with !. Typing !ls will run 'ls' in the current directory.
500
500
501 * The reload command does a 'deep' reload of a module: changes made to the
501 * The reload command does a 'deep' reload of a module: changes made to the
502 module since you imported will actually be available without having to exit.
502 module since you imported will actually be available without having to exit.
503
503
504 * Verbose and colored exception traceback printouts. See the magic xmode and
504 * Verbose and colored exception traceback printouts. See the magic xmode and
505 xcolor functions for details (just type %magic).
505 xcolor functions for details (just type %magic).
506
506
507 * Input caching system:
507 * Input caching system:
508
508
509 IPython offers numbered prompts (In/Out) with input and output caching. All
509 IPython offers numbered prompts (In/Out) with input and output caching. All
510 input is saved and can be retrieved as variables (besides the usual arrow
510 input is saved and can be retrieved as variables (besides the usual arrow
511 key recall).
511 key recall).
512
512
513 The following GLOBAL variables always exist (so don't overwrite them!):
513 The following GLOBAL variables always exist (so don't overwrite them!):
514 _i: stores previous input.
514 _i: stores previous input.
515 _ii: next previous.
515 _ii: next previous.
516 _iii: next-next previous.
516 _iii: next-next previous.
517 _ih : a list of all input _ih[n] is the input from line n.
517 _ih : a list of all input _ih[n] is the input from line n.
518
518
519 Additionally, global variables named _i<n> are dynamically created (<n>
519 Additionally, global variables named _i<n> are dynamically created (<n>
520 being the prompt counter), such that _i<n> == _ih[<n>]
520 being the prompt counter), such that _i<n> == _ih[<n>]
521
521
522 For example, what you typed at prompt 14 is available as _i14 and _ih[14].
522 For example, what you typed at prompt 14 is available as _i14 and _ih[14].
523
523
524 You can create macros which contain multiple input lines from this history,
524 You can create macros which contain multiple input lines from this history,
525 for later re-execution, with the %macro function.
525 for later re-execution, with the %macro function.
526
526
527 The history function %hist allows you to see any part of your input history
527 The history function %hist allows you to see any part of your input history
528 by printing a range of the _i variables. Note that inputs which contain
528 by printing a range of the _i variables. Note that inputs which contain
529 magic functions (%) appear in the history with a prepended comment. This is
529 magic functions (%) appear in the history with a prepended comment. This is
530 because they aren't really valid Python code, so you can't exec them.
530 because they aren't really valid Python code, so you can't exec them.
531
531
532 * Output caching system:
532 * Output caching system:
533
533
534 For output that is returned from actions, a system similar to the input
534 For output that is returned from actions, a system similar to the input
535 cache exists but using _ instead of _i. Only actions that produce a result
535 cache exists but using _ instead of _i. Only actions that produce a result
536 (NOT assignments, for example) are cached. If you are familiar with
536 (NOT assignments, for example) are cached. If you are familiar with
537 Mathematica, IPython's _ variables behave exactly like Mathematica's %
537 Mathematica, IPython's _ variables behave exactly like Mathematica's %
538 variables.
538 variables.
539
539
540 The following GLOBAL variables always exist (so don't overwrite them!):
540 The following GLOBAL variables always exist (so don't overwrite them!):
541 _ (one underscore): previous output.
541 _ (one underscore): previous output.
542 __ (two underscores): next previous.
542 __ (two underscores): next previous.
543 ___ (three underscores): next-next previous.
543 ___ (three underscores): next-next previous.
544
544
545 Global variables named _<n> are dynamically created (<n> being the prompt
545 Global variables named _<n> are dynamically created (<n> being the prompt
546 counter), such that the result of output <n> is always available as _<n>.
546 counter), such that the result of output <n> is always available as _<n>.
547
547
548 Finally, a global dictionary named _oh exists with entries for all lines
548 Finally, a global dictionary named _oh exists with entries for all lines
549 which generated output.
549 which generated output.
550
550
551 * Directory history:
551 * Directory history:
552
552
553 Your history of visited directories is kept in the global list _dh, and the
553 Your history of visited directories is kept in the global list _dh, and the
554 magic %cd command can be used to go to any entry in that list.
554 magic %cd command can be used to go to any entry in that list.
555
555
556 * Auto-parentheses and auto-quotes (adapted from Nathan Gray's LazyPython)
556 * Auto-parentheses and auto-quotes (adapted from Nathan Gray's LazyPython)
557
557
558 1. Auto-parentheses
558 1. Auto-parentheses
559 Callable objects (i.e. functions, methods, etc) can be invoked like
559 Callable objects (i.e. functions, methods, etc) can be invoked like
560 this (notice the commas between the arguments):
560 this (notice the commas between the arguments):
561 >>> callable_ob arg1, arg2, arg3
561 >>> callable_ob arg1, arg2, arg3
562 and the input will be translated to this:
562 and the input will be translated to this:
563 --> callable_ob(arg1, arg2, arg3)
563 --> callable_ob(arg1, arg2, arg3)
564 You can force auto-parentheses by using '/' as the first character
564 You can force auto-parentheses by using '/' as the first character
565 of a line. For example:
565 of a line. For example:
566 >>> /globals # becomes 'globals()'
566 >>> /globals # becomes 'globals()'
567 Note that the '/' MUST be the first character on the line! This
567 Note that the '/' MUST be the first character on the line! This
568 won't work:
568 won't work:
569 >>> print /globals # syntax error
569 >>> print /globals # syntax error
570
570
571 In most cases the automatic algorithm should work, so you should
571 In most cases the automatic algorithm should work, so you should
572 rarely need to explicitly invoke /. One notable exception is if you
572 rarely need to explicitly invoke /. One notable exception is if you
573 are trying to call a function with a list of tuples as arguments (the
573 are trying to call a function with a list of tuples as arguments (the
574 parenthesis will confuse IPython):
574 parenthesis will confuse IPython):
575 In [1]: zip (1,2,3),(4,5,6) # won't work
575 In [1]: zip (1,2,3),(4,5,6) # won't work
576 but this will work:
576 but this will work:
577 In [2]: /zip (1,2,3),(4,5,6)
577 In [2]: /zip (1,2,3),(4,5,6)
578 ------> zip ((1,2,3),(4,5,6))
578 ------> zip ((1,2,3),(4,5,6))
579 Out[2]= [(1, 4), (2, 5), (3, 6)]
579 Out[2]= [(1, 4), (2, 5), (3, 6)]
580
580
581 IPython tells you that it has altered your command line by
581 IPython tells you that it has altered your command line by
582 displaying the new command line preceded by -->. e.g.:
582 displaying the new command line preceded by -->. e.g.:
583 In [18]: callable list
583 In [18]: callable list
584 -------> callable (list)
584 -------> callable (list)
585
585
586 2. Auto-Quoting
586 2. Auto-Quoting
587 You can force auto-quoting of a function's arguments by using ',' as
587 You can force auto-quoting of a function's arguments by using ',' as
588 the first character of a line. For example:
588 the first character of a line. For example:
589 >>> ,my_function /home/me # becomes my_function("/home/me")
589 >>> ,my_function /home/me # becomes my_function("/home/me")
590
590
591 If you use ';' instead, the whole argument is quoted as a single
591 If you use ';' instead, the whole argument is quoted as a single
592 string (while ',' splits on whitespace):
592 string (while ',' splits on whitespace):
593 >>> ,my_function a b c # becomes my_function("a","b","c")
593 >>> ,my_function a b c # becomes my_function("a","b","c")
594 >>> ;my_function a b c # becomes my_function("a b c")
594 >>> ;my_function a b c # becomes my_function("a b c")
595
595
596 Note that the ',' MUST be the first character on the line! This
596 Note that the ',' MUST be the first character on the line! This
597 won't work:
597 won't work:
598 >>> x = ,my_function /home/me # syntax error
598 >>> x = ,my_function /home/me # syntax error
599 """
599 """
600
601 quick_reference = r"""
602 IPython -- An enhanced Interactive Python - Quick Reference Card
603 ================================================================
604
605 obj?, obj??, ?obj,??obj : Get help, or more help for object
606 ?os.p* : List names in os starting with p
607
608 Example magic:
609
610 %alias d ls -F : 'd' is now an alias for 'ls -F'
611 alias d ls -F : Works if 'alias' not a python name
612 alist = %alias : Get list of aliases to 'alist'
613
614 System commands:
615
616 !cp a.txt b/ : System command escape, calls os.system()
617 cp a.txt b/ : after %rehash, most system commands work without !
618 cp ${f}.txt $bar : Variable expansion in magics and system commands
619 files = ls /usr : Capture sytem command output
620 files.s, files.l, files.n: "a b c", ['a','b','c'], 'a\nb\nc'
621 cd /usr/share : Obvious, also 'cd d:\home\_ipython' works
622
623 History:
624
625 _i, _ii, _iii : Previous, next previous, next next previous input
626 _ih[4], _ih[2:5] : Input history line 4, lines 2-4
627 _, __, ___ : previous, next previous, next next previous output
628 _dh : Directory history
629 _oh : Output history
630 %hist : Command history
631
632 Autocall:
633
634 f 1 2 : f(1,2)
635 ,f 1 2 : f("1","2")
636 ;f 1 2 : f("1 2")
637
638 """
639
640
@@ -1,5096 +1,5100 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
26
27 * usage.py, Magic.py: added %quickref
28
25 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
29 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
26
30
27 * IPython/demo.py (Demo.show): Flush stdout after each block, so
31 * IPython/demo.py (Demo.show): Flush stdout after each block, so
28 computationally intensive blocks don't appear to stall the demo.
32 computationally intensive blocks don't appear to stall the demo.
29
33
30 2006-01-24 Ville Vainio <vivainio@gmail.com>
34 2006-01-24 Ville Vainio <vivainio@gmail.com>
31
35
32 * iplib.py, hooks.py: 'result_display' hook can return a non-None
36 * iplib.py, hooks.py: 'result_display' hook can return a non-None
33 value to manipulate resulting history entry.
37 value to manipulate resulting history entry.
34
38
35 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
39 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
36 to instance methods of IPApi class, to make extending an embedded
40 to instance methods of IPApi class, to make extending an embedded
37 IPython feasible. See ext_rehashdir.py for example usage.
41 IPython feasible. See ext_rehashdir.py for example usage.
38
42
39 * Merged 1071-1076 from banches/0.7.1
43 * Merged 1071-1076 from banches/0.7.1
40
44
41
45
42 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
46 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
43
47
44 * tools/release (daystamp): Fix build tools to use the new
48 * tools/release (daystamp): Fix build tools to use the new
45 eggsetup.py script to build lightweight eggs.
49 eggsetup.py script to build lightweight eggs.
46
50
47 * Applied changesets 1062 and 1064 before 0.7.1 release.
51 * Applied changesets 1062 and 1064 before 0.7.1 release.
48
52
49 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
53 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
50 see the raw input history (without conversions like %ls ->
54 see the raw input history (without conversions like %ls ->
51 ipmagic("ls")). After a request from W. Stein, SAGE
55 ipmagic("ls")). After a request from W. Stein, SAGE
52 (http://modular.ucsd.edu/sage) developer. This information is
56 (http://modular.ucsd.edu/sage) developer. This information is
53 stored in the input_hist_raw attribute of the IPython instance, so
57 stored in the input_hist_raw attribute of the IPython instance, so
54 developers can access it if needed (it's an InputList instance).
58 developers can access it if needed (it's an InputList instance).
55
59
56 * Versionstring = 0.7.2.svn
60 * Versionstring = 0.7.2.svn
57
61
58 * eggsetup.py: A separate script for constructing eggs, creates
62 * eggsetup.py: A separate script for constructing eggs, creates
59 proper launch scripts even on Windows (an .exe file in
63 proper launch scripts even on Windows (an .exe file in
60 \python24\scripts).
64 \python24\scripts).
61
65
62 * ipapi.py: launch_new_instance, launch entry point needed for the
66 * ipapi.py: launch_new_instance, launch entry point needed for the
63 egg.
67 egg.
64
68
65 2006-01-23 Ville Vainio <vivainio@gmail.com>
69 2006-01-23 Ville Vainio <vivainio@gmail.com>
66
70
67 * Added %cpaste magic for pasting python code
71 * Added %cpaste magic for pasting python code
68
72
69 2006-01-22 Ville Vainio <vivainio@gmail.com>
73 2006-01-22 Ville Vainio <vivainio@gmail.com>
70
74
71 * Merge from branches/0.7.1 into trunk, revs 1052-1057
75 * Merge from branches/0.7.1 into trunk, revs 1052-1057
72
76
73 * Versionstring = 0.7.2.svn
77 * Versionstring = 0.7.2.svn
74
78
75 * eggsetup.py: A separate script for constructing eggs, creates
79 * eggsetup.py: A separate script for constructing eggs, creates
76 proper launch scripts even on Windows (an .exe file in
80 proper launch scripts even on Windows (an .exe file in
77 \python24\scripts).
81 \python24\scripts).
78
82
79 * ipapi.py: launch_new_instance, launch entry point needed for the
83 * ipapi.py: launch_new_instance, launch entry point needed for the
80 egg.
84 egg.
81
85
82 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
86 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
83
87
84 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
88 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
85 %pfile foo would print the file for foo even if it was a binary.
89 %pfile foo would print the file for foo even if it was a binary.
86 Now, extensions '.so' and '.dll' are skipped.
90 Now, extensions '.so' and '.dll' are skipped.
87
91
88 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
92 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
89 bug, where macros would fail in all threaded modes. I'm not 100%
93 bug, where macros would fail in all threaded modes. I'm not 100%
90 sure, so I'm going to put out an rc instead of making a release
94 sure, so I'm going to put out an rc instead of making a release
91 today, and wait for feedback for at least a few days.
95 today, and wait for feedback for at least a few days.
92
96
93 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
97 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
94 it...) the handling of pasting external code with autoindent on.
98 it...) the handling of pasting external code with autoindent on.
95 To get out of a multiline input, the rule will appear for most
99 To get out of a multiline input, the rule will appear for most
96 users unchanged: two blank lines or change the indent level
100 users unchanged: two blank lines or change the indent level
97 proposed by IPython. But there is a twist now: you can
101 proposed by IPython. But there is a twist now: you can
98 add/subtract only *one or two spaces*. If you add/subtract three
102 add/subtract only *one or two spaces*. If you add/subtract three
99 or more (unless you completely delete the line), IPython will
103 or more (unless you completely delete the line), IPython will
100 accept that line, and you'll need to enter a second one of pure
104 accept that line, and you'll need to enter a second one of pure
101 whitespace. I know it sounds complicated, but I can't find a
105 whitespace. I know it sounds complicated, but I can't find a
102 different solution that covers all the cases, with the right
106 different solution that covers all the cases, with the right
103 heuristics. Hopefully in actual use, nobody will really notice
107 heuristics. Hopefully in actual use, nobody will really notice
104 all these strange rules and things will 'just work'.
108 all these strange rules and things will 'just work'.
105
109
106 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
110 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
107
111
108 * IPython/iplib.py (interact): catch exceptions which can be
112 * IPython/iplib.py (interact): catch exceptions which can be
109 triggered asynchronously by signal handlers. Thanks to an
113 triggered asynchronously by signal handlers. Thanks to an
110 automatic crash report, submitted by Colin Kingsley
114 automatic crash report, submitted by Colin Kingsley
111 <tercel-AT-gentoo.org>.
115 <tercel-AT-gentoo.org>.
112
116
113 2006-01-20 Ville Vainio <vivainio@gmail.com>
117 2006-01-20 Ville Vainio <vivainio@gmail.com>
114
118
115 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
119 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
116 (%rehashdir, very useful, try it out) of how to extend ipython
120 (%rehashdir, very useful, try it out) of how to extend ipython
117 with new magics. Also added Extensions dir to pythonpath to make
121 with new magics. Also added Extensions dir to pythonpath to make
118 importing extensions easy.
122 importing extensions easy.
119
123
120 * %store now complains when trying to store interactively declared
124 * %store now complains when trying to store interactively declared
121 classes / instances of those classes.
125 classes / instances of those classes.
122
126
123 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
127 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
124 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
128 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
125 if they exist, and ipy_user_conf.py with some defaults is created for
129 if they exist, and ipy_user_conf.py with some defaults is created for
126 the user.
130 the user.
127
131
128 * Startup rehashing done by the config file, not InterpreterExec.
132 * Startup rehashing done by the config file, not InterpreterExec.
129 This means system commands are available even without selecting the
133 This means system commands are available even without selecting the
130 pysh profile. It's the sensible default after all.
134 pysh profile. It's the sensible default after all.
131
135
132 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
136 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
133
137
134 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
138 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
135 multiline code with autoindent on working. But I am really not
139 multiline code with autoindent on working. But I am really not
136 sure, so this needs more testing. Will commit a debug-enabled
140 sure, so this needs more testing. Will commit a debug-enabled
137 version for now, while I test it some more, so that Ville and
141 version for now, while I test it some more, so that Ville and
138 others may also catch any problems. Also made
142 others may also catch any problems. Also made
139 self.indent_current_str() a method, to ensure that there's no
143 self.indent_current_str() a method, to ensure that there's no
140 chance of the indent space count and the corresponding string
144 chance of the indent space count and the corresponding string
141 falling out of sync. All code needing the string should just call
145 falling out of sync. All code needing the string should just call
142 the method.
146 the method.
143
147
144 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
148 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
145
149
146 * IPython/Magic.py (magic_edit): fix check for when users don't
150 * IPython/Magic.py (magic_edit): fix check for when users don't
147 save their output files, the try/except was in the wrong section.
151 save their output files, the try/except was in the wrong section.
148
152
149 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
153 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
150
154
151 * IPython/Magic.py (magic_run): fix __file__ global missing from
155 * IPython/Magic.py (magic_run): fix __file__ global missing from
152 script's namespace when executed via %run. After a report by
156 script's namespace when executed via %run. After a report by
153 Vivian.
157 Vivian.
154
158
155 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
159 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
156 when using python 2.4. The parent constructor changed in 2.4, and
160 when using python 2.4. The parent constructor changed in 2.4, and
157 we need to track it directly (we can't call it, as it messes up
161 we need to track it directly (we can't call it, as it messes up
158 readline and tab-completion inside our pdb would stop working).
162 readline and tab-completion inside our pdb would stop working).
159 After a bug report by R. Bernstein <rocky-AT-panix.com>.
163 After a bug report by R. Bernstein <rocky-AT-panix.com>.
160
164
161 2006-01-16 Ville Vainio <vivainio@gmail.com>
165 2006-01-16 Ville Vainio <vivainio@gmail.com>
162
166
163 * Ipython/magic.py:Reverted back to old %edit functionality
167 * Ipython/magic.py:Reverted back to old %edit functionality
164 that returns file contents on exit.
168 that returns file contents on exit.
165
169
166 * IPython/path.py: Added Jason Orendorff's "path" module to
170 * IPython/path.py: Added Jason Orendorff's "path" module to
167 IPython tree, http://www.jorendorff.com/articles/python/path/.
171 IPython tree, http://www.jorendorff.com/articles/python/path/.
168 You can get path objects conveniently through %sc, and !!, e.g.:
172 You can get path objects conveniently through %sc, and !!, e.g.:
169 sc files=ls
173 sc files=ls
170 for p in files.paths: # or files.p
174 for p in files.paths: # or files.p
171 print p,p.mtime
175 print p,p.mtime
172
176
173 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
177 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
174 now work again without considering the exclusion regexp -
178 now work again without considering the exclusion regexp -
175 hence, things like ',foo my/path' turn to 'foo("my/path")'
179 hence, things like ',foo my/path' turn to 'foo("my/path")'
176 instead of syntax error.
180 instead of syntax error.
177
181
178
182
179 2006-01-14 Ville Vainio <vivainio@gmail.com>
183 2006-01-14 Ville Vainio <vivainio@gmail.com>
180
184
181 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
185 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
182 ipapi decorators for python 2.4 users, options() provides access to rc
186 ipapi decorators for python 2.4 users, options() provides access to rc
183 data.
187 data.
184
188
185 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
189 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
186 as path separators (even on Linux ;-). Space character after
190 as path separators (even on Linux ;-). Space character after
187 backslash (as yielded by tab completer) is still space;
191 backslash (as yielded by tab completer) is still space;
188 "%cd long\ name" works as expected.
192 "%cd long\ name" works as expected.
189
193
190 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
194 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
191 as "chain of command", with priority. API stays the same,
195 as "chain of command", with priority. API stays the same,
192 TryNext exception raised by a hook function signals that
196 TryNext exception raised by a hook function signals that
193 current hook failed and next hook should try handling it, as
197 current hook failed and next hook should try handling it, as
194 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
198 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
195 requested configurable display hook, which is now implemented.
199 requested configurable display hook, which is now implemented.
196
200
197 2006-01-13 Ville Vainio <vivainio@gmail.com>
201 2006-01-13 Ville Vainio <vivainio@gmail.com>
198
202
199 * IPython/platutils*.py: platform specific utility functions,
203 * IPython/platutils*.py: platform specific utility functions,
200 so far only set_term_title is implemented (change terminal
204 so far only set_term_title is implemented (change terminal
201 label in windowing systems). %cd now changes the title to
205 label in windowing systems). %cd now changes the title to
202 current dir.
206 current dir.
203
207
204 * IPython/Release.py: Added myself to "authors" list,
208 * IPython/Release.py: Added myself to "authors" list,
205 had to create new files.
209 had to create new files.
206
210
207 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
211 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
208 shell escape; not a known bug but had potential to be one in the
212 shell escape; not a known bug but had potential to be one in the
209 future.
213 future.
210
214
211 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
215 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
212 extension API for IPython! See the module for usage example. Fix
216 extension API for IPython! See the module for usage example. Fix
213 OInspect for docstring-less magic functions.
217 OInspect for docstring-less magic functions.
214
218
215
219
216 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
220 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
217
221
218 * IPython/iplib.py (raw_input): temporarily deactivate all
222 * IPython/iplib.py (raw_input): temporarily deactivate all
219 attempts at allowing pasting of code with autoindent on. It
223 attempts at allowing pasting of code with autoindent on. It
220 introduced bugs (reported by Prabhu) and I can't seem to find a
224 introduced bugs (reported by Prabhu) and I can't seem to find a
221 robust combination which works in all cases. Will have to revisit
225 robust combination which works in all cases. Will have to revisit
222 later.
226 later.
223
227
224 * IPython/genutils.py: remove isspace() function. We've dropped
228 * IPython/genutils.py: remove isspace() function. We've dropped
225 2.2 compatibility, so it's OK to use the string method.
229 2.2 compatibility, so it's OK to use the string method.
226
230
227 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
231 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
228
232
229 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
233 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
230 matching what NOT to autocall on, to include all python binary
234 matching what NOT to autocall on, to include all python binary
231 operators (including things like 'and', 'or', 'is' and 'in').
235 operators (including things like 'and', 'or', 'is' and 'in').
232 Prompted by a bug report on 'foo & bar', but I realized we had
236 Prompted by a bug report on 'foo & bar', but I realized we had
233 many more potential bug cases with other operators. The regexp is
237 many more potential bug cases with other operators. The regexp is
234 self.re_exclude_auto, it's fairly commented.
238 self.re_exclude_auto, it's fairly commented.
235
239
236 2006-01-12 Ville Vainio <vivainio@gmail.com>
240 2006-01-12 Ville Vainio <vivainio@gmail.com>
237
241
238 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
242 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
239 Prettified and hardened string/backslash quoting with ipsystem(),
243 Prettified and hardened string/backslash quoting with ipsystem(),
240 ipalias() and ipmagic(). Now even \ characters are passed to
244 ipalias() and ipmagic(). Now even \ characters are passed to
241 %magics, !shell escapes and aliases exactly as they are in the
245 %magics, !shell escapes and aliases exactly as they are in the
242 ipython command line. Should improve backslash experience,
246 ipython command line. Should improve backslash experience,
243 particularly in Windows (path delimiter for some commands that
247 particularly in Windows (path delimiter for some commands that
244 won't understand '/'), but Unix benefits as well (regexps). %cd
248 won't understand '/'), but Unix benefits as well (regexps). %cd
245 magic still doesn't support backslash path delimiters, though. Also
249 magic still doesn't support backslash path delimiters, though. Also
246 deleted all pretense of supporting multiline command strings in
250 deleted all pretense of supporting multiline command strings in
247 !system or %magic commands. Thanks to Jerry McRae for suggestions.
251 !system or %magic commands. Thanks to Jerry McRae for suggestions.
248
252
249 * doc/build_doc_instructions.txt added. Documentation on how to
253 * doc/build_doc_instructions.txt added. Documentation on how to
250 use doc/update_manual.py, added yesterday. Both files contributed
254 use doc/update_manual.py, added yesterday. Both files contributed
251 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
255 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
252 doc/*.sh for deprecation at a later date.
256 doc/*.sh for deprecation at a later date.
253
257
254 * /ipython.py Added ipython.py to root directory for
258 * /ipython.py Added ipython.py to root directory for
255 zero-installation (tar xzvf ipython.tgz; cd ipython; python
259 zero-installation (tar xzvf ipython.tgz; cd ipython; python
256 ipython.py) and development convenience (no need to kee doing
260 ipython.py) and development convenience (no need to kee doing
257 "setup.py install" between changes).
261 "setup.py install" between changes).
258
262
259 * Made ! and !! shell escapes work (again) in multiline expressions:
263 * Made ! and !! shell escapes work (again) in multiline expressions:
260 if 1:
264 if 1:
261 !ls
265 !ls
262 !!ls
266 !!ls
263
267
264 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
268 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
265
269
266 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
270 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
267 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
271 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
268 module in case-insensitive installation. Was causing crashes
272 module in case-insensitive installation. Was causing crashes
269 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
273 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
270
274
271 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
275 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
272 <marienz-AT-gentoo.org>, closes
276 <marienz-AT-gentoo.org>, closes
273 http://www.scipy.net/roundup/ipython/issue51.
277 http://www.scipy.net/roundup/ipython/issue51.
274
278
275 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
279 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
276
280
277 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
281 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
278 problem of excessive CPU usage under *nix and keyboard lag under
282 problem of excessive CPU usage under *nix and keyboard lag under
279 win32.
283 win32.
280
284
281 2006-01-10 *** Released version 0.7.0
285 2006-01-10 *** Released version 0.7.0
282
286
283 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
287 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
284
288
285 * IPython/Release.py (revision): tag version number to 0.7.0,
289 * IPython/Release.py (revision): tag version number to 0.7.0,
286 ready for release.
290 ready for release.
287
291
288 * IPython/Magic.py (magic_edit): Add print statement to %edit so
292 * IPython/Magic.py (magic_edit): Add print statement to %edit so
289 it informs the user of the name of the temp. file used. This can
293 it informs the user of the name of the temp. file used. This can
290 help if you decide later to reuse that same file, so you know
294 help if you decide later to reuse that same file, so you know
291 where to copy the info from.
295 where to copy the info from.
292
296
293 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
297 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
294
298
295 * setup_bdist_egg.py: little script to build an egg. Added
299 * setup_bdist_egg.py: little script to build an egg. Added
296 support in the release tools as well.
300 support in the release tools as well.
297
301
298 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
302 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
299
303
300 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
304 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
301 version selection (new -wxversion command line and ipythonrc
305 version selection (new -wxversion command line and ipythonrc
302 parameter). Patch contributed by Arnd Baecker
306 parameter). Patch contributed by Arnd Baecker
303 <arnd.baecker-AT-web.de>.
307 <arnd.baecker-AT-web.de>.
304
308
305 * IPython/iplib.py (embed_mainloop): fix tab-completion in
309 * IPython/iplib.py (embed_mainloop): fix tab-completion in
306 embedded instances, for variables defined at the interactive
310 embedded instances, for variables defined at the interactive
307 prompt of the embedded ipython. Reported by Arnd.
311 prompt of the embedded ipython. Reported by Arnd.
308
312
309 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
313 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
310 it can be used as a (stateful) toggle, or with a direct parameter.
314 it can be used as a (stateful) toggle, or with a direct parameter.
311
315
312 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
316 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
313 could be triggered in certain cases and cause the traceback
317 could be triggered in certain cases and cause the traceback
314 printer not to work.
318 printer not to work.
315
319
316 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
320 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
317
321
318 * IPython/iplib.py (_should_recompile): Small fix, closes
322 * IPython/iplib.py (_should_recompile): Small fix, closes
319 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
323 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
320
324
321 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
325 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
322
326
323 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
327 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
324 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
328 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
325 Moad for help with tracking it down.
329 Moad for help with tracking it down.
326
330
327 * IPython/iplib.py (handle_auto): fix autocall handling for
331 * IPython/iplib.py (handle_auto): fix autocall handling for
328 objects which support BOTH __getitem__ and __call__ (so that f [x]
332 objects which support BOTH __getitem__ and __call__ (so that f [x]
329 is left alone, instead of becoming f([x]) automatically).
333 is left alone, instead of becoming f([x]) automatically).
330
334
331 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
335 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
332 Ville's patch.
336 Ville's patch.
333
337
334 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
338 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
335
339
336 * IPython/iplib.py (handle_auto): changed autocall semantics to
340 * IPython/iplib.py (handle_auto): changed autocall semantics to
337 include 'smart' mode, where the autocall transformation is NOT
341 include 'smart' mode, where the autocall transformation is NOT
338 applied if there are no arguments on the line. This allows you to
342 applied if there are no arguments on the line. This allows you to
339 just type 'foo' if foo is a callable to see its internal form,
343 just type 'foo' if foo is a callable to see its internal form,
340 instead of having it called with no arguments (typically a
344 instead of having it called with no arguments (typically a
341 mistake). The old 'full' autocall still exists: for that, you
345 mistake). The old 'full' autocall still exists: for that, you
342 need to set the 'autocall' parameter to 2 in your ipythonrc file.
346 need to set the 'autocall' parameter to 2 in your ipythonrc file.
343
347
344 * IPython/completer.py (Completer.attr_matches): add
348 * IPython/completer.py (Completer.attr_matches): add
345 tab-completion support for Enthoughts' traits. After a report by
349 tab-completion support for Enthoughts' traits. After a report by
346 Arnd and a patch by Prabhu.
350 Arnd and a patch by Prabhu.
347
351
348 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
352 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
349
353
350 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
354 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
351 Schmolck's patch to fix inspect.getinnerframes().
355 Schmolck's patch to fix inspect.getinnerframes().
352
356
353 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
357 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
354 for embedded instances, regarding handling of namespaces and items
358 for embedded instances, regarding handling of namespaces and items
355 added to the __builtin__ one. Multiple embedded instances and
359 added to the __builtin__ one. Multiple embedded instances and
356 recursive embeddings should work better now (though I'm not sure
360 recursive embeddings should work better now (though I'm not sure
357 I've got all the corner cases fixed, that code is a bit of a brain
361 I've got all the corner cases fixed, that code is a bit of a brain
358 twister).
362 twister).
359
363
360 * IPython/Magic.py (magic_edit): added support to edit in-memory
364 * IPython/Magic.py (magic_edit): added support to edit in-memory
361 macros (automatically creates the necessary temp files). %edit
365 macros (automatically creates the necessary temp files). %edit
362 also doesn't return the file contents anymore, it's just noise.
366 also doesn't return the file contents anymore, it's just noise.
363
367
364 * IPython/completer.py (Completer.attr_matches): revert change to
368 * IPython/completer.py (Completer.attr_matches): revert change to
365 complete only on attributes listed in __all__. I realized it
369 complete only on attributes listed in __all__. I realized it
366 cripples the tab-completion system as a tool for exploring the
370 cripples the tab-completion system as a tool for exploring the
367 internals of unknown libraries (it renders any non-__all__
371 internals of unknown libraries (it renders any non-__all__
368 attribute off-limits). I got bit by this when trying to see
372 attribute off-limits). I got bit by this when trying to see
369 something inside the dis module.
373 something inside the dis module.
370
374
371 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
375 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
372
376
373 * IPython/iplib.py (InteractiveShell.__init__): add .meta
377 * IPython/iplib.py (InteractiveShell.__init__): add .meta
374 namespace for users and extension writers to hold data in. This
378 namespace for users and extension writers to hold data in. This
375 follows the discussion in
379 follows the discussion in
376 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
380 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
377
381
378 * IPython/completer.py (IPCompleter.complete): small patch to help
382 * IPython/completer.py (IPCompleter.complete): small patch to help
379 tab-completion under Emacs, after a suggestion by John Barnard
383 tab-completion under Emacs, after a suggestion by John Barnard
380 <barnarj-AT-ccf.org>.
384 <barnarj-AT-ccf.org>.
381
385
382 * IPython/Magic.py (Magic.extract_input_slices): added support for
386 * IPython/Magic.py (Magic.extract_input_slices): added support for
383 the slice notation in magics to use N-M to represent numbers N...M
387 the slice notation in magics to use N-M to represent numbers N...M
384 (closed endpoints). This is used by %macro and %save.
388 (closed endpoints). This is used by %macro and %save.
385
389
386 * IPython/completer.py (Completer.attr_matches): for modules which
390 * IPython/completer.py (Completer.attr_matches): for modules which
387 define __all__, complete only on those. After a patch by Jeffrey
391 define __all__, complete only on those. After a patch by Jeffrey
388 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
392 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
389 speed up this routine.
393 speed up this routine.
390
394
391 * IPython/Logger.py (Logger.log): fix a history handling bug. I
395 * IPython/Logger.py (Logger.log): fix a history handling bug. I
392 don't know if this is the end of it, but the behavior now is
396 don't know if this is the end of it, but the behavior now is
393 certainly much more correct. Note that coupled with macros,
397 certainly much more correct. Note that coupled with macros,
394 slightly surprising (at first) behavior may occur: a macro will in
398 slightly surprising (at first) behavior may occur: a macro will in
395 general expand to multiple lines of input, so upon exiting, the
399 general expand to multiple lines of input, so upon exiting, the
396 in/out counters will both be bumped by the corresponding amount
400 in/out counters will both be bumped by the corresponding amount
397 (as if the macro's contents had been typed interactively). Typing
401 (as if the macro's contents had been typed interactively). Typing
398 %hist will reveal the intermediate (silently processed) lines.
402 %hist will reveal the intermediate (silently processed) lines.
399
403
400 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
404 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
401 pickle to fail (%run was overwriting __main__ and not restoring
405 pickle to fail (%run was overwriting __main__ and not restoring
402 it, but pickle relies on __main__ to operate).
406 it, but pickle relies on __main__ to operate).
403
407
404 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
408 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
405 using properties, but forgot to make the main InteractiveShell
409 using properties, but forgot to make the main InteractiveShell
406 class a new-style class. Properties fail silently, and
410 class a new-style class. Properties fail silently, and
407 misteriously, with old-style class (getters work, but
411 misteriously, with old-style class (getters work, but
408 setters don't do anything).
412 setters don't do anything).
409
413
410 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
414 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
411
415
412 * IPython/Magic.py (magic_history): fix history reporting bug (I
416 * IPython/Magic.py (magic_history): fix history reporting bug (I
413 know some nasties are still there, I just can't seem to find a
417 know some nasties are still there, I just can't seem to find a
414 reproducible test case to track them down; the input history is
418 reproducible test case to track them down; the input history is
415 falling out of sync...)
419 falling out of sync...)
416
420
417 * IPython/iplib.py (handle_shell_escape): fix bug where both
421 * IPython/iplib.py (handle_shell_escape): fix bug where both
418 aliases and system accesses where broken for indented code (such
422 aliases and system accesses where broken for indented code (such
419 as loops).
423 as loops).
420
424
421 * IPython/genutils.py (shell): fix small but critical bug for
425 * IPython/genutils.py (shell): fix small but critical bug for
422 win32 system access.
426 win32 system access.
423
427
424 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
428 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
425
429
426 * IPython/iplib.py (showtraceback): remove use of the
430 * IPython/iplib.py (showtraceback): remove use of the
427 sys.last_{type/value/traceback} structures, which are non
431 sys.last_{type/value/traceback} structures, which are non
428 thread-safe.
432 thread-safe.
429 (_prefilter): change control flow to ensure that we NEVER
433 (_prefilter): change control flow to ensure that we NEVER
430 introspect objects when autocall is off. This will guarantee that
434 introspect objects when autocall is off. This will guarantee that
431 having an input line of the form 'x.y', where access to attribute
435 having an input line of the form 'x.y', where access to attribute
432 'y' has side effects, doesn't trigger the side effect TWICE. It
436 'y' has side effects, doesn't trigger the side effect TWICE. It
433 is important to note that, with autocall on, these side effects
437 is important to note that, with autocall on, these side effects
434 can still happen.
438 can still happen.
435 (ipsystem): new builtin, to complete the ip{magic/alias/system}
439 (ipsystem): new builtin, to complete the ip{magic/alias/system}
436 trio. IPython offers these three kinds of special calls which are
440 trio. IPython offers these three kinds of special calls which are
437 not python code, and it's a good thing to have their call method
441 not python code, and it's a good thing to have their call method
438 be accessible as pure python functions (not just special syntax at
442 be accessible as pure python functions (not just special syntax at
439 the command line). It gives us a better internal implementation
443 the command line). It gives us a better internal implementation
440 structure, as well as exposing these for user scripting more
444 structure, as well as exposing these for user scripting more
441 cleanly.
445 cleanly.
442
446
443 * IPython/macro.py (Macro.__init__): moved macros to a standalone
447 * IPython/macro.py (Macro.__init__): moved macros to a standalone
444 file. Now that they'll be more likely to be used with the
448 file. Now that they'll be more likely to be used with the
445 persistance system (%store), I want to make sure their module path
449 persistance system (%store), I want to make sure their module path
446 doesn't change in the future, so that we don't break things for
450 doesn't change in the future, so that we don't break things for
447 users' persisted data.
451 users' persisted data.
448
452
449 * IPython/iplib.py (autoindent_update): move indentation
453 * IPython/iplib.py (autoindent_update): move indentation
450 management into the _text_ processing loop, not the keyboard
454 management into the _text_ processing loop, not the keyboard
451 interactive one. This is necessary to correctly process non-typed
455 interactive one. This is necessary to correctly process non-typed
452 multiline input (such as macros).
456 multiline input (such as macros).
453
457
454 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
458 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
455 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
459 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
456 which was producing problems in the resulting manual.
460 which was producing problems in the resulting manual.
457 (magic_whos): improve reporting of instances (show their class,
461 (magic_whos): improve reporting of instances (show their class,
458 instead of simply printing 'instance' which isn't terribly
462 instead of simply printing 'instance' which isn't terribly
459 informative).
463 informative).
460
464
461 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
465 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
462 (minor mods) to support network shares under win32.
466 (minor mods) to support network shares under win32.
463
467
464 * IPython/winconsole.py (get_console_size): add new winconsole
468 * IPython/winconsole.py (get_console_size): add new winconsole
465 module and fixes to page_dumb() to improve its behavior under
469 module and fixes to page_dumb() to improve its behavior under
466 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
470 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
467
471
468 * IPython/Magic.py (Macro): simplified Macro class to just
472 * IPython/Magic.py (Macro): simplified Macro class to just
469 subclass list. We've had only 2.2 compatibility for a very long
473 subclass list. We've had only 2.2 compatibility for a very long
470 time, yet I was still avoiding subclassing the builtin types. No
474 time, yet I was still avoiding subclassing the builtin types. No
471 more (I'm also starting to use properties, though I won't shift to
475 more (I'm also starting to use properties, though I won't shift to
472 2.3-specific features quite yet).
476 2.3-specific features quite yet).
473 (magic_store): added Ville's patch for lightweight variable
477 (magic_store): added Ville's patch for lightweight variable
474 persistence, after a request on the user list by Matt Wilkie
478 persistence, after a request on the user list by Matt Wilkie
475 <maphew-AT-gmail.com>. The new %store magic's docstring has full
479 <maphew-AT-gmail.com>. The new %store magic's docstring has full
476 details.
480 details.
477
481
478 * IPython/iplib.py (InteractiveShell.post_config_initialization):
482 * IPython/iplib.py (InteractiveShell.post_config_initialization):
479 changed the default logfile name from 'ipython.log' to
483 changed the default logfile name from 'ipython.log' to
480 'ipython_log.py'. These logs are real python files, and now that
484 'ipython_log.py'. These logs are real python files, and now that
481 we have much better multiline support, people are more likely to
485 we have much better multiline support, people are more likely to
482 want to use them as such. Might as well name them correctly.
486 want to use them as such. Might as well name them correctly.
483
487
484 * IPython/Magic.py: substantial cleanup. While we can't stop
488 * IPython/Magic.py: substantial cleanup. While we can't stop
485 using magics as mixins, due to the existing customizations 'out
489 using magics as mixins, due to the existing customizations 'out
486 there' which rely on the mixin naming conventions, at least I
490 there' which rely on the mixin naming conventions, at least I
487 cleaned out all cross-class name usage. So once we are OK with
491 cleaned out all cross-class name usage. So once we are OK with
488 breaking compatibility, the two systems can be separated.
492 breaking compatibility, the two systems can be separated.
489
493
490 * IPython/Logger.py: major cleanup. This one is NOT a mixin
494 * IPython/Logger.py: major cleanup. This one is NOT a mixin
491 anymore, and the class is a fair bit less hideous as well. New
495 anymore, and the class is a fair bit less hideous as well. New
492 features were also introduced: timestamping of input, and logging
496 features were also introduced: timestamping of input, and logging
493 of output results. These are user-visible with the -t and -o
497 of output results. These are user-visible with the -t and -o
494 options to %logstart. Closes
498 options to %logstart. Closes
495 http://www.scipy.net/roundup/ipython/issue11 and a request by
499 http://www.scipy.net/roundup/ipython/issue11 and a request by
496 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
500 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
497
501
498 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
502 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
499
503
500 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
504 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
501 better hadnle backslashes in paths. See the thread 'More Windows
505 better hadnle backslashes in paths. See the thread 'More Windows
502 questions part 2 - \/ characters revisited' on the iypthon user
506 questions part 2 - \/ characters revisited' on the iypthon user
503 list:
507 list:
504 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
508 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
505
509
506 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
510 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
507
511
508 (InteractiveShell.__init__): change threaded shells to not use the
512 (InteractiveShell.__init__): change threaded shells to not use the
509 ipython crash handler. This was causing more problems than not,
513 ipython crash handler. This was causing more problems than not,
510 as exceptions in the main thread (GUI code, typically) would
514 as exceptions in the main thread (GUI code, typically) would
511 always show up as a 'crash', when they really weren't.
515 always show up as a 'crash', when they really weren't.
512
516
513 The colors and exception mode commands (%colors/%xmode) have been
517 The colors and exception mode commands (%colors/%xmode) have been
514 synchronized to also take this into account, so users can get
518 synchronized to also take this into account, so users can get
515 verbose exceptions for their threaded code as well. I also added
519 verbose exceptions for their threaded code as well. I also added
516 support for activating pdb inside this exception handler as well,
520 support for activating pdb inside this exception handler as well,
517 so now GUI authors can use IPython's enhanced pdb at runtime.
521 so now GUI authors can use IPython's enhanced pdb at runtime.
518
522
519 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
523 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
520 true by default, and add it to the shipped ipythonrc file. Since
524 true by default, and add it to the shipped ipythonrc file. Since
521 this asks the user before proceeding, I think it's OK to make it
525 this asks the user before proceeding, I think it's OK to make it
522 true by default.
526 true by default.
523
527
524 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
528 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
525 of the previous special-casing of input in the eval loop. I think
529 of the previous special-casing of input in the eval loop. I think
526 this is cleaner, as they really are commands and shouldn't have
530 this is cleaner, as they really are commands and shouldn't have
527 a special role in the middle of the core code.
531 a special role in the middle of the core code.
528
532
529 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
533 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
530
534
531 * IPython/iplib.py (edit_syntax_error): added support for
535 * IPython/iplib.py (edit_syntax_error): added support for
532 automatically reopening the editor if the file had a syntax error
536 automatically reopening the editor if the file had a syntax error
533 in it. Thanks to scottt who provided the patch at:
537 in it. Thanks to scottt who provided the patch at:
534 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
538 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
535 version committed).
539 version committed).
536
540
537 * IPython/iplib.py (handle_normal): add suport for multi-line
541 * IPython/iplib.py (handle_normal): add suport for multi-line
538 input with emtpy lines. This fixes
542 input with emtpy lines. This fixes
539 http://www.scipy.net/roundup/ipython/issue43 and a similar
543 http://www.scipy.net/roundup/ipython/issue43 and a similar
540 discussion on the user list.
544 discussion on the user list.
541
545
542 WARNING: a behavior change is necessarily introduced to support
546 WARNING: a behavior change is necessarily introduced to support
543 blank lines: now a single blank line with whitespace does NOT
547 blank lines: now a single blank line with whitespace does NOT
544 break the input loop, which means that when autoindent is on, by
548 break the input loop, which means that when autoindent is on, by
545 default hitting return on the next (indented) line does NOT exit.
549 default hitting return on the next (indented) line does NOT exit.
546
550
547 Instead, to exit a multiline input you can either have:
551 Instead, to exit a multiline input you can either have:
548
552
549 - TWO whitespace lines (just hit return again), or
553 - TWO whitespace lines (just hit return again), or
550 - a single whitespace line of a different length than provided
554 - a single whitespace line of a different length than provided
551 by the autoindent (add or remove a space).
555 by the autoindent (add or remove a space).
552
556
553 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
557 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
554 module to better organize all readline-related functionality.
558 module to better organize all readline-related functionality.
555 I've deleted FlexCompleter and put all completion clases here.
559 I've deleted FlexCompleter and put all completion clases here.
556
560
557 * IPython/iplib.py (raw_input): improve indentation management.
561 * IPython/iplib.py (raw_input): improve indentation management.
558 It is now possible to paste indented code with autoindent on, and
562 It is now possible to paste indented code with autoindent on, and
559 the code is interpreted correctly (though it still looks bad on
563 the code is interpreted correctly (though it still looks bad on
560 screen, due to the line-oriented nature of ipython).
564 screen, due to the line-oriented nature of ipython).
561 (MagicCompleter.complete): change behavior so that a TAB key on an
565 (MagicCompleter.complete): change behavior so that a TAB key on an
562 otherwise empty line actually inserts a tab, instead of completing
566 otherwise empty line actually inserts a tab, instead of completing
563 on the entire global namespace. This makes it easier to use the
567 on the entire global namespace. This makes it easier to use the
564 TAB key for indentation. After a request by Hans Meine
568 TAB key for indentation. After a request by Hans Meine
565 <hans_meine-AT-gmx.net>
569 <hans_meine-AT-gmx.net>
566 (_prefilter): add support so that typing plain 'exit' or 'quit'
570 (_prefilter): add support so that typing plain 'exit' or 'quit'
567 does a sensible thing. Originally I tried to deviate as little as
571 does a sensible thing. Originally I tried to deviate as little as
568 possible from the default python behavior, but even that one may
572 possible from the default python behavior, but even that one may
569 change in this direction (thread on python-dev to that effect).
573 change in this direction (thread on python-dev to that effect).
570 Regardless, ipython should do the right thing even if CPython's
574 Regardless, ipython should do the right thing even if CPython's
571 '>>>' prompt doesn't.
575 '>>>' prompt doesn't.
572 (InteractiveShell): removed subclassing code.InteractiveConsole
576 (InteractiveShell): removed subclassing code.InteractiveConsole
573 class. By now we'd overridden just about all of its methods: I've
577 class. By now we'd overridden just about all of its methods: I've
574 copied the remaining two over, and now ipython is a standalone
578 copied the remaining two over, and now ipython is a standalone
575 class. This will provide a clearer picture for the chainsaw
579 class. This will provide a clearer picture for the chainsaw
576 branch refactoring.
580 branch refactoring.
577
581
578 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
582 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
579
583
580 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
584 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
581 failures for objects which break when dir() is called on them.
585 failures for objects which break when dir() is called on them.
582
586
583 * IPython/FlexCompleter.py (Completer.__init__): Added support for
587 * IPython/FlexCompleter.py (Completer.__init__): Added support for
584 distinct local and global namespaces in the completer API. This
588 distinct local and global namespaces in the completer API. This
585 change allows us top properly handle completion with distinct
589 change allows us top properly handle completion with distinct
586 scopes, including in embedded instances (this had never really
590 scopes, including in embedded instances (this had never really
587 worked correctly).
591 worked correctly).
588
592
589 Note: this introduces a change in the constructor for
593 Note: this introduces a change in the constructor for
590 MagicCompleter, as a new global_namespace parameter is now the
594 MagicCompleter, as a new global_namespace parameter is now the
591 second argument (the others were bumped one position).
595 second argument (the others were bumped one position).
592
596
593 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
597 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
594
598
595 * IPython/iplib.py (embed_mainloop): fix tab-completion in
599 * IPython/iplib.py (embed_mainloop): fix tab-completion in
596 embedded instances (which can be done now thanks to Vivian's
600 embedded instances (which can be done now thanks to Vivian's
597 frame-handling fixes for pdb).
601 frame-handling fixes for pdb).
598 (InteractiveShell.__init__): Fix namespace handling problem in
602 (InteractiveShell.__init__): Fix namespace handling problem in
599 embedded instances. We were overwriting __main__ unconditionally,
603 embedded instances. We were overwriting __main__ unconditionally,
600 and this should only be done for 'full' (non-embedded) IPython;
604 and this should only be done for 'full' (non-embedded) IPython;
601 embedded instances must respect the caller's __main__. Thanks to
605 embedded instances must respect the caller's __main__. Thanks to
602 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
606 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
603
607
604 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
608 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
605
609
606 * setup.py: added download_url to setup(). This registers the
610 * setup.py: added download_url to setup(). This registers the
607 download address at PyPI, which is not only useful to humans
611 download address at PyPI, which is not only useful to humans
608 browsing the site, but is also picked up by setuptools (the Eggs
612 browsing the site, but is also picked up by setuptools (the Eggs
609 machinery). Thanks to Ville and R. Kern for the info/discussion
613 machinery). Thanks to Ville and R. Kern for the info/discussion
610 on this.
614 on this.
611
615
612 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
616 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
613
617
614 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
618 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
615 This brings a lot of nice functionality to the pdb mode, which now
619 This brings a lot of nice functionality to the pdb mode, which now
616 has tab-completion, syntax highlighting, and better stack handling
620 has tab-completion, syntax highlighting, and better stack handling
617 than before. Many thanks to Vivian De Smedt
621 than before. Many thanks to Vivian De Smedt
618 <vivian-AT-vdesmedt.com> for the original patches.
622 <vivian-AT-vdesmedt.com> for the original patches.
619
623
620 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
624 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
621
625
622 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
626 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
623 sequence to consistently accept the banner argument. The
627 sequence to consistently accept the banner argument. The
624 inconsistency was tripping SAGE, thanks to Gary Zablackis
628 inconsistency was tripping SAGE, thanks to Gary Zablackis
625 <gzabl-AT-yahoo.com> for the report.
629 <gzabl-AT-yahoo.com> for the report.
626
630
627 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
631 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
628
632
629 * IPython/iplib.py (InteractiveShell.post_config_initialization):
633 * IPython/iplib.py (InteractiveShell.post_config_initialization):
630 Fix bug where a naked 'alias' call in the ipythonrc file would
634 Fix bug where a naked 'alias' call in the ipythonrc file would
631 cause a crash. Bug reported by Jorgen Stenarson.
635 cause a crash. Bug reported by Jorgen Stenarson.
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/ipmaker.py (make_IPython): cleanups which should improve
639 * IPython/ipmaker.py (make_IPython): cleanups which should improve
636 startup time.
640 startup time.
637
641
638 * IPython/iplib.py (runcode): my globals 'fix' for embedded
642 * IPython/iplib.py (runcode): my globals 'fix' for embedded
639 instances had introduced a bug with globals in normal code. Now
643 instances had introduced a bug with globals in normal code. Now
640 it's working in all cases.
644 it's working in all cases.
641
645
642 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
646 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
643 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
647 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
644 has been introduced to set the default case sensitivity of the
648 has been introduced to set the default case sensitivity of the
645 searches. Users can still select either mode at runtime on a
649 searches. Users can still select either mode at runtime on a
646 per-search basis.
650 per-search basis.
647
651
648 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
652 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
649
653
650 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
654 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
651 attributes in wildcard searches for subclasses. Modified version
655 attributes in wildcard searches for subclasses. Modified version
652 of a patch by Jorgen.
656 of a patch by Jorgen.
653
657
654 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
658 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
655
659
656 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
660 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
657 embedded instances. I added a user_global_ns attribute to the
661 embedded instances. I added a user_global_ns attribute to the
658 InteractiveShell class to handle this.
662 InteractiveShell class to handle this.
659
663
660 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
664 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
661
665
662 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
666 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
663 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
667 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
664 (reported under win32, but may happen also in other platforms).
668 (reported under win32, but may happen also in other platforms).
665 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
669 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
666
670
667 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
671 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
668
672
669 * IPython/Magic.py (magic_psearch): new support for wildcard
673 * IPython/Magic.py (magic_psearch): new support for wildcard
670 patterns. Now, typing ?a*b will list all names which begin with a
674 patterns. Now, typing ?a*b will list all names which begin with a
671 and end in b, for example. The %psearch magic has full
675 and end in b, for example. The %psearch magic has full
672 docstrings. Many thanks to JΓΆrgen Stenarson
676 docstrings. Many thanks to JΓΆrgen Stenarson
673 <jorgen.stenarson-AT-bostream.nu>, author of the patches
677 <jorgen.stenarson-AT-bostream.nu>, author of the patches
674 implementing this functionality.
678 implementing this functionality.
675
679
676 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
680 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
677
681
678 * Manual: fixed long-standing annoyance of double-dashes (as in
682 * Manual: fixed long-standing annoyance of double-dashes (as in
679 --prefix=~, for example) being stripped in the HTML version. This
683 --prefix=~, for example) being stripped in the HTML version. This
680 is a latex2html bug, but a workaround was provided. Many thanks
684 is a latex2html bug, but a workaround was provided. Many thanks
681 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
685 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
682 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
686 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
683 rolling. This seemingly small issue had tripped a number of users
687 rolling. This seemingly small issue had tripped a number of users
684 when first installing, so I'm glad to see it gone.
688 when first installing, so I'm glad to see it gone.
685
689
686 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
690 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
687
691
688 * IPython/Extensions/numeric_formats.py: fix missing import,
692 * IPython/Extensions/numeric_formats.py: fix missing import,
689 reported by Stephen Walton.
693 reported by Stephen Walton.
690
694
691 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
695 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
692
696
693 * IPython/demo.py: finish demo module, fully documented now.
697 * IPython/demo.py: finish demo module, fully documented now.
694
698
695 * IPython/genutils.py (file_read): simple little utility to read a
699 * IPython/genutils.py (file_read): simple little utility to read a
696 file and ensure it's closed afterwards.
700 file and ensure it's closed afterwards.
697
701
698 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
702 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
699
703
700 * IPython/demo.py (Demo.__init__): added support for individually
704 * IPython/demo.py (Demo.__init__): added support for individually
701 tagging blocks for automatic execution.
705 tagging blocks for automatic execution.
702
706
703 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
707 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
704 syntax-highlighted python sources, requested by John.
708 syntax-highlighted python sources, requested by John.
705
709
706 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
710 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
707
711
708 * IPython/demo.py (Demo.again): fix bug where again() blocks after
712 * IPython/demo.py (Demo.again): fix bug where again() blocks after
709 finishing.
713 finishing.
710
714
711 * IPython/genutils.py (shlex_split): moved from Magic to here,
715 * IPython/genutils.py (shlex_split): moved from Magic to here,
712 where all 2.2 compatibility stuff lives. I needed it for demo.py.
716 where all 2.2 compatibility stuff lives. I needed it for demo.py.
713
717
714 * IPython/demo.py (Demo.__init__): added support for silent
718 * IPython/demo.py (Demo.__init__): added support for silent
715 blocks, improved marks as regexps, docstrings written.
719 blocks, improved marks as regexps, docstrings written.
716 (Demo.__init__): better docstring, added support for sys.argv.
720 (Demo.__init__): better docstring, added support for sys.argv.
717
721
718 * IPython/genutils.py (marquee): little utility used by the demo
722 * IPython/genutils.py (marquee): little utility used by the demo
719 code, handy in general.
723 code, handy in general.
720
724
721 * IPython/demo.py (Demo.__init__): new class for interactive
725 * IPython/demo.py (Demo.__init__): new class for interactive
722 demos. Not documented yet, I just wrote it in a hurry for
726 demos. Not documented yet, I just wrote it in a hurry for
723 scipy'05. Will docstring later.
727 scipy'05. Will docstring later.
724
728
725 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
729 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
726
730
727 * IPython/Shell.py (sigint_handler): Drastic simplification which
731 * IPython/Shell.py (sigint_handler): Drastic simplification which
728 also seems to make Ctrl-C work correctly across threads! This is
732 also seems to make Ctrl-C work correctly across threads! This is
729 so simple, that I can't beleive I'd missed it before. Needs more
733 so simple, that I can't beleive I'd missed it before. Needs more
730 testing, though.
734 testing, though.
731 (KBINT): Never mind, revert changes. I'm sure I'd tried something
735 (KBINT): Never mind, revert changes. I'm sure I'd tried something
732 like this before...
736 like this before...
733
737
734 * IPython/genutils.py (get_home_dir): add protection against
738 * IPython/genutils.py (get_home_dir): add protection against
735 non-dirs in win32 registry.
739 non-dirs in win32 registry.
736
740
737 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
741 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
738 bug where dict was mutated while iterating (pysh crash).
742 bug where dict was mutated while iterating (pysh crash).
739
743
740 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
744 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
741
745
742 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
746 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
743 spurious newlines added by this routine. After a report by
747 spurious newlines added by this routine. After a report by
744 F. Mantegazza.
748 F. Mantegazza.
745
749
746 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
750 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
747
751
748 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
752 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
749 calls. These were a leftover from the GTK 1.x days, and can cause
753 calls. These were a leftover from the GTK 1.x days, and can cause
750 problems in certain cases (after a report by John Hunter).
754 problems in certain cases (after a report by John Hunter).
751
755
752 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
756 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
753 os.getcwd() fails at init time. Thanks to patch from David Remahl
757 os.getcwd() fails at init time. Thanks to patch from David Remahl
754 <chmod007-AT-mac.com>.
758 <chmod007-AT-mac.com>.
755 (InteractiveShell.__init__): prevent certain special magics from
759 (InteractiveShell.__init__): prevent certain special magics from
756 being shadowed by aliases. Closes
760 being shadowed by aliases. Closes
757 http://www.scipy.net/roundup/ipython/issue41.
761 http://www.scipy.net/roundup/ipython/issue41.
758
762
759 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
763 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
760
764
761 * IPython/iplib.py (InteractiveShell.complete): Added new
765 * IPython/iplib.py (InteractiveShell.complete): Added new
762 top-level completion method to expose the completion mechanism
766 top-level completion method to expose the completion mechanism
763 beyond readline-based environments.
767 beyond readline-based environments.
764
768
765 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
769 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
766
770
767 * tools/ipsvnc (svnversion): fix svnversion capture.
771 * tools/ipsvnc (svnversion): fix svnversion capture.
768
772
769 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
773 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
770 attribute to self, which was missing. Before, it was set by a
774 attribute to self, which was missing. Before, it was set by a
771 routine which in certain cases wasn't being called, so the
775 routine which in certain cases wasn't being called, so the
772 instance could end up missing the attribute. This caused a crash.
776 instance could end up missing the attribute. This caused a crash.
773 Closes http://www.scipy.net/roundup/ipython/issue40.
777 Closes http://www.scipy.net/roundup/ipython/issue40.
774
778
775 2005-08-16 Fernando Perez <fperez@colorado.edu>
779 2005-08-16 Fernando Perez <fperez@colorado.edu>
776
780
777 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
781 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
778 contains non-string attribute. Closes
782 contains non-string attribute. Closes
779 http://www.scipy.net/roundup/ipython/issue38.
783 http://www.scipy.net/roundup/ipython/issue38.
780
784
781 2005-08-14 Fernando Perez <fperez@colorado.edu>
785 2005-08-14 Fernando Perez <fperez@colorado.edu>
782
786
783 * tools/ipsvnc: Minor improvements, to add changeset info.
787 * tools/ipsvnc: Minor improvements, to add changeset info.
784
788
785 2005-08-12 Fernando Perez <fperez@colorado.edu>
789 2005-08-12 Fernando Perez <fperez@colorado.edu>
786
790
787 * IPython/iplib.py (runsource): remove self.code_to_run_src
791 * IPython/iplib.py (runsource): remove self.code_to_run_src
788 attribute. I realized this is nothing more than
792 attribute. I realized this is nothing more than
789 '\n'.join(self.buffer), and having the same data in two different
793 '\n'.join(self.buffer), and having the same data in two different
790 places is just asking for synchronization bugs. This may impact
794 places is just asking for synchronization bugs. This may impact
791 people who have custom exception handlers, so I need to warn
795 people who have custom exception handlers, so I need to warn
792 ipython-dev about it (F. Mantegazza may use them).
796 ipython-dev about it (F. Mantegazza may use them).
793
797
794 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
798 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
795
799
796 * IPython/genutils.py: fix 2.2 compatibility (generators)
800 * IPython/genutils.py: fix 2.2 compatibility (generators)
797
801
798 2005-07-18 Fernando Perez <fperez@colorado.edu>
802 2005-07-18 Fernando Perez <fperez@colorado.edu>
799
803
800 * IPython/genutils.py (get_home_dir): fix to help users with
804 * IPython/genutils.py (get_home_dir): fix to help users with
801 invalid $HOME under win32.
805 invalid $HOME under win32.
802
806
803 2005-07-17 Fernando Perez <fperez@colorado.edu>
807 2005-07-17 Fernando Perez <fperez@colorado.edu>
804
808
805 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
809 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
806 some old hacks and clean up a bit other routines; code should be
810 some old hacks and clean up a bit other routines; code should be
807 simpler and a bit faster.
811 simpler and a bit faster.
808
812
809 * IPython/iplib.py (interact): removed some last-resort attempts
813 * IPython/iplib.py (interact): removed some last-resort attempts
810 to survive broken stdout/stderr. That code was only making it
814 to survive broken stdout/stderr. That code was only making it
811 harder to abstract out the i/o (necessary for gui integration),
815 harder to abstract out the i/o (necessary for gui integration),
812 and the crashes it could prevent were extremely rare in practice
816 and the crashes it could prevent were extremely rare in practice
813 (besides being fully user-induced in a pretty violent manner).
817 (besides being fully user-induced in a pretty violent manner).
814
818
815 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
819 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
816 Nothing major yet, but the code is simpler to read; this should
820 Nothing major yet, but the code is simpler to read; this should
817 make it easier to do more serious modifications in the future.
821 make it easier to do more serious modifications in the future.
818
822
819 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
823 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
820 which broke in .15 (thanks to a report by Ville).
824 which broke in .15 (thanks to a report by Ville).
821
825
822 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
826 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
823 be quite correct, I know next to nothing about unicode). This
827 be quite correct, I know next to nothing about unicode). This
824 will allow unicode strings to be used in prompts, amongst other
828 will allow unicode strings to be used in prompts, amongst other
825 cases. It also will prevent ipython from crashing when unicode
829 cases. It also will prevent ipython from crashing when unicode
826 shows up unexpectedly in many places. If ascii encoding fails, we
830 shows up unexpectedly in many places. If ascii encoding fails, we
827 assume utf_8. Currently the encoding is not a user-visible
831 assume utf_8. Currently the encoding is not a user-visible
828 setting, though it could be made so if there is demand for it.
832 setting, though it could be made so if there is demand for it.
829
833
830 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
834 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
831
835
832 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
836 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
833
837
834 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
838 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
835
839
836 * IPython/genutils.py: Add 2.2 compatibility here, so all other
840 * IPython/genutils.py: Add 2.2 compatibility here, so all other
837 code can work transparently for 2.2/2.3.
841 code can work transparently for 2.2/2.3.
838
842
839 2005-07-16 Fernando Perez <fperez@colorado.edu>
843 2005-07-16 Fernando Perez <fperez@colorado.edu>
840
844
841 * IPython/ultraTB.py (ExceptionColors): Make a global variable
845 * IPython/ultraTB.py (ExceptionColors): Make a global variable
842 out of the color scheme table used for coloring exception
846 out of the color scheme table used for coloring exception
843 tracebacks. This allows user code to add new schemes at runtime.
847 tracebacks. This allows user code to add new schemes at runtime.
844 This is a minimally modified version of the patch at
848 This is a minimally modified version of the patch at
845 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
849 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
846 for the contribution.
850 for the contribution.
847
851
848 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
852 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
849 slightly modified version of the patch in
853 slightly modified version of the patch in
850 http://www.scipy.net/roundup/ipython/issue34, which also allows me
854 http://www.scipy.net/roundup/ipython/issue34, which also allows me
851 to remove the previous try/except solution (which was costlier).
855 to remove the previous try/except solution (which was costlier).
852 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
856 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
853
857
854 2005-06-08 Fernando Perez <fperez@colorado.edu>
858 2005-06-08 Fernando Perez <fperez@colorado.edu>
855
859
856 * IPython/iplib.py (write/write_err): Add methods to abstract all
860 * IPython/iplib.py (write/write_err): Add methods to abstract all
857 I/O a bit more.
861 I/O a bit more.
858
862
859 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
863 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
860 warning, reported by Aric Hagberg, fix by JD Hunter.
864 warning, reported by Aric Hagberg, fix by JD Hunter.
861
865
862 2005-06-02 *** Released version 0.6.15
866 2005-06-02 *** Released version 0.6.15
863
867
864 2005-06-01 Fernando Perez <fperez@colorado.edu>
868 2005-06-01 Fernando Perez <fperez@colorado.edu>
865
869
866 * IPython/iplib.py (MagicCompleter.file_matches): Fix
870 * IPython/iplib.py (MagicCompleter.file_matches): Fix
867 tab-completion of filenames within open-quoted strings. Note that
871 tab-completion of filenames within open-quoted strings. Note that
868 this requires that in ~/.ipython/ipythonrc, users change the
872 this requires that in ~/.ipython/ipythonrc, users change the
869 readline delimiters configuration to read:
873 readline delimiters configuration to read:
870
874
871 readline_remove_delims -/~
875 readline_remove_delims -/~
872
876
873
877
874 2005-05-31 *** Released version 0.6.14
878 2005-05-31 *** Released version 0.6.14
875
879
876 2005-05-29 Fernando Perez <fperez@colorado.edu>
880 2005-05-29 Fernando Perez <fperez@colorado.edu>
877
881
878 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
882 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
879 with files not on the filesystem. Reported by Eliyahu Sandler
883 with files not on the filesystem. Reported by Eliyahu Sandler
880 <eli@gondolin.net>
884 <eli@gondolin.net>
881
885
882 2005-05-22 Fernando Perez <fperez@colorado.edu>
886 2005-05-22 Fernando Perez <fperez@colorado.edu>
883
887
884 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
888 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
885 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
889 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
886
890
887 2005-05-19 Fernando Perez <fperez@colorado.edu>
891 2005-05-19 Fernando Perez <fperez@colorado.edu>
888
892
889 * IPython/iplib.py (safe_execfile): close a file which could be
893 * IPython/iplib.py (safe_execfile): close a file which could be
890 left open (causing problems in win32, which locks open files).
894 left open (causing problems in win32, which locks open files).
891 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
895 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
892
896
893 2005-05-18 Fernando Perez <fperez@colorado.edu>
897 2005-05-18 Fernando Perez <fperez@colorado.edu>
894
898
895 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
899 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
896 keyword arguments correctly to safe_execfile().
900 keyword arguments correctly to safe_execfile().
897
901
898 2005-05-13 Fernando Perez <fperez@colorado.edu>
902 2005-05-13 Fernando Perez <fperez@colorado.edu>
899
903
900 * ipython.1: Added info about Qt to manpage, and threads warning
904 * ipython.1: Added info about Qt to manpage, and threads warning
901 to usage page (invoked with --help).
905 to usage page (invoked with --help).
902
906
903 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
907 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
904 new matcher (it goes at the end of the priority list) to do
908 new matcher (it goes at the end of the priority list) to do
905 tab-completion on named function arguments. Submitted by George
909 tab-completion on named function arguments. Submitted by George
906 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
910 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
907 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
911 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
908 for more details.
912 for more details.
909
913
910 * IPython/Magic.py (magic_run): Added new -e flag to ignore
914 * IPython/Magic.py (magic_run): Added new -e flag to ignore
911 SystemExit exceptions in the script being run. Thanks to a report
915 SystemExit exceptions in the script being run. Thanks to a report
912 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
916 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
913 producing very annoying behavior when running unit tests.
917 producing very annoying behavior when running unit tests.
914
918
915 2005-05-12 Fernando Perez <fperez@colorado.edu>
919 2005-05-12 Fernando Perez <fperez@colorado.edu>
916
920
917 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
921 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
918 which I'd broken (again) due to a changed regexp. In the process,
922 which I'd broken (again) due to a changed regexp. In the process,
919 added ';' as an escape to auto-quote the whole line without
923 added ';' as an escape to auto-quote the whole line without
920 splitting its arguments. Thanks to a report by Jerry McRae
924 splitting its arguments. Thanks to a report by Jerry McRae
921 <qrs0xyc02-AT-sneakemail.com>.
925 <qrs0xyc02-AT-sneakemail.com>.
922
926
923 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
927 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
924 possible crashes caused by a TokenError. Reported by Ed Schofield
928 possible crashes caused by a TokenError. Reported by Ed Schofield
925 <schofield-AT-ftw.at>.
929 <schofield-AT-ftw.at>.
926
930
927 2005-05-06 Fernando Perez <fperez@colorado.edu>
931 2005-05-06 Fernando Perez <fperez@colorado.edu>
928
932
929 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
933 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
930
934
931 2005-04-29 Fernando Perez <fperez@colorado.edu>
935 2005-04-29 Fernando Perez <fperez@colorado.edu>
932
936
933 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
937 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
934 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
938 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
935 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
939 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
936 which provides support for Qt interactive usage (similar to the
940 which provides support for Qt interactive usage (similar to the
937 existing one for WX and GTK). This had been often requested.
941 existing one for WX and GTK). This had been often requested.
938
942
939 2005-04-14 *** Released version 0.6.13
943 2005-04-14 *** Released version 0.6.13
940
944
941 2005-04-08 Fernando Perez <fperez@colorado.edu>
945 2005-04-08 Fernando Perez <fperez@colorado.edu>
942
946
943 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
947 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
944 from _ofind, which gets called on almost every input line. Now,
948 from _ofind, which gets called on almost every input line. Now,
945 we only try to get docstrings if they are actually going to be
949 we only try to get docstrings if they are actually going to be
946 used (the overhead of fetching unnecessary docstrings can be
950 used (the overhead of fetching unnecessary docstrings can be
947 noticeable for certain objects, such as Pyro proxies).
951 noticeable for certain objects, such as Pyro proxies).
948
952
949 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
953 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
950 for completers. For some reason I had been passing them the state
954 for completers. For some reason I had been passing them the state
951 variable, which completers never actually need, and was in
955 variable, which completers never actually need, and was in
952 conflict with the rlcompleter API. Custom completers ONLY need to
956 conflict with the rlcompleter API. Custom completers ONLY need to
953 take the text parameter.
957 take the text parameter.
954
958
955 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
959 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
956 work correctly in pysh. I've also moved all the logic which used
960 work correctly in pysh. I've also moved all the logic which used
957 to be in pysh.py here, which will prevent problems with future
961 to be in pysh.py here, which will prevent problems with future
958 upgrades. However, this time I must warn users to update their
962 upgrades. However, this time I must warn users to update their
959 pysh profile to include the line
963 pysh profile to include the line
960
964
961 import_all IPython.Extensions.InterpreterExec
965 import_all IPython.Extensions.InterpreterExec
962
966
963 because otherwise things won't work for them. They MUST also
967 because otherwise things won't work for them. They MUST also
964 delete pysh.py and the line
968 delete pysh.py and the line
965
969
966 execfile pysh.py
970 execfile pysh.py
967
971
968 from their ipythonrc-pysh.
972 from their ipythonrc-pysh.
969
973
970 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
974 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
971 robust in the face of objects whose dir() returns non-strings
975 robust in the face of objects whose dir() returns non-strings
972 (which it shouldn't, but some broken libs like ITK do). Thanks to
976 (which it shouldn't, but some broken libs like ITK do). Thanks to
973 a patch by John Hunter (implemented differently, though). Also
977 a patch by John Hunter (implemented differently, though). Also
974 minor improvements by using .extend instead of + on lists.
978 minor improvements by using .extend instead of + on lists.
975
979
976 * pysh.py:
980 * pysh.py:
977
981
978 2005-04-06 Fernando Perez <fperez@colorado.edu>
982 2005-04-06 Fernando Perez <fperez@colorado.edu>
979
983
980 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
984 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
981 by default, so that all users benefit from it. Those who don't
985 by default, so that all users benefit from it. Those who don't
982 want it can still turn it off.
986 want it can still turn it off.
983
987
984 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
988 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
985 config file, I'd forgotten about this, so users were getting it
989 config file, I'd forgotten about this, so users were getting it
986 off by default.
990 off by default.
987
991
988 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
992 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
989 consistency. Now magics can be called in multiline statements,
993 consistency. Now magics can be called in multiline statements,
990 and python variables can be expanded in magic calls via $var.
994 and python variables can be expanded in magic calls via $var.
991 This makes the magic system behave just like aliases or !system
995 This makes the magic system behave just like aliases or !system
992 calls.
996 calls.
993
997
994 2005-03-28 Fernando Perez <fperez@colorado.edu>
998 2005-03-28 Fernando Perez <fperez@colorado.edu>
995
999
996 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1000 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
997 expensive string additions for building command. Add support for
1001 expensive string additions for building command. Add support for
998 trailing ';' when autocall is used.
1002 trailing ';' when autocall is used.
999
1003
1000 2005-03-26 Fernando Perez <fperez@colorado.edu>
1004 2005-03-26 Fernando Perez <fperez@colorado.edu>
1001
1005
1002 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1006 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1003 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1007 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1004 ipython.el robust against prompts with any number of spaces
1008 ipython.el robust against prompts with any number of spaces
1005 (including 0) after the ':' character.
1009 (including 0) after the ':' character.
1006
1010
1007 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1011 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1008 continuation prompt, which misled users to think the line was
1012 continuation prompt, which misled users to think the line was
1009 already indented. Closes debian Bug#300847, reported to me by
1013 already indented. Closes debian Bug#300847, reported to me by
1010 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1014 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1011
1015
1012 2005-03-23 Fernando Perez <fperez@colorado.edu>
1016 2005-03-23 Fernando Perez <fperez@colorado.edu>
1013
1017
1014 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1018 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1015 properly aligned if they have embedded newlines.
1019 properly aligned if they have embedded newlines.
1016
1020
1017 * IPython/iplib.py (runlines): Add a public method to expose
1021 * IPython/iplib.py (runlines): Add a public method to expose
1018 IPython's code execution machinery, so that users can run strings
1022 IPython's code execution machinery, so that users can run strings
1019 as if they had been typed at the prompt interactively.
1023 as if they had been typed at the prompt interactively.
1020 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1024 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1021 methods which can call the system shell, but with python variable
1025 methods which can call the system shell, but with python variable
1022 expansion. The three such methods are: __IPYTHON__.system,
1026 expansion. The three such methods are: __IPYTHON__.system,
1023 .getoutput and .getoutputerror. These need to be documented in a
1027 .getoutput and .getoutputerror. These need to be documented in a
1024 'public API' section (to be written) of the manual.
1028 'public API' section (to be written) of the manual.
1025
1029
1026 2005-03-20 Fernando Perez <fperez@colorado.edu>
1030 2005-03-20 Fernando Perez <fperez@colorado.edu>
1027
1031
1028 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1032 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1029 for custom exception handling. This is quite powerful, and it
1033 for custom exception handling. This is quite powerful, and it
1030 allows for user-installable exception handlers which can trap
1034 allows for user-installable exception handlers which can trap
1031 custom exceptions at runtime and treat them separately from
1035 custom exceptions at runtime and treat them separately from
1032 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1036 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1033 Mantegazza <mantegazza-AT-ill.fr>.
1037 Mantegazza <mantegazza-AT-ill.fr>.
1034 (InteractiveShell.set_custom_completer): public API function to
1038 (InteractiveShell.set_custom_completer): public API function to
1035 add new completers at runtime.
1039 add new completers at runtime.
1036
1040
1037 2005-03-19 Fernando Perez <fperez@colorado.edu>
1041 2005-03-19 Fernando Perez <fperez@colorado.edu>
1038
1042
1039 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1043 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1040 allow objects which provide their docstrings via non-standard
1044 allow objects which provide their docstrings via non-standard
1041 mechanisms (like Pyro proxies) to still be inspected by ipython's
1045 mechanisms (like Pyro proxies) to still be inspected by ipython's
1042 ? system.
1046 ? system.
1043
1047
1044 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1048 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1045 automatic capture system. I tried quite hard to make it work
1049 automatic capture system. I tried quite hard to make it work
1046 reliably, and simply failed. I tried many combinations with the
1050 reliably, and simply failed. I tried many combinations with the
1047 subprocess module, but eventually nothing worked in all needed
1051 subprocess module, but eventually nothing worked in all needed
1048 cases (not blocking stdin for the child, duplicating stdout
1052 cases (not blocking stdin for the child, duplicating stdout
1049 without blocking, etc). The new %sc/%sx still do capture to these
1053 without blocking, etc). The new %sc/%sx still do capture to these
1050 magical list/string objects which make shell use much more
1054 magical list/string objects which make shell use much more
1051 conveninent, so not all is lost.
1055 conveninent, so not all is lost.
1052
1056
1053 XXX - FIX MANUAL for the change above!
1057 XXX - FIX MANUAL for the change above!
1054
1058
1055 (runsource): I copied code.py's runsource() into ipython to modify
1059 (runsource): I copied code.py's runsource() into ipython to modify
1056 it a bit. Now the code object and source to be executed are
1060 it a bit. Now the code object and source to be executed are
1057 stored in ipython. This makes this info accessible to third-party
1061 stored in ipython. This makes this info accessible to third-party
1058 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1062 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1059 Mantegazza <mantegazza-AT-ill.fr>.
1063 Mantegazza <mantegazza-AT-ill.fr>.
1060
1064
1061 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1065 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1062 history-search via readline (like C-p/C-n). I'd wanted this for a
1066 history-search via readline (like C-p/C-n). I'd wanted this for a
1063 long time, but only recently found out how to do it. For users
1067 long time, but only recently found out how to do it. For users
1064 who already have their ipythonrc files made and want this, just
1068 who already have their ipythonrc files made and want this, just
1065 add:
1069 add:
1066
1070
1067 readline_parse_and_bind "\e[A": history-search-backward
1071 readline_parse_and_bind "\e[A": history-search-backward
1068 readline_parse_and_bind "\e[B": history-search-forward
1072 readline_parse_and_bind "\e[B": history-search-forward
1069
1073
1070 2005-03-18 Fernando Perez <fperez@colorado.edu>
1074 2005-03-18 Fernando Perez <fperez@colorado.edu>
1071
1075
1072 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1076 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1073 LSString and SList classes which allow transparent conversions
1077 LSString and SList classes which allow transparent conversions
1074 between list mode and whitespace-separated string.
1078 between list mode and whitespace-separated string.
1075 (magic_r): Fix recursion problem in %r.
1079 (magic_r): Fix recursion problem in %r.
1076
1080
1077 * IPython/genutils.py (LSString): New class to be used for
1081 * IPython/genutils.py (LSString): New class to be used for
1078 automatic storage of the results of all alias/system calls in _o
1082 automatic storage of the results of all alias/system calls in _o
1079 and _e (stdout/err). These provide a .l/.list attribute which
1083 and _e (stdout/err). These provide a .l/.list attribute which
1080 does automatic splitting on newlines. This means that for most
1084 does automatic splitting on newlines. This means that for most
1081 uses, you'll never need to do capturing of output with %sc/%sx
1085 uses, you'll never need to do capturing of output with %sc/%sx
1082 anymore, since ipython keeps this always done for you. Note that
1086 anymore, since ipython keeps this always done for you. Note that
1083 only the LAST results are stored, the _o/e variables are
1087 only the LAST results are stored, the _o/e variables are
1084 overwritten on each call. If you need to save their contents
1088 overwritten on each call. If you need to save their contents
1085 further, simply bind them to any other name.
1089 further, simply bind them to any other name.
1086
1090
1087 2005-03-17 Fernando Perez <fperez@colorado.edu>
1091 2005-03-17 Fernando Perez <fperez@colorado.edu>
1088
1092
1089 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1093 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1090 prompt namespace handling.
1094 prompt namespace handling.
1091
1095
1092 2005-03-16 Fernando Perez <fperez@colorado.edu>
1096 2005-03-16 Fernando Perez <fperez@colorado.edu>
1093
1097
1094 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1098 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1095 classic prompts to be '>>> ' (final space was missing, and it
1099 classic prompts to be '>>> ' (final space was missing, and it
1096 trips the emacs python mode).
1100 trips the emacs python mode).
1097 (BasePrompt.__str__): Added safe support for dynamic prompt
1101 (BasePrompt.__str__): Added safe support for dynamic prompt
1098 strings. Now you can set your prompt string to be '$x', and the
1102 strings. Now you can set your prompt string to be '$x', and the
1099 value of x will be printed from your interactive namespace. The
1103 value of x will be printed from your interactive namespace. The
1100 interpolation syntax includes the full Itpl support, so
1104 interpolation syntax includes the full Itpl support, so
1101 ${foo()+x+bar()} is a valid prompt string now, and the function
1105 ${foo()+x+bar()} is a valid prompt string now, and the function
1102 calls will be made at runtime.
1106 calls will be made at runtime.
1103
1107
1104 2005-03-15 Fernando Perez <fperez@colorado.edu>
1108 2005-03-15 Fernando Perez <fperez@colorado.edu>
1105
1109
1106 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1110 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1107 avoid name clashes in pylab. %hist still works, it just forwards
1111 avoid name clashes in pylab. %hist still works, it just forwards
1108 the call to %history.
1112 the call to %history.
1109
1113
1110 2005-03-02 *** Released version 0.6.12
1114 2005-03-02 *** Released version 0.6.12
1111
1115
1112 2005-03-02 Fernando Perez <fperez@colorado.edu>
1116 2005-03-02 Fernando Perez <fperez@colorado.edu>
1113
1117
1114 * IPython/iplib.py (handle_magic): log magic calls properly as
1118 * IPython/iplib.py (handle_magic): log magic calls properly as
1115 ipmagic() function calls.
1119 ipmagic() function calls.
1116
1120
1117 * IPython/Magic.py (magic_time): Improved %time to support
1121 * IPython/Magic.py (magic_time): Improved %time to support
1118 statements and provide wall-clock as well as CPU time.
1122 statements and provide wall-clock as well as CPU time.
1119
1123
1120 2005-02-27 Fernando Perez <fperez@colorado.edu>
1124 2005-02-27 Fernando Perez <fperez@colorado.edu>
1121
1125
1122 * IPython/hooks.py: New hooks module, to expose user-modifiable
1126 * IPython/hooks.py: New hooks module, to expose user-modifiable
1123 IPython functionality in a clean manner. For now only the editor
1127 IPython functionality in a clean manner. For now only the editor
1124 hook is actually written, and other thigns which I intend to turn
1128 hook is actually written, and other thigns which I intend to turn
1125 into proper hooks aren't yet there. The display and prefilter
1129 into proper hooks aren't yet there. The display and prefilter
1126 stuff, for example, should be hooks. But at least now the
1130 stuff, for example, should be hooks. But at least now the
1127 framework is in place, and the rest can be moved here with more
1131 framework is in place, and the rest can be moved here with more
1128 time later. IPython had had a .hooks variable for a long time for
1132 time later. IPython had had a .hooks variable for a long time for
1129 this purpose, but I'd never actually used it for anything.
1133 this purpose, but I'd never actually used it for anything.
1130
1134
1131 2005-02-26 Fernando Perez <fperez@colorado.edu>
1135 2005-02-26 Fernando Perez <fperez@colorado.edu>
1132
1136
1133 * IPython/ipmaker.py (make_IPython): make the default ipython
1137 * IPython/ipmaker.py (make_IPython): make the default ipython
1134 directory be called _ipython under win32, to follow more the
1138 directory be called _ipython under win32, to follow more the
1135 naming peculiarities of that platform (where buggy software like
1139 naming peculiarities of that platform (where buggy software like
1136 Visual Sourcesafe breaks with .named directories). Reported by
1140 Visual Sourcesafe breaks with .named directories). Reported by
1137 Ville Vainio.
1141 Ville Vainio.
1138
1142
1139 2005-02-23 Fernando Perez <fperez@colorado.edu>
1143 2005-02-23 Fernando Perez <fperez@colorado.edu>
1140
1144
1141 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1145 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1142 auto_aliases for win32 which were causing problems. Users can
1146 auto_aliases for win32 which were causing problems. Users can
1143 define the ones they personally like.
1147 define the ones they personally like.
1144
1148
1145 2005-02-21 Fernando Perez <fperez@colorado.edu>
1149 2005-02-21 Fernando Perez <fperez@colorado.edu>
1146
1150
1147 * IPython/Magic.py (magic_time): new magic to time execution of
1151 * IPython/Magic.py (magic_time): new magic to time execution of
1148 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1152 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1149
1153
1150 2005-02-19 Fernando Perez <fperez@colorado.edu>
1154 2005-02-19 Fernando Perez <fperez@colorado.edu>
1151
1155
1152 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1156 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1153 into keys (for prompts, for example).
1157 into keys (for prompts, for example).
1154
1158
1155 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1159 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1156 prompts in case users want them. This introduces a small behavior
1160 prompts in case users want them. This introduces a small behavior
1157 change: ipython does not automatically add a space to all prompts
1161 change: ipython does not automatically add a space to all prompts
1158 anymore. To get the old prompts with a space, users should add it
1162 anymore. To get the old prompts with a space, users should add it
1159 manually to their ipythonrc file, so for example prompt_in1 should
1163 manually to their ipythonrc file, so for example prompt_in1 should
1160 now read 'In [\#]: ' instead of 'In [\#]:'.
1164 now read 'In [\#]: ' instead of 'In [\#]:'.
1161 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1165 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1162 file) to control left-padding of secondary prompts.
1166 file) to control left-padding of secondary prompts.
1163
1167
1164 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1168 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1165 the profiler can't be imported. Fix for Debian, which removed
1169 the profiler can't be imported. Fix for Debian, which removed
1166 profile.py because of License issues. I applied a slightly
1170 profile.py because of License issues. I applied a slightly
1167 modified version of the original Debian patch at
1171 modified version of the original Debian patch at
1168 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1172 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1169
1173
1170 2005-02-17 Fernando Perez <fperez@colorado.edu>
1174 2005-02-17 Fernando Perez <fperez@colorado.edu>
1171
1175
1172 * IPython/genutils.py (native_line_ends): Fix bug which would
1176 * IPython/genutils.py (native_line_ends): Fix bug which would
1173 cause improper line-ends under win32 b/c I was not opening files
1177 cause improper line-ends under win32 b/c I was not opening files
1174 in binary mode. Bug report and fix thanks to Ville.
1178 in binary mode. Bug report and fix thanks to Ville.
1175
1179
1176 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1180 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1177 trying to catch spurious foo[1] autocalls. My fix actually broke
1181 trying to catch spurious foo[1] autocalls. My fix actually broke
1178 ',/' autoquote/call with explicit escape (bad regexp).
1182 ',/' autoquote/call with explicit escape (bad regexp).
1179
1183
1180 2005-02-15 *** Released version 0.6.11
1184 2005-02-15 *** Released version 0.6.11
1181
1185
1182 2005-02-14 Fernando Perez <fperez@colorado.edu>
1186 2005-02-14 Fernando Perez <fperez@colorado.edu>
1183
1187
1184 * IPython/background_jobs.py: New background job management
1188 * IPython/background_jobs.py: New background job management
1185 subsystem. This is implemented via a new set of classes, and
1189 subsystem. This is implemented via a new set of classes, and
1186 IPython now provides a builtin 'jobs' object for background job
1190 IPython now provides a builtin 'jobs' object for background job
1187 execution. A convenience %bg magic serves as a lightweight
1191 execution. A convenience %bg magic serves as a lightweight
1188 frontend for starting the more common type of calls. This was
1192 frontend for starting the more common type of calls. This was
1189 inspired by discussions with B. Granger and the BackgroundCommand
1193 inspired by discussions with B. Granger and the BackgroundCommand
1190 class described in the book Python Scripting for Computational
1194 class described in the book Python Scripting for Computational
1191 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1195 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1192 (although ultimately no code from this text was used, as IPython's
1196 (although ultimately no code from this text was used, as IPython's
1193 system is a separate implementation).
1197 system is a separate implementation).
1194
1198
1195 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1199 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1196 to control the completion of single/double underscore names
1200 to control the completion of single/double underscore names
1197 separately. As documented in the example ipytonrc file, the
1201 separately. As documented in the example ipytonrc file, the
1198 readline_omit__names variable can now be set to 2, to omit even
1202 readline_omit__names variable can now be set to 2, to omit even
1199 single underscore names. Thanks to a patch by Brian Wong
1203 single underscore names. Thanks to a patch by Brian Wong
1200 <BrianWong-AT-AirgoNetworks.Com>.
1204 <BrianWong-AT-AirgoNetworks.Com>.
1201 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1205 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1202 be autocalled as foo([1]) if foo were callable. A problem for
1206 be autocalled as foo([1]) if foo were callable. A problem for
1203 things which are both callable and implement __getitem__.
1207 things which are both callable and implement __getitem__.
1204 (init_readline): Fix autoindentation for win32. Thanks to a patch
1208 (init_readline): Fix autoindentation for win32. Thanks to a patch
1205 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1209 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1206
1210
1207 2005-02-12 Fernando Perez <fperez@colorado.edu>
1211 2005-02-12 Fernando Perez <fperez@colorado.edu>
1208
1212
1209 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1213 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1210 which I had written long ago to sort out user error messages which
1214 which I had written long ago to sort out user error messages which
1211 may occur during startup. This seemed like a good idea initially,
1215 may occur during startup. This seemed like a good idea initially,
1212 but it has proven a disaster in retrospect. I don't want to
1216 but it has proven a disaster in retrospect. I don't want to
1213 change much code for now, so my fix is to set the internal 'debug'
1217 change much code for now, so my fix is to set the internal 'debug'
1214 flag to true everywhere, whose only job was precisely to control
1218 flag to true everywhere, whose only job was precisely to control
1215 this subsystem. This closes issue 28 (as well as avoiding all
1219 this subsystem. This closes issue 28 (as well as avoiding all
1216 sorts of strange hangups which occur from time to time).
1220 sorts of strange hangups which occur from time to time).
1217
1221
1218 2005-02-07 Fernando Perez <fperez@colorado.edu>
1222 2005-02-07 Fernando Perez <fperez@colorado.edu>
1219
1223
1220 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1224 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1221 previous call produced a syntax error.
1225 previous call produced a syntax error.
1222
1226
1223 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1227 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1224 classes without constructor.
1228 classes without constructor.
1225
1229
1226 2005-02-06 Fernando Perez <fperez@colorado.edu>
1230 2005-02-06 Fernando Perez <fperez@colorado.edu>
1227
1231
1228 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1232 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1229 completions with the results of each matcher, so we return results
1233 completions with the results of each matcher, so we return results
1230 to the user from all namespaces. This breaks with ipython
1234 to the user from all namespaces. This breaks with ipython
1231 tradition, but I think it's a nicer behavior. Now you get all
1235 tradition, but I think it's a nicer behavior. Now you get all
1232 possible completions listed, from all possible namespaces (python,
1236 possible completions listed, from all possible namespaces (python,
1233 filesystem, magics...) After a request by John Hunter
1237 filesystem, magics...) After a request by John Hunter
1234 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1238 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1235
1239
1236 2005-02-05 Fernando Perez <fperez@colorado.edu>
1240 2005-02-05 Fernando Perez <fperez@colorado.edu>
1237
1241
1238 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1242 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1239 the call had quote characters in it (the quotes were stripped).
1243 the call had quote characters in it (the quotes were stripped).
1240
1244
1241 2005-01-31 Fernando Perez <fperez@colorado.edu>
1245 2005-01-31 Fernando Perez <fperez@colorado.edu>
1242
1246
1243 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1247 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1244 Itpl.itpl() to make the code more robust against psyco
1248 Itpl.itpl() to make the code more robust against psyco
1245 optimizations.
1249 optimizations.
1246
1250
1247 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1251 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1248 of causing an exception. Quicker, cleaner.
1252 of causing an exception. Quicker, cleaner.
1249
1253
1250 2005-01-28 Fernando Perez <fperez@colorado.edu>
1254 2005-01-28 Fernando Perez <fperez@colorado.edu>
1251
1255
1252 * scripts/ipython_win_post_install.py (install): hardcode
1256 * scripts/ipython_win_post_install.py (install): hardcode
1253 sys.prefix+'python.exe' as the executable path. It turns out that
1257 sys.prefix+'python.exe' as the executable path. It turns out that
1254 during the post-installation run, sys.executable resolves to the
1258 during the post-installation run, sys.executable resolves to the
1255 name of the binary installer! I should report this as a distutils
1259 name of the binary installer! I should report this as a distutils
1256 bug, I think. I updated the .10 release with this tiny fix, to
1260 bug, I think. I updated the .10 release with this tiny fix, to
1257 avoid annoying the lists further.
1261 avoid annoying the lists further.
1258
1262
1259 2005-01-27 *** Released version 0.6.10
1263 2005-01-27 *** Released version 0.6.10
1260
1264
1261 2005-01-27 Fernando Perez <fperez@colorado.edu>
1265 2005-01-27 Fernando Perez <fperez@colorado.edu>
1262
1266
1263 * IPython/numutils.py (norm): Added 'inf' as optional name for
1267 * IPython/numutils.py (norm): Added 'inf' as optional name for
1264 L-infinity norm, included references to mathworld.com for vector
1268 L-infinity norm, included references to mathworld.com for vector
1265 norm definitions.
1269 norm definitions.
1266 (amin/amax): added amin/amax for array min/max. Similar to what
1270 (amin/amax): added amin/amax for array min/max. Similar to what
1267 pylab ships with after the recent reorganization of names.
1271 pylab ships with after the recent reorganization of names.
1268 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1272 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1269
1273
1270 * ipython.el: committed Alex's recent fixes and improvements.
1274 * ipython.el: committed Alex's recent fixes and improvements.
1271 Tested with python-mode from CVS, and it looks excellent. Since
1275 Tested with python-mode from CVS, and it looks excellent. Since
1272 python-mode hasn't released anything in a while, I'm temporarily
1276 python-mode hasn't released anything in a while, I'm temporarily
1273 putting a copy of today's CVS (v 4.70) of python-mode in:
1277 putting a copy of today's CVS (v 4.70) of python-mode in:
1274 http://ipython.scipy.org/tmp/python-mode.el
1278 http://ipython.scipy.org/tmp/python-mode.el
1275
1279
1276 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1280 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1277 sys.executable for the executable name, instead of assuming it's
1281 sys.executable for the executable name, instead of assuming it's
1278 called 'python.exe' (the post-installer would have produced broken
1282 called 'python.exe' (the post-installer would have produced broken
1279 setups on systems with a differently named python binary).
1283 setups on systems with a differently named python binary).
1280
1284
1281 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1285 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1282 references to os.linesep, to make the code more
1286 references to os.linesep, to make the code more
1283 platform-independent. This is also part of the win32 coloring
1287 platform-independent. This is also part of the win32 coloring
1284 fixes.
1288 fixes.
1285
1289
1286 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1290 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1287 lines, which actually cause coloring bugs because the length of
1291 lines, which actually cause coloring bugs because the length of
1288 the line is very difficult to correctly compute with embedded
1292 the line is very difficult to correctly compute with embedded
1289 escapes. This was the source of all the coloring problems under
1293 escapes. This was the source of all the coloring problems under
1290 Win32. I think that _finally_, Win32 users have a properly
1294 Win32. I think that _finally_, Win32 users have a properly
1291 working ipython in all respects. This would never have happened
1295 working ipython in all respects. This would never have happened
1292 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1296 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1293
1297
1294 2005-01-26 *** Released version 0.6.9
1298 2005-01-26 *** Released version 0.6.9
1295
1299
1296 2005-01-25 Fernando Perez <fperez@colorado.edu>
1300 2005-01-25 Fernando Perez <fperez@colorado.edu>
1297
1301
1298 * setup.py: finally, we have a true Windows installer, thanks to
1302 * setup.py: finally, we have a true Windows installer, thanks to
1299 the excellent work of Viktor Ransmayr
1303 the excellent work of Viktor Ransmayr
1300 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1304 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1301 Windows users. The setup routine is quite a bit cleaner thanks to
1305 Windows users. The setup routine is quite a bit cleaner thanks to
1302 this, and the post-install script uses the proper functions to
1306 this, and the post-install script uses the proper functions to
1303 allow a clean de-installation using the standard Windows Control
1307 allow a clean de-installation using the standard Windows Control
1304 Panel.
1308 Panel.
1305
1309
1306 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1310 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1307 environment variable under all OSes (including win32) if
1311 environment variable under all OSes (including win32) if
1308 available. This will give consistency to win32 users who have set
1312 available. This will give consistency to win32 users who have set
1309 this variable for any reason. If os.environ['HOME'] fails, the
1313 this variable for any reason. If os.environ['HOME'] fails, the
1310 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1314 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1311
1315
1312 2005-01-24 Fernando Perez <fperez@colorado.edu>
1316 2005-01-24 Fernando Perez <fperez@colorado.edu>
1313
1317
1314 * IPython/numutils.py (empty_like): add empty_like(), similar to
1318 * IPython/numutils.py (empty_like): add empty_like(), similar to
1315 zeros_like() but taking advantage of the new empty() Numeric routine.
1319 zeros_like() but taking advantage of the new empty() Numeric routine.
1316
1320
1317 2005-01-23 *** Released version 0.6.8
1321 2005-01-23 *** Released version 0.6.8
1318
1322
1319 2005-01-22 Fernando Perez <fperez@colorado.edu>
1323 2005-01-22 Fernando Perez <fperez@colorado.edu>
1320
1324
1321 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1325 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1322 automatic show() calls. After discussing things with JDH, it
1326 automatic show() calls. After discussing things with JDH, it
1323 turns out there are too many corner cases where this can go wrong.
1327 turns out there are too many corner cases where this can go wrong.
1324 It's best not to try to be 'too smart', and simply have ipython
1328 It's best not to try to be 'too smart', and simply have ipython
1325 reproduce as much as possible the default behavior of a normal
1329 reproduce as much as possible the default behavior of a normal
1326 python shell.
1330 python shell.
1327
1331
1328 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1332 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1329 line-splitting regexp and _prefilter() to avoid calling getattr()
1333 line-splitting regexp and _prefilter() to avoid calling getattr()
1330 on assignments. This closes
1334 on assignments. This closes
1331 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1335 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1332 readline uses getattr(), so a simple <TAB> keypress is still
1336 readline uses getattr(), so a simple <TAB> keypress is still
1333 enough to trigger getattr() calls on an object.
1337 enough to trigger getattr() calls on an object.
1334
1338
1335 2005-01-21 Fernando Perez <fperez@colorado.edu>
1339 2005-01-21 Fernando Perez <fperez@colorado.edu>
1336
1340
1337 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1341 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1338 docstring under pylab so it doesn't mask the original.
1342 docstring under pylab so it doesn't mask the original.
1339
1343
1340 2005-01-21 *** Released version 0.6.7
1344 2005-01-21 *** Released version 0.6.7
1341
1345
1342 2005-01-21 Fernando Perez <fperez@colorado.edu>
1346 2005-01-21 Fernando Perez <fperez@colorado.edu>
1343
1347
1344 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1348 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1345 signal handling for win32 users in multithreaded mode.
1349 signal handling for win32 users in multithreaded mode.
1346
1350
1347 2005-01-17 Fernando Perez <fperez@colorado.edu>
1351 2005-01-17 Fernando Perez <fperez@colorado.edu>
1348
1352
1349 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1353 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1350 instances with no __init__. After a crash report by Norbert Nemec
1354 instances with no __init__. After a crash report by Norbert Nemec
1351 <Norbert-AT-nemec-online.de>.
1355 <Norbert-AT-nemec-online.de>.
1352
1356
1353 2005-01-14 Fernando Perez <fperez@colorado.edu>
1357 2005-01-14 Fernando Perez <fperez@colorado.edu>
1354
1358
1355 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1359 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1356 names for verbose exceptions, when multiple dotted names and the
1360 names for verbose exceptions, when multiple dotted names and the
1357 'parent' object were present on the same line.
1361 'parent' object were present on the same line.
1358
1362
1359 2005-01-11 Fernando Perez <fperez@colorado.edu>
1363 2005-01-11 Fernando Perez <fperez@colorado.edu>
1360
1364
1361 * IPython/genutils.py (flag_calls): new utility to trap and flag
1365 * IPython/genutils.py (flag_calls): new utility to trap and flag
1362 calls in functions. I need it to clean up matplotlib support.
1366 calls in functions. I need it to clean up matplotlib support.
1363 Also removed some deprecated code in genutils.
1367 Also removed some deprecated code in genutils.
1364
1368
1365 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1369 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1366 that matplotlib scripts called with %run, which don't call show()
1370 that matplotlib scripts called with %run, which don't call show()
1367 themselves, still have their plotting windows open.
1371 themselves, still have their plotting windows open.
1368
1372
1369 2005-01-05 Fernando Perez <fperez@colorado.edu>
1373 2005-01-05 Fernando Perez <fperez@colorado.edu>
1370
1374
1371 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1375 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1372 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1376 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1373
1377
1374 2004-12-19 Fernando Perez <fperez@colorado.edu>
1378 2004-12-19 Fernando Perez <fperez@colorado.edu>
1375
1379
1376 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1380 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1377 parent_runcode, which was an eyesore. The same result can be
1381 parent_runcode, which was an eyesore. The same result can be
1378 obtained with Python's regular superclass mechanisms.
1382 obtained with Python's regular superclass mechanisms.
1379
1383
1380 2004-12-17 Fernando Perez <fperez@colorado.edu>
1384 2004-12-17 Fernando Perez <fperez@colorado.edu>
1381
1385
1382 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1386 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1383 reported by Prabhu.
1387 reported by Prabhu.
1384 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1388 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1385 sys.stderr) instead of explicitly calling sys.stderr. This helps
1389 sys.stderr) instead of explicitly calling sys.stderr. This helps
1386 maintain our I/O abstractions clean, for future GUI embeddings.
1390 maintain our I/O abstractions clean, for future GUI embeddings.
1387
1391
1388 * IPython/genutils.py (info): added new utility for sys.stderr
1392 * IPython/genutils.py (info): added new utility for sys.stderr
1389 unified info message handling (thin wrapper around warn()).
1393 unified info message handling (thin wrapper around warn()).
1390
1394
1391 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1395 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1392 composite (dotted) names on verbose exceptions.
1396 composite (dotted) names on verbose exceptions.
1393 (VerboseTB.nullrepr): harden against another kind of errors which
1397 (VerboseTB.nullrepr): harden against another kind of errors which
1394 Python's inspect module can trigger, and which were crashing
1398 Python's inspect module can trigger, and which were crashing
1395 IPython. Thanks to a report by Marco Lombardi
1399 IPython. Thanks to a report by Marco Lombardi
1396 <mlombard-AT-ma010192.hq.eso.org>.
1400 <mlombard-AT-ma010192.hq.eso.org>.
1397
1401
1398 2004-12-13 *** Released version 0.6.6
1402 2004-12-13 *** Released version 0.6.6
1399
1403
1400 2004-12-12 Fernando Perez <fperez@colorado.edu>
1404 2004-12-12 Fernando Perez <fperez@colorado.edu>
1401
1405
1402 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1406 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1403 generated by pygtk upon initialization if it was built without
1407 generated by pygtk upon initialization if it was built without
1404 threads (for matplotlib users). After a crash reported by
1408 threads (for matplotlib users). After a crash reported by
1405 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1409 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1406
1410
1407 * IPython/ipmaker.py (make_IPython): fix small bug in the
1411 * IPython/ipmaker.py (make_IPython): fix small bug in the
1408 import_some parameter for multiple imports.
1412 import_some parameter for multiple imports.
1409
1413
1410 * IPython/iplib.py (ipmagic): simplified the interface of
1414 * IPython/iplib.py (ipmagic): simplified the interface of
1411 ipmagic() to take a single string argument, just as it would be
1415 ipmagic() to take a single string argument, just as it would be
1412 typed at the IPython cmd line.
1416 typed at the IPython cmd line.
1413 (ipalias): Added new ipalias() with an interface identical to
1417 (ipalias): Added new ipalias() with an interface identical to
1414 ipmagic(). This completes exposing a pure python interface to the
1418 ipmagic(). This completes exposing a pure python interface to the
1415 alias and magic system, which can be used in loops or more complex
1419 alias and magic system, which can be used in loops or more complex
1416 code where IPython's automatic line mangling is not active.
1420 code where IPython's automatic line mangling is not active.
1417
1421
1418 * IPython/genutils.py (timing): changed interface of timing to
1422 * IPython/genutils.py (timing): changed interface of timing to
1419 simply run code once, which is the most common case. timings()
1423 simply run code once, which is the most common case. timings()
1420 remains unchanged, for the cases where you want multiple runs.
1424 remains unchanged, for the cases where you want multiple runs.
1421
1425
1422 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1426 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1423 bug where Python2.2 crashes with exec'ing code which does not end
1427 bug where Python2.2 crashes with exec'ing code which does not end
1424 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1428 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1425 before.
1429 before.
1426
1430
1427 2004-12-10 Fernando Perez <fperez@colorado.edu>
1431 2004-12-10 Fernando Perez <fperez@colorado.edu>
1428
1432
1429 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1433 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1430 -t to -T, to accomodate the new -t flag in %run (the %run and
1434 -t to -T, to accomodate the new -t flag in %run (the %run and
1431 %prun options are kind of intermixed, and it's not easy to change
1435 %prun options are kind of intermixed, and it's not easy to change
1432 this with the limitations of python's getopt).
1436 this with the limitations of python's getopt).
1433
1437
1434 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1438 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1435 the execution of scripts. It's not as fine-tuned as timeit.py,
1439 the execution of scripts. It's not as fine-tuned as timeit.py,
1436 but it works from inside ipython (and under 2.2, which lacks
1440 but it works from inside ipython (and under 2.2, which lacks
1437 timeit.py). Optionally a number of runs > 1 can be given for
1441 timeit.py). Optionally a number of runs > 1 can be given for
1438 timing very short-running code.
1442 timing very short-running code.
1439
1443
1440 * IPython/genutils.py (uniq_stable): new routine which returns a
1444 * IPython/genutils.py (uniq_stable): new routine which returns a
1441 list of unique elements in any iterable, but in stable order of
1445 list of unique elements in any iterable, but in stable order of
1442 appearance. I needed this for the ultraTB fixes, and it's a handy
1446 appearance. I needed this for the ultraTB fixes, and it's a handy
1443 utility.
1447 utility.
1444
1448
1445 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1449 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1446 dotted names in Verbose exceptions. This had been broken since
1450 dotted names in Verbose exceptions. This had been broken since
1447 the very start, now x.y will properly be printed in a Verbose
1451 the very start, now x.y will properly be printed in a Verbose
1448 traceback, instead of x being shown and y appearing always as an
1452 traceback, instead of x being shown and y appearing always as an
1449 'undefined global'. Getting this to work was a bit tricky,
1453 'undefined global'. Getting this to work was a bit tricky,
1450 because by default python tokenizers are stateless. Saved by
1454 because by default python tokenizers are stateless. Saved by
1451 python's ability to easily add a bit of state to an arbitrary
1455 python's ability to easily add a bit of state to an arbitrary
1452 function (without needing to build a full-blown callable object).
1456 function (without needing to build a full-blown callable object).
1453
1457
1454 Also big cleanup of this code, which had horrendous runtime
1458 Also big cleanup of this code, which had horrendous runtime
1455 lookups of zillions of attributes for colorization. Moved all
1459 lookups of zillions of attributes for colorization. Moved all
1456 this code into a few templates, which make it cleaner and quicker.
1460 this code into a few templates, which make it cleaner and quicker.
1457
1461
1458 Printout quality was also improved for Verbose exceptions: one
1462 Printout quality was also improved for Verbose exceptions: one
1459 variable per line, and memory addresses are printed (this can be
1463 variable per line, and memory addresses are printed (this can be
1460 quite handy in nasty debugging situations, which is what Verbose
1464 quite handy in nasty debugging situations, which is what Verbose
1461 is for).
1465 is for).
1462
1466
1463 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1467 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1464 the command line as scripts to be loaded by embedded instances.
1468 the command line as scripts to be loaded by embedded instances.
1465 Doing so has the potential for an infinite recursion if there are
1469 Doing so has the potential for an infinite recursion if there are
1466 exceptions thrown in the process. This fixes a strange crash
1470 exceptions thrown in the process. This fixes a strange crash
1467 reported by Philippe MULLER <muller-AT-irit.fr>.
1471 reported by Philippe MULLER <muller-AT-irit.fr>.
1468
1472
1469 2004-12-09 Fernando Perez <fperez@colorado.edu>
1473 2004-12-09 Fernando Perez <fperez@colorado.edu>
1470
1474
1471 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1475 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1472 to reflect new names in matplotlib, which now expose the
1476 to reflect new names in matplotlib, which now expose the
1473 matlab-compatible interface via a pylab module instead of the
1477 matlab-compatible interface via a pylab module instead of the
1474 'matlab' name. The new code is backwards compatible, so users of
1478 'matlab' name. The new code is backwards compatible, so users of
1475 all matplotlib versions are OK. Patch by J. Hunter.
1479 all matplotlib versions are OK. Patch by J. Hunter.
1476
1480
1477 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1481 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1478 of __init__ docstrings for instances (class docstrings are already
1482 of __init__ docstrings for instances (class docstrings are already
1479 automatically printed). Instances with customized docstrings
1483 automatically printed). Instances with customized docstrings
1480 (indep. of the class) are also recognized and all 3 separate
1484 (indep. of the class) are also recognized and all 3 separate
1481 docstrings are printed (instance, class, constructor). After some
1485 docstrings are printed (instance, class, constructor). After some
1482 comments/suggestions by J. Hunter.
1486 comments/suggestions by J. Hunter.
1483
1487
1484 2004-12-05 Fernando Perez <fperez@colorado.edu>
1488 2004-12-05 Fernando Perez <fperez@colorado.edu>
1485
1489
1486 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1490 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1487 warnings when tab-completion fails and triggers an exception.
1491 warnings when tab-completion fails and triggers an exception.
1488
1492
1489 2004-12-03 Fernando Perez <fperez@colorado.edu>
1493 2004-12-03 Fernando Perez <fperez@colorado.edu>
1490
1494
1491 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1495 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1492 be triggered when using 'run -p'. An incorrect option flag was
1496 be triggered when using 'run -p'. An incorrect option flag was
1493 being set ('d' instead of 'D').
1497 being set ('d' instead of 'D').
1494 (manpage): fix missing escaped \- sign.
1498 (manpage): fix missing escaped \- sign.
1495
1499
1496 2004-11-30 *** Released version 0.6.5
1500 2004-11-30 *** Released version 0.6.5
1497
1501
1498 2004-11-30 Fernando Perez <fperez@colorado.edu>
1502 2004-11-30 Fernando Perez <fperez@colorado.edu>
1499
1503
1500 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1504 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1501 setting with -d option.
1505 setting with -d option.
1502
1506
1503 * setup.py (docfiles): Fix problem where the doc glob I was using
1507 * setup.py (docfiles): Fix problem where the doc glob I was using
1504 was COMPLETELY BROKEN. It was giving the right files by pure
1508 was COMPLETELY BROKEN. It was giving the right files by pure
1505 accident, but failed once I tried to include ipython.el. Note:
1509 accident, but failed once I tried to include ipython.el. Note:
1506 glob() does NOT allow you to do exclusion on multiple endings!
1510 glob() does NOT allow you to do exclusion on multiple endings!
1507
1511
1508 2004-11-29 Fernando Perez <fperez@colorado.edu>
1512 2004-11-29 Fernando Perez <fperez@colorado.edu>
1509
1513
1510 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1514 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1511 the manpage as the source. Better formatting & consistency.
1515 the manpage as the source. Better formatting & consistency.
1512
1516
1513 * IPython/Magic.py (magic_run): Added new -d option, to run
1517 * IPython/Magic.py (magic_run): Added new -d option, to run
1514 scripts under the control of the python pdb debugger. Note that
1518 scripts under the control of the python pdb debugger. Note that
1515 this required changing the %prun option -d to -D, to avoid a clash
1519 this required changing the %prun option -d to -D, to avoid a clash
1516 (since %run must pass options to %prun, and getopt is too dumb to
1520 (since %run must pass options to %prun, and getopt is too dumb to
1517 handle options with string values with embedded spaces). Thanks
1521 handle options with string values with embedded spaces). Thanks
1518 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1522 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1519 (magic_who_ls): added type matching to %who and %whos, so that one
1523 (magic_who_ls): added type matching to %who and %whos, so that one
1520 can filter their output to only include variables of certain
1524 can filter their output to only include variables of certain
1521 types. Another suggestion by Matthew.
1525 types. Another suggestion by Matthew.
1522 (magic_whos): Added memory summaries in kb and Mb for arrays.
1526 (magic_whos): Added memory summaries in kb and Mb for arrays.
1523 (magic_who): Improve formatting (break lines every 9 vars).
1527 (magic_who): Improve formatting (break lines every 9 vars).
1524
1528
1525 2004-11-28 Fernando Perez <fperez@colorado.edu>
1529 2004-11-28 Fernando Perez <fperez@colorado.edu>
1526
1530
1527 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1531 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1528 cache when empty lines were present.
1532 cache when empty lines were present.
1529
1533
1530 2004-11-24 Fernando Perez <fperez@colorado.edu>
1534 2004-11-24 Fernando Perez <fperez@colorado.edu>
1531
1535
1532 * IPython/usage.py (__doc__): document the re-activated threading
1536 * IPython/usage.py (__doc__): document the re-activated threading
1533 options for WX and GTK.
1537 options for WX and GTK.
1534
1538
1535 2004-11-23 Fernando Perez <fperez@colorado.edu>
1539 2004-11-23 Fernando Perez <fperez@colorado.edu>
1536
1540
1537 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1541 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1538 the -wthread and -gthread options, along with a new -tk one to try
1542 the -wthread and -gthread options, along with a new -tk one to try
1539 and coordinate Tk threading with wx/gtk. The tk support is very
1543 and coordinate Tk threading with wx/gtk. The tk support is very
1540 platform dependent, since it seems to require Tcl and Tk to be
1544 platform dependent, since it seems to require Tcl and Tk to be
1541 built with threads (Fedora1/2 appears NOT to have it, but in
1545 built with threads (Fedora1/2 appears NOT to have it, but in
1542 Prabhu's Debian boxes it works OK). But even with some Tk
1546 Prabhu's Debian boxes it works OK). But even with some Tk
1543 limitations, this is a great improvement.
1547 limitations, this is a great improvement.
1544
1548
1545 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1549 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1546 info in user prompts. Patch by Prabhu.
1550 info in user prompts. Patch by Prabhu.
1547
1551
1548 2004-11-18 Fernando Perez <fperez@colorado.edu>
1552 2004-11-18 Fernando Perez <fperez@colorado.edu>
1549
1553
1550 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1554 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1551 EOFErrors and bail, to avoid infinite loops if a non-terminating
1555 EOFErrors and bail, to avoid infinite loops if a non-terminating
1552 file is fed into ipython. Patch submitted in issue 19 by user,
1556 file is fed into ipython. Patch submitted in issue 19 by user,
1553 many thanks.
1557 many thanks.
1554
1558
1555 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1559 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1556 autoquote/parens in continuation prompts, which can cause lots of
1560 autoquote/parens in continuation prompts, which can cause lots of
1557 problems. Closes roundup issue 20.
1561 problems. Closes roundup issue 20.
1558
1562
1559 2004-11-17 Fernando Perez <fperez@colorado.edu>
1563 2004-11-17 Fernando Perez <fperez@colorado.edu>
1560
1564
1561 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1565 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1562 reported as debian bug #280505. I'm not sure my local changelog
1566 reported as debian bug #280505. I'm not sure my local changelog
1563 entry has the proper debian format (Jack?).
1567 entry has the proper debian format (Jack?).
1564
1568
1565 2004-11-08 *** Released version 0.6.4
1569 2004-11-08 *** Released version 0.6.4
1566
1570
1567 2004-11-08 Fernando Perez <fperez@colorado.edu>
1571 2004-11-08 Fernando Perez <fperez@colorado.edu>
1568
1572
1569 * IPython/iplib.py (init_readline): Fix exit message for Windows
1573 * IPython/iplib.py (init_readline): Fix exit message for Windows
1570 when readline is active. Thanks to a report by Eric Jones
1574 when readline is active. Thanks to a report by Eric Jones
1571 <eric-AT-enthought.com>.
1575 <eric-AT-enthought.com>.
1572
1576
1573 2004-11-07 Fernando Perez <fperez@colorado.edu>
1577 2004-11-07 Fernando Perez <fperez@colorado.edu>
1574
1578
1575 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1579 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1576 sometimes seen by win2k/cygwin users.
1580 sometimes seen by win2k/cygwin users.
1577
1581
1578 2004-11-06 Fernando Perez <fperez@colorado.edu>
1582 2004-11-06 Fernando Perez <fperez@colorado.edu>
1579
1583
1580 * IPython/iplib.py (interact): Change the handling of %Exit from
1584 * IPython/iplib.py (interact): Change the handling of %Exit from
1581 trying to propagate a SystemExit to an internal ipython flag.
1585 trying to propagate a SystemExit to an internal ipython flag.
1582 This is less elegant than using Python's exception mechanism, but
1586 This is less elegant than using Python's exception mechanism, but
1583 I can't get that to work reliably with threads, so under -pylab
1587 I can't get that to work reliably with threads, so under -pylab
1584 %Exit was hanging IPython. Cross-thread exception handling is
1588 %Exit was hanging IPython. Cross-thread exception handling is
1585 really a bitch. Thaks to a bug report by Stephen Walton
1589 really a bitch. Thaks to a bug report by Stephen Walton
1586 <stephen.walton-AT-csun.edu>.
1590 <stephen.walton-AT-csun.edu>.
1587
1591
1588 2004-11-04 Fernando Perez <fperez@colorado.edu>
1592 2004-11-04 Fernando Perez <fperez@colorado.edu>
1589
1593
1590 * IPython/iplib.py (raw_input_original): store a pointer to the
1594 * IPython/iplib.py (raw_input_original): store a pointer to the
1591 true raw_input to harden against code which can modify it
1595 true raw_input to harden against code which can modify it
1592 (wx.py.PyShell does this and would otherwise crash ipython).
1596 (wx.py.PyShell does this and would otherwise crash ipython).
1593 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1597 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1594
1598
1595 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1599 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1596 Ctrl-C problem, which does not mess up the input line.
1600 Ctrl-C problem, which does not mess up the input line.
1597
1601
1598 2004-11-03 Fernando Perez <fperez@colorado.edu>
1602 2004-11-03 Fernando Perez <fperez@colorado.edu>
1599
1603
1600 * IPython/Release.py: Changed licensing to BSD, in all files.
1604 * IPython/Release.py: Changed licensing to BSD, in all files.
1601 (name): lowercase name for tarball/RPM release.
1605 (name): lowercase name for tarball/RPM release.
1602
1606
1603 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1607 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1604 use throughout ipython.
1608 use throughout ipython.
1605
1609
1606 * IPython/Magic.py (Magic._ofind): Switch to using the new
1610 * IPython/Magic.py (Magic._ofind): Switch to using the new
1607 OInspect.getdoc() function.
1611 OInspect.getdoc() function.
1608
1612
1609 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1613 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1610 of the line currently being canceled via Ctrl-C. It's extremely
1614 of the line currently being canceled via Ctrl-C. It's extremely
1611 ugly, but I don't know how to do it better (the problem is one of
1615 ugly, but I don't know how to do it better (the problem is one of
1612 handling cross-thread exceptions).
1616 handling cross-thread exceptions).
1613
1617
1614 2004-10-28 Fernando Perez <fperez@colorado.edu>
1618 2004-10-28 Fernando Perez <fperez@colorado.edu>
1615
1619
1616 * IPython/Shell.py (signal_handler): add signal handlers to trap
1620 * IPython/Shell.py (signal_handler): add signal handlers to trap
1617 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1621 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1618 report by Francesc Alted.
1622 report by Francesc Alted.
1619
1623
1620 2004-10-21 Fernando Perez <fperez@colorado.edu>
1624 2004-10-21 Fernando Perez <fperez@colorado.edu>
1621
1625
1622 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1626 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1623 to % for pysh syntax extensions.
1627 to % for pysh syntax extensions.
1624
1628
1625 2004-10-09 Fernando Perez <fperez@colorado.edu>
1629 2004-10-09 Fernando Perez <fperez@colorado.edu>
1626
1630
1627 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1631 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1628 arrays to print a more useful summary, without calling str(arr).
1632 arrays to print a more useful summary, without calling str(arr).
1629 This avoids the problem of extremely lengthy computations which
1633 This avoids the problem of extremely lengthy computations which
1630 occur if arr is large, and appear to the user as a system lockup
1634 occur if arr is large, and appear to the user as a system lockup
1631 with 100% cpu activity. After a suggestion by Kristian Sandberg
1635 with 100% cpu activity. After a suggestion by Kristian Sandberg
1632 <Kristian.Sandberg@colorado.edu>.
1636 <Kristian.Sandberg@colorado.edu>.
1633 (Magic.__init__): fix bug in global magic escapes not being
1637 (Magic.__init__): fix bug in global magic escapes not being
1634 correctly set.
1638 correctly set.
1635
1639
1636 2004-10-08 Fernando Perez <fperez@colorado.edu>
1640 2004-10-08 Fernando Perez <fperez@colorado.edu>
1637
1641
1638 * IPython/Magic.py (__license__): change to absolute imports of
1642 * IPython/Magic.py (__license__): change to absolute imports of
1639 ipython's own internal packages, to start adapting to the absolute
1643 ipython's own internal packages, to start adapting to the absolute
1640 import requirement of PEP-328.
1644 import requirement of PEP-328.
1641
1645
1642 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1646 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1643 files, and standardize author/license marks through the Release
1647 files, and standardize author/license marks through the Release
1644 module instead of having per/file stuff (except for files with
1648 module instead of having per/file stuff (except for files with
1645 particular licenses, like the MIT/PSF-licensed codes).
1649 particular licenses, like the MIT/PSF-licensed codes).
1646
1650
1647 * IPython/Debugger.py: remove dead code for python 2.1
1651 * IPython/Debugger.py: remove dead code for python 2.1
1648
1652
1649 2004-10-04 Fernando Perez <fperez@colorado.edu>
1653 2004-10-04 Fernando Perez <fperez@colorado.edu>
1650
1654
1651 * IPython/iplib.py (ipmagic): New function for accessing magics
1655 * IPython/iplib.py (ipmagic): New function for accessing magics
1652 via a normal python function call.
1656 via a normal python function call.
1653
1657
1654 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1658 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1655 from '@' to '%', to accomodate the new @decorator syntax of python
1659 from '@' to '%', to accomodate the new @decorator syntax of python
1656 2.4.
1660 2.4.
1657
1661
1658 2004-09-29 Fernando Perez <fperez@colorado.edu>
1662 2004-09-29 Fernando Perez <fperez@colorado.edu>
1659
1663
1660 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1664 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1661 matplotlib.use to prevent running scripts which try to switch
1665 matplotlib.use to prevent running scripts which try to switch
1662 interactive backends from within ipython. This will just crash
1666 interactive backends from within ipython. This will just crash
1663 the python interpreter, so we can't allow it (but a detailed error
1667 the python interpreter, so we can't allow it (but a detailed error
1664 is given to the user).
1668 is given to the user).
1665
1669
1666 2004-09-28 Fernando Perez <fperez@colorado.edu>
1670 2004-09-28 Fernando Perez <fperez@colorado.edu>
1667
1671
1668 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1672 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1669 matplotlib-related fixes so that using @run with non-matplotlib
1673 matplotlib-related fixes so that using @run with non-matplotlib
1670 scripts doesn't pop up spurious plot windows. This requires
1674 scripts doesn't pop up spurious plot windows. This requires
1671 matplotlib >= 0.63, where I had to make some changes as well.
1675 matplotlib >= 0.63, where I had to make some changes as well.
1672
1676
1673 * IPython/ipmaker.py (make_IPython): update version requirement to
1677 * IPython/ipmaker.py (make_IPython): update version requirement to
1674 python 2.2.
1678 python 2.2.
1675
1679
1676 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1680 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1677 banner arg for embedded customization.
1681 banner arg for embedded customization.
1678
1682
1679 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1683 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1680 explicit uses of __IP as the IPython's instance name. Now things
1684 explicit uses of __IP as the IPython's instance name. Now things
1681 are properly handled via the shell.name value. The actual code
1685 are properly handled via the shell.name value. The actual code
1682 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1686 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1683 is much better than before. I'll clean things completely when the
1687 is much better than before. I'll clean things completely when the
1684 magic stuff gets a real overhaul.
1688 magic stuff gets a real overhaul.
1685
1689
1686 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1690 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1687 minor changes to debian dir.
1691 minor changes to debian dir.
1688
1692
1689 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1693 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1690 pointer to the shell itself in the interactive namespace even when
1694 pointer to the shell itself in the interactive namespace even when
1691 a user-supplied dict is provided. This is needed for embedding
1695 a user-supplied dict is provided. This is needed for embedding
1692 purposes (found by tests with Michel Sanner).
1696 purposes (found by tests with Michel Sanner).
1693
1697
1694 2004-09-27 Fernando Perez <fperez@colorado.edu>
1698 2004-09-27 Fernando Perez <fperez@colorado.edu>
1695
1699
1696 * IPython/UserConfig/ipythonrc: remove []{} from
1700 * IPython/UserConfig/ipythonrc: remove []{} from
1697 readline_remove_delims, so that things like [modname.<TAB> do
1701 readline_remove_delims, so that things like [modname.<TAB> do
1698 proper completion. This disables [].TAB, but that's a less common
1702 proper completion. This disables [].TAB, but that's a less common
1699 case than module names in list comprehensions, for example.
1703 case than module names in list comprehensions, for example.
1700 Thanks to a report by Andrea Riciputi.
1704 Thanks to a report by Andrea Riciputi.
1701
1705
1702 2004-09-09 Fernando Perez <fperez@colorado.edu>
1706 2004-09-09 Fernando Perez <fperez@colorado.edu>
1703
1707
1704 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1708 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1705 blocking problems in win32 and osx. Fix by John.
1709 blocking problems in win32 and osx. Fix by John.
1706
1710
1707 2004-09-08 Fernando Perez <fperez@colorado.edu>
1711 2004-09-08 Fernando Perez <fperez@colorado.edu>
1708
1712
1709 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1713 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1710 for Win32 and OSX. Fix by John Hunter.
1714 for Win32 and OSX. Fix by John Hunter.
1711
1715
1712 2004-08-30 *** Released version 0.6.3
1716 2004-08-30 *** Released version 0.6.3
1713
1717
1714 2004-08-30 Fernando Perez <fperez@colorado.edu>
1718 2004-08-30 Fernando Perez <fperez@colorado.edu>
1715
1719
1716 * setup.py (isfile): Add manpages to list of dependent files to be
1720 * setup.py (isfile): Add manpages to list of dependent files to be
1717 updated.
1721 updated.
1718
1722
1719 2004-08-27 Fernando Perez <fperez@colorado.edu>
1723 2004-08-27 Fernando Perez <fperez@colorado.edu>
1720
1724
1721 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1725 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1722 for now. They don't really work with standalone WX/GTK code
1726 for now. They don't really work with standalone WX/GTK code
1723 (though matplotlib IS working fine with both of those backends).
1727 (though matplotlib IS working fine with both of those backends).
1724 This will neeed much more testing. I disabled most things with
1728 This will neeed much more testing. I disabled most things with
1725 comments, so turning it back on later should be pretty easy.
1729 comments, so turning it back on later should be pretty easy.
1726
1730
1727 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1731 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1728 autocalling of expressions like r'foo', by modifying the line
1732 autocalling of expressions like r'foo', by modifying the line
1729 split regexp. Closes
1733 split regexp. Closes
1730 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1734 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1731 Riley <ipythonbugs-AT-sabi.net>.
1735 Riley <ipythonbugs-AT-sabi.net>.
1732 (InteractiveShell.mainloop): honor --nobanner with banner
1736 (InteractiveShell.mainloop): honor --nobanner with banner
1733 extensions.
1737 extensions.
1734
1738
1735 * IPython/Shell.py: Significant refactoring of all classes, so
1739 * IPython/Shell.py: Significant refactoring of all classes, so
1736 that we can really support ALL matplotlib backends and threading
1740 that we can really support ALL matplotlib backends and threading
1737 models (John spotted a bug with Tk which required this). Now we
1741 models (John spotted a bug with Tk which required this). Now we
1738 should support single-threaded, WX-threads and GTK-threads, both
1742 should support single-threaded, WX-threads and GTK-threads, both
1739 for generic code and for matplotlib.
1743 for generic code and for matplotlib.
1740
1744
1741 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1745 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1742 -pylab, to simplify things for users. Will also remove the pylab
1746 -pylab, to simplify things for users. Will also remove the pylab
1743 profile, since now all of matplotlib configuration is directly
1747 profile, since now all of matplotlib configuration is directly
1744 handled here. This also reduces startup time.
1748 handled here. This also reduces startup time.
1745
1749
1746 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1750 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1747 shell wasn't being correctly called. Also in IPShellWX.
1751 shell wasn't being correctly called. Also in IPShellWX.
1748
1752
1749 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1753 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1750 fine-tune banner.
1754 fine-tune banner.
1751
1755
1752 * IPython/numutils.py (spike): Deprecate these spike functions,
1756 * IPython/numutils.py (spike): Deprecate these spike functions,
1753 delete (long deprecated) gnuplot_exec handler.
1757 delete (long deprecated) gnuplot_exec handler.
1754
1758
1755 2004-08-26 Fernando Perez <fperez@colorado.edu>
1759 2004-08-26 Fernando Perez <fperez@colorado.edu>
1756
1760
1757 * ipython.1: Update for threading options, plus some others which
1761 * ipython.1: Update for threading options, plus some others which
1758 were missing.
1762 were missing.
1759
1763
1760 * IPython/ipmaker.py (__call__): Added -wthread option for
1764 * IPython/ipmaker.py (__call__): Added -wthread option for
1761 wxpython thread handling. Make sure threading options are only
1765 wxpython thread handling. Make sure threading options are only
1762 valid at the command line.
1766 valid at the command line.
1763
1767
1764 * scripts/ipython: moved shell selection into a factory function
1768 * scripts/ipython: moved shell selection into a factory function
1765 in Shell.py, to keep the starter script to a minimum.
1769 in Shell.py, to keep the starter script to a minimum.
1766
1770
1767 2004-08-25 Fernando Perez <fperez@colorado.edu>
1771 2004-08-25 Fernando Perez <fperez@colorado.edu>
1768
1772
1769 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1773 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1770 John. Along with some recent changes he made to matplotlib, the
1774 John. Along with some recent changes he made to matplotlib, the
1771 next versions of both systems should work very well together.
1775 next versions of both systems should work very well together.
1772
1776
1773 2004-08-24 Fernando Perez <fperez@colorado.edu>
1777 2004-08-24 Fernando Perez <fperez@colorado.edu>
1774
1778
1775 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1779 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1776 tried to switch the profiling to using hotshot, but I'm getting
1780 tried to switch the profiling to using hotshot, but I'm getting
1777 strange errors from prof.runctx() there. I may be misreading the
1781 strange errors from prof.runctx() there. I may be misreading the
1778 docs, but it looks weird. For now the profiling code will
1782 docs, but it looks weird. For now the profiling code will
1779 continue to use the standard profiler.
1783 continue to use the standard profiler.
1780
1784
1781 2004-08-23 Fernando Perez <fperez@colorado.edu>
1785 2004-08-23 Fernando Perez <fperez@colorado.edu>
1782
1786
1783 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1787 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1784 threaded shell, by John Hunter. It's not quite ready yet, but
1788 threaded shell, by John Hunter. It's not quite ready yet, but
1785 close.
1789 close.
1786
1790
1787 2004-08-22 Fernando Perez <fperez@colorado.edu>
1791 2004-08-22 Fernando Perez <fperez@colorado.edu>
1788
1792
1789 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1793 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1790 in Magic and ultraTB.
1794 in Magic and ultraTB.
1791
1795
1792 * ipython.1: document threading options in manpage.
1796 * ipython.1: document threading options in manpage.
1793
1797
1794 * scripts/ipython: Changed name of -thread option to -gthread,
1798 * scripts/ipython: Changed name of -thread option to -gthread,
1795 since this is GTK specific. I want to leave the door open for a
1799 since this is GTK specific. I want to leave the door open for a
1796 -wthread option for WX, which will most likely be necessary. This
1800 -wthread option for WX, which will most likely be necessary. This
1797 change affects usage and ipmaker as well.
1801 change affects usage and ipmaker as well.
1798
1802
1799 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1803 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1800 handle the matplotlib shell issues. Code by John Hunter
1804 handle the matplotlib shell issues. Code by John Hunter
1801 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1805 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1802 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1806 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1803 broken (and disabled for end users) for now, but it puts the
1807 broken (and disabled for end users) for now, but it puts the
1804 infrastructure in place.
1808 infrastructure in place.
1805
1809
1806 2004-08-21 Fernando Perez <fperez@colorado.edu>
1810 2004-08-21 Fernando Perez <fperez@colorado.edu>
1807
1811
1808 * ipythonrc-pylab: Add matplotlib support.
1812 * ipythonrc-pylab: Add matplotlib support.
1809
1813
1810 * matplotlib_config.py: new files for matplotlib support, part of
1814 * matplotlib_config.py: new files for matplotlib support, part of
1811 the pylab profile.
1815 the pylab profile.
1812
1816
1813 * IPython/usage.py (__doc__): documented the threading options.
1817 * IPython/usage.py (__doc__): documented the threading options.
1814
1818
1815 2004-08-20 Fernando Perez <fperez@colorado.edu>
1819 2004-08-20 Fernando Perez <fperez@colorado.edu>
1816
1820
1817 * ipython: Modified the main calling routine to handle the -thread
1821 * ipython: Modified the main calling routine to handle the -thread
1818 and -mpthread options. This needs to be done as a top-level hack,
1822 and -mpthread options. This needs to be done as a top-level hack,
1819 because it determines which class to instantiate for IPython
1823 because it determines which class to instantiate for IPython
1820 itself.
1824 itself.
1821
1825
1822 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1826 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1823 classes to support multithreaded GTK operation without blocking,
1827 classes to support multithreaded GTK operation without blocking,
1824 and matplotlib with all backends. This is a lot of still very
1828 and matplotlib with all backends. This is a lot of still very
1825 experimental code, and threads are tricky. So it may still have a
1829 experimental code, and threads are tricky. So it may still have a
1826 few rough edges... This code owes a lot to
1830 few rough edges... This code owes a lot to
1827 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1831 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1828 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1832 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1829 to John Hunter for all the matplotlib work.
1833 to John Hunter for all the matplotlib work.
1830
1834
1831 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1835 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1832 options for gtk thread and matplotlib support.
1836 options for gtk thread and matplotlib support.
1833
1837
1834 2004-08-16 Fernando Perez <fperez@colorado.edu>
1838 2004-08-16 Fernando Perez <fperez@colorado.edu>
1835
1839
1836 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1840 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1837 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1841 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1838 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1842 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1839
1843
1840 2004-08-11 Fernando Perez <fperez@colorado.edu>
1844 2004-08-11 Fernando Perez <fperez@colorado.edu>
1841
1845
1842 * setup.py (isfile): Fix build so documentation gets updated for
1846 * setup.py (isfile): Fix build so documentation gets updated for
1843 rpms (it was only done for .tgz builds).
1847 rpms (it was only done for .tgz builds).
1844
1848
1845 2004-08-10 Fernando Perez <fperez@colorado.edu>
1849 2004-08-10 Fernando Perez <fperez@colorado.edu>
1846
1850
1847 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1851 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1848
1852
1849 * iplib.py : Silence syntax error exceptions in tab-completion.
1853 * iplib.py : Silence syntax error exceptions in tab-completion.
1850
1854
1851 2004-08-05 Fernando Perez <fperez@colorado.edu>
1855 2004-08-05 Fernando Perez <fperez@colorado.edu>
1852
1856
1853 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1857 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1854 'color off' mark for continuation prompts. This was causing long
1858 'color off' mark for continuation prompts. This was causing long
1855 continuation lines to mis-wrap.
1859 continuation lines to mis-wrap.
1856
1860
1857 2004-08-01 Fernando Perez <fperez@colorado.edu>
1861 2004-08-01 Fernando Perez <fperez@colorado.edu>
1858
1862
1859 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1863 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1860 for building ipython to be a parameter. All this is necessary
1864 for building ipython to be a parameter. All this is necessary
1861 right now to have a multithreaded version, but this insane
1865 right now to have a multithreaded version, but this insane
1862 non-design will be cleaned up soon. For now, it's a hack that
1866 non-design will be cleaned up soon. For now, it's a hack that
1863 works.
1867 works.
1864
1868
1865 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1869 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1866 args in various places. No bugs so far, but it's a dangerous
1870 args in various places. No bugs so far, but it's a dangerous
1867 practice.
1871 practice.
1868
1872
1869 2004-07-31 Fernando Perez <fperez@colorado.edu>
1873 2004-07-31 Fernando Perez <fperez@colorado.edu>
1870
1874
1871 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1875 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1872 fix completion of files with dots in their names under most
1876 fix completion of files with dots in their names under most
1873 profiles (pysh was OK because the completion order is different).
1877 profiles (pysh was OK because the completion order is different).
1874
1878
1875 2004-07-27 Fernando Perez <fperez@colorado.edu>
1879 2004-07-27 Fernando Perez <fperez@colorado.edu>
1876
1880
1877 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1881 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1878 keywords manually, b/c the one in keyword.py was removed in python
1882 keywords manually, b/c the one in keyword.py was removed in python
1879 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1883 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1880 This is NOT a bug under python 2.3 and earlier.
1884 This is NOT a bug under python 2.3 and earlier.
1881
1885
1882 2004-07-26 Fernando Perez <fperez@colorado.edu>
1886 2004-07-26 Fernando Perez <fperez@colorado.edu>
1883
1887
1884 * IPython/ultraTB.py (VerboseTB.text): Add another
1888 * IPython/ultraTB.py (VerboseTB.text): Add another
1885 linecache.checkcache() call to try to prevent inspect.py from
1889 linecache.checkcache() call to try to prevent inspect.py from
1886 crashing under python 2.3. I think this fixes
1890 crashing under python 2.3. I think this fixes
1887 http://www.scipy.net/roundup/ipython/issue17.
1891 http://www.scipy.net/roundup/ipython/issue17.
1888
1892
1889 2004-07-26 *** Released version 0.6.2
1893 2004-07-26 *** Released version 0.6.2
1890
1894
1891 2004-07-26 Fernando Perez <fperez@colorado.edu>
1895 2004-07-26 Fernando Perez <fperez@colorado.edu>
1892
1896
1893 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1897 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1894 fail for any number.
1898 fail for any number.
1895 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1899 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1896 empty bookmarks.
1900 empty bookmarks.
1897
1901
1898 2004-07-26 *** Released version 0.6.1
1902 2004-07-26 *** Released version 0.6.1
1899
1903
1900 2004-07-26 Fernando Perez <fperez@colorado.edu>
1904 2004-07-26 Fernando Perez <fperez@colorado.edu>
1901
1905
1902 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1906 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1903
1907
1904 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1908 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1905 escaping '()[]{}' in filenames.
1909 escaping '()[]{}' in filenames.
1906
1910
1907 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1911 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1908 Python 2.2 users who lack a proper shlex.split.
1912 Python 2.2 users who lack a proper shlex.split.
1909
1913
1910 2004-07-19 Fernando Perez <fperez@colorado.edu>
1914 2004-07-19 Fernando Perez <fperez@colorado.edu>
1911
1915
1912 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1916 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1913 for reading readline's init file. I follow the normal chain:
1917 for reading readline's init file. I follow the normal chain:
1914 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1918 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1915 report by Mike Heeter. This closes
1919 report by Mike Heeter. This closes
1916 http://www.scipy.net/roundup/ipython/issue16.
1920 http://www.scipy.net/roundup/ipython/issue16.
1917
1921
1918 2004-07-18 Fernando Perez <fperez@colorado.edu>
1922 2004-07-18 Fernando Perez <fperez@colorado.edu>
1919
1923
1920 * IPython/iplib.py (__init__): Add better handling of '\' under
1924 * IPython/iplib.py (__init__): Add better handling of '\' under
1921 Win32 for filenames. After a patch by Ville.
1925 Win32 for filenames. After a patch by Ville.
1922
1926
1923 2004-07-17 Fernando Perez <fperez@colorado.edu>
1927 2004-07-17 Fernando Perez <fperez@colorado.edu>
1924
1928
1925 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1929 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1926 autocalling would be triggered for 'foo is bar' if foo is
1930 autocalling would be triggered for 'foo is bar' if foo is
1927 callable. I also cleaned up the autocall detection code to use a
1931 callable. I also cleaned up the autocall detection code to use a
1928 regexp, which is faster. Bug reported by Alexander Schmolck.
1932 regexp, which is faster. Bug reported by Alexander Schmolck.
1929
1933
1930 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1934 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1931 '?' in them would confuse the help system. Reported by Alex
1935 '?' in them would confuse the help system. Reported by Alex
1932 Schmolck.
1936 Schmolck.
1933
1937
1934 2004-07-16 Fernando Perez <fperez@colorado.edu>
1938 2004-07-16 Fernando Perez <fperez@colorado.edu>
1935
1939
1936 * IPython/GnuplotInteractive.py (__all__): added plot2.
1940 * IPython/GnuplotInteractive.py (__all__): added plot2.
1937
1941
1938 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1942 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1939 plotting dictionaries, lists or tuples of 1d arrays.
1943 plotting dictionaries, lists or tuples of 1d arrays.
1940
1944
1941 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1945 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1942 optimizations.
1946 optimizations.
1943
1947
1944 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1948 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1945 the information which was there from Janko's original IPP code:
1949 the information which was there from Janko's original IPP code:
1946
1950
1947 03.05.99 20:53 porto.ifm.uni-kiel.de
1951 03.05.99 20:53 porto.ifm.uni-kiel.de
1948 --Started changelog.
1952 --Started changelog.
1949 --make clear do what it say it does
1953 --make clear do what it say it does
1950 --added pretty output of lines from inputcache
1954 --added pretty output of lines from inputcache
1951 --Made Logger a mixin class, simplifies handling of switches
1955 --Made Logger a mixin class, simplifies handling of switches
1952 --Added own completer class. .string<TAB> expands to last history
1956 --Added own completer class. .string<TAB> expands to last history
1953 line which starts with string. The new expansion is also present
1957 line which starts with string. The new expansion is also present
1954 with Ctrl-r from the readline library. But this shows, who this
1958 with Ctrl-r from the readline library. But this shows, who this
1955 can be done for other cases.
1959 can be done for other cases.
1956 --Added convention that all shell functions should accept a
1960 --Added convention that all shell functions should accept a
1957 parameter_string This opens the door for different behaviour for
1961 parameter_string This opens the door for different behaviour for
1958 each function. @cd is a good example of this.
1962 each function. @cd is a good example of this.
1959
1963
1960 04.05.99 12:12 porto.ifm.uni-kiel.de
1964 04.05.99 12:12 porto.ifm.uni-kiel.de
1961 --added logfile rotation
1965 --added logfile rotation
1962 --added new mainloop method which freezes first the namespace
1966 --added new mainloop method which freezes first the namespace
1963
1967
1964 07.05.99 21:24 porto.ifm.uni-kiel.de
1968 07.05.99 21:24 porto.ifm.uni-kiel.de
1965 --added the docreader classes. Now there is a help system.
1969 --added the docreader classes. Now there is a help system.
1966 -This is only a first try. Currently it's not easy to put new
1970 -This is only a first try. Currently it's not easy to put new
1967 stuff in the indices. But this is the way to go. Info would be
1971 stuff in the indices. But this is the way to go. Info would be
1968 better, but HTML is every where and not everybody has an info
1972 better, but HTML is every where and not everybody has an info
1969 system installed and it's not so easy to change html-docs to info.
1973 system installed and it's not so easy to change html-docs to info.
1970 --added global logfile option
1974 --added global logfile option
1971 --there is now a hook for object inspection method pinfo needs to
1975 --there is now a hook for object inspection method pinfo needs to
1972 be provided for this. Can be reached by two '??'.
1976 be provided for this. Can be reached by two '??'.
1973
1977
1974 08.05.99 20:51 porto.ifm.uni-kiel.de
1978 08.05.99 20:51 porto.ifm.uni-kiel.de
1975 --added a README
1979 --added a README
1976 --bug in rc file. Something has changed so functions in the rc
1980 --bug in rc file. Something has changed so functions in the rc
1977 file need to reference the shell and not self. Not clear if it's a
1981 file need to reference the shell and not self. Not clear if it's a
1978 bug or feature.
1982 bug or feature.
1979 --changed rc file for new behavior
1983 --changed rc file for new behavior
1980
1984
1981 2004-07-15 Fernando Perez <fperez@colorado.edu>
1985 2004-07-15 Fernando Perez <fperez@colorado.edu>
1982
1986
1983 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1987 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1984 cache was falling out of sync in bizarre manners when multi-line
1988 cache was falling out of sync in bizarre manners when multi-line
1985 input was present. Minor optimizations and cleanup.
1989 input was present. Minor optimizations and cleanup.
1986
1990
1987 (Logger): Remove old Changelog info for cleanup. This is the
1991 (Logger): Remove old Changelog info for cleanup. This is the
1988 information which was there from Janko's original code:
1992 information which was there from Janko's original code:
1989
1993
1990 Changes to Logger: - made the default log filename a parameter
1994 Changes to Logger: - made the default log filename a parameter
1991
1995
1992 - put a check for lines beginning with !@? in log(). Needed
1996 - put a check for lines beginning with !@? in log(). Needed
1993 (even if the handlers properly log their lines) for mid-session
1997 (even if the handlers properly log their lines) for mid-session
1994 logging activation to work properly. Without this, lines logged
1998 logging activation to work properly. Without this, lines logged
1995 in mid session, which get read from the cache, would end up
1999 in mid session, which get read from the cache, would end up
1996 'bare' (with !@? in the open) in the log. Now they are caught
2000 'bare' (with !@? in the open) in the log. Now they are caught
1997 and prepended with a #.
2001 and prepended with a #.
1998
2002
1999 * IPython/iplib.py (InteractiveShell.init_readline): added check
2003 * IPython/iplib.py (InteractiveShell.init_readline): added check
2000 in case MagicCompleter fails to be defined, so we don't crash.
2004 in case MagicCompleter fails to be defined, so we don't crash.
2001
2005
2002 2004-07-13 Fernando Perez <fperez@colorado.edu>
2006 2004-07-13 Fernando Perez <fperez@colorado.edu>
2003
2007
2004 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2008 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2005 of EPS if the requested filename ends in '.eps'.
2009 of EPS if the requested filename ends in '.eps'.
2006
2010
2007 2004-07-04 Fernando Perez <fperez@colorado.edu>
2011 2004-07-04 Fernando Perez <fperez@colorado.edu>
2008
2012
2009 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2013 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2010 escaping of quotes when calling the shell.
2014 escaping of quotes when calling the shell.
2011
2015
2012 2004-07-02 Fernando Perez <fperez@colorado.edu>
2016 2004-07-02 Fernando Perez <fperez@colorado.edu>
2013
2017
2014 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2018 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2015 gettext not working because we were clobbering '_'. Fixes
2019 gettext not working because we were clobbering '_'. Fixes
2016 http://www.scipy.net/roundup/ipython/issue6.
2020 http://www.scipy.net/roundup/ipython/issue6.
2017
2021
2018 2004-07-01 Fernando Perez <fperez@colorado.edu>
2022 2004-07-01 Fernando Perez <fperez@colorado.edu>
2019
2023
2020 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2024 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2021 into @cd. Patch by Ville.
2025 into @cd. Patch by Ville.
2022
2026
2023 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2027 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2024 new function to store things after ipmaker runs. Patch by Ville.
2028 new function to store things after ipmaker runs. Patch by Ville.
2025 Eventually this will go away once ipmaker is removed and the class
2029 Eventually this will go away once ipmaker is removed and the class
2026 gets cleaned up, but for now it's ok. Key functionality here is
2030 gets cleaned up, but for now it's ok. Key functionality here is
2027 the addition of the persistent storage mechanism, a dict for
2031 the addition of the persistent storage mechanism, a dict for
2028 keeping data across sessions (for now just bookmarks, but more can
2032 keeping data across sessions (for now just bookmarks, but more can
2029 be implemented later).
2033 be implemented later).
2030
2034
2031 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2035 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2032 persistent across sections. Patch by Ville, I modified it
2036 persistent across sections. Patch by Ville, I modified it
2033 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2037 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2034 added a '-l' option to list all bookmarks.
2038 added a '-l' option to list all bookmarks.
2035
2039
2036 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2040 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2037 center for cleanup. Registered with atexit.register(). I moved
2041 center for cleanup. Registered with atexit.register(). I moved
2038 here the old exit_cleanup(). After a patch by Ville.
2042 here the old exit_cleanup(). After a patch by Ville.
2039
2043
2040 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2044 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2041 characters in the hacked shlex_split for python 2.2.
2045 characters in the hacked shlex_split for python 2.2.
2042
2046
2043 * IPython/iplib.py (file_matches): more fixes to filenames with
2047 * IPython/iplib.py (file_matches): more fixes to filenames with
2044 whitespace in them. It's not perfect, but limitations in python's
2048 whitespace in them. It's not perfect, but limitations in python's
2045 readline make it impossible to go further.
2049 readline make it impossible to go further.
2046
2050
2047 2004-06-29 Fernando Perez <fperez@colorado.edu>
2051 2004-06-29 Fernando Perez <fperez@colorado.edu>
2048
2052
2049 * IPython/iplib.py (file_matches): escape whitespace correctly in
2053 * IPython/iplib.py (file_matches): escape whitespace correctly in
2050 filename completions. Bug reported by Ville.
2054 filename completions. Bug reported by Ville.
2051
2055
2052 2004-06-28 Fernando Perez <fperez@colorado.edu>
2056 2004-06-28 Fernando Perez <fperez@colorado.edu>
2053
2057
2054 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2058 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2055 the history file will be called 'history-PROFNAME' (or just
2059 the history file will be called 'history-PROFNAME' (or just
2056 'history' if no profile is loaded). I was getting annoyed at
2060 'history' if no profile is loaded). I was getting annoyed at
2057 getting my Numerical work history clobbered by pysh sessions.
2061 getting my Numerical work history clobbered by pysh sessions.
2058
2062
2059 * IPython/iplib.py (InteractiveShell.__init__): Internal
2063 * IPython/iplib.py (InteractiveShell.__init__): Internal
2060 getoutputerror() function so that we can honor the system_verbose
2064 getoutputerror() function so that we can honor the system_verbose
2061 flag for _all_ system calls. I also added escaping of #
2065 flag for _all_ system calls. I also added escaping of #
2062 characters here to avoid confusing Itpl.
2066 characters here to avoid confusing Itpl.
2063
2067
2064 * IPython/Magic.py (shlex_split): removed call to shell in
2068 * IPython/Magic.py (shlex_split): removed call to shell in
2065 parse_options and replaced it with shlex.split(). The annoying
2069 parse_options and replaced it with shlex.split(). The annoying
2066 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2070 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2067 to backport it from 2.3, with several frail hacks (the shlex
2071 to backport it from 2.3, with several frail hacks (the shlex
2068 module is rather limited in 2.2). Thanks to a suggestion by Ville
2072 module is rather limited in 2.2). Thanks to a suggestion by Ville
2069 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2073 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2070 problem.
2074 problem.
2071
2075
2072 (Magic.magic_system_verbose): new toggle to print the actual
2076 (Magic.magic_system_verbose): new toggle to print the actual
2073 system calls made by ipython. Mainly for debugging purposes.
2077 system calls made by ipython. Mainly for debugging purposes.
2074
2078
2075 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2079 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2076 doesn't support persistence. Reported (and fix suggested) by
2080 doesn't support persistence. Reported (and fix suggested) by
2077 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2081 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2078
2082
2079 2004-06-26 Fernando Perez <fperez@colorado.edu>
2083 2004-06-26 Fernando Perez <fperez@colorado.edu>
2080
2084
2081 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2085 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2082 continue prompts.
2086 continue prompts.
2083
2087
2084 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2088 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2085 function (basically a big docstring) and a few more things here to
2089 function (basically a big docstring) and a few more things here to
2086 speedup startup. pysh.py is now very lightweight. We want because
2090 speedup startup. pysh.py is now very lightweight. We want because
2087 it gets execfile'd, while InterpreterExec gets imported, so
2091 it gets execfile'd, while InterpreterExec gets imported, so
2088 byte-compilation saves time.
2092 byte-compilation saves time.
2089
2093
2090 2004-06-25 Fernando Perez <fperez@colorado.edu>
2094 2004-06-25 Fernando Perez <fperez@colorado.edu>
2091
2095
2092 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2096 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2093 -NUM', which was recently broken.
2097 -NUM', which was recently broken.
2094
2098
2095 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2099 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2096 in multi-line input (but not !!, which doesn't make sense there).
2100 in multi-line input (but not !!, which doesn't make sense there).
2097
2101
2098 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2102 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2099 It's just too useful, and people can turn it off in the less
2103 It's just too useful, and people can turn it off in the less
2100 common cases where it's a problem.
2104 common cases where it's a problem.
2101
2105
2102 2004-06-24 Fernando Perez <fperez@colorado.edu>
2106 2004-06-24 Fernando Perez <fperez@colorado.edu>
2103
2107
2104 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2108 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2105 special syntaxes (like alias calling) is now allied in multi-line
2109 special syntaxes (like alias calling) is now allied in multi-line
2106 input. This is still _very_ experimental, but it's necessary for
2110 input. This is still _very_ experimental, but it's necessary for
2107 efficient shell usage combining python looping syntax with system
2111 efficient shell usage combining python looping syntax with system
2108 calls. For now it's restricted to aliases, I don't think it
2112 calls. For now it's restricted to aliases, I don't think it
2109 really even makes sense to have this for magics.
2113 really even makes sense to have this for magics.
2110
2114
2111 2004-06-23 Fernando Perez <fperez@colorado.edu>
2115 2004-06-23 Fernando Perez <fperez@colorado.edu>
2112
2116
2113 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2117 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2114 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2118 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2115
2119
2116 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2120 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2117 extensions under Windows (after code sent by Gary Bishop). The
2121 extensions under Windows (after code sent by Gary Bishop). The
2118 extensions considered 'executable' are stored in IPython's rc
2122 extensions considered 'executable' are stored in IPython's rc
2119 structure as win_exec_ext.
2123 structure as win_exec_ext.
2120
2124
2121 * IPython/genutils.py (shell): new function, like system() but
2125 * IPython/genutils.py (shell): new function, like system() but
2122 without return value. Very useful for interactive shell work.
2126 without return value. Very useful for interactive shell work.
2123
2127
2124 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2128 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2125 delete aliases.
2129 delete aliases.
2126
2130
2127 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2131 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2128 sure that the alias table doesn't contain python keywords.
2132 sure that the alias table doesn't contain python keywords.
2129
2133
2130 2004-06-21 Fernando Perez <fperez@colorado.edu>
2134 2004-06-21 Fernando Perez <fperez@colorado.edu>
2131
2135
2132 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2136 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2133 non-existent items are found in $PATH. Reported by Thorsten.
2137 non-existent items are found in $PATH. Reported by Thorsten.
2134
2138
2135 2004-06-20 Fernando Perez <fperez@colorado.edu>
2139 2004-06-20 Fernando Perez <fperez@colorado.edu>
2136
2140
2137 * IPython/iplib.py (complete): modified the completer so that the
2141 * IPython/iplib.py (complete): modified the completer so that the
2138 order of priorities can be easily changed at runtime.
2142 order of priorities can be easily changed at runtime.
2139
2143
2140 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2144 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2141 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2145 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2142
2146
2143 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2147 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2144 expand Python variables prepended with $ in all system calls. The
2148 expand Python variables prepended with $ in all system calls. The
2145 same was done to InteractiveShell.handle_shell_escape. Now all
2149 same was done to InteractiveShell.handle_shell_escape. Now all
2146 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2150 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2147 expansion of python variables and expressions according to the
2151 expansion of python variables and expressions according to the
2148 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2152 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2149
2153
2150 Though PEP-215 has been rejected, a similar (but simpler) one
2154 Though PEP-215 has been rejected, a similar (but simpler) one
2151 seems like it will go into Python 2.4, PEP-292 -
2155 seems like it will go into Python 2.4, PEP-292 -
2152 http://www.python.org/peps/pep-0292.html.
2156 http://www.python.org/peps/pep-0292.html.
2153
2157
2154 I'll keep the full syntax of PEP-215, since IPython has since the
2158 I'll keep the full syntax of PEP-215, since IPython has since the
2155 start used Ka-Ping Yee's reference implementation discussed there
2159 start used Ka-Ping Yee's reference implementation discussed there
2156 (Itpl), and I actually like the powerful semantics it offers.
2160 (Itpl), and I actually like the powerful semantics it offers.
2157
2161
2158 In order to access normal shell variables, the $ has to be escaped
2162 In order to access normal shell variables, the $ has to be escaped
2159 via an extra $. For example:
2163 via an extra $. For example:
2160
2164
2161 In [7]: PATH='a python variable'
2165 In [7]: PATH='a python variable'
2162
2166
2163 In [8]: !echo $PATH
2167 In [8]: !echo $PATH
2164 a python variable
2168 a python variable
2165
2169
2166 In [9]: !echo $$PATH
2170 In [9]: !echo $$PATH
2167 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2171 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2168
2172
2169 (Magic.parse_options): escape $ so the shell doesn't evaluate
2173 (Magic.parse_options): escape $ so the shell doesn't evaluate
2170 things prematurely.
2174 things prematurely.
2171
2175
2172 * IPython/iplib.py (InteractiveShell.call_alias): added the
2176 * IPython/iplib.py (InteractiveShell.call_alias): added the
2173 ability for aliases to expand python variables via $.
2177 ability for aliases to expand python variables via $.
2174
2178
2175 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2179 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2176 system, now there's a @rehash/@rehashx pair of magics. These work
2180 system, now there's a @rehash/@rehashx pair of magics. These work
2177 like the csh rehash command, and can be invoked at any time. They
2181 like the csh rehash command, and can be invoked at any time. They
2178 build a table of aliases to everything in the user's $PATH
2182 build a table of aliases to everything in the user's $PATH
2179 (@rehash uses everything, @rehashx is slower but only adds
2183 (@rehash uses everything, @rehashx is slower but only adds
2180 executable files). With this, the pysh.py-based shell profile can
2184 executable files). With this, the pysh.py-based shell profile can
2181 now simply call rehash upon startup, and full access to all
2185 now simply call rehash upon startup, and full access to all
2182 programs in the user's path is obtained.
2186 programs in the user's path is obtained.
2183
2187
2184 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2188 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2185 functionality is now fully in place. I removed the old dynamic
2189 functionality is now fully in place. I removed the old dynamic
2186 code generation based approach, in favor of a much lighter one
2190 code generation based approach, in favor of a much lighter one
2187 based on a simple dict. The advantage is that this allows me to
2191 based on a simple dict. The advantage is that this allows me to
2188 now have thousands of aliases with negligible cost (unthinkable
2192 now have thousands of aliases with negligible cost (unthinkable
2189 with the old system).
2193 with the old system).
2190
2194
2191 2004-06-19 Fernando Perez <fperez@colorado.edu>
2195 2004-06-19 Fernando Perez <fperez@colorado.edu>
2192
2196
2193 * IPython/iplib.py (__init__): extended MagicCompleter class to
2197 * IPython/iplib.py (__init__): extended MagicCompleter class to
2194 also complete (last in priority) on user aliases.
2198 also complete (last in priority) on user aliases.
2195
2199
2196 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2200 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2197 call to eval.
2201 call to eval.
2198 (ItplNS.__init__): Added a new class which functions like Itpl,
2202 (ItplNS.__init__): Added a new class which functions like Itpl,
2199 but allows configuring the namespace for the evaluation to occur
2203 but allows configuring the namespace for the evaluation to occur
2200 in.
2204 in.
2201
2205
2202 2004-06-18 Fernando Perez <fperez@colorado.edu>
2206 2004-06-18 Fernando Perez <fperez@colorado.edu>
2203
2207
2204 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2208 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2205 better message when 'exit' or 'quit' are typed (a common newbie
2209 better message when 'exit' or 'quit' are typed (a common newbie
2206 confusion).
2210 confusion).
2207
2211
2208 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2212 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2209 check for Windows users.
2213 check for Windows users.
2210
2214
2211 * IPython/iplib.py (InteractiveShell.user_setup): removed
2215 * IPython/iplib.py (InteractiveShell.user_setup): removed
2212 disabling of colors for Windows. I'll test at runtime and issue a
2216 disabling of colors for Windows. I'll test at runtime and issue a
2213 warning if Gary's readline isn't found, as to nudge users to
2217 warning if Gary's readline isn't found, as to nudge users to
2214 download it.
2218 download it.
2215
2219
2216 2004-06-16 Fernando Perez <fperez@colorado.edu>
2220 2004-06-16 Fernando Perez <fperez@colorado.edu>
2217
2221
2218 * IPython/genutils.py (Stream.__init__): changed to print errors
2222 * IPython/genutils.py (Stream.__init__): changed to print errors
2219 to sys.stderr. I had a circular dependency here. Now it's
2223 to sys.stderr. I had a circular dependency here. Now it's
2220 possible to run ipython as IDLE's shell (consider this pre-alpha,
2224 possible to run ipython as IDLE's shell (consider this pre-alpha,
2221 since true stdout things end up in the starting terminal instead
2225 since true stdout things end up in the starting terminal instead
2222 of IDLE's out).
2226 of IDLE's out).
2223
2227
2224 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2228 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2225 users who haven't # updated their prompt_in2 definitions. Remove
2229 users who haven't # updated their prompt_in2 definitions. Remove
2226 eventually.
2230 eventually.
2227 (multiple_replace): added credit to original ASPN recipe.
2231 (multiple_replace): added credit to original ASPN recipe.
2228
2232
2229 2004-06-15 Fernando Perez <fperez@colorado.edu>
2233 2004-06-15 Fernando Perez <fperez@colorado.edu>
2230
2234
2231 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2235 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2232 list of auto-defined aliases.
2236 list of auto-defined aliases.
2233
2237
2234 2004-06-13 Fernando Perez <fperez@colorado.edu>
2238 2004-06-13 Fernando Perez <fperez@colorado.edu>
2235
2239
2236 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2240 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2237 install was really requested (so setup.py can be used for other
2241 install was really requested (so setup.py can be used for other
2238 things under Windows).
2242 things under Windows).
2239
2243
2240 2004-06-10 Fernando Perez <fperez@colorado.edu>
2244 2004-06-10 Fernando Perez <fperez@colorado.edu>
2241
2245
2242 * IPython/Logger.py (Logger.create_log): Manually remove any old
2246 * IPython/Logger.py (Logger.create_log): Manually remove any old
2243 backup, since os.remove may fail under Windows. Fixes bug
2247 backup, since os.remove may fail under Windows. Fixes bug
2244 reported by Thorsten.
2248 reported by Thorsten.
2245
2249
2246 2004-06-09 Fernando Perez <fperez@colorado.edu>
2250 2004-06-09 Fernando Perez <fperez@colorado.edu>
2247
2251
2248 * examples/example-embed.py: fixed all references to %n (replaced
2252 * examples/example-embed.py: fixed all references to %n (replaced
2249 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2253 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2250 for all examples and the manual as well.
2254 for all examples and the manual as well.
2251
2255
2252 2004-06-08 Fernando Perez <fperez@colorado.edu>
2256 2004-06-08 Fernando Perez <fperez@colorado.edu>
2253
2257
2254 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2258 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2255 alignment and color management. All 3 prompt subsystems now
2259 alignment and color management. All 3 prompt subsystems now
2256 inherit from BasePrompt.
2260 inherit from BasePrompt.
2257
2261
2258 * tools/release: updates for windows installer build and tag rpms
2262 * tools/release: updates for windows installer build and tag rpms
2259 with python version (since paths are fixed).
2263 with python version (since paths are fixed).
2260
2264
2261 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2265 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2262 which will become eventually obsolete. Also fixed the default
2266 which will become eventually obsolete. Also fixed the default
2263 prompt_in2 to use \D, so at least new users start with the correct
2267 prompt_in2 to use \D, so at least new users start with the correct
2264 defaults.
2268 defaults.
2265 WARNING: Users with existing ipythonrc files will need to apply
2269 WARNING: Users with existing ipythonrc files will need to apply
2266 this fix manually!
2270 this fix manually!
2267
2271
2268 * setup.py: make windows installer (.exe). This is finally the
2272 * setup.py: make windows installer (.exe). This is finally the
2269 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2273 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2270 which I hadn't included because it required Python 2.3 (or recent
2274 which I hadn't included because it required Python 2.3 (or recent
2271 distutils).
2275 distutils).
2272
2276
2273 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2277 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2274 usage of new '\D' escape.
2278 usage of new '\D' escape.
2275
2279
2276 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2280 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2277 lacks os.getuid())
2281 lacks os.getuid())
2278 (CachedOutput.set_colors): Added the ability to turn coloring
2282 (CachedOutput.set_colors): Added the ability to turn coloring
2279 on/off with @colors even for manually defined prompt colors. It
2283 on/off with @colors even for manually defined prompt colors. It
2280 uses a nasty global, but it works safely and via the generic color
2284 uses a nasty global, but it works safely and via the generic color
2281 handling mechanism.
2285 handling mechanism.
2282 (Prompt2.__init__): Introduced new escape '\D' for continuation
2286 (Prompt2.__init__): Introduced new escape '\D' for continuation
2283 prompts. It represents the counter ('\#') as dots.
2287 prompts. It represents the counter ('\#') as dots.
2284 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2288 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2285 need to update their ipythonrc files and replace '%n' with '\D' in
2289 need to update their ipythonrc files and replace '%n' with '\D' in
2286 their prompt_in2 settings everywhere. Sorry, but there's
2290 their prompt_in2 settings everywhere. Sorry, but there's
2287 otherwise no clean way to get all prompts to properly align. The
2291 otherwise no clean way to get all prompts to properly align. The
2288 ipythonrc shipped with IPython has been updated.
2292 ipythonrc shipped with IPython has been updated.
2289
2293
2290 2004-06-07 Fernando Perez <fperez@colorado.edu>
2294 2004-06-07 Fernando Perez <fperez@colorado.edu>
2291
2295
2292 * setup.py (isfile): Pass local_icons option to latex2html, so the
2296 * setup.py (isfile): Pass local_icons option to latex2html, so the
2293 resulting HTML file is self-contained. Thanks to
2297 resulting HTML file is self-contained. Thanks to
2294 dryice-AT-liu.com.cn for the tip.
2298 dryice-AT-liu.com.cn for the tip.
2295
2299
2296 * pysh.py: I created a new profile 'shell', which implements a
2300 * pysh.py: I created a new profile 'shell', which implements a
2297 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2301 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2298 system shell, nor will it become one anytime soon. It's mainly
2302 system shell, nor will it become one anytime soon. It's mainly
2299 meant to illustrate the use of the new flexible bash-like prompts.
2303 meant to illustrate the use of the new flexible bash-like prompts.
2300 I guess it could be used by hardy souls for true shell management,
2304 I guess it could be used by hardy souls for true shell management,
2301 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2305 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2302 profile. This uses the InterpreterExec extension provided by
2306 profile. This uses the InterpreterExec extension provided by
2303 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2307 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2304
2308
2305 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2309 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2306 auto-align itself with the length of the previous input prompt
2310 auto-align itself with the length of the previous input prompt
2307 (taking into account the invisible color escapes).
2311 (taking into account the invisible color escapes).
2308 (CachedOutput.__init__): Large restructuring of this class. Now
2312 (CachedOutput.__init__): Large restructuring of this class. Now
2309 all three prompts (primary1, primary2, output) are proper objects,
2313 all three prompts (primary1, primary2, output) are proper objects,
2310 managed by the 'parent' CachedOutput class. The code is still a
2314 managed by the 'parent' CachedOutput class. The code is still a
2311 bit hackish (all prompts share state via a pointer to the cache),
2315 bit hackish (all prompts share state via a pointer to the cache),
2312 but it's overall far cleaner than before.
2316 but it's overall far cleaner than before.
2313
2317
2314 * IPython/genutils.py (getoutputerror): modified to add verbose,
2318 * IPython/genutils.py (getoutputerror): modified to add verbose,
2315 debug and header options. This makes the interface of all getout*
2319 debug and header options. This makes the interface of all getout*
2316 functions uniform.
2320 functions uniform.
2317 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2321 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2318
2322
2319 * IPython/Magic.py (Magic.default_option): added a function to
2323 * IPython/Magic.py (Magic.default_option): added a function to
2320 allow registering default options for any magic command. This
2324 allow registering default options for any magic command. This
2321 makes it easy to have profiles which customize the magics globally
2325 makes it easy to have profiles which customize the magics globally
2322 for a certain use. The values set through this function are
2326 for a certain use. The values set through this function are
2323 picked up by the parse_options() method, which all magics should
2327 picked up by the parse_options() method, which all magics should
2324 use to parse their options.
2328 use to parse their options.
2325
2329
2326 * IPython/genutils.py (warn): modified the warnings framework to
2330 * IPython/genutils.py (warn): modified the warnings framework to
2327 use the Term I/O class. I'm trying to slowly unify all of
2331 use the Term I/O class. I'm trying to slowly unify all of
2328 IPython's I/O operations to pass through Term.
2332 IPython's I/O operations to pass through Term.
2329
2333
2330 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2334 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2331 the secondary prompt to correctly match the length of the primary
2335 the secondary prompt to correctly match the length of the primary
2332 one for any prompt. Now multi-line code will properly line up
2336 one for any prompt. Now multi-line code will properly line up
2333 even for path dependent prompts, such as the new ones available
2337 even for path dependent prompts, such as the new ones available
2334 via the prompt_specials.
2338 via the prompt_specials.
2335
2339
2336 2004-06-06 Fernando Perez <fperez@colorado.edu>
2340 2004-06-06 Fernando Perez <fperez@colorado.edu>
2337
2341
2338 * IPython/Prompts.py (prompt_specials): Added the ability to have
2342 * IPython/Prompts.py (prompt_specials): Added the ability to have
2339 bash-like special sequences in the prompts, which get
2343 bash-like special sequences in the prompts, which get
2340 automatically expanded. Things like hostname, current working
2344 automatically expanded. Things like hostname, current working
2341 directory and username are implemented already, but it's easy to
2345 directory and username are implemented already, but it's easy to
2342 add more in the future. Thanks to a patch by W.J. van der Laan
2346 add more in the future. Thanks to a patch by W.J. van der Laan
2343 <gnufnork-AT-hetdigitalegat.nl>
2347 <gnufnork-AT-hetdigitalegat.nl>
2344 (prompt_specials): Added color support for prompt strings, so
2348 (prompt_specials): Added color support for prompt strings, so
2345 users can define arbitrary color setups for their prompts.
2349 users can define arbitrary color setups for their prompts.
2346
2350
2347 2004-06-05 Fernando Perez <fperez@colorado.edu>
2351 2004-06-05 Fernando Perez <fperez@colorado.edu>
2348
2352
2349 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2353 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2350 code to load Gary Bishop's readline and configure it
2354 code to load Gary Bishop's readline and configure it
2351 automatically. Thanks to Gary for help on this.
2355 automatically. Thanks to Gary for help on this.
2352
2356
2353 2004-06-01 Fernando Perez <fperez@colorado.edu>
2357 2004-06-01 Fernando Perez <fperez@colorado.edu>
2354
2358
2355 * IPython/Logger.py (Logger.create_log): fix bug for logging
2359 * IPython/Logger.py (Logger.create_log): fix bug for logging
2356 with no filename (previous fix was incomplete).
2360 with no filename (previous fix was incomplete).
2357
2361
2358 2004-05-25 Fernando Perez <fperez@colorado.edu>
2362 2004-05-25 Fernando Perez <fperez@colorado.edu>
2359
2363
2360 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2364 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2361 parens would get passed to the shell.
2365 parens would get passed to the shell.
2362
2366
2363 2004-05-20 Fernando Perez <fperez@colorado.edu>
2367 2004-05-20 Fernando Perez <fperez@colorado.edu>
2364
2368
2365 * IPython/Magic.py (Magic.magic_prun): changed default profile
2369 * IPython/Magic.py (Magic.magic_prun): changed default profile
2366 sort order to 'time' (the more common profiling need).
2370 sort order to 'time' (the more common profiling need).
2367
2371
2368 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2372 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2369 so that source code shown is guaranteed in sync with the file on
2373 so that source code shown is guaranteed in sync with the file on
2370 disk (also changed in psource). Similar fix to the one for
2374 disk (also changed in psource). Similar fix to the one for
2371 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2375 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2372 <yann.ledu-AT-noos.fr>.
2376 <yann.ledu-AT-noos.fr>.
2373
2377
2374 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2378 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2375 with a single option would not be correctly parsed. Closes
2379 with a single option would not be correctly parsed. Closes
2376 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2380 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2377 introduced in 0.6.0 (on 2004-05-06).
2381 introduced in 0.6.0 (on 2004-05-06).
2378
2382
2379 2004-05-13 *** Released version 0.6.0
2383 2004-05-13 *** Released version 0.6.0
2380
2384
2381 2004-05-13 Fernando Perez <fperez@colorado.edu>
2385 2004-05-13 Fernando Perez <fperez@colorado.edu>
2382
2386
2383 * debian/: Added debian/ directory to CVS, so that debian support
2387 * debian/: Added debian/ directory to CVS, so that debian support
2384 is publicly accessible. The debian package is maintained by Jack
2388 is publicly accessible. The debian package is maintained by Jack
2385 Moffit <jack-AT-xiph.org>.
2389 Moffit <jack-AT-xiph.org>.
2386
2390
2387 * Documentation: included the notes about an ipython-based system
2391 * Documentation: included the notes about an ipython-based system
2388 shell (the hypothetical 'pysh') into the new_design.pdf document,
2392 shell (the hypothetical 'pysh') into the new_design.pdf document,
2389 so that these ideas get distributed to users along with the
2393 so that these ideas get distributed to users along with the
2390 official documentation.
2394 official documentation.
2391
2395
2392 2004-05-10 Fernando Perez <fperez@colorado.edu>
2396 2004-05-10 Fernando Perez <fperez@colorado.edu>
2393
2397
2394 * IPython/Logger.py (Logger.create_log): fix recently introduced
2398 * IPython/Logger.py (Logger.create_log): fix recently introduced
2395 bug (misindented line) where logstart would fail when not given an
2399 bug (misindented line) where logstart would fail when not given an
2396 explicit filename.
2400 explicit filename.
2397
2401
2398 2004-05-09 Fernando Perez <fperez@colorado.edu>
2402 2004-05-09 Fernando Perez <fperez@colorado.edu>
2399
2403
2400 * IPython/Magic.py (Magic.parse_options): skip system call when
2404 * IPython/Magic.py (Magic.parse_options): skip system call when
2401 there are no options to look for. Faster, cleaner for the common
2405 there are no options to look for. Faster, cleaner for the common
2402 case.
2406 case.
2403
2407
2404 * Documentation: many updates to the manual: describing Windows
2408 * Documentation: many updates to the manual: describing Windows
2405 support better, Gnuplot updates, credits, misc small stuff. Also
2409 support better, Gnuplot updates, credits, misc small stuff. Also
2406 updated the new_design doc a bit.
2410 updated the new_design doc a bit.
2407
2411
2408 2004-05-06 *** Released version 0.6.0.rc1
2412 2004-05-06 *** Released version 0.6.0.rc1
2409
2413
2410 2004-05-06 Fernando Perez <fperez@colorado.edu>
2414 2004-05-06 Fernando Perez <fperez@colorado.edu>
2411
2415
2412 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2416 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2413 operations to use the vastly more efficient list/''.join() method.
2417 operations to use the vastly more efficient list/''.join() method.
2414 (FormattedTB.text): Fix
2418 (FormattedTB.text): Fix
2415 http://www.scipy.net/roundup/ipython/issue12 - exception source
2419 http://www.scipy.net/roundup/ipython/issue12 - exception source
2416 extract not updated after reload. Thanks to Mike Salib
2420 extract not updated after reload. Thanks to Mike Salib
2417 <msalib-AT-mit.edu> for pinning the source of the problem.
2421 <msalib-AT-mit.edu> for pinning the source of the problem.
2418 Fortunately, the solution works inside ipython and doesn't require
2422 Fortunately, the solution works inside ipython and doesn't require
2419 any changes to python proper.
2423 any changes to python proper.
2420
2424
2421 * IPython/Magic.py (Magic.parse_options): Improved to process the
2425 * IPython/Magic.py (Magic.parse_options): Improved to process the
2422 argument list as a true shell would (by actually using the
2426 argument list as a true shell would (by actually using the
2423 underlying system shell). This way, all @magics automatically get
2427 underlying system shell). This way, all @magics automatically get
2424 shell expansion for variables. Thanks to a comment by Alex
2428 shell expansion for variables. Thanks to a comment by Alex
2425 Schmolck.
2429 Schmolck.
2426
2430
2427 2004-04-04 Fernando Perez <fperez@colorado.edu>
2431 2004-04-04 Fernando Perez <fperez@colorado.edu>
2428
2432
2429 * IPython/iplib.py (InteractiveShell.interact): Added a special
2433 * IPython/iplib.py (InteractiveShell.interact): Added a special
2430 trap for a debugger quit exception, which is basically impossible
2434 trap for a debugger quit exception, which is basically impossible
2431 to handle by normal mechanisms, given what pdb does to the stack.
2435 to handle by normal mechanisms, given what pdb does to the stack.
2432 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2436 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2433
2437
2434 2004-04-03 Fernando Perez <fperez@colorado.edu>
2438 2004-04-03 Fernando Perez <fperez@colorado.edu>
2435
2439
2436 * IPython/genutils.py (Term): Standardized the names of the Term
2440 * IPython/genutils.py (Term): Standardized the names of the Term
2437 class streams to cin/cout/cerr, following C++ naming conventions
2441 class streams to cin/cout/cerr, following C++ naming conventions
2438 (I can't use in/out/err because 'in' is not a valid attribute
2442 (I can't use in/out/err because 'in' is not a valid attribute
2439 name).
2443 name).
2440
2444
2441 * IPython/iplib.py (InteractiveShell.interact): don't increment
2445 * IPython/iplib.py (InteractiveShell.interact): don't increment
2442 the prompt if there's no user input. By Daniel 'Dang' Griffith
2446 the prompt if there's no user input. By Daniel 'Dang' Griffith
2443 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2447 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2444 Francois Pinard.
2448 Francois Pinard.
2445
2449
2446 2004-04-02 Fernando Perez <fperez@colorado.edu>
2450 2004-04-02 Fernando Perez <fperez@colorado.edu>
2447
2451
2448 * IPython/genutils.py (Stream.__init__): Modified to survive at
2452 * IPython/genutils.py (Stream.__init__): Modified to survive at
2449 least importing in contexts where stdin/out/err aren't true file
2453 least importing in contexts where stdin/out/err aren't true file
2450 objects, such as PyCrust (they lack fileno() and mode). However,
2454 objects, such as PyCrust (they lack fileno() and mode). However,
2451 the recovery facilities which rely on these things existing will
2455 the recovery facilities which rely on these things existing will
2452 not work.
2456 not work.
2453
2457
2454 2004-04-01 Fernando Perez <fperez@colorado.edu>
2458 2004-04-01 Fernando Perez <fperez@colorado.edu>
2455
2459
2456 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2460 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2457 use the new getoutputerror() function, so it properly
2461 use the new getoutputerror() function, so it properly
2458 distinguishes stdout/err.
2462 distinguishes stdout/err.
2459
2463
2460 * IPython/genutils.py (getoutputerror): added a function to
2464 * IPython/genutils.py (getoutputerror): added a function to
2461 capture separately the standard output and error of a command.
2465 capture separately the standard output and error of a command.
2462 After a comment from dang on the mailing lists. This code is
2466 After a comment from dang on the mailing lists. This code is
2463 basically a modified version of commands.getstatusoutput(), from
2467 basically a modified version of commands.getstatusoutput(), from
2464 the standard library.
2468 the standard library.
2465
2469
2466 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2470 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2467 '!!' as a special syntax (shorthand) to access @sx.
2471 '!!' as a special syntax (shorthand) to access @sx.
2468
2472
2469 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2473 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2470 command and return its output as a list split on '\n'.
2474 command and return its output as a list split on '\n'.
2471
2475
2472 2004-03-31 Fernando Perez <fperez@colorado.edu>
2476 2004-03-31 Fernando Perez <fperez@colorado.edu>
2473
2477
2474 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2478 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2475 method to dictionaries used as FakeModule instances if they lack
2479 method to dictionaries used as FakeModule instances if they lack
2476 it. At least pydoc in python2.3 breaks for runtime-defined
2480 it. At least pydoc in python2.3 breaks for runtime-defined
2477 functions without this hack. At some point I need to _really_
2481 functions without this hack. At some point I need to _really_
2478 understand what FakeModule is doing, because it's a gross hack.
2482 understand what FakeModule is doing, because it's a gross hack.
2479 But it solves Arnd's problem for now...
2483 But it solves Arnd's problem for now...
2480
2484
2481 2004-02-27 Fernando Perez <fperez@colorado.edu>
2485 2004-02-27 Fernando Perez <fperez@colorado.edu>
2482
2486
2483 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2487 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2484 mode would behave erratically. Also increased the number of
2488 mode would behave erratically. Also increased the number of
2485 possible logs in rotate mod to 999. Thanks to Rod Holland
2489 possible logs in rotate mod to 999. Thanks to Rod Holland
2486 <rhh@StructureLABS.com> for the report and fixes.
2490 <rhh@StructureLABS.com> for the report and fixes.
2487
2491
2488 2004-02-26 Fernando Perez <fperez@colorado.edu>
2492 2004-02-26 Fernando Perez <fperez@colorado.edu>
2489
2493
2490 * IPython/genutils.py (page): Check that the curses module really
2494 * IPython/genutils.py (page): Check that the curses module really
2491 has the initscr attribute before trying to use it. For some
2495 has the initscr attribute before trying to use it. For some
2492 reason, the Solaris curses module is missing this. I think this
2496 reason, the Solaris curses module is missing this. I think this
2493 should be considered a Solaris python bug, but I'm not sure.
2497 should be considered a Solaris python bug, but I'm not sure.
2494
2498
2495 2004-01-17 Fernando Perez <fperez@colorado.edu>
2499 2004-01-17 Fernando Perez <fperez@colorado.edu>
2496
2500
2497 * IPython/genutils.py (Stream.__init__): Changes to try to make
2501 * IPython/genutils.py (Stream.__init__): Changes to try to make
2498 ipython robust against stdin/out/err being closed by the user.
2502 ipython robust against stdin/out/err being closed by the user.
2499 This is 'user error' (and blocks a normal python session, at least
2503 This is 'user error' (and blocks a normal python session, at least
2500 the stdout case). However, Ipython should be able to survive such
2504 the stdout case). However, Ipython should be able to survive such
2501 instances of abuse as gracefully as possible. To simplify the
2505 instances of abuse as gracefully as possible. To simplify the
2502 coding and maintain compatibility with Gary Bishop's Term
2506 coding and maintain compatibility with Gary Bishop's Term
2503 contributions, I've made use of classmethods for this. I think
2507 contributions, I've made use of classmethods for this. I think
2504 this introduces a dependency on python 2.2.
2508 this introduces a dependency on python 2.2.
2505
2509
2506 2004-01-13 Fernando Perez <fperez@colorado.edu>
2510 2004-01-13 Fernando Perez <fperez@colorado.edu>
2507
2511
2508 * IPython/numutils.py (exp_safe): simplified the code a bit and
2512 * IPython/numutils.py (exp_safe): simplified the code a bit and
2509 removed the need for importing the kinds module altogether.
2513 removed the need for importing the kinds module altogether.
2510
2514
2511 2004-01-06 Fernando Perez <fperez@colorado.edu>
2515 2004-01-06 Fernando Perez <fperez@colorado.edu>
2512
2516
2513 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2517 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2514 a magic function instead, after some community feedback. No
2518 a magic function instead, after some community feedback. No
2515 special syntax will exist for it, but its name is deliberately
2519 special syntax will exist for it, but its name is deliberately
2516 very short.
2520 very short.
2517
2521
2518 2003-12-20 Fernando Perez <fperez@colorado.edu>
2522 2003-12-20 Fernando Perez <fperez@colorado.edu>
2519
2523
2520 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2524 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2521 new functionality, to automagically assign the result of a shell
2525 new functionality, to automagically assign the result of a shell
2522 command to a variable. I'll solicit some community feedback on
2526 command to a variable. I'll solicit some community feedback on
2523 this before making it permanent.
2527 this before making it permanent.
2524
2528
2525 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2529 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2526 requested about callables for which inspect couldn't obtain a
2530 requested about callables for which inspect couldn't obtain a
2527 proper argspec. Thanks to a crash report sent by Etienne
2531 proper argspec. Thanks to a crash report sent by Etienne
2528 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2532 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2529
2533
2530 2003-12-09 Fernando Perez <fperez@colorado.edu>
2534 2003-12-09 Fernando Perez <fperez@colorado.edu>
2531
2535
2532 * IPython/genutils.py (page): patch for the pager to work across
2536 * IPython/genutils.py (page): patch for the pager to work across
2533 various versions of Windows. By Gary Bishop.
2537 various versions of Windows. By Gary Bishop.
2534
2538
2535 2003-12-04 Fernando Perez <fperez@colorado.edu>
2539 2003-12-04 Fernando Perez <fperez@colorado.edu>
2536
2540
2537 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2541 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2538 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2542 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2539 While I tested this and it looks ok, there may still be corner
2543 While I tested this and it looks ok, there may still be corner
2540 cases I've missed.
2544 cases I've missed.
2541
2545
2542 2003-12-01 Fernando Perez <fperez@colorado.edu>
2546 2003-12-01 Fernando Perez <fperez@colorado.edu>
2543
2547
2544 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2548 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2545 where a line like 'p,q=1,2' would fail because the automagic
2549 where a line like 'p,q=1,2' would fail because the automagic
2546 system would be triggered for @p.
2550 system would be triggered for @p.
2547
2551
2548 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2552 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2549 cleanups, code unmodified.
2553 cleanups, code unmodified.
2550
2554
2551 * IPython/genutils.py (Term): added a class for IPython to handle
2555 * IPython/genutils.py (Term): added a class for IPython to handle
2552 output. In most cases it will just be a proxy for stdout/err, but
2556 output. In most cases it will just be a proxy for stdout/err, but
2553 having this allows modifications to be made for some platforms,
2557 having this allows modifications to be made for some platforms,
2554 such as handling color escapes under Windows. All of this code
2558 such as handling color escapes under Windows. All of this code
2555 was contributed by Gary Bishop, with minor modifications by me.
2559 was contributed by Gary Bishop, with minor modifications by me.
2556 The actual changes affect many files.
2560 The actual changes affect many files.
2557
2561
2558 2003-11-30 Fernando Perez <fperez@colorado.edu>
2562 2003-11-30 Fernando Perez <fperez@colorado.edu>
2559
2563
2560 * IPython/iplib.py (file_matches): new completion code, courtesy
2564 * IPython/iplib.py (file_matches): new completion code, courtesy
2561 of Jeff Collins. This enables filename completion again under
2565 of Jeff Collins. This enables filename completion again under
2562 python 2.3, which disabled it at the C level.
2566 python 2.3, which disabled it at the C level.
2563
2567
2564 2003-11-11 Fernando Perez <fperez@colorado.edu>
2568 2003-11-11 Fernando Perez <fperez@colorado.edu>
2565
2569
2566 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2570 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2567 for Numeric.array(map(...)), but often convenient.
2571 for Numeric.array(map(...)), but often convenient.
2568
2572
2569 2003-11-05 Fernando Perez <fperez@colorado.edu>
2573 2003-11-05 Fernando Perez <fperez@colorado.edu>
2570
2574
2571 * IPython/numutils.py (frange): Changed a call from int() to
2575 * IPython/numutils.py (frange): Changed a call from int() to
2572 int(round()) to prevent a problem reported with arange() in the
2576 int(round()) to prevent a problem reported with arange() in the
2573 numpy list.
2577 numpy list.
2574
2578
2575 2003-10-06 Fernando Perez <fperez@colorado.edu>
2579 2003-10-06 Fernando Perez <fperez@colorado.edu>
2576
2580
2577 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2581 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2578 prevent crashes if sys lacks an argv attribute (it happens with
2582 prevent crashes if sys lacks an argv attribute (it happens with
2579 embedded interpreters which build a bare-bones sys module).
2583 embedded interpreters which build a bare-bones sys module).
2580 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2584 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2581
2585
2582 2003-09-24 Fernando Perez <fperez@colorado.edu>
2586 2003-09-24 Fernando Perez <fperez@colorado.edu>
2583
2587
2584 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2588 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2585 to protect against poorly written user objects where __getattr__
2589 to protect against poorly written user objects where __getattr__
2586 raises exceptions other than AttributeError. Thanks to a bug
2590 raises exceptions other than AttributeError. Thanks to a bug
2587 report by Oliver Sander <osander-AT-gmx.de>.
2591 report by Oliver Sander <osander-AT-gmx.de>.
2588
2592
2589 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2593 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2590 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2594 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2591
2595
2592 2003-09-09 Fernando Perez <fperez@colorado.edu>
2596 2003-09-09 Fernando Perez <fperez@colorado.edu>
2593
2597
2594 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2598 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2595 unpacking a list whith a callable as first element would
2599 unpacking a list whith a callable as first element would
2596 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2600 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2597 Collins.
2601 Collins.
2598
2602
2599 2003-08-25 *** Released version 0.5.0
2603 2003-08-25 *** Released version 0.5.0
2600
2604
2601 2003-08-22 Fernando Perez <fperez@colorado.edu>
2605 2003-08-22 Fernando Perez <fperez@colorado.edu>
2602
2606
2603 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2607 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2604 improperly defined user exceptions. Thanks to feedback from Mark
2608 improperly defined user exceptions. Thanks to feedback from Mark
2605 Russell <mrussell-AT-verio.net>.
2609 Russell <mrussell-AT-verio.net>.
2606
2610
2607 2003-08-20 Fernando Perez <fperez@colorado.edu>
2611 2003-08-20 Fernando Perez <fperez@colorado.edu>
2608
2612
2609 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2613 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2610 printing so that it would print multi-line string forms starting
2614 printing so that it would print multi-line string forms starting
2611 with a new line. This way the formatting is better respected for
2615 with a new line. This way the formatting is better respected for
2612 objects which work hard to make nice string forms.
2616 objects which work hard to make nice string forms.
2613
2617
2614 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2618 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2615 autocall would overtake data access for objects with both
2619 autocall would overtake data access for objects with both
2616 __getitem__ and __call__.
2620 __getitem__ and __call__.
2617
2621
2618 2003-08-19 *** Released version 0.5.0-rc1
2622 2003-08-19 *** Released version 0.5.0-rc1
2619
2623
2620 2003-08-19 Fernando Perez <fperez@colorado.edu>
2624 2003-08-19 Fernando Perez <fperez@colorado.edu>
2621
2625
2622 * IPython/deep_reload.py (load_tail): single tiny change here
2626 * IPython/deep_reload.py (load_tail): single tiny change here
2623 seems to fix the long-standing bug of dreload() failing to work
2627 seems to fix the long-standing bug of dreload() failing to work
2624 for dotted names. But this module is pretty tricky, so I may have
2628 for dotted names. But this module is pretty tricky, so I may have
2625 missed some subtlety. Needs more testing!.
2629 missed some subtlety. Needs more testing!.
2626
2630
2627 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2631 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2628 exceptions which have badly implemented __str__ methods.
2632 exceptions which have badly implemented __str__ methods.
2629 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2633 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2630 which I've been getting reports about from Python 2.3 users. I
2634 which I've been getting reports about from Python 2.3 users. I
2631 wish I had a simple test case to reproduce the problem, so I could
2635 wish I had a simple test case to reproduce the problem, so I could
2632 either write a cleaner workaround or file a bug report if
2636 either write a cleaner workaround or file a bug report if
2633 necessary.
2637 necessary.
2634
2638
2635 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2639 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2636 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2640 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2637 a bug report by Tjabo Kloppenburg.
2641 a bug report by Tjabo Kloppenburg.
2638
2642
2639 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2643 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2640 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2644 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2641 seems rather unstable. Thanks to a bug report by Tjabo
2645 seems rather unstable. Thanks to a bug report by Tjabo
2642 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2646 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2643
2647
2644 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2648 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2645 this out soon because of the critical fixes in the inner loop for
2649 this out soon because of the critical fixes in the inner loop for
2646 generators.
2650 generators.
2647
2651
2648 * IPython/Magic.py (Magic.getargspec): removed. This (and
2652 * IPython/Magic.py (Magic.getargspec): removed. This (and
2649 _get_def) have been obsoleted by OInspect for a long time, I
2653 _get_def) have been obsoleted by OInspect for a long time, I
2650 hadn't noticed that they were dead code.
2654 hadn't noticed that they were dead code.
2651 (Magic._ofind): restored _ofind functionality for a few literals
2655 (Magic._ofind): restored _ofind functionality for a few literals
2652 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2656 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2653 for things like "hello".capitalize?, since that would require a
2657 for things like "hello".capitalize?, since that would require a
2654 potentially dangerous eval() again.
2658 potentially dangerous eval() again.
2655
2659
2656 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2660 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2657 logic a bit more to clean up the escapes handling and minimize the
2661 logic a bit more to clean up the escapes handling and minimize the
2658 use of _ofind to only necessary cases. The interactive 'feel' of
2662 use of _ofind to only necessary cases. The interactive 'feel' of
2659 IPython should have improved quite a bit with the changes in
2663 IPython should have improved quite a bit with the changes in
2660 _prefilter and _ofind (besides being far safer than before).
2664 _prefilter and _ofind (besides being far safer than before).
2661
2665
2662 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2666 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2663 obscure, never reported). Edit would fail to find the object to
2667 obscure, never reported). Edit would fail to find the object to
2664 edit under some circumstances.
2668 edit under some circumstances.
2665 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2669 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2666 which were causing double-calling of generators. Those eval calls
2670 which were causing double-calling of generators. Those eval calls
2667 were _very_ dangerous, since code with side effects could be
2671 were _very_ dangerous, since code with side effects could be
2668 triggered. As they say, 'eval is evil'... These were the
2672 triggered. As they say, 'eval is evil'... These were the
2669 nastiest evals in IPython. Besides, _ofind is now far simpler,
2673 nastiest evals in IPython. Besides, _ofind is now far simpler,
2670 and it should also be quite a bit faster. Its use of inspect is
2674 and it should also be quite a bit faster. Its use of inspect is
2671 also safer, so perhaps some of the inspect-related crashes I've
2675 also safer, so perhaps some of the inspect-related crashes I've
2672 seen lately with Python 2.3 might be taken care of. That will
2676 seen lately with Python 2.3 might be taken care of. That will
2673 need more testing.
2677 need more testing.
2674
2678
2675 2003-08-17 Fernando Perez <fperez@colorado.edu>
2679 2003-08-17 Fernando Perez <fperez@colorado.edu>
2676
2680
2677 * IPython/iplib.py (InteractiveShell._prefilter): significant
2681 * IPython/iplib.py (InteractiveShell._prefilter): significant
2678 simplifications to the logic for handling user escapes. Faster
2682 simplifications to the logic for handling user escapes. Faster
2679 and simpler code.
2683 and simpler code.
2680
2684
2681 2003-08-14 Fernando Perez <fperez@colorado.edu>
2685 2003-08-14 Fernando Perez <fperez@colorado.edu>
2682
2686
2683 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2687 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2684 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2688 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2685 but it should be quite a bit faster. And the recursive version
2689 but it should be quite a bit faster. And the recursive version
2686 generated O(log N) intermediate storage for all rank>1 arrays,
2690 generated O(log N) intermediate storage for all rank>1 arrays,
2687 even if they were contiguous.
2691 even if they were contiguous.
2688 (l1norm): Added this function.
2692 (l1norm): Added this function.
2689 (norm): Added this function for arbitrary norms (including
2693 (norm): Added this function for arbitrary norms (including
2690 l-infinity). l1 and l2 are still special cases for convenience
2694 l-infinity). l1 and l2 are still special cases for convenience
2691 and speed.
2695 and speed.
2692
2696
2693 2003-08-03 Fernando Perez <fperez@colorado.edu>
2697 2003-08-03 Fernando Perez <fperez@colorado.edu>
2694
2698
2695 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2699 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2696 exceptions, which now raise PendingDeprecationWarnings in Python
2700 exceptions, which now raise PendingDeprecationWarnings in Python
2697 2.3. There were some in Magic and some in Gnuplot2.
2701 2.3. There were some in Magic and some in Gnuplot2.
2698
2702
2699 2003-06-30 Fernando Perez <fperez@colorado.edu>
2703 2003-06-30 Fernando Perez <fperez@colorado.edu>
2700
2704
2701 * IPython/genutils.py (page): modified to call curses only for
2705 * IPython/genutils.py (page): modified to call curses only for
2702 terminals where TERM=='xterm'. After problems under many other
2706 terminals where TERM=='xterm'. After problems under many other
2703 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2707 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2704
2708
2705 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2709 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2706 would be triggered when readline was absent. This was just an old
2710 would be triggered when readline was absent. This was just an old
2707 debugging statement I'd forgotten to take out.
2711 debugging statement I'd forgotten to take out.
2708
2712
2709 2003-06-20 Fernando Perez <fperez@colorado.edu>
2713 2003-06-20 Fernando Perez <fperez@colorado.edu>
2710
2714
2711 * IPython/genutils.py (clock): modified to return only user time
2715 * IPython/genutils.py (clock): modified to return only user time
2712 (not counting system time), after a discussion on scipy. While
2716 (not counting system time), after a discussion on scipy. While
2713 system time may be a useful quantity occasionally, it may much
2717 system time may be a useful quantity occasionally, it may much
2714 more easily be skewed by occasional swapping or other similar
2718 more easily be skewed by occasional swapping or other similar
2715 activity.
2719 activity.
2716
2720
2717 2003-06-05 Fernando Perez <fperez@colorado.edu>
2721 2003-06-05 Fernando Perez <fperez@colorado.edu>
2718
2722
2719 * IPython/numutils.py (identity): new function, for building
2723 * IPython/numutils.py (identity): new function, for building
2720 arbitrary rank Kronecker deltas (mostly backwards compatible with
2724 arbitrary rank Kronecker deltas (mostly backwards compatible with
2721 Numeric.identity)
2725 Numeric.identity)
2722
2726
2723 2003-06-03 Fernando Perez <fperez@colorado.edu>
2727 2003-06-03 Fernando Perez <fperez@colorado.edu>
2724
2728
2725 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2729 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2726 arguments passed to magics with spaces, to allow trailing '\' to
2730 arguments passed to magics with spaces, to allow trailing '\' to
2727 work normally (mainly for Windows users).
2731 work normally (mainly for Windows users).
2728
2732
2729 2003-05-29 Fernando Perez <fperez@colorado.edu>
2733 2003-05-29 Fernando Perez <fperez@colorado.edu>
2730
2734
2731 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2735 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2732 instead of pydoc.help. This fixes a bizarre behavior where
2736 instead of pydoc.help. This fixes a bizarre behavior where
2733 printing '%s' % locals() would trigger the help system. Now
2737 printing '%s' % locals() would trigger the help system. Now
2734 ipython behaves like normal python does.
2738 ipython behaves like normal python does.
2735
2739
2736 Note that if one does 'from pydoc import help', the bizarre
2740 Note that if one does 'from pydoc import help', the bizarre
2737 behavior returns, but this will also happen in normal python, so
2741 behavior returns, but this will also happen in normal python, so
2738 it's not an ipython bug anymore (it has to do with how pydoc.help
2742 it's not an ipython bug anymore (it has to do with how pydoc.help
2739 is implemented).
2743 is implemented).
2740
2744
2741 2003-05-22 Fernando Perez <fperez@colorado.edu>
2745 2003-05-22 Fernando Perez <fperez@colorado.edu>
2742
2746
2743 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2747 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2744 return [] instead of None when nothing matches, also match to end
2748 return [] instead of None when nothing matches, also match to end
2745 of line. Patch by Gary Bishop.
2749 of line. Patch by Gary Bishop.
2746
2750
2747 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2751 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2748 protection as before, for files passed on the command line. This
2752 protection as before, for files passed on the command line. This
2749 prevents the CrashHandler from kicking in if user files call into
2753 prevents the CrashHandler from kicking in if user files call into
2750 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2754 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2751 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2755 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2752
2756
2753 2003-05-20 *** Released version 0.4.0
2757 2003-05-20 *** Released version 0.4.0
2754
2758
2755 2003-05-20 Fernando Perez <fperez@colorado.edu>
2759 2003-05-20 Fernando Perez <fperez@colorado.edu>
2756
2760
2757 * setup.py: added support for manpages. It's a bit hackish b/c of
2761 * setup.py: added support for manpages. It's a bit hackish b/c of
2758 a bug in the way the bdist_rpm distutils target handles gzipped
2762 a bug in the way the bdist_rpm distutils target handles gzipped
2759 manpages, but it works. After a patch by Jack.
2763 manpages, but it works. After a patch by Jack.
2760
2764
2761 2003-05-19 Fernando Perez <fperez@colorado.edu>
2765 2003-05-19 Fernando Perez <fperez@colorado.edu>
2762
2766
2763 * IPython/numutils.py: added a mockup of the kinds module, since
2767 * IPython/numutils.py: added a mockup of the kinds module, since
2764 it was recently removed from Numeric. This way, numutils will
2768 it was recently removed from Numeric. This way, numutils will
2765 work for all users even if they are missing kinds.
2769 work for all users even if they are missing kinds.
2766
2770
2767 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2771 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2768 failure, which can occur with SWIG-wrapped extensions. After a
2772 failure, which can occur with SWIG-wrapped extensions. After a
2769 crash report from Prabhu.
2773 crash report from Prabhu.
2770
2774
2771 2003-05-16 Fernando Perez <fperez@colorado.edu>
2775 2003-05-16 Fernando Perez <fperez@colorado.edu>
2772
2776
2773 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2777 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2774 protect ipython from user code which may call directly
2778 protect ipython from user code which may call directly
2775 sys.excepthook (this looks like an ipython crash to the user, even
2779 sys.excepthook (this looks like an ipython crash to the user, even
2776 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2780 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2777 This is especially important to help users of WxWindows, but may
2781 This is especially important to help users of WxWindows, but may
2778 also be useful in other cases.
2782 also be useful in other cases.
2779
2783
2780 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2784 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2781 an optional tb_offset to be specified, and to preserve exception
2785 an optional tb_offset to be specified, and to preserve exception
2782 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2786 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2783
2787
2784 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2788 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2785
2789
2786 2003-05-15 Fernando Perez <fperez@colorado.edu>
2790 2003-05-15 Fernando Perez <fperez@colorado.edu>
2787
2791
2788 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2792 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2789 installing for a new user under Windows.
2793 installing for a new user under Windows.
2790
2794
2791 2003-05-12 Fernando Perez <fperez@colorado.edu>
2795 2003-05-12 Fernando Perez <fperez@colorado.edu>
2792
2796
2793 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2797 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2794 handler for Emacs comint-based lines. Currently it doesn't do
2798 handler for Emacs comint-based lines. Currently it doesn't do
2795 much (but importantly, it doesn't update the history cache). In
2799 much (but importantly, it doesn't update the history cache). In
2796 the future it may be expanded if Alex needs more functionality
2800 the future it may be expanded if Alex needs more functionality
2797 there.
2801 there.
2798
2802
2799 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2803 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2800 info to crash reports.
2804 info to crash reports.
2801
2805
2802 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2806 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2803 just like Python's -c. Also fixed crash with invalid -color
2807 just like Python's -c. Also fixed crash with invalid -color
2804 option value at startup. Thanks to Will French
2808 option value at startup. Thanks to Will French
2805 <wfrench-AT-bestweb.net> for the bug report.
2809 <wfrench-AT-bestweb.net> for the bug report.
2806
2810
2807 2003-05-09 Fernando Perez <fperez@colorado.edu>
2811 2003-05-09 Fernando Perez <fperez@colorado.edu>
2808
2812
2809 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2813 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2810 to EvalDict (it's a mapping, after all) and simplified its code
2814 to EvalDict (it's a mapping, after all) and simplified its code
2811 quite a bit, after a nice discussion on c.l.py where Gustavo
2815 quite a bit, after a nice discussion on c.l.py where Gustavo
2812 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2816 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2813
2817
2814 2003-04-30 Fernando Perez <fperez@colorado.edu>
2818 2003-04-30 Fernando Perez <fperez@colorado.edu>
2815
2819
2816 * IPython/genutils.py (timings_out): modified it to reduce its
2820 * IPython/genutils.py (timings_out): modified it to reduce its
2817 overhead in the common reps==1 case.
2821 overhead in the common reps==1 case.
2818
2822
2819 2003-04-29 Fernando Perez <fperez@colorado.edu>
2823 2003-04-29 Fernando Perez <fperez@colorado.edu>
2820
2824
2821 * IPython/genutils.py (timings_out): Modified to use the resource
2825 * IPython/genutils.py (timings_out): Modified to use the resource
2822 module, which avoids the wraparound problems of time.clock().
2826 module, which avoids the wraparound problems of time.clock().
2823
2827
2824 2003-04-17 *** Released version 0.2.15pre4
2828 2003-04-17 *** Released version 0.2.15pre4
2825
2829
2826 2003-04-17 Fernando Perez <fperez@colorado.edu>
2830 2003-04-17 Fernando Perez <fperez@colorado.edu>
2827
2831
2828 * setup.py (scriptfiles): Split windows-specific stuff over to a
2832 * setup.py (scriptfiles): Split windows-specific stuff over to a
2829 separate file, in an attempt to have a Windows GUI installer.
2833 separate file, in an attempt to have a Windows GUI installer.
2830 That didn't work, but part of the groundwork is done.
2834 That didn't work, but part of the groundwork is done.
2831
2835
2832 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2836 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2833 indent/unindent with 4 spaces. Particularly useful in combination
2837 indent/unindent with 4 spaces. Particularly useful in combination
2834 with the new auto-indent option.
2838 with the new auto-indent option.
2835
2839
2836 2003-04-16 Fernando Perez <fperez@colorado.edu>
2840 2003-04-16 Fernando Perez <fperez@colorado.edu>
2837
2841
2838 * IPython/Magic.py: various replacements of self.rc for
2842 * IPython/Magic.py: various replacements of self.rc for
2839 self.shell.rc. A lot more remains to be done to fully disentangle
2843 self.shell.rc. A lot more remains to be done to fully disentangle
2840 this class from the main Shell class.
2844 this class from the main Shell class.
2841
2845
2842 * IPython/GnuplotRuntime.py: added checks for mouse support so
2846 * IPython/GnuplotRuntime.py: added checks for mouse support so
2843 that we don't try to enable it if the current gnuplot doesn't
2847 that we don't try to enable it if the current gnuplot doesn't
2844 really support it. Also added checks so that we don't try to
2848 really support it. Also added checks so that we don't try to
2845 enable persist under Windows (where Gnuplot doesn't recognize the
2849 enable persist under Windows (where Gnuplot doesn't recognize the
2846 option).
2850 option).
2847
2851
2848 * IPython/iplib.py (InteractiveShell.interact): Added optional
2852 * IPython/iplib.py (InteractiveShell.interact): Added optional
2849 auto-indenting code, after a patch by King C. Shu
2853 auto-indenting code, after a patch by King C. Shu
2850 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2854 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2851 get along well with pasting indented code. If I ever figure out
2855 get along well with pasting indented code. If I ever figure out
2852 how to make that part go well, it will become on by default.
2856 how to make that part go well, it will become on by default.
2853
2857
2854 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2858 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2855 crash ipython if there was an unmatched '%' in the user's prompt
2859 crash ipython if there was an unmatched '%' in the user's prompt
2856 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2860 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2857
2861
2858 * IPython/iplib.py (InteractiveShell.interact): removed the
2862 * IPython/iplib.py (InteractiveShell.interact): removed the
2859 ability to ask the user whether he wants to crash or not at the
2863 ability to ask the user whether he wants to crash or not at the
2860 'last line' exception handler. Calling functions at that point
2864 'last line' exception handler. Calling functions at that point
2861 changes the stack, and the error reports would have incorrect
2865 changes the stack, and the error reports would have incorrect
2862 tracebacks.
2866 tracebacks.
2863
2867
2864 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2868 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2865 pass through a peger a pretty-printed form of any object. After a
2869 pass through a peger a pretty-printed form of any object. After a
2866 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2870 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2867
2871
2868 2003-04-14 Fernando Perez <fperez@colorado.edu>
2872 2003-04-14 Fernando Perez <fperez@colorado.edu>
2869
2873
2870 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2874 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2871 all files in ~ would be modified at first install (instead of
2875 all files in ~ would be modified at first install (instead of
2872 ~/.ipython). This could be potentially disastrous, as the
2876 ~/.ipython). This could be potentially disastrous, as the
2873 modification (make line-endings native) could damage binary files.
2877 modification (make line-endings native) could damage binary files.
2874
2878
2875 2003-04-10 Fernando Perez <fperez@colorado.edu>
2879 2003-04-10 Fernando Perez <fperez@colorado.edu>
2876
2880
2877 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2881 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2878 handle only lines which are invalid python. This now means that
2882 handle only lines which are invalid python. This now means that
2879 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2883 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2880 for the bug report.
2884 for the bug report.
2881
2885
2882 2003-04-01 Fernando Perez <fperez@colorado.edu>
2886 2003-04-01 Fernando Perez <fperez@colorado.edu>
2883
2887
2884 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2888 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2885 where failing to set sys.last_traceback would crash pdb.pm().
2889 where failing to set sys.last_traceback would crash pdb.pm().
2886 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2890 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2887 report.
2891 report.
2888
2892
2889 2003-03-25 Fernando Perez <fperez@colorado.edu>
2893 2003-03-25 Fernando Perez <fperez@colorado.edu>
2890
2894
2891 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2895 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2892 before printing it (it had a lot of spurious blank lines at the
2896 before printing it (it had a lot of spurious blank lines at the
2893 end).
2897 end).
2894
2898
2895 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2899 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2896 output would be sent 21 times! Obviously people don't use this
2900 output would be sent 21 times! Obviously people don't use this
2897 too often, or I would have heard about it.
2901 too often, or I would have heard about it.
2898
2902
2899 2003-03-24 Fernando Perez <fperez@colorado.edu>
2903 2003-03-24 Fernando Perez <fperez@colorado.edu>
2900
2904
2901 * setup.py (scriptfiles): renamed the data_files parameter from
2905 * setup.py (scriptfiles): renamed the data_files parameter from
2902 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2906 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2903 for the patch.
2907 for the patch.
2904
2908
2905 2003-03-20 Fernando Perez <fperez@colorado.edu>
2909 2003-03-20 Fernando Perez <fperez@colorado.edu>
2906
2910
2907 * IPython/genutils.py (error): added error() and fatal()
2911 * IPython/genutils.py (error): added error() and fatal()
2908 functions.
2912 functions.
2909
2913
2910 2003-03-18 *** Released version 0.2.15pre3
2914 2003-03-18 *** Released version 0.2.15pre3
2911
2915
2912 2003-03-18 Fernando Perez <fperez@colorado.edu>
2916 2003-03-18 Fernando Perez <fperez@colorado.edu>
2913
2917
2914 * setupext/install_data_ext.py
2918 * setupext/install_data_ext.py
2915 (install_data_ext.initialize_options): Class contributed by Jack
2919 (install_data_ext.initialize_options): Class contributed by Jack
2916 Moffit for fixing the old distutils hack. He is sending this to
2920 Moffit for fixing the old distutils hack. He is sending this to
2917 the distutils folks so in the future we may not need it as a
2921 the distutils folks so in the future we may not need it as a
2918 private fix.
2922 private fix.
2919
2923
2920 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2924 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2921 changes for Debian packaging. See his patch for full details.
2925 changes for Debian packaging. See his patch for full details.
2922 The old distutils hack of making the ipythonrc* files carry a
2926 The old distutils hack of making the ipythonrc* files carry a
2923 bogus .py extension is gone, at last. Examples were moved to a
2927 bogus .py extension is gone, at last. Examples were moved to a
2924 separate subdir under doc/, and the separate executable scripts
2928 separate subdir under doc/, and the separate executable scripts
2925 now live in their own directory. Overall a great cleanup. The
2929 now live in their own directory. Overall a great cleanup. The
2926 manual was updated to use the new files, and setup.py has been
2930 manual was updated to use the new files, and setup.py has been
2927 fixed for this setup.
2931 fixed for this setup.
2928
2932
2929 * IPython/PyColorize.py (Parser.usage): made non-executable and
2933 * IPython/PyColorize.py (Parser.usage): made non-executable and
2930 created a pycolor wrapper around it to be included as a script.
2934 created a pycolor wrapper around it to be included as a script.
2931
2935
2932 2003-03-12 *** Released version 0.2.15pre2
2936 2003-03-12 *** Released version 0.2.15pre2
2933
2937
2934 2003-03-12 Fernando Perez <fperez@colorado.edu>
2938 2003-03-12 Fernando Perez <fperez@colorado.edu>
2935
2939
2936 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2940 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2937 long-standing problem with garbage characters in some terminals.
2941 long-standing problem with garbage characters in some terminals.
2938 The issue was really that the \001 and \002 escapes must _only_ be
2942 The issue was really that the \001 and \002 escapes must _only_ be
2939 passed to input prompts (which call readline), but _never_ to
2943 passed to input prompts (which call readline), but _never_ to
2940 normal text to be printed on screen. I changed ColorANSI to have
2944 normal text to be printed on screen. I changed ColorANSI to have
2941 two classes: TermColors and InputTermColors, each with the
2945 two classes: TermColors and InputTermColors, each with the
2942 appropriate escapes for input prompts or normal text. The code in
2946 appropriate escapes for input prompts or normal text. The code in
2943 Prompts.py got slightly more complicated, but this very old and
2947 Prompts.py got slightly more complicated, but this very old and
2944 annoying bug is finally fixed.
2948 annoying bug is finally fixed.
2945
2949
2946 All the credit for nailing down the real origin of this problem
2950 All the credit for nailing down the real origin of this problem
2947 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2951 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2948 *Many* thanks to him for spending quite a bit of effort on this.
2952 *Many* thanks to him for spending quite a bit of effort on this.
2949
2953
2950 2003-03-05 *** Released version 0.2.15pre1
2954 2003-03-05 *** Released version 0.2.15pre1
2951
2955
2952 2003-03-03 Fernando Perez <fperez@colorado.edu>
2956 2003-03-03 Fernando Perez <fperez@colorado.edu>
2953
2957
2954 * IPython/FakeModule.py: Moved the former _FakeModule to a
2958 * IPython/FakeModule.py: Moved the former _FakeModule to a
2955 separate file, because it's also needed by Magic (to fix a similar
2959 separate file, because it's also needed by Magic (to fix a similar
2956 pickle-related issue in @run).
2960 pickle-related issue in @run).
2957
2961
2958 2003-03-02 Fernando Perez <fperez@colorado.edu>
2962 2003-03-02 Fernando Perez <fperez@colorado.edu>
2959
2963
2960 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2964 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2961 the autocall option at runtime.
2965 the autocall option at runtime.
2962 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2966 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2963 across Magic.py to start separating Magic from InteractiveShell.
2967 across Magic.py to start separating Magic from InteractiveShell.
2964 (Magic._ofind): Fixed to return proper namespace for dotted
2968 (Magic._ofind): Fixed to return proper namespace for dotted
2965 names. Before, a dotted name would always return 'not currently
2969 names. Before, a dotted name would always return 'not currently
2966 defined', because it would find the 'parent'. s.x would be found,
2970 defined', because it would find the 'parent'. s.x would be found,
2967 but since 'x' isn't defined by itself, it would get confused.
2971 but since 'x' isn't defined by itself, it would get confused.
2968 (Magic.magic_run): Fixed pickling problems reported by Ralf
2972 (Magic.magic_run): Fixed pickling problems reported by Ralf
2969 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2973 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2970 that I'd used when Mike Heeter reported similar issues at the
2974 that I'd used when Mike Heeter reported similar issues at the
2971 top-level, but now for @run. It boils down to injecting the
2975 top-level, but now for @run. It boils down to injecting the
2972 namespace where code is being executed with something that looks
2976 namespace where code is being executed with something that looks
2973 enough like a module to fool pickle.dump(). Since a pickle stores
2977 enough like a module to fool pickle.dump(). Since a pickle stores
2974 a named reference to the importing module, we need this for
2978 a named reference to the importing module, we need this for
2975 pickles to save something sensible.
2979 pickles to save something sensible.
2976
2980
2977 * IPython/ipmaker.py (make_IPython): added an autocall option.
2981 * IPython/ipmaker.py (make_IPython): added an autocall option.
2978
2982
2979 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2983 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2980 the auto-eval code. Now autocalling is an option, and the code is
2984 the auto-eval code. Now autocalling is an option, and the code is
2981 also vastly safer. There is no more eval() involved at all.
2985 also vastly safer. There is no more eval() involved at all.
2982
2986
2983 2003-03-01 Fernando Perez <fperez@colorado.edu>
2987 2003-03-01 Fernando Perez <fperez@colorado.edu>
2984
2988
2985 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2989 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2986 dict with named keys instead of a tuple.
2990 dict with named keys instead of a tuple.
2987
2991
2988 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2992 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2989
2993
2990 * setup.py (make_shortcut): Fixed message about directories
2994 * setup.py (make_shortcut): Fixed message about directories
2991 created during Windows installation (the directories were ok, just
2995 created during Windows installation (the directories were ok, just
2992 the printed message was misleading). Thanks to Chris Liechti
2996 the printed message was misleading). Thanks to Chris Liechti
2993 <cliechti-AT-gmx.net> for the heads up.
2997 <cliechti-AT-gmx.net> for the heads up.
2994
2998
2995 2003-02-21 Fernando Perez <fperez@colorado.edu>
2999 2003-02-21 Fernando Perez <fperez@colorado.edu>
2996
3000
2997 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3001 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2998 of ValueError exception when checking for auto-execution. This
3002 of ValueError exception when checking for auto-execution. This
2999 one is raised by things like Numeric arrays arr.flat when the
3003 one is raised by things like Numeric arrays arr.flat when the
3000 array is non-contiguous.
3004 array is non-contiguous.
3001
3005
3002 2003-01-31 Fernando Perez <fperez@colorado.edu>
3006 2003-01-31 Fernando Perez <fperez@colorado.edu>
3003
3007
3004 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3008 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3005 not return any value at all (even though the command would get
3009 not return any value at all (even though the command would get
3006 executed).
3010 executed).
3007 (xsys): Flush stdout right after printing the command to ensure
3011 (xsys): Flush stdout right after printing the command to ensure
3008 proper ordering of commands and command output in the total
3012 proper ordering of commands and command output in the total
3009 output.
3013 output.
3010 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3014 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3011 system/getoutput as defaults. The old ones are kept for
3015 system/getoutput as defaults. The old ones are kept for
3012 compatibility reasons, so no code which uses this library needs
3016 compatibility reasons, so no code which uses this library needs
3013 changing.
3017 changing.
3014
3018
3015 2003-01-27 *** Released version 0.2.14
3019 2003-01-27 *** Released version 0.2.14
3016
3020
3017 2003-01-25 Fernando Perez <fperez@colorado.edu>
3021 2003-01-25 Fernando Perez <fperez@colorado.edu>
3018
3022
3019 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3023 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3020 functions defined in previous edit sessions could not be re-edited
3024 functions defined in previous edit sessions could not be re-edited
3021 (because the temp files were immediately removed). Now temp files
3025 (because the temp files were immediately removed). Now temp files
3022 are removed only at IPython's exit.
3026 are removed only at IPython's exit.
3023 (Magic.magic_run): Improved @run to perform shell-like expansions
3027 (Magic.magic_run): Improved @run to perform shell-like expansions
3024 on its arguments (~users and $VARS). With this, @run becomes more
3028 on its arguments (~users and $VARS). With this, @run becomes more
3025 like a normal command-line.
3029 like a normal command-line.
3026
3030
3027 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3031 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3028 bugs related to embedding and cleaned up that code. A fairly
3032 bugs related to embedding and cleaned up that code. A fairly
3029 important one was the impossibility to access the global namespace
3033 important one was the impossibility to access the global namespace
3030 through the embedded IPython (only local variables were visible).
3034 through the embedded IPython (only local variables were visible).
3031
3035
3032 2003-01-14 Fernando Perez <fperez@colorado.edu>
3036 2003-01-14 Fernando Perez <fperez@colorado.edu>
3033
3037
3034 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3038 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3035 auto-calling to be a bit more conservative. Now it doesn't get
3039 auto-calling to be a bit more conservative. Now it doesn't get
3036 triggered if any of '!=()<>' are in the rest of the input line, to
3040 triggered if any of '!=()<>' are in the rest of the input line, to
3037 allow comparing callables. Thanks to Alex for the heads up.
3041 allow comparing callables. Thanks to Alex for the heads up.
3038
3042
3039 2003-01-07 Fernando Perez <fperez@colorado.edu>
3043 2003-01-07 Fernando Perez <fperez@colorado.edu>
3040
3044
3041 * IPython/genutils.py (page): fixed estimation of the number of
3045 * IPython/genutils.py (page): fixed estimation of the number of
3042 lines in a string to be paged to simply count newlines. This
3046 lines in a string to be paged to simply count newlines. This
3043 prevents over-guessing due to embedded escape sequences. A better
3047 prevents over-guessing due to embedded escape sequences. A better
3044 long-term solution would involve stripping out the control chars
3048 long-term solution would involve stripping out the control chars
3045 for the count, but it's potentially so expensive I just don't
3049 for the count, but it's potentially so expensive I just don't
3046 think it's worth doing.
3050 think it's worth doing.
3047
3051
3048 2002-12-19 *** Released version 0.2.14pre50
3052 2002-12-19 *** Released version 0.2.14pre50
3049
3053
3050 2002-12-19 Fernando Perez <fperez@colorado.edu>
3054 2002-12-19 Fernando Perez <fperez@colorado.edu>
3051
3055
3052 * tools/release (version): Changed release scripts to inform
3056 * tools/release (version): Changed release scripts to inform
3053 Andrea and build a NEWS file with a list of recent changes.
3057 Andrea and build a NEWS file with a list of recent changes.
3054
3058
3055 * IPython/ColorANSI.py (__all__): changed terminal detection
3059 * IPython/ColorANSI.py (__all__): changed terminal detection
3056 code. Seems to work better for xterms without breaking
3060 code. Seems to work better for xterms without breaking
3057 konsole. Will need more testing to determine if WinXP and Mac OSX
3061 konsole. Will need more testing to determine if WinXP and Mac OSX
3058 also work ok.
3062 also work ok.
3059
3063
3060 2002-12-18 *** Released version 0.2.14pre49
3064 2002-12-18 *** Released version 0.2.14pre49
3061
3065
3062 2002-12-18 Fernando Perez <fperez@colorado.edu>
3066 2002-12-18 Fernando Perez <fperez@colorado.edu>
3063
3067
3064 * Docs: added new info about Mac OSX, from Andrea.
3068 * Docs: added new info about Mac OSX, from Andrea.
3065
3069
3066 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3070 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3067 allow direct plotting of python strings whose format is the same
3071 allow direct plotting of python strings whose format is the same
3068 of gnuplot data files.
3072 of gnuplot data files.
3069
3073
3070 2002-12-16 Fernando Perez <fperez@colorado.edu>
3074 2002-12-16 Fernando Perez <fperez@colorado.edu>
3071
3075
3072 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3076 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3073 value of exit question to be acknowledged.
3077 value of exit question to be acknowledged.
3074
3078
3075 2002-12-03 Fernando Perez <fperez@colorado.edu>
3079 2002-12-03 Fernando Perez <fperez@colorado.edu>
3076
3080
3077 * IPython/ipmaker.py: removed generators, which had been added
3081 * IPython/ipmaker.py: removed generators, which had been added
3078 by mistake in an earlier debugging run. This was causing trouble
3082 by mistake in an earlier debugging run. This was causing trouble
3079 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3083 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3080 for pointing this out.
3084 for pointing this out.
3081
3085
3082 2002-11-17 Fernando Perez <fperez@colorado.edu>
3086 2002-11-17 Fernando Perez <fperez@colorado.edu>
3083
3087
3084 * Manual: updated the Gnuplot section.
3088 * Manual: updated the Gnuplot section.
3085
3089
3086 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3090 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3087 a much better split of what goes in Runtime and what goes in
3091 a much better split of what goes in Runtime and what goes in
3088 Interactive.
3092 Interactive.
3089
3093
3090 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3094 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3091 being imported from iplib.
3095 being imported from iplib.
3092
3096
3093 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3097 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3094 for command-passing. Now the global Gnuplot instance is called
3098 for command-passing. Now the global Gnuplot instance is called
3095 'gp' instead of 'g', which was really a far too fragile and
3099 'gp' instead of 'g', which was really a far too fragile and
3096 common name.
3100 common name.
3097
3101
3098 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3102 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3099 bounding boxes generated by Gnuplot for square plots.
3103 bounding boxes generated by Gnuplot for square plots.
3100
3104
3101 * IPython/genutils.py (popkey): new function added. I should
3105 * IPython/genutils.py (popkey): new function added. I should
3102 suggest this on c.l.py as a dict method, it seems useful.
3106 suggest this on c.l.py as a dict method, it seems useful.
3103
3107
3104 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3108 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3105 to transparently handle PostScript generation. MUCH better than
3109 to transparently handle PostScript generation. MUCH better than
3106 the previous plot_eps/replot_eps (which I removed now). The code
3110 the previous plot_eps/replot_eps (which I removed now). The code
3107 is also fairly clean and well documented now (including
3111 is also fairly clean and well documented now (including
3108 docstrings).
3112 docstrings).
3109
3113
3110 2002-11-13 Fernando Perez <fperez@colorado.edu>
3114 2002-11-13 Fernando Perez <fperez@colorado.edu>
3111
3115
3112 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3116 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3113 (inconsistent with options).
3117 (inconsistent with options).
3114
3118
3115 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3119 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3116 manually disabled, I don't know why. Fixed it.
3120 manually disabled, I don't know why. Fixed it.
3117 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3121 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3118 eps output.
3122 eps output.
3119
3123
3120 2002-11-12 Fernando Perez <fperez@colorado.edu>
3124 2002-11-12 Fernando Perez <fperez@colorado.edu>
3121
3125
3122 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3126 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3123 don't propagate up to caller. Fixes crash reported by François
3127 don't propagate up to caller. Fixes crash reported by François
3124 Pinard.
3128 Pinard.
3125
3129
3126 2002-11-09 Fernando Perez <fperez@colorado.edu>
3130 2002-11-09 Fernando Perez <fperez@colorado.edu>
3127
3131
3128 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3132 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3129 history file for new users.
3133 history file for new users.
3130 (make_IPython): fixed bug where initial install would leave the
3134 (make_IPython): fixed bug where initial install would leave the
3131 user running in the .ipython dir.
3135 user running in the .ipython dir.
3132 (make_IPython): fixed bug where config dir .ipython would be
3136 (make_IPython): fixed bug where config dir .ipython would be
3133 created regardless of the given -ipythondir option. Thanks to Cory
3137 created regardless of the given -ipythondir option. Thanks to Cory
3134 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3138 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3135
3139
3136 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3140 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3137 type confirmations. Will need to use it in all of IPython's code
3141 type confirmations. Will need to use it in all of IPython's code
3138 consistently.
3142 consistently.
3139
3143
3140 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3144 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3141 context to print 31 lines instead of the default 5. This will make
3145 context to print 31 lines instead of the default 5. This will make
3142 the crash reports extremely detailed in case the problem is in
3146 the crash reports extremely detailed in case the problem is in
3143 libraries I don't have access to.
3147 libraries I don't have access to.
3144
3148
3145 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3149 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3146 line of defense' code to still crash, but giving users fair
3150 line of defense' code to still crash, but giving users fair
3147 warning. I don't want internal errors to go unreported: if there's
3151 warning. I don't want internal errors to go unreported: if there's
3148 an internal problem, IPython should crash and generate a full
3152 an internal problem, IPython should crash and generate a full
3149 report.
3153 report.
3150
3154
3151 2002-11-08 Fernando Perez <fperez@colorado.edu>
3155 2002-11-08 Fernando Perez <fperez@colorado.edu>
3152
3156
3153 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3157 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3154 otherwise uncaught exceptions which can appear if people set
3158 otherwise uncaught exceptions which can appear if people set
3155 sys.stdout to something badly broken. Thanks to a crash report
3159 sys.stdout to something badly broken. Thanks to a crash report
3156 from henni-AT-mail.brainbot.com.
3160 from henni-AT-mail.brainbot.com.
3157
3161
3158 2002-11-04 Fernando Perez <fperez@colorado.edu>
3162 2002-11-04 Fernando Perez <fperez@colorado.edu>
3159
3163
3160 * IPython/iplib.py (InteractiveShell.interact): added
3164 * IPython/iplib.py (InteractiveShell.interact): added
3161 __IPYTHON__active to the builtins. It's a flag which goes on when
3165 __IPYTHON__active to the builtins. It's a flag which goes on when
3162 the interaction starts and goes off again when it stops. This
3166 the interaction starts and goes off again when it stops. This
3163 allows embedding code to detect being inside IPython. Before this
3167 allows embedding code to detect being inside IPython. Before this
3164 was done via __IPYTHON__, but that only shows that an IPython
3168 was done via __IPYTHON__, but that only shows that an IPython
3165 instance has been created.
3169 instance has been created.
3166
3170
3167 * IPython/Magic.py (Magic.magic_env): I realized that in a
3171 * IPython/Magic.py (Magic.magic_env): I realized that in a
3168 UserDict, instance.data holds the data as a normal dict. So I
3172 UserDict, instance.data holds the data as a normal dict. So I
3169 modified @env to return os.environ.data instead of rebuilding a
3173 modified @env to return os.environ.data instead of rebuilding a
3170 dict by hand.
3174 dict by hand.
3171
3175
3172 2002-11-02 Fernando Perez <fperez@colorado.edu>
3176 2002-11-02 Fernando Perez <fperez@colorado.edu>
3173
3177
3174 * IPython/genutils.py (warn): changed so that level 1 prints no
3178 * IPython/genutils.py (warn): changed so that level 1 prints no
3175 header. Level 2 is now the default (with 'WARNING' header, as
3179 header. Level 2 is now the default (with 'WARNING' header, as
3176 before). I think I tracked all places where changes were needed in
3180 before). I think I tracked all places where changes were needed in
3177 IPython, but outside code using the old level numbering may have
3181 IPython, but outside code using the old level numbering may have
3178 broken.
3182 broken.
3179
3183
3180 * IPython/iplib.py (InteractiveShell.runcode): added this to
3184 * IPython/iplib.py (InteractiveShell.runcode): added this to
3181 handle the tracebacks in SystemExit traps correctly. The previous
3185 handle the tracebacks in SystemExit traps correctly. The previous
3182 code (through interact) was printing more of the stack than
3186 code (through interact) was printing more of the stack than
3183 necessary, showing IPython internal code to the user.
3187 necessary, showing IPython internal code to the user.
3184
3188
3185 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3189 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3186 default. Now that the default at the confirmation prompt is yes,
3190 default. Now that the default at the confirmation prompt is yes,
3187 it's not so intrusive. François' argument that ipython sessions
3191 it's not so intrusive. François' argument that ipython sessions
3188 tend to be complex enough not to lose them from an accidental C-d,
3192 tend to be complex enough not to lose them from an accidental C-d,
3189 is a valid one.
3193 is a valid one.
3190
3194
3191 * IPython/iplib.py (InteractiveShell.interact): added a
3195 * IPython/iplib.py (InteractiveShell.interact): added a
3192 showtraceback() call to the SystemExit trap, and modified the exit
3196 showtraceback() call to the SystemExit trap, and modified the exit
3193 confirmation to have yes as the default.
3197 confirmation to have yes as the default.
3194
3198
3195 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3199 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3196 this file. It's been gone from the code for a long time, this was
3200 this file. It's been gone from the code for a long time, this was
3197 simply leftover junk.
3201 simply leftover junk.
3198
3202
3199 2002-11-01 Fernando Perez <fperez@colorado.edu>
3203 2002-11-01 Fernando Perez <fperez@colorado.edu>
3200
3204
3201 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3205 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3202 added. If set, IPython now traps EOF and asks for
3206 added. If set, IPython now traps EOF and asks for
3203 confirmation. After a request by François Pinard.
3207 confirmation. After a request by François Pinard.
3204
3208
3205 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3209 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3206 of @abort, and with a new (better) mechanism for handling the
3210 of @abort, and with a new (better) mechanism for handling the
3207 exceptions.
3211 exceptions.
3208
3212
3209 2002-10-27 Fernando Perez <fperez@colorado.edu>
3213 2002-10-27 Fernando Perez <fperez@colorado.edu>
3210
3214
3211 * IPython/usage.py (__doc__): updated the --help information and
3215 * IPython/usage.py (__doc__): updated the --help information and
3212 the ipythonrc file to indicate that -log generates
3216 the ipythonrc file to indicate that -log generates
3213 ./ipython.log. Also fixed the corresponding info in @logstart.
3217 ./ipython.log. Also fixed the corresponding info in @logstart.
3214 This and several other fixes in the manuals thanks to reports by
3218 This and several other fixes in the manuals thanks to reports by
3215 François Pinard <pinard-AT-iro.umontreal.ca>.
3219 François Pinard <pinard-AT-iro.umontreal.ca>.
3216
3220
3217 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3221 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3218 refer to @logstart (instead of @log, which doesn't exist).
3222 refer to @logstart (instead of @log, which doesn't exist).
3219
3223
3220 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3224 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3221 AttributeError crash. Thanks to Christopher Armstrong
3225 AttributeError crash. Thanks to Christopher Armstrong
3222 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3226 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3223 introduced recently (in 0.2.14pre37) with the fix to the eval
3227 introduced recently (in 0.2.14pre37) with the fix to the eval
3224 problem mentioned below.
3228 problem mentioned below.
3225
3229
3226 2002-10-17 Fernando Perez <fperez@colorado.edu>
3230 2002-10-17 Fernando Perez <fperez@colorado.edu>
3227
3231
3228 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3232 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3229 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3233 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3230
3234
3231 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3235 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3232 this function to fix a problem reported by Alex Schmolck. He saw
3236 this function to fix a problem reported by Alex Schmolck. He saw
3233 it with list comprehensions and generators, which were getting
3237 it with list comprehensions and generators, which were getting
3234 called twice. The real problem was an 'eval' call in testing for
3238 called twice. The real problem was an 'eval' call in testing for
3235 automagic which was evaluating the input line silently.
3239 automagic which was evaluating the input line silently.
3236
3240
3237 This is a potentially very nasty bug, if the input has side
3241 This is a potentially very nasty bug, if the input has side
3238 effects which must not be repeated. The code is much cleaner now,
3242 effects which must not be repeated. The code is much cleaner now,
3239 without any blanket 'except' left and with a regexp test for
3243 without any blanket 'except' left and with a regexp test for
3240 actual function names.
3244 actual function names.
3241
3245
3242 But an eval remains, which I'm not fully comfortable with. I just
3246 But an eval remains, which I'm not fully comfortable with. I just
3243 don't know how to find out if an expression could be a callable in
3247 don't know how to find out if an expression could be a callable in
3244 the user's namespace without doing an eval on the string. However
3248 the user's namespace without doing an eval on the string. However
3245 that string is now much more strictly checked so that no code
3249 that string is now much more strictly checked so that no code
3246 slips by, so the eval should only happen for things that can
3250 slips by, so the eval should only happen for things that can
3247 really be only function/method names.
3251 really be only function/method names.
3248
3252
3249 2002-10-15 Fernando Perez <fperez@colorado.edu>
3253 2002-10-15 Fernando Perez <fperez@colorado.edu>
3250
3254
3251 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3255 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3252 OSX information to main manual, removed README_Mac_OSX file from
3256 OSX information to main manual, removed README_Mac_OSX file from
3253 distribution. Also updated credits for recent additions.
3257 distribution. Also updated credits for recent additions.
3254
3258
3255 2002-10-10 Fernando Perez <fperez@colorado.edu>
3259 2002-10-10 Fernando Perez <fperez@colorado.edu>
3256
3260
3257 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3261 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3258 terminal-related issues. Many thanks to Andrea Riciputi
3262 terminal-related issues. Many thanks to Andrea Riciputi
3259 <andrea.riciputi-AT-libero.it> for writing it.
3263 <andrea.riciputi-AT-libero.it> for writing it.
3260
3264
3261 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3265 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3262 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3266 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3263
3267
3264 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3268 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3265 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3269 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3266 <syver-en-AT-online.no> who both submitted patches for this problem.
3270 <syver-en-AT-online.no> who both submitted patches for this problem.
3267
3271
3268 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3272 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3269 global embedding to make sure that things don't overwrite user
3273 global embedding to make sure that things don't overwrite user
3270 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3274 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3271
3275
3272 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3276 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3273 compatibility. Thanks to Hayden Callow
3277 compatibility. Thanks to Hayden Callow
3274 <h.callow-AT-elec.canterbury.ac.nz>
3278 <h.callow-AT-elec.canterbury.ac.nz>
3275
3279
3276 2002-10-04 Fernando Perez <fperez@colorado.edu>
3280 2002-10-04 Fernando Perez <fperez@colorado.edu>
3277
3281
3278 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3282 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3279 Gnuplot.File objects.
3283 Gnuplot.File objects.
3280
3284
3281 2002-07-23 Fernando Perez <fperez@colorado.edu>
3285 2002-07-23 Fernando Perez <fperez@colorado.edu>
3282
3286
3283 * IPython/genutils.py (timing): Added timings() and timing() for
3287 * IPython/genutils.py (timing): Added timings() and timing() for
3284 quick access to the most commonly needed data, the execution
3288 quick access to the most commonly needed data, the execution
3285 times. Old timing() renamed to timings_out().
3289 times. Old timing() renamed to timings_out().
3286
3290
3287 2002-07-18 Fernando Perez <fperez@colorado.edu>
3291 2002-07-18 Fernando Perez <fperez@colorado.edu>
3288
3292
3289 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3293 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3290 bug with nested instances disrupting the parent's tab completion.
3294 bug with nested instances disrupting the parent's tab completion.
3291
3295
3292 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3296 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3293 all_completions code to begin the emacs integration.
3297 all_completions code to begin the emacs integration.
3294
3298
3295 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3299 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3296 argument to allow titling individual arrays when plotting.
3300 argument to allow titling individual arrays when plotting.
3297
3301
3298 2002-07-15 Fernando Perez <fperez@colorado.edu>
3302 2002-07-15 Fernando Perez <fperez@colorado.edu>
3299
3303
3300 * setup.py (make_shortcut): changed to retrieve the value of
3304 * setup.py (make_shortcut): changed to retrieve the value of
3301 'Program Files' directory from the registry (this value changes in
3305 'Program Files' directory from the registry (this value changes in
3302 non-english versions of Windows). Thanks to Thomas Fanslau
3306 non-english versions of Windows). Thanks to Thomas Fanslau
3303 <tfanslau-AT-gmx.de> for the report.
3307 <tfanslau-AT-gmx.de> for the report.
3304
3308
3305 2002-07-10 Fernando Perez <fperez@colorado.edu>
3309 2002-07-10 Fernando Perez <fperez@colorado.edu>
3306
3310
3307 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3311 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3308 a bug in pdb, which crashes if a line with only whitespace is
3312 a bug in pdb, which crashes if a line with only whitespace is
3309 entered. Bug report submitted to sourceforge.
3313 entered. Bug report submitted to sourceforge.
3310
3314
3311 2002-07-09 Fernando Perez <fperez@colorado.edu>
3315 2002-07-09 Fernando Perez <fperez@colorado.edu>
3312
3316
3313 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3317 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3314 reporting exceptions (it's a bug in inspect.py, I just set a
3318 reporting exceptions (it's a bug in inspect.py, I just set a
3315 workaround).
3319 workaround).
3316
3320
3317 2002-07-08 Fernando Perez <fperez@colorado.edu>
3321 2002-07-08 Fernando Perez <fperez@colorado.edu>
3318
3322
3319 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3323 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3320 __IPYTHON__ in __builtins__ to show up in user_ns.
3324 __IPYTHON__ in __builtins__ to show up in user_ns.
3321
3325
3322 2002-07-03 Fernando Perez <fperez@colorado.edu>
3326 2002-07-03 Fernando Perez <fperez@colorado.edu>
3323
3327
3324 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3328 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3325 name from @gp_set_instance to @gp_set_default.
3329 name from @gp_set_instance to @gp_set_default.
3326
3330
3327 * IPython/ipmaker.py (make_IPython): default editor value set to
3331 * IPython/ipmaker.py (make_IPython): default editor value set to
3328 '0' (a string), to match the rc file. Otherwise will crash when
3332 '0' (a string), to match the rc file. Otherwise will crash when
3329 .strip() is called on it.
3333 .strip() is called on it.
3330
3334
3331
3335
3332 2002-06-28 Fernando Perez <fperez@colorado.edu>
3336 2002-06-28 Fernando Perez <fperez@colorado.edu>
3333
3337
3334 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3338 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3335 of files in current directory when a file is executed via
3339 of files in current directory when a file is executed via
3336 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3340 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3337
3341
3338 * setup.py (manfiles): fix for rpm builds, submitted by RA
3342 * setup.py (manfiles): fix for rpm builds, submitted by RA
3339 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3343 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3340
3344
3341 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3345 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3342 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3346 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3343 string!). A. Schmolck caught this one.
3347 string!). A. Schmolck caught this one.
3344
3348
3345 2002-06-27 Fernando Perez <fperez@colorado.edu>
3349 2002-06-27 Fernando Perez <fperez@colorado.edu>
3346
3350
3347 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3351 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3348 defined files at the cmd line. __name__ wasn't being set to
3352 defined files at the cmd line. __name__ wasn't being set to
3349 __main__.
3353 __main__.
3350
3354
3351 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3355 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3352 regular lists and tuples besides Numeric arrays.
3356 regular lists and tuples besides Numeric arrays.
3353
3357
3354 * IPython/Prompts.py (CachedOutput.__call__): Added output
3358 * IPython/Prompts.py (CachedOutput.__call__): Added output
3355 supression for input ending with ';'. Similar to Mathematica and
3359 supression for input ending with ';'. Similar to Mathematica and
3356 Matlab. The _* vars and Out[] list are still updated, just like
3360 Matlab. The _* vars and Out[] list are still updated, just like
3357 Mathematica behaves.
3361 Mathematica behaves.
3358
3362
3359 2002-06-25 Fernando Perez <fperez@colorado.edu>
3363 2002-06-25 Fernando Perez <fperez@colorado.edu>
3360
3364
3361 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3365 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3362 .ini extensions for profiels under Windows.
3366 .ini extensions for profiels under Windows.
3363
3367
3364 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3368 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3365 string form. Fix contributed by Alexander Schmolck
3369 string form. Fix contributed by Alexander Schmolck
3366 <a.schmolck-AT-gmx.net>
3370 <a.schmolck-AT-gmx.net>
3367
3371
3368 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3372 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3369 pre-configured Gnuplot instance.
3373 pre-configured Gnuplot instance.
3370
3374
3371 2002-06-21 Fernando Perez <fperez@colorado.edu>
3375 2002-06-21 Fernando Perez <fperez@colorado.edu>
3372
3376
3373 * IPython/numutils.py (exp_safe): new function, works around the
3377 * IPython/numutils.py (exp_safe): new function, works around the
3374 underflow problems in Numeric.
3378 underflow problems in Numeric.
3375 (log2): New fn. Safe log in base 2: returns exact integer answer
3379 (log2): New fn. Safe log in base 2: returns exact integer answer
3376 for exact integer powers of 2.
3380 for exact integer powers of 2.
3377
3381
3378 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3382 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3379 properly.
3383 properly.
3380
3384
3381 2002-06-20 Fernando Perez <fperez@colorado.edu>
3385 2002-06-20 Fernando Perez <fperez@colorado.edu>
3382
3386
3383 * IPython/genutils.py (timing): new function like
3387 * IPython/genutils.py (timing): new function like
3384 Mathematica's. Similar to time_test, but returns more info.
3388 Mathematica's. Similar to time_test, but returns more info.
3385
3389
3386 2002-06-18 Fernando Perez <fperez@colorado.edu>
3390 2002-06-18 Fernando Perez <fperez@colorado.edu>
3387
3391
3388 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3392 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3389 according to Mike Heeter's suggestions.
3393 according to Mike Heeter's suggestions.
3390
3394
3391 2002-06-16 Fernando Perez <fperez@colorado.edu>
3395 2002-06-16 Fernando Perez <fperez@colorado.edu>
3392
3396
3393 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3397 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3394 system. GnuplotMagic is gone as a user-directory option. New files
3398 system. GnuplotMagic is gone as a user-directory option. New files
3395 make it easier to use all the gnuplot stuff both from external
3399 make it easier to use all the gnuplot stuff both from external
3396 programs as well as from IPython. Had to rewrite part of
3400 programs as well as from IPython. Had to rewrite part of
3397 hardcopy() b/c of a strange bug: often the ps files simply don't
3401 hardcopy() b/c of a strange bug: often the ps files simply don't
3398 get created, and require a repeat of the command (often several
3402 get created, and require a repeat of the command (often several
3399 times).
3403 times).
3400
3404
3401 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3405 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3402 resolve output channel at call time, so that if sys.stderr has
3406 resolve output channel at call time, so that if sys.stderr has
3403 been redirected by user this gets honored.
3407 been redirected by user this gets honored.
3404
3408
3405 2002-06-13 Fernando Perez <fperez@colorado.edu>
3409 2002-06-13 Fernando Perez <fperez@colorado.edu>
3406
3410
3407 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3411 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3408 IPShell. Kept a copy with the old names to avoid breaking people's
3412 IPShell. Kept a copy with the old names to avoid breaking people's
3409 embedded code.
3413 embedded code.
3410
3414
3411 * IPython/ipython: simplified it to the bare minimum after
3415 * IPython/ipython: simplified it to the bare minimum after
3412 Holger's suggestions. Added info about how to use it in
3416 Holger's suggestions. Added info about how to use it in
3413 PYTHONSTARTUP.
3417 PYTHONSTARTUP.
3414
3418
3415 * IPython/Shell.py (IPythonShell): changed the options passing
3419 * IPython/Shell.py (IPythonShell): changed the options passing
3416 from a string with funky %s replacements to a straight list. Maybe
3420 from a string with funky %s replacements to a straight list. Maybe
3417 a bit more typing, but it follows sys.argv conventions, so there's
3421 a bit more typing, but it follows sys.argv conventions, so there's
3418 less special-casing to remember.
3422 less special-casing to remember.
3419
3423
3420 2002-06-12 Fernando Perez <fperez@colorado.edu>
3424 2002-06-12 Fernando Perez <fperez@colorado.edu>
3421
3425
3422 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3426 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3423 command. Thanks to a suggestion by Mike Heeter.
3427 command. Thanks to a suggestion by Mike Heeter.
3424 (Magic.magic_pfile): added behavior to look at filenames if given
3428 (Magic.magic_pfile): added behavior to look at filenames if given
3425 arg is not a defined object.
3429 arg is not a defined object.
3426 (Magic.magic_save): New @save function to save code snippets. Also
3430 (Magic.magic_save): New @save function to save code snippets. Also
3427 a Mike Heeter idea.
3431 a Mike Heeter idea.
3428
3432
3429 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3433 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3430 plot() and replot(). Much more convenient now, especially for
3434 plot() and replot(). Much more convenient now, especially for
3431 interactive use.
3435 interactive use.
3432
3436
3433 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3437 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3434 filenames.
3438 filenames.
3435
3439
3436 2002-06-02 Fernando Perez <fperez@colorado.edu>
3440 2002-06-02 Fernando Perez <fperez@colorado.edu>
3437
3441
3438 * IPython/Struct.py (Struct.__init__): modified to admit
3442 * IPython/Struct.py (Struct.__init__): modified to admit
3439 initialization via another struct.
3443 initialization via another struct.
3440
3444
3441 * IPython/genutils.py (SystemExec.__init__): New stateful
3445 * IPython/genutils.py (SystemExec.__init__): New stateful
3442 interface to xsys and bq. Useful for writing system scripts.
3446 interface to xsys and bq. Useful for writing system scripts.
3443
3447
3444 2002-05-30 Fernando Perez <fperez@colorado.edu>
3448 2002-05-30 Fernando Perez <fperez@colorado.edu>
3445
3449
3446 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3450 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3447 documents. This will make the user download smaller (it's getting
3451 documents. This will make the user download smaller (it's getting
3448 too big).
3452 too big).
3449
3453
3450 2002-05-29 Fernando Perez <fperez@colorado.edu>
3454 2002-05-29 Fernando Perez <fperez@colorado.edu>
3451
3455
3452 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3456 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3453 fix problems with shelve and pickle. Seems to work, but I don't
3457 fix problems with shelve and pickle. Seems to work, but I don't
3454 know if corner cases break it. Thanks to Mike Heeter
3458 know if corner cases break it. Thanks to Mike Heeter
3455 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3459 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3456
3460
3457 2002-05-24 Fernando Perez <fperez@colorado.edu>
3461 2002-05-24 Fernando Perez <fperez@colorado.edu>
3458
3462
3459 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3463 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3460 macros having broken.
3464 macros having broken.
3461
3465
3462 2002-05-21 Fernando Perez <fperez@colorado.edu>
3466 2002-05-21 Fernando Perez <fperez@colorado.edu>
3463
3467
3464 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3468 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3465 introduced logging bug: all history before logging started was
3469 introduced logging bug: all history before logging started was
3466 being written one character per line! This came from the redesign
3470 being written one character per line! This came from the redesign
3467 of the input history as a special list which slices to strings,
3471 of the input history as a special list which slices to strings,
3468 not to lists.
3472 not to lists.
3469
3473
3470 2002-05-20 Fernando Perez <fperez@colorado.edu>
3474 2002-05-20 Fernando Perez <fperez@colorado.edu>
3471
3475
3472 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3476 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3473 be an attribute of all classes in this module. The design of these
3477 be an attribute of all classes in this module. The design of these
3474 classes needs some serious overhauling.
3478 classes needs some serious overhauling.
3475
3479
3476 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3480 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3477 which was ignoring '_' in option names.
3481 which was ignoring '_' in option names.
3478
3482
3479 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3483 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3480 'Verbose_novars' to 'Context' and made it the new default. It's a
3484 'Verbose_novars' to 'Context' and made it the new default. It's a
3481 bit more readable and also safer than verbose.
3485 bit more readable and also safer than verbose.
3482
3486
3483 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3487 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3484 triple-quoted strings.
3488 triple-quoted strings.
3485
3489
3486 * IPython/OInspect.py (__all__): new module exposing the object
3490 * IPython/OInspect.py (__all__): new module exposing the object
3487 introspection facilities. Now the corresponding magics are dummy
3491 introspection facilities. Now the corresponding magics are dummy
3488 wrappers around this. Having this module will make it much easier
3492 wrappers around this. Having this module will make it much easier
3489 to put these functions into our modified pdb.
3493 to put these functions into our modified pdb.
3490 This new object inspector system uses the new colorizing module,
3494 This new object inspector system uses the new colorizing module,
3491 so source code and other things are nicely syntax highlighted.
3495 so source code and other things are nicely syntax highlighted.
3492
3496
3493 2002-05-18 Fernando Perez <fperez@colorado.edu>
3497 2002-05-18 Fernando Perez <fperez@colorado.edu>
3494
3498
3495 * IPython/ColorANSI.py: Split the coloring tools into a separate
3499 * IPython/ColorANSI.py: Split the coloring tools into a separate
3496 module so I can use them in other code easier (they were part of
3500 module so I can use them in other code easier (they were part of
3497 ultraTB).
3501 ultraTB).
3498
3502
3499 2002-05-17 Fernando Perez <fperez@colorado.edu>
3503 2002-05-17 Fernando Perez <fperez@colorado.edu>
3500
3504
3501 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3505 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3502 fixed it to set the global 'g' also to the called instance, as
3506 fixed it to set the global 'g' also to the called instance, as
3503 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3507 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3504 user's 'g' variables).
3508 user's 'g' variables).
3505
3509
3506 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3510 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3507 global variables (aliases to _ih,_oh) so that users which expect
3511 global variables (aliases to _ih,_oh) so that users which expect
3508 In[5] or Out[7] to work aren't unpleasantly surprised.
3512 In[5] or Out[7] to work aren't unpleasantly surprised.
3509 (InputList.__getslice__): new class to allow executing slices of
3513 (InputList.__getslice__): new class to allow executing slices of
3510 input history directly. Very simple class, complements the use of
3514 input history directly. Very simple class, complements the use of
3511 macros.
3515 macros.
3512
3516
3513 2002-05-16 Fernando Perez <fperez@colorado.edu>
3517 2002-05-16 Fernando Perez <fperez@colorado.edu>
3514
3518
3515 * setup.py (docdirbase): make doc directory be just doc/IPython
3519 * setup.py (docdirbase): make doc directory be just doc/IPython
3516 without version numbers, it will reduce clutter for users.
3520 without version numbers, it will reduce clutter for users.
3517
3521
3518 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3522 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3519 execfile call to prevent possible memory leak. See for details:
3523 execfile call to prevent possible memory leak. See for details:
3520 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3524 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3521
3525
3522 2002-05-15 Fernando Perez <fperez@colorado.edu>
3526 2002-05-15 Fernando Perez <fperez@colorado.edu>
3523
3527
3524 * IPython/Magic.py (Magic.magic_psource): made the object
3528 * IPython/Magic.py (Magic.magic_psource): made the object
3525 introspection names be more standard: pdoc, pdef, pfile and
3529 introspection names be more standard: pdoc, pdef, pfile and
3526 psource. They all print/page their output, and it makes
3530 psource. They all print/page their output, and it makes
3527 remembering them easier. Kept old names for compatibility as
3531 remembering them easier. Kept old names for compatibility as
3528 aliases.
3532 aliases.
3529
3533
3530 2002-05-14 Fernando Perez <fperez@colorado.edu>
3534 2002-05-14 Fernando Perez <fperez@colorado.edu>
3531
3535
3532 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3536 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3533 what the mouse problem was. The trick is to use gnuplot with temp
3537 what the mouse problem was. The trick is to use gnuplot with temp
3534 files and NOT with pipes (for data communication), because having
3538 files and NOT with pipes (for data communication), because having
3535 both pipes and the mouse on is bad news.
3539 both pipes and the mouse on is bad news.
3536
3540
3537 2002-05-13 Fernando Perez <fperez@colorado.edu>
3541 2002-05-13 Fernando Perez <fperez@colorado.edu>
3538
3542
3539 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3543 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3540 bug. Information would be reported about builtins even when
3544 bug. Information would be reported about builtins even when
3541 user-defined functions overrode them.
3545 user-defined functions overrode them.
3542
3546
3543 2002-05-11 Fernando Perez <fperez@colorado.edu>
3547 2002-05-11 Fernando Perez <fperez@colorado.edu>
3544
3548
3545 * IPython/__init__.py (__all__): removed FlexCompleter from
3549 * IPython/__init__.py (__all__): removed FlexCompleter from
3546 __all__ so that things don't fail in platforms without readline.
3550 __all__ so that things don't fail in platforms without readline.
3547
3551
3548 2002-05-10 Fernando Perez <fperez@colorado.edu>
3552 2002-05-10 Fernando Perez <fperez@colorado.edu>
3549
3553
3550 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3554 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3551 it requires Numeric, effectively making Numeric a dependency for
3555 it requires Numeric, effectively making Numeric a dependency for
3552 IPython.
3556 IPython.
3553
3557
3554 * Released 0.2.13
3558 * Released 0.2.13
3555
3559
3556 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3560 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3557 profiler interface. Now all the major options from the profiler
3561 profiler interface. Now all the major options from the profiler
3558 module are directly supported in IPython, both for single
3562 module are directly supported in IPython, both for single
3559 expressions (@prun) and for full programs (@run -p).
3563 expressions (@prun) and for full programs (@run -p).
3560
3564
3561 2002-05-09 Fernando Perez <fperez@colorado.edu>
3565 2002-05-09 Fernando Perez <fperez@colorado.edu>
3562
3566
3563 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3567 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3564 magic properly formatted for screen.
3568 magic properly formatted for screen.
3565
3569
3566 * setup.py (make_shortcut): Changed things to put pdf version in
3570 * setup.py (make_shortcut): Changed things to put pdf version in
3567 doc/ instead of doc/manual (had to change lyxport a bit).
3571 doc/ instead of doc/manual (had to change lyxport a bit).
3568
3572
3569 * IPython/Magic.py (Profile.string_stats): made profile runs go
3573 * IPython/Magic.py (Profile.string_stats): made profile runs go
3570 through pager (they are long and a pager allows searching, saving,
3574 through pager (they are long and a pager allows searching, saving,
3571 etc.)
3575 etc.)
3572
3576
3573 2002-05-08 Fernando Perez <fperez@colorado.edu>
3577 2002-05-08 Fernando Perez <fperez@colorado.edu>
3574
3578
3575 * Released 0.2.12
3579 * Released 0.2.12
3576
3580
3577 2002-05-06 Fernando Perez <fperez@colorado.edu>
3581 2002-05-06 Fernando Perez <fperez@colorado.edu>
3578
3582
3579 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3583 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3580 introduced); 'hist n1 n2' was broken.
3584 introduced); 'hist n1 n2' was broken.
3581 (Magic.magic_pdb): added optional on/off arguments to @pdb
3585 (Magic.magic_pdb): added optional on/off arguments to @pdb
3582 (Magic.magic_run): added option -i to @run, which executes code in
3586 (Magic.magic_run): added option -i to @run, which executes code in
3583 the IPython namespace instead of a clean one. Also added @irun as
3587 the IPython namespace instead of a clean one. Also added @irun as
3584 an alias to @run -i.
3588 an alias to @run -i.
3585
3589
3586 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3590 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3587 fixed (it didn't really do anything, the namespaces were wrong).
3591 fixed (it didn't really do anything, the namespaces were wrong).
3588
3592
3589 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3593 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3590
3594
3591 * IPython/__init__.py (__all__): Fixed package namespace, now
3595 * IPython/__init__.py (__all__): Fixed package namespace, now
3592 'import IPython' does give access to IPython.<all> as
3596 'import IPython' does give access to IPython.<all> as
3593 expected. Also renamed __release__ to Release.
3597 expected. Also renamed __release__ to Release.
3594
3598
3595 * IPython/Debugger.py (__license__): created new Pdb class which
3599 * IPython/Debugger.py (__license__): created new Pdb class which
3596 functions like a drop-in for the normal pdb.Pdb but does NOT
3600 functions like a drop-in for the normal pdb.Pdb but does NOT
3597 import readline by default. This way it doesn't muck up IPython's
3601 import readline by default. This way it doesn't muck up IPython's
3598 readline handling, and now tab-completion finally works in the
3602 readline handling, and now tab-completion finally works in the
3599 debugger -- sort of. It completes things globally visible, but the
3603 debugger -- sort of. It completes things globally visible, but the
3600 completer doesn't track the stack as pdb walks it. That's a bit
3604 completer doesn't track the stack as pdb walks it. That's a bit
3601 tricky, and I'll have to implement it later.
3605 tricky, and I'll have to implement it later.
3602
3606
3603 2002-05-05 Fernando Perez <fperez@colorado.edu>
3607 2002-05-05 Fernando Perez <fperez@colorado.edu>
3604
3608
3605 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3609 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3606 magic docstrings when printed via ? (explicit \'s were being
3610 magic docstrings when printed via ? (explicit \'s were being
3607 printed).
3611 printed).
3608
3612
3609 * IPython/ipmaker.py (make_IPython): fixed namespace
3613 * IPython/ipmaker.py (make_IPython): fixed namespace
3610 identification bug. Now variables loaded via logs or command-line
3614 identification bug. Now variables loaded via logs or command-line
3611 files are recognized in the interactive namespace by @who.
3615 files are recognized in the interactive namespace by @who.
3612
3616
3613 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3617 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3614 log replay system stemming from the string form of Structs.
3618 log replay system stemming from the string form of Structs.
3615
3619
3616 * IPython/Magic.py (Macro.__init__): improved macros to properly
3620 * IPython/Magic.py (Macro.__init__): improved macros to properly
3617 handle magic commands in them.
3621 handle magic commands in them.
3618 (Magic.magic_logstart): usernames are now expanded so 'logstart
3622 (Magic.magic_logstart): usernames are now expanded so 'logstart
3619 ~/mylog' now works.
3623 ~/mylog' now works.
3620
3624
3621 * IPython/iplib.py (complete): fixed bug where paths starting with
3625 * IPython/iplib.py (complete): fixed bug where paths starting with
3622 '/' would be completed as magic names.
3626 '/' would be completed as magic names.
3623
3627
3624 2002-05-04 Fernando Perez <fperez@colorado.edu>
3628 2002-05-04 Fernando Perez <fperez@colorado.edu>
3625
3629
3626 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3630 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3627 allow running full programs under the profiler's control.
3631 allow running full programs under the profiler's control.
3628
3632
3629 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3633 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3630 mode to report exceptions verbosely but without formatting
3634 mode to report exceptions verbosely but without formatting
3631 variables. This addresses the issue of ipython 'freezing' (it's
3635 variables. This addresses the issue of ipython 'freezing' (it's
3632 not frozen, but caught in an expensive formatting loop) when huge
3636 not frozen, but caught in an expensive formatting loop) when huge
3633 variables are in the context of an exception.
3637 variables are in the context of an exception.
3634 (VerboseTB.text): Added '--->' markers at line where exception was
3638 (VerboseTB.text): Added '--->' markers at line where exception was
3635 triggered. Much clearer to read, especially in NoColor modes.
3639 triggered. Much clearer to read, especially in NoColor modes.
3636
3640
3637 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3641 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3638 implemented in reverse when changing to the new parse_options().
3642 implemented in reverse when changing to the new parse_options().
3639
3643
3640 2002-05-03 Fernando Perez <fperez@colorado.edu>
3644 2002-05-03 Fernando Perez <fperez@colorado.edu>
3641
3645
3642 * IPython/Magic.py (Magic.parse_options): new function so that
3646 * IPython/Magic.py (Magic.parse_options): new function so that
3643 magics can parse options easier.
3647 magics can parse options easier.
3644 (Magic.magic_prun): new function similar to profile.run(),
3648 (Magic.magic_prun): new function similar to profile.run(),
3645 suggested by Chris Hart.
3649 suggested by Chris Hart.
3646 (Magic.magic_cd): fixed behavior so that it only changes if
3650 (Magic.magic_cd): fixed behavior so that it only changes if
3647 directory actually is in history.
3651 directory actually is in history.
3648
3652
3649 * IPython/usage.py (__doc__): added information about potential
3653 * IPython/usage.py (__doc__): added information about potential
3650 slowness of Verbose exception mode when there are huge data
3654 slowness of Verbose exception mode when there are huge data
3651 structures to be formatted (thanks to Archie Paulson).
3655 structures to be formatted (thanks to Archie Paulson).
3652
3656
3653 * IPython/ipmaker.py (make_IPython): Changed default logging
3657 * IPython/ipmaker.py (make_IPython): Changed default logging
3654 (when simply called with -log) to use curr_dir/ipython.log in
3658 (when simply called with -log) to use curr_dir/ipython.log in
3655 rotate mode. Fixed crash which was occuring with -log before
3659 rotate mode. Fixed crash which was occuring with -log before
3656 (thanks to Jim Boyle).
3660 (thanks to Jim Boyle).
3657
3661
3658 2002-05-01 Fernando Perez <fperez@colorado.edu>
3662 2002-05-01 Fernando Perez <fperez@colorado.edu>
3659
3663
3660 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3664 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3661 was nasty -- though somewhat of a corner case).
3665 was nasty -- though somewhat of a corner case).
3662
3666
3663 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3667 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3664 text (was a bug).
3668 text (was a bug).
3665
3669
3666 2002-04-30 Fernando Perez <fperez@colorado.edu>
3670 2002-04-30 Fernando Perez <fperez@colorado.edu>
3667
3671
3668 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3672 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3669 a print after ^D or ^C from the user so that the In[] prompt
3673 a print after ^D or ^C from the user so that the In[] prompt
3670 doesn't over-run the gnuplot one.
3674 doesn't over-run the gnuplot one.
3671
3675
3672 2002-04-29 Fernando Perez <fperez@colorado.edu>
3676 2002-04-29 Fernando Perez <fperez@colorado.edu>
3673
3677
3674 * Released 0.2.10
3678 * Released 0.2.10
3675
3679
3676 * IPython/__release__.py (version): get date dynamically.
3680 * IPython/__release__.py (version): get date dynamically.
3677
3681
3678 * Misc. documentation updates thanks to Arnd's comments. Also ran
3682 * Misc. documentation updates thanks to Arnd's comments. Also ran
3679 a full spellcheck on the manual (hadn't been done in a while).
3683 a full spellcheck on the manual (hadn't been done in a while).
3680
3684
3681 2002-04-27 Fernando Perez <fperez@colorado.edu>
3685 2002-04-27 Fernando Perez <fperez@colorado.edu>
3682
3686
3683 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3687 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3684 starting a log in mid-session would reset the input history list.
3688 starting a log in mid-session would reset the input history list.
3685
3689
3686 2002-04-26 Fernando Perez <fperez@colorado.edu>
3690 2002-04-26 Fernando Perez <fperez@colorado.edu>
3687
3691
3688 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3692 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3689 all files were being included in an update. Now anything in
3693 all files were being included in an update. Now anything in
3690 UserConfig that matches [A-Za-z]*.py will go (this excludes
3694 UserConfig that matches [A-Za-z]*.py will go (this excludes
3691 __init__.py)
3695 __init__.py)
3692
3696
3693 2002-04-25 Fernando Perez <fperez@colorado.edu>
3697 2002-04-25 Fernando Perez <fperez@colorado.edu>
3694
3698
3695 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3699 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3696 to __builtins__ so that any form of embedded or imported code can
3700 to __builtins__ so that any form of embedded or imported code can
3697 test for being inside IPython.
3701 test for being inside IPython.
3698
3702
3699 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3703 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3700 changed to GnuplotMagic because it's now an importable module,
3704 changed to GnuplotMagic because it's now an importable module,
3701 this makes the name follow that of the standard Gnuplot module.
3705 this makes the name follow that of the standard Gnuplot module.
3702 GnuplotMagic can now be loaded at any time in mid-session.
3706 GnuplotMagic can now be loaded at any time in mid-session.
3703
3707
3704 2002-04-24 Fernando Perez <fperez@colorado.edu>
3708 2002-04-24 Fernando Perez <fperez@colorado.edu>
3705
3709
3706 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3710 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3707 the globals (IPython has its own namespace) and the
3711 the globals (IPython has its own namespace) and the
3708 PhysicalQuantity stuff is much better anyway.
3712 PhysicalQuantity stuff is much better anyway.
3709
3713
3710 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3714 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3711 embedding example to standard user directory for
3715 embedding example to standard user directory for
3712 distribution. Also put it in the manual.
3716 distribution. Also put it in the manual.
3713
3717
3714 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3718 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3715 instance as first argument (so it doesn't rely on some obscure
3719 instance as first argument (so it doesn't rely on some obscure
3716 hidden global).
3720 hidden global).
3717
3721
3718 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3722 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3719 delimiters. While it prevents ().TAB from working, it allows
3723 delimiters. While it prevents ().TAB from working, it allows
3720 completions in open (... expressions. This is by far a more common
3724 completions in open (... expressions. This is by far a more common
3721 case.
3725 case.
3722
3726
3723 2002-04-23 Fernando Perez <fperez@colorado.edu>
3727 2002-04-23 Fernando Perez <fperez@colorado.edu>
3724
3728
3725 * IPython/Extensions/InterpreterPasteInput.py: new
3729 * IPython/Extensions/InterpreterPasteInput.py: new
3726 syntax-processing module for pasting lines with >>> or ... at the
3730 syntax-processing module for pasting lines with >>> or ... at the
3727 start.
3731 start.
3728
3732
3729 * IPython/Extensions/PhysicalQ_Interactive.py
3733 * IPython/Extensions/PhysicalQ_Interactive.py
3730 (PhysicalQuantityInteractive.__int__): fixed to work with either
3734 (PhysicalQuantityInteractive.__int__): fixed to work with either
3731 Numeric or math.
3735 Numeric or math.
3732
3736
3733 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3737 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3734 provided profiles. Now we have:
3738 provided profiles. Now we have:
3735 -math -> math module as * and cmath with its own namespace.
3739 -math -> math module as * and cmath with its own namespace.
3736 -numeric -> Numeric as *, plus gnuplot & grace
3740 -numeric -> Numeric as *, plus gnuplot & grace
3737 -physics -> same as before
3741 -physics -> same as before
3738
3742
3739 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3743 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3740 user-defined magics wouldn't be found by @magic if they were
3744 user-defined magics wouldn't be found by @magic if they were
3741 defined as class methods. Also cleaned up the namespace search
3745 defined as class methods. Also cleaned up the namespace search
3742 logic and the string building (to use %s instead of many repeated
3746 logic and the string building (to use %s instead of many repeated
3743 string adds).
3747 string adds).
3744
3748
3745 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3749 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3746 of user-defined magics to operate with class methods (cleaner, in
3750 of user-defined magics to operate with class methods (cleaner, in
3747 line with the gnuplot code).
3751 line with the gnuplot code).
3748
3752
3749 2002-04-22 Fernando Perez <fperez@colorado.edu>
3753 2002-04-22 Fernando Perez <fperez@colorado.edu>
3750
3754
3751 * setup.py: updated dependency list so that manual is updated when
3755 * setup.py: updated dependency list so that manual is updated when
3752 all included files change.
3756 all included files change.
3753
3757
3754 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3758 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3755 the delimiter removal option (the fix is ugly right now).
3759 the delimiter removal option (the fix is ugly right now).
3756
3760
3757 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3761 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3758 all of the math profile (quicker loading, no conflict between
3762 all of the math profile (quicker loading, no conflict between
3759 g-9.8 and g-gnuplot).
3763 g-9.8 and g-gnuplot).
3760
3764
3761 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3765 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3762 name of post-mortem files to IPython_crash_report.txt.
3766 name of post-mortem files to IPython_crash_report.txt.
3763
3767
3764 * Cleanup/update of the docs. Added all the new readline info and
3768 * Cleanup/update of the docs. Added all the new readline info and
3765 formatted all lists as 'real lists'.
3769 formatted all lists as 'real lists'.
3766
3770
3767 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3771 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3768 tab-completion options, since the full readline parse_and_bind is
3772 tab-completion options, since the full readline parse_and_bind is
3769 now accessible.
3773 now accessible.
3770
3774
3771 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3775 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3772 handling of readline options. Now users can specify any string to
3776 handling of readline options. Now users can specify any string to
3773 be passed to parse_and_bind(), as well as the delimiters to be
3777 be passed to parse_and_bind(), as well as the delimiters to be
3774 removed.
3778 removed.
3775 (InteractiveShell.__init__): Added __name__ to the global
3779 (InteractiveShell.__init__): Added __name__ to the global
3776 namespace so that things like Itpl which rely on its existence
3780 namespace so that things like Itpl which rely on its existence
3777 don't crash.
3781 don't crash.
3778 (InteractiveShell._prefilter): Defined the default with a _ so
3782 (InteractiveShell._prefilter): Defined the default with a _ so
3779 that prefilter() is easier to override, while the default one
3783 that prefilter() is easier to override, while the default one
3780 remains available.
3784 remains available.
3781
3785
3782 2002-04-18 Fernando Perez <fperez@colorado.edu>
3786 2002-04-18 Fernando Perez <fperez@colorado.edu>
3783
3787
3784 * Added information about pdb in the docs.
3788 * Added information about pdb in the docs.
3785
3789
3786 2002-04-17 Fernando Perez <fperez@colorado.edu>
3790 2002-04-17 Fernando Perez <fperez@colorado.edu>
3787
3791
3788 * IPython/ipmaker.py (make_IPython): added rc_override option to
3792 * IPython/ipmaker.py (make_IPython): added rc_override option to
3789 allow passing config options at creation time which may override
3793 allow passing config options at creation time which may override
3790 anything set in the config files or command line. This is
3794 anything set in the config files or command line. This is
3791 particularly useful for configuring embedded instances.
3795 particularly useful for configuring embedded instances.
3792
3796
3793 2002-04-15 Fernando Perez <fperez@colorado.edu>
3797 2002-04-15 Fernando Perez <fperez@colorado.edu>
3794
3798
3795 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3799 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3796 crash embedded instances because of the input cache falling out of
3800 crash embedded instances because of the input cache falling out of
3797 sync with the output counter.
3801 sync with the output counter.
3798
3802
3799 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3803 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3800 mode which calls pdb after an uncaught exception in IPython itself.
3804 mode which calls pdb after an uncaught exception in IPython itself.
3801
3805
3802 2002-04-14 Fernando Perez <fperez@colorado.edu>
3806 2002-04-14 Fernando Perez <fperez@colorado.edu>
3803
3807
3804 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3808 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3805 readline, fix it back after each call.
3809 readline, fix it back after each call.
3806
3810
3807 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3811 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3808 method to force all access via __call__(), which guarantees that
3812 method to force all access via __call__(), which guarantees that
3809 traceback references are properly deleted.
3813 traceback references are properly deleted.
3810
3814
3811 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3815 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3812 improve printing when pprint is in use.
3816 improve printing when pprint is in use.
3813
3817
3814 2002-04-13 Fernando Perez <fperez@colorado.edu>
3818 2002-04-13 Fernando Perez <fperez@colorado.edu>
3815
3819
3816 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3820 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3817 exceptions aren't caught anymore. If the user triggers one, he
3821 exceptions aren't caught anymore. If the user triggers one, he
3818 should know why he's doing it and it should go all the way up,
3822 should know why he's doing it and it should go all the way up,
3819 just like any other exception. So now @abort will fully kill the
3823 just like any other exception. So now @abort will fully kill the
3820 embedded interpreter and the embedding code (unless that happens
3824 embedded interpreter and the embedding code (unless that happens
3821 to catch SystemExit).
3825 to catch SystemExit).
3822
3826
3823 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3827 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3824 and a debugger() method to invoke the interactive pdb debugger
3828 and a debugger() method to invoke the interactive pdb debugger
3825 after printing exception information. Also added the corresponding
3829 after printing exception information. Also added the corresponding
3826 -pdb option and @pdb magic to control this feature, and updated
3830 -pdb option and @pdb magic to control this feature, and updated
3827 the docs. After a suggestion from Christopher Hart
3831 the docs. After a suggestion from Christopher Hart
3828 (hart-AT-caltech.edu).
3832 (hart-AT-caltech.edu).
3829
3833
3830 2002-04-12 Fernando Perez <fperez@colorado.edu>
3834 2002-04-12 Fernando Perez <fperez@colorado.edu>
3831
3835
3832 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3836 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3833 the exception handlers defined by the user (not the CrashHandler)
3837 the exception handlers defined by the user (not the CrashHandler)
3834 so that user exceptions don't trigger an ipython bug report.
3838 so that user exceptions don't trigger an ipython bug report.
3835
3839
3836 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3840 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3837 configurable (it should have always been so).
3841 configurable (it should have always been so).
3838
3842
3839 2002-03-26 Fernando Perez <fperez@colorado.edu>
3843 2002-03-26 Fernando Perez <fperez@colorado.edu>
3840
3844
3841 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3845 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3842 and there to fix embedding namespace issues. This should all be
3846 and there to fix embedding namespace issues. This should all be
3843 done in a more elegant way.
3847 done in a more elegant way.
3844
3848
3845 2002-03-25 Fernando Perez <fperez@colorado.edu>
3849 2002-03-25 Fernando Perez <fperez@colorado.edu>
3846
3850
3847 * IPython/genutils.py (get_home_dir): Try to make it work under
3851 * IPython/genutils.py (get_home_dir): Try to make it work under
3848 win9x also.
3852 win9x also.
3849
3853
3850 2002-03-20 Fernando Perez <fperez@colorado.edu>
3854 2002-03-20 Fernando Perez <fperez@colorado.edu>
3851
3855
3852 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3856 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3853 sys.displayhook untouched upon __init__.
3857 sys.displayhook untouched upon __init__.
3854
3858
3855 2002-03-19 Fernando Perez <fperez@colorado.edu>
3859 2002-03-19 Fernando Perez <fperez@colorado.edu>
3856
3860
3857 * Released 0.2.9 (for embedding bug, basically).
3861 * Released 0.2.9 (for embedding bug, basically).
3858
3862
3859 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3863 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3860 exceptions so that enclosing shell's state can be restored.
3864 exceptions so that enclosing shell's state can be restored.
3861
3865
3862 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3866 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3863 naming conventions in the .ipython/ dir.
3867 naming conventions in the .ipython/ dir.
3864
3868
3865 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3869 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3866 from delimiters list so filenames with - in them get expanded.
3870 from delimiters list so filenames with - in them get expanded.
3867
3871
3868 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3872 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3869 sys.displayhook not being properly restored after an embedded call.
3873 sys.displayhook not being properly restored after an embedded call.
3870
3874
3871 2002-03-18 Fernando Perez <fperez@colorado.edu>
3875 2002-03-18 Fernando Perez <fperez@colorado.edu>
3872
3876
3873 * Released 0.2.8
3877 * Released 0.2.8
3874
3878
3875 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3879 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3876 some files weren't being included in a -upgrade.
3880 some files weren't being included in a -upgrade.
3877 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3881 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3878 on' so that the first tab completes.
3882 on' so that the first tab completes.
3879 (InteractiveShell.handle_magic): fixed bug with spaces around
3883 (InteractiveShell.handle_magic): fixed bug with spaces around
3880 quotes breaking many magic commands.
3884 quotes breaking many magic commands.
3881
3885
3882 * setup.py: added note about ignoring the syntax error messages at
3886 * setup.py: added note about ignoring the syntax error messages at
3883 installation.
3887 installation.
3884
3888
3885 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3889 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3886 streamlining the gnuplot interface, now there's only one magic @gp.
3890 streamlining the gnuplot interface, now there's only one magic @gp.
3887
3891
3888 2002-03-17 Fernando Perez <fperez@colorado.edu>
3892 2002-03-17 Fernando Perez <fperez@colorado.edu>
3889
3893
3890 * IPython/UserConfig/magic_gnuplot.py: new name for the
3894 * IPython/UserConfig/magic_gnuplot.py: new name for the
3891 example-magic_pm.py file. Much enhanced system, now with a shell
3895 example-magic_pm.py file. Much enhanced system, now with a shell
3892 for communicating directly with gnuplot, one command at a time.
3896 for communicating directly with gnuplot, one command at a time.
3893
3897
3894 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3898 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3895 setting __name__=='__main__'.
3899 setting __name__=='__main__'.
3896
3900
3897 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3901 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3898 mini-shell for accessing gnuplot from inside ipython. Should
3902 mini-shell for accessing gnuplot from inside ipython. Should
3899 extend it later for grace access too. Inspired by Arnd's
3903 extend it later for grace access too. Inspired by Arnd's
3900 suggestion.
3904 suggestion.
3901
3905
3902 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3906 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3903 calling magic functions with () in their arguments. Thanks to Arnd
3907 calling magic functions with () in their arguments. Thanks to Arnd
3904 Baecker for pointing this to me.
3908 Baecker for pointing this to me.
3905
3909
3906 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3910 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3907 infinitely for integer or complex arrays (only worked with floats).
3911 infinitely for integer or complex arrays (only worked with floats).
3908
3912
3909 2002-03-16 Fernando Perez <fperez@colorado.edu>
3913 2002-03-16 Fernando Perez <fperez@colorado.edu>
3910
3914
3911 * setup.py: Merged setup and setup_windows into a single script
3915 * setup.py: Merged setup and setup_windows into a single script
3912 which properly handles things for windows users.
3916 which properly handles things for windows users.
3913
3917
3914 2002-03-15 Fernando Perez <fperez@colorado.edu>
3918 2002-03-15 Fernando Perez <fperez@colorado.edu>
3915
3919
3916 * Big change to the manual: now the magics are all automatically
3920 * Big change to the manual: now the magics are all automatically
3917 documented. This information is generated from their docstrings
3921 documented. This information is generated from their docstrings
3918 and put in a latex file included by the manual lyx file. This way
3922 and put in a latex file included by the manual lyx file. This way
3919 we get always up to date information for the magics. The manual
3923 we get always up to date information for the magics. The manual
3920 now also has proper version information, also auto-synced.
3924 now also has proper version information, also auto-synced.
3921
3925
3922 For this to work, an undocumented --magic_docstrings option was added.
3926 For this to work, an undocumented --magic_docstrings option was added.
3923
3927
3924 2002-03-13 Fernando Perez <fperez@colorado.edu>
3928 2002-03-13 Fernando Perez <fperez@colorado.edu>
3925
3929
3926 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3930 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3927 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3931 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3928
3932
3929 2002-03-12 Fernando Perez <fperez@colorado.edu>
3933 2002-03-12 Fernando Perez <fperez@colorado.edu>
3930
3934
3931 * IPython/ultraTB.py (TermColors): changed color escapes again to
3935 * IPython/ultraTB.py (TermColors): changed color escapes again to
3932 fix the (old, reintroduced) line-wrapping bug. Basically, if
3936 fix the (old, reintroduced) line-wrapping bug. Basically, if
3933 \001..\002 aren't given in the color escapes, lines get wrapped
3937 \001..\002 aren't given in the color escapes, lines get wrapped
3934 weirdly. But giving those screws up old xterms and emacs terms. So
3938 weirdly. But giving those screws up old xterms and emacs terms. So
3935 I added some logic for emacs terms to be ok, but I can't identify old
3939 I added some logic for emacs terms to be ok, but I can't identify old
3936 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3940 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3937
3941
3938 2002-03-10 Fernando Perez <fperez@colorado.edu>
3942 2002-03-10 Fernando Perez <fperez@colorado.edu>
3939
3943
3940 * IPython/usage.py (__doc__): Various documentation cleanups and
3944 * IPython/usage.py (__doc__): Various documentation cleanups and
3941 updates, both in usage docstrings and in the manual.
3945 updates, both in usage docstrings and in the manual.
3942
3946
3943 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3947 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3944 handling of caching. Set minimum acceptabe value for having a
3948 handling of caching. Set minimum acceptabe value for having a
3945 cache at 20 values.
3949 cache at 20 values.
3946
3950
3947 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3951 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3948 install_first_time function to a method, renamed it and added an
3952 install_first_time function to a method, renamed it and added an
3949 'upgrade' mode. Now people can update their config directory with
3953 'upgrade' mode. Now people can update their config directory with
3950 a simple command line switch (-upgrade, also new).
3954 a simple command line switch (-upgrade, also new).
3951
3955
3952 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3956 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3953 @file (convenient for automagic users under Python >= 2.2).
3957 @file (convenient for automagic users under Python >= 2.2).
3954 Removed @files (it seemed more like a plural than an abbrev. of
3958 Removed @files (it seemed more like a plural than an abbrev. of
3955 'file show').
3959 'file show').
3956
3960
3957 * IPython/iplib.py (install_first_time): Fixed crash if there were
3961 * IPython/iplib.py (install_first_time): Fixed crash if there were
3958 backup files ('~') in .ipython/ install directory.
3962 backup files ('~') in .ipython/ install directory.
3959
3963
3960 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3964 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3961 system. Things look fine, but these changes are fairly
3965 system. Things look fine, but these changes are fairly
3962 intrusive. Test them for a few days.
3966 intrusive. Test them for a few days.
3963
3967
3964 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3968 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3965 the prompts system. Now all in/out prompt strings are user
3969 the prompts system. Now all in/out prompt strings are user
3966 controllable. This is particularly useful for embedding, as one
3970 controllable. This is particularly useful for embedding, as one
3967 can tag embedded instances with particular prompts.
3971 can tag embedded instances with particular prompts.
3968
3972
3969 Also removed global use of sys.ps1/2, which now allows nested
3973 Also removed global use of sys.ps1/2, which now allows nested
3970 embeddings without any problems. Added command-line options for
3974 embeddings without any problems. Added command-line options for
3971 the prompt strings.
3975 the prompt strings.
3972
3976
3973 2002-03-08 Fernando Perez <fperez@colorado.edu>
3977 2002-03-08 Fernando Perez <fperez@colorado.edu>
3974
3978
3975 * IPython/UserConfig/example-embed-short.py (ipshell): added
3979 * IPython/UserConfig/example-embed-short.py (ipshell): added
3976 example file with the bare minimum code for embedding.
3980 example file with the bare minimum code for embedding.
3977
3981
3978 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3982 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3979 functionality for the embeddable shell to be activated/deactivated
3983 functionality for the embeddable shell to be activated/deactivated
3980 either globally or at each call.
3984 either globally or at each call.
3981
3985
3982 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3986 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3983 rewriting the prompt with '--->' for auto-inputs with proper
3987 rewriting the prompt with '--->' for auto-inputs with proper
3984 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3988 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3985 this is handled by the prompts class itself, as it should.
3989 this is handled by the prompts class itself, as it should.
3986
3990
3987 2002-03-05 Fernando Perez <fperez@colorado.edu>
3991 2002-03-05 Fernando Perez <fperez@colorado.edu>
3988
3992
3989 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3993 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3990 @logstart to avoid name clashes with the math log function.
3994 @logstart to avoid name clashes with the math log function.
3991
3995
3992 * Big updates to X/Emacs section of the manual.
3996 * Big updates to X/Emacs section of the manual.
3993
3997
3994 * Removed ipython_emacs. Milan explained to me how to pass
3998 * Removed ipython_emacs. Milan explained to me how to pass
3995 arguments to ipython through Emacs. Some day I'm going to end up
3999 arguments to ipython through Emacs. Some day I'm going to end up
3996 learning some lisp...
4000 learning some lisp...
3997
4001
3998 2002-03-04 Fernando Perez <fperez@colorado.edu>
4002 2002-03-04 Fernando Perez <fperez@colorado.edu>
3999
4003
4000 * IPython/ipython_emacs: Created script to be used as the
4004 * IPython/ipython_emacs: Created script to be used as the
4001 py-python-command Emacs variable so we can pass IPython
4005 py-python-command Emacs variable so we can pass IPython
4002 parameters. I can't figure out how to tell Emacs directly to pass
4006 parameters. I can't figure out how to tell Emacs directly to pass
4003 parameters to IPython, so a dummy shell script will do it.
4007 parameters to IPython, so a dummy shell script will do it.
4004
4008
4005 Other enhancements made for things to work better under Emacs'
4009 Other enhancements made for things to work better under Emacs'
4006 various types of terminals. Many thanks to Milan Zamazal
4010 various types of terminals. Many thanks to Milan Zamazal
4007 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4011 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4008
4012
4009 2002-03-01 Fernando Perez <fperez@colorado.edu>
4013 2002-03-01 Fernando Perez <fperez@colorado.edu>
4010
4014
4011 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4015 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4012 that loading of readline is now optional. This gives better
4016 that loading of readline is now optional. This gives better
4013 control to emacs users.
4017 control to emacs users.
4014
4018
4015 * IPython/ultraTB.py (__date__): Modified color escape sequences
4019 * IPython/ultraTB.py (__date__): Modified color escape sequences
4016 and now things work fine under xterm and in Emacs' term buffers
4020 and now things work fine under xterm and in Emacs' term buffers
4017 (though not shell ones). Well, in emacs you get colors, but all
4021 (though not shell ones). Well, in emacs you get colors, but all
4018 seem to be 'light' colors (no difference between dark and light
4022 seem to be 'light' colors (no difference between dark and light
4019 ones). But the garbage chars are gone, and also in xterms. It
4023 ones). But the garbage chars are gone, and also in xterms. It
4020 seems that now I'm using 'cleaner' ansi sequences.
4024 seems that now I'm using 'cleaner' ansi sequences.
4021
4025
4022 2002-02-21 Fernando Perez <fperez@colorado.edu>
4026 2002-02-21 Fernando Perez <fperez@colorado.edu>
4023
4027
4024 * Released 0.2.7 (mainly to publish the scoping fix).
4028 * Released 0.2.7 (mainly to publish the scoping fix).
4025
4029
4026 * IPython/Logger.py (Logger.logstate): added. A corresponding
4030 * IPython/Logger.py (Logger.logstate): added. A corresponding
4027 @logstate magic was created.
4031 @logstate magic was created.
4028
4032
4029 * IPython/Magic.py: fixed nested scoping problem under Python
4033 * IPython/Magic.py: fixed nested scoping problem under Python
4030 2.1.x (automagic wasn't working).
4034 2.1.x (automagic wasn't working).
4031
4035
4032 2002-02-20 Fernando Perez <fperez@colorado.edu>
4036 2002-02-20 Fernando Perez <fperez@colorado.edu>
4033
4037
4034 * Released 0.2.6.
4038 * Released 0.2.6.
4035
4039
4036 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4040 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4037 option so that logs can come out without any headers at all.
4041 option so that logs can come out without any headers at all.
4038
4042
4039 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4043 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4040 SciPy.
4044 SciPy.
4041
4045
4042 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4046 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4043 that embedded IPython calls don't require vars() to be explicitly
4047 that embedded IPython calls don't require vars() to be explicitly
4044 passed. Now they are extracted from the caller's frame (code
4048 passed. Now they are extracted from the caller's frame (code
4045 snatched from Eric Jones' weave). Added better documentation to
4049 snatched from Eric Jones' weave). Added better documentation to
4046 the section on embedding and the example file.
4050 the section on embedding and the example file.
4047
4051
4048 * IPython/genutils.py (page): Changed so that under emacs, it just
4052 * IPython/genutils.py (page): Changed so that under emacs, it just
4049 prints the string. You can then page up and down in the emacs
4053 prints the string. You can then page up and down in the emacs
4050 buffer itself. This is how the builtin help() works.
4054 buffer itself. This is how the builtin help() works.
4051
4055
4052 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4056 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4053 macro scoping: macros need to be executed in the user's namespace
4057 macro scoping: macros need to be executed in the user's namespace
4054 to work as if they had been typed by the user.
4058 to work as if they had been typed by the user.
4055
4059
4056 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4060 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4057 execute automatically (no need to type 'exec...'). They then
4061 execute automatically (no need to type 'exec...'). They then
4058 behave like 'true macros'. The printing system was also modified
4062 behave like 'true macros'. The printing system was also modified
4059 for this to work.
4063 for this to work.
4060
4064
4061 2002-02-19 Fernando Perez <fperez@colorado.edu>
4065 2002-02-19 Fernando Perez <fperez@colorado.edu>
4062
4066
4063 * IPython/genutils.py (page_file): new function for paging files
4067 * IPython/genutils.py (page_file): new function for paging files
4064 in an OS-independent way. Also necessary for file viewing to work
4068 in an OS-independent way. Also necessary for file viewing to work
4065 well inside Emacs buffers.
4069 well inside Emacs buffers.
4066 (page): Added checks for being in an emacs buffer.
4070 (page): Added checks for being in an emacs buffer.
4067 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4071 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4068 same bug in iplib.
4072 same bug in iplib.
4069
4073
4070 2002-02-18 Fernando Perez <fperez@colorado.edu>
4074 2002-02-18 Fernando Perez <fperez@colorado.edu>
4071
4075
4072 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4076 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4073 of readline so that IPython can work inside an Emacs buffer.
4077 of readline so that IPython can work inside an Emacs buffer.
4074
4078
4075 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4079 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4076 method signatures (they weren't really bugs, but it looks cleaner
4080 method signatures (they weren't really bugs, but it looks cleaner
4077 and keeps PyChecker happy).
4081 and keeps PyChecker happy).
4078
4082
4079 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4083 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4080 for implementing various user-defined hooks. Currently only
4084 for implementing various user-defined hooks. Currently only
4081 display is done.
4085 display is done.
4082
4086
4083 * IPython/Prompts.py (CachedOutput._display): changed display
4087 * IPython/Prompts.py (CachedOutput._display): changed display
4084 functions so that they can be dynamically changed by users easily.
4088 functions so that they can be dynamically changed by users easily.
4085
4089
4086 * IPython/Extensions/numeric_formats.py (num_display): added an
4090 * IPython/Extensions/numeric_formats.py (num_display): added an
4087 extension for printing NumPy arrays in flexible manners. It
4091 extension for printing NumPy arrays in flexible manners. It
4088 doesn't do anything yet, but all the structure is in
4092 doesn't do anything yet, but all the structure is in
4089 place. Ultimately the plan is to implement output format control
4093 place. Ultimately the plan is to implement output format control
4090 like in Octave.
4094 like in Octave.
4091
4095
4092 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4096 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4093 methods are found at run-time by all the automatic machinery.
4097 methods are found at run-time by all the automatic machinery.
4094
4098
4095 2002-02-17 Fernando Perez <fperez@colorado.edu>
4099 2002-02-17 Fernando Perez <fperez@colorado.edu>
4096
4100
4097 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4101 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4098 whole file a little.
4102 whole file a little.
4099
4103
4100 * ToDo: closed this document. Now there's a new_design.lyx
4104 * ToDo: closed this document. Now there's a new_design.lyx
4101 document for all new ideas. Added making a pdf of it for the
4105 document for all new ideas. Added making a pdf of it for the
4102 end-user distro.
4106 end-user distro.
4103
4107
4104 * IPython/Logger.py (Logger.switch_log): Created this to replace
4108 * IPython/Logger.py (Logger.switch_log): Created this to replace
4105 logon() and logoff(). It also fixes a nasty crash reported by
4109 logon() and logoff(). It also fixes a nasty crash reported by
4106 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4110 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4107
4111
4108 * IPython/iplib.py (complete): got auto-completion to work with
4112 * IPython/iplib.py (complete): got auto-completion to work with
4109 automagic (I had wanted this for a long time).
4113 automagic (I had wanted this for a long time).
4110
4114
4111 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4115 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4112 to @file, since file() is now a builtin and clashes with automagic
4116 to @file, since file() is now a builtin and clashes with automagic
4113 for @file.
4117 for @file.
4114
4118
4115 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4119 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4116 of this was previously in iplib, which had grown to more than 2000
4120 of this was previously in iplib, which had grown to more than 2000
4117 lines, way too long. No new functionality, but it makes managing
4121 lines, way too long. No new functionality, but it makes managing
4118 the code a bit easier.
4122 the code a bit easier.
4119
4123
4120 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4124 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4121 information to crash reports.
4125 information to crash reports.
4122
4126
4123 2002-02-12 Fernando Perez <fperez@colorado.edu>
4127 2002-02-12 Fernando Perez <fperez@colorado.edu>
4124
4128
4125 * Released 0.2.5.
4129 * Released 0.2.5.
4126
4130
4127 2002-02-11 Fernando Perez <fperez@colorado.edu>
4131 2002-02-11 Fernando Perez <fperez@colorado.edu>
4128
4132
4129 * Wrote a relatively complete Windows installer. It puts
4133 * Wrote a relatively complete Windows installer. It puts
4130 everything in place, creates Start Menu entries and fixes the
4134 everything in place, creates Start Menu entries and fixes the
4131 color issues. Nothing fancy, but it works.
4135 color issues. Nothing fancy, but it works.
4132
4136
4133 2002-02-10 Fernando Perez <fperez@colorado.edu>
4137 2002-02-10 Fernando Perez <fperez@colorado.edu>
4134
4138
4135 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4139 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4136 os.path.expanduser() call so that we can type @run ~/myfile.py and
4140 os.path.expanduser() call so that we can type @run ~/myfile.py and
4137 have thigs work as expected.
4141 have thigs work as expected.
4138
4142
4139 * IPython/genutils.py (page): fixed exception handling so things
4143 * IPython/genutils.py (page): fixed exception handling so things
4140 work both in Unix and Windows correctly. Quitting a pager triggers
4144 work both in Unix and Windows correctly. Quitting a pager triggers
4141 an IOError/broken pipe in Unix, and in windows not finding a pager
4145 an IOError/broken pipe in Unix, and in windows not finding a pager
4142 is also an IOError, so I had to actually look at the return value
4146 is also an IOError, so I had to actually look at the return value
4143 of the exception, not just the exception itself. Should be ok now.
4147 of the exception, not just the exception itself. Should be ok now.
4144
4148
4145 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4149 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4146 modified to allow case-insensitive color scheme changes.
4150 modified to allow case-insensitive color scheme changes.
4147
4151
4148 2002-02-09 Fernando Perez <fperez@colorado.edu>
4152 2002-02-09 Fernando Perez <fperez@colorado.edu>
4149
4153
4150 * IPython/genutils.py (native_line_ends): new function to leave
4154 * IPython/genutils.py (native_line_ends): new function to leave
4151 user config files with os-native line-endings.
4155 user config files with os-native line-endings.
4152
4156
4153 * README and manual updates.
4157 * README and manual updates.
4154
4158
4155 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4159 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4156 instead of StringType to catch Unicode strings.
4160 instead of StringType to catch Unicode strings.
4157
4161
4158 * IPython/genutils.py (filefind): fixed bug for paths with
4162 * IPython/genutils.py (filefind): fixed bug for paths with
4159 embedded spaces (very common in Windows).
4163 embedded spaces (very common in Windows).
4160
4164
4161 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4165 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4162 files under Windows, so that they get automatically associated
4166 files under Windows, so that they get automatically associated
4163 with a text editor. Windows makes it a pain to handle
4167 with a text editor. Windows makes it a pain to handle
4164 extension-less files.
4168 extension-less files.
4165
4169
4166 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4170 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4167 warning about readline only occur for Posix. In Windows there's no
4171 warning about readline only occur for Posix. In Windows there's no
4168 way to get readline, so why bother with the warning.
4172 way to get readline, so why bother with the warning.
4169
4173
4170 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4174 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4171 for __str__ instead of dir(self), since dir() changed in 2.2.
4175 for __str__ instead of dir(self), since dir() changed in 2.2.
4172
4176
4173 * Ported to Windows! Tested on XP, I suspect it should work fine
4177 * Ported to Windows! Tested on XP, I suspect it should work fine
4174 on NT/2000, but I don't think it will work on 98 et al. That
4178 on NT/2000, but I don't think it will work on 98 et al. That
4175 series of Windows is such a piece of junk anyway that I won't try
4179 series of Windows is such a piece of junk anyway that I won't try
4176 porting it there. The XP port was straightforward, showed a few
4180 porting it there. The XP port was straightforward, showed a few
4177 bugs here and there (fixed all), in particular some string
4181 bugs here and there (fixed all), in particular some string
4178 handling stuff which required considering Unicode strings (which
4182 handling stuff which required considering Unicode strings (which
4179 Windows uses). This is good, but hasn't been too tested :) No
4183 Windows uses). This is good, but hasn't been too tested :) No
4180 fancy installer yet, I'll put a note in the manual so people at
4184 fancy installer yet, I'll put a note in the manual so people at
4181 least make manually a shortcut.
4185 least make manually a shortcut.
4182
4186
4183 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4187 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4184 into a single one, "colors". This now controls both prompt and
4188 into a single one, "colors". This now controls both prompt and
4185 exception color schemes, and can be changed both at startup
4189 exception color schemes, and can be changed both at startup
4186 (either via command-line switches or via ipythonrc files) and at
4190 (either via command-line switches or via ipythonrc files) and at
4187 runtime, with @colors.
4191 runtime, with @colors.
4188 (Magic.magic_run): renamed @prun to @run and removed the old
4192 (Magic.magic_run): renamed @prun to @run and removed the old
4189 @run. The two were too similar to warrant keeping both.
4193 @run. The two were too similar to warrant keeping both.
4190
4194
4191 2002-02-03 Fernando Perez <fperez@colorado.edu>
4195 2002-02-03 Fernando Perez <fperez@colorado.edu>
4192
4196
4193 * IPython/iplib.py (install_first_time): Added comment on how to
4197 * IPython/iplib.py (install_first_time): Added comment on how to
4194 configure the color options for first-time users. Put a <return>
4198 configure the color options for first-time users. Put a <return>
4195 request at the end so that small-terminal users get a chance to
4199 request at the end so that small-terminal users get a chance to
4196 read the startup info.
4200 read the startup info.
4197
4201
4198 2002-01-23 Fernando Perez <fperez@colorado.edu>
4202 2002-01-23 Fernando Perez <fperez@colorado.edu>
4199
4203
4200 * IPython/iplib.py (CachedOutput.update): Changed output memory
4204 * IPython/iplib.py (CachedOutput.update): Changed output memory
4201 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4205 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4202 input history we still use _i. Did this b/c these variable are
4206 input history we still use _i. Did this b/c these variable are
4203 very commonly used in interactive work, so the less we need to
4207 very commonly used in interactive work, so the less we need to
4204 type the better off we are.
4208 type the better off we are.
4205 (Magic.magic_prun): updated @prun to better handle the namespaces
4209 (Magic.magic_prun): updated @prun to better handle the namespaces
4206 the file will run in, including a fix for __name__ not being set
4210 the file will run in, including a fix for __name__ not being set
4207 before.
4211 before.
4208
4212
4209 2002-01-20 Fernando Perez <fperez@colorado.edu>
4213 2002-01-20 Fernando Perez <fperez@colorado.edu>
4210
4214
4211 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4215 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4212 extra garbage for Python 2.2. Need to look more carefully into
4216 extra garbage for Python 2.2. Need to look more carefully into
4213 this later.
4217 this later.
4214
4218
4215 2002-01-19 Fernando Perez <fperez@colorado.edu>
4219 2002-01-19 Fernando Perez <fperez@colorado.edu>
4216
4220
4217 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4221 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4218 display SyntaxError exceptions properly formatted when they occur
4222 display SyntaxError exceptions properly formatted when they occur
4219 (they can be triggered by imported code).
4223 (they can be triggered by imported code).
4220
4224
4221 2002-01-18 Fernando Perez <fperez@colorado.edu>
4225 2002-01-18 Fernando Perez <fperez@colorado.edu>
4222
4226
4223 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4227 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4224 SyntaxError exceptions are reported nicely formatted, instead of
4228 SyntaxError exceptions are reported nicely formatted, instead of
4225 spitting out only offset information as before.
4229 spitting out only offset information as before.
4226 (Magic.magic_prun): Added the @prun function for executing
4230 (Magic.magic_prun): Added the @prun function for executing
4227 programs with command line args inside IPython.
4231 programs with command line args inside IPython.
4228
4232
4229 2002-01-16 Fernando Perez <fperez@colorado.edu>
4233 2002-01-16 Fernando Perez <fperez@colorado.edu>
4230
4234
4231 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4235 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4232 to *not* include the last item given in a range. This brings their
4236 to *not* include the last item given in a range. This brings their
4233 behavior in line with Python's slicing:
4237 behavior in line with Python's slicing:
4234 a[n1:n2] -> a[n1]...a[n2-1]
4238 a[n1:n2] -> a[n1]...a[n2-1]
4235 It may be a bit less convenient, but I prefer to stick to Python's
4239 It may be a bit less convenient, but I prefer to stick to Python's
4236 conventions *everywhere*, so users never have to wonder.
4240 conventions *everywhere*, so users never have to wonder.
4237 (Magic.magic_macro): Added @macro function to ease the creation of
4241 (Magic.magic_macro): Added @macro function to ease the creation of
4238 macros.
4242 macros.
4239
4243
4240 2002-01-05 Fernando Perez <fperez@colorado.edu>
4244 2002-01-05 Fernando Perez <fperez@colorado.edu>
4241
4245
4242 * Released 0.2.4.
4246 * Released 0.2.4.
4243
4247
4244 * IPython/iplib.py (Magic.magic_pdef):
4248 * IPython/iplib.py (Magic.magic_pdef):
4245 (InteractiveShell.safe_execfile): report magic lines and error
4249 (InteractiveShell.safe_execfile): report magic lines and error
4246 lines without line numbers so one can easily copy/paste them for
4250 lines without line numbers so one can easily copy/paste them for
4247 re-execution.
4251 re-execution.
4248
4252
4249 * Updated manual with recent changes.
4253 * Updated manual with recent changes.
4250
4254
4251 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4255 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4252 docstring printing when class? is called. Very handy for knowing
4256 docstring printing when class? is called. Very handy for knowing
4253 how to create class instances (as long as __init__ is well
4257 how to create class instances (as long as __init__ is well
4254 documented, of course :)
4258 documented, of course :)
4255 (Magic.magic_doc): print both class and constructor docstrings.
4259 (Magic.magic_doc): print both class and constructor docstrings.
4256 (Magic.magic_pdef): give constructor info if passed a class and
4260 (Magic.magic_pdef): give constructor info if passed a class and
4257 __call__ info for callable object instances.
4261 __call__ info for callable object instances.
4258
4262
4259 2002-01-04 Fernando Perez <fperez@colorado.edu>
4263 2002-01-04 Fernando Perez <fperez@colorado.edu>
4260
4264
4261 * Made deep_reload() off by default. It doesn't always work
4265 * Made deep_reload() off by default. It doesn't always work
4262 exactly as intended, so it's probably safer to have it off. It's
4266 exactly as intended, so it's probably safer to have it off. It's
4263 still available as dreload() anyway, so nothing is lost.
4267 still available as dreload() anyway, so nothing is lost.
4264
4268
4265 2002-01-02 Fernando Perez <fperez@colorado.edu>
4269 2002-01-02 Fernando Perez <fperez@colorado.edu>
4266
4270
4267 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4271 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4268 so I wanted an updated release).
4272 so I wanted an updated release).
4269
4273
4270 2001-12-27 Fernando Perez <fperez@colorado.edu>
4274 2001-12-27 Fernando Perez <fperez@colorado.edu>
4271
4275
4272 * IPython/iplib.py (InteractiveShell.interact): Added the original
4276 * IPython/iplib.py (InteractiveShell.interact): Added the original
4273 code from 'code.py' for this module in order to change the
4277 code from 'code.py' for this module in order to change the
4274 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4278 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4275 the history cache would break when the user hit Ctrl-C, and
4279 the history cache would break when the user hit Ctrl-C, and
4276 interact() offers no way to add any hooks to it.
4280 interact() offers no way to add any hooks to it.
4277
4281
4278 2001-12-23 Fernando Perez <fperez@colorado.edu>
4282 2001-12-23 Fernando Perez <fperez@colorado.edu>
4279
4283
4280 * setup.py: added check for 'MANIFEST' before trying to remove
4284 * setup.py: added check for 'MANIFEST' before trying to remove
4281 it. Thanks to Sean Reifschneider.
4285 it. Thanks to Sean Reifschneider.
4282
4286
4283 2001-12-22 Fernando Perez <fperez@colorado.edu>
4287 2001-12-22 Fernando Perez <fperez@colorado.edu>
4284
4288
4285 * Released 0.2.2.
4289 * Released 0.2.2.
4286
4290
4287 * Finished (reasonably) writing the manual. Later will add the
4291 * Finished (reasonably) writing the manual. Later will add the
4288 python-standard navigation stylesheets, but for the time being
4292 python-standard navigation stylesheets, but for the time being
4289 it's fairly complete. Distribution will include html and pdf
4293 it's fairly complete. Distribution will include html and pdf
4290 versions.
4294 versions.
4291
4295
4292 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4296 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4293 (MayaVi author).
4297 (MayaVi author).
4294
4298
4295 2001-12-21 Fernando Perez <fperez@colorado.edu>
4299 2001-12-21 Fernando Perez <fperez@colorado.edu>
4296
4300
4297 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4301 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4298 good public release, I think (with the manual and the distutils
4302 good public release, I think (with the manual and the distutils
4299 installer). The manual can use some work, but that can go
4303 installer). The manual can use some work, but that can go
4300 slowly. Otherwise I think it's quite nice for end users. Next
4304 slowly. Otherwise I think it's quite nice for end users. Next
4301 summer, rewrite the guts of it...
4305 summer, rewrite the guts of it...
4302
4306
4303 * Changed format of ipythonrc files to use whitespace as the
4307 * Changed format of ipythonrc files to use whitespace as the
4304 separator instead of an explicit '='. Cleaner.
4308 separator instead of an explicit '='. Cleaner.
4305
4309
4306 2001-12-20 Fernando Perez <fperez@colorado.edu>
4310 2001-12-20 Fernando Perez <fperez@colorado.edu>
4307
4311
4308 * Started a manual in LyX. For now it's just a quick merge of the
4312 * Started a manual in LyX. For now it's just a quick merge of the
4309 various internal docstrings and READMEs. Later it may grow into a
4313 various internal docstrings and READMEs. Later it may grow into a
4310 nice, full-blown manual.
4314 nice, full-blown manual.
4311
4315
4312 * Set up a distutils based installer. Installation should now be
4316 * Set up a distutils based installer. Installation should now be
4313 trivially simple for end-users.
4317 trivially simple for end-users.
4314
4318
4315 2001-12-11 Fernando Perez <fperez@colorado.edu>
4319 2001-12-11 Fernando Perez <fperez@colorado.edu>
4316
4320
4317 * Released 0.2.0. First public release, announced it at
4321 * Released 0.2.0. First public release, announced it at
4318 comp.lang.python. From now on, just bugfixes...
4322 comp.lang.python. From now on, just bugfixes...
4319
4323
4320 * Went through all the files, set copyright/license notices and
4324 * Went through all the files, set copyright/license notices and
4321 cleaned up things. Ready for release.
4325 cleaned up things. Ready for release.
4322
4326
4323 2001-12-10 Fernando Perez <fperez@colorado.edu>
4327 2001-12-10 Fernando Perez <fperez@colorado.edu>
4324
4328
4325 * Changed the first-time installer not to use tarfiles. It's more
4329 * Changed the first-time installer not to use tarfiles. It's more
4326 robust now and less unix-dependent. Also makes it easier for
4330 robust now and less unix-dependent. Also makes it easier for
4327 people to later upgrade versions.
4331 people to later upgrade versions.
4328
4332
4329 * Changed @exit to @abort to reflect the fact that it's pretty
4333 * Changed @exit to @abort to reflect the fact that it's pretty
4330 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4334 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4331 becomes significant only when IPyhton is embedded: in that case,
4335 becomes significant only when IPyhton is embedded: in that case,
4332 C-D closes IPython only, but @abort kills the enclosing program
4336 C-D closes IPython only, but @abort kills the enclosing program
4333 too (unless it had called IPython inside a try catching
4337 too (unless it had called IPython inside a try catching
4334 SystemExit).
4338 SystemExit).
4335
4339
4336 * Created Shell module which exposes the actuall IPython Shell
4340 * Created Shell module which exposes the actuall IPython Shell
4337 classes, currently the normal and the embeddable one. This at
4341 classes, currently the normal and the embeddable one. This at
4338 least offers a stable interface we won't need to change when
4342 least offers a stable interface we won't need to change when
4339 (later) the internals are rewritten. That rewrite will be confined
4343 (later) the internals are rewritten. That rewrite will be confined
4340 to iplib and ipmaker, but the Shell interface should remain as is.
4344 to iplib and ipmaker, but the Shell interface should remain as is.
4341
4345
4342 * Added embed module which offers an embeddable IPShell object,
4346 * Added embed module which offers an embeddable IPShell object,
4343 useful to fire up IPython *inside* a running program. Great for
4347 useful to fire up IPython *inside* a running program. Great for
4344 debugging or dynamical data analysis.
4348 debugging or dynamical data analysis.
4345
4349
4346 2001-12-08 Fernando Perez <fperez@colorado.edu>
4350 2001-12-08 Fernando Perez <fperez@colorado.edu>
4347
4351
4348 * Fixed small bug preventing seeing info from methods of defined
4352 * Fixed small bug preventing seeing info from methods of defined
4349 objects (incorrect namespace in _ofind()).
4353 objects (incorrect namespace in _ofind()).
4350
4354
4351 * Documentation cleanup. Moved the main usage docstrings to a
4355 * Documentation cleanup. Moved the main usage docstrings to a
4352 separate file, usage.py (cleaner to maintain, and hopefully in the
4356 separate file, usage.py (cleaner to maintain, and hopefully in the
4353 future some perlpod-like way of producing interactive, man and
4357 future some perlpod-like way of producing interactive, man and
4354 html docs out of it will be found).
4358 html docs out of it will be found).
4355
4359
4356 * Added @profile to see your profile at any time.
4360 * Added @profile to see your profile at any time.
4357
4361
4358 * Added @p as an alias for 'print'. It's especially convenient if
4362 * Added @p as an alias for 'print'. It's especially convenient if
4359 using automagic ('p x' prints x).
4363 using automagic ('p x' prints x).
4360
4364
4361 * Small cleanups and fixes after a pychecker run.
4365 * Small cleanups and fixes after a pychecker run.
4362
4366
4363 * Changed the @cd command to handle @cd - and @cd -<n> for
4367 * Changed the @cd command to handle @cd - and @cd -<n> for
4364 visiting any directory in _dh.
4368 visiting any directory in _dh.
4365
4369
4366 * Introduced _dh, a history of visited directories. @dhist prints
4370 * Introduced _dh, a history of visited directories. @dhist prints
4367 it out with numbers.
4371 it out with numbers.
4368
4372
4369 2001-12-07 Fernando Perez <fperez@colorado.edu>
4373 2001-12-07 Fernando Perez <fperez@colorado.edu>
4370
4374
4371 * Released 0.1.22
4375 * Released 0.1.22
4372
4376
4373 * Made initialization a bit more robust against invalid color
4377 * Made initialization a bit more robust against invalid color
4374 options in user input (exit, not traceback-crash).
4378 options in user input (exit, not traceback-crash).
4375
4379
4376 * Changed the bug crash reporter to write the report only in the
4380 * Changed the bug crash reporter to write the report only in the
4377 user's .ipython directory. That way IPython won't litter people's
4381 user's .ipython directory. That way IPython won't litter people's
4378 hard disks with crash files all over the place. Also print on
4382 hard disks with crash files all over the place. Also print on
4379 screen the necessary mail command.
4383 screen the necessary mail command.
4380
4384
4381 * With the new ultraTB, implemented LightBG color scheme for light
4385 * With the new ultraTB, implemented LightBG color scheme for light
4382 background terminals. A lot of people like white backgrounds, so I
4386 background terminals. A lot of people like white backgrounds, so I
4383 guess we should at least give them something readable.
4387 guess we should at least give them something readable.
4384
4388
4385 2001-12-06 Fernando Perez <fperez@colorado.edu>
4389 2001-12-06 Fernando Perez <fperez@colorado.edu>
4386
4390
4387 * Modified the structure of ultraTB. Now there's a proper class
4391 * Modified the structure of ultraTB. Now there's a proper class
4388 for tables of color schemes which allow adding schemes easily and
4392 for tables of color schemes which allow adding schemes easily and
4389 switching the active scheme without creating a new instance every
4393 switching the active scheme without creating a new instance every
4390 time (which was ridiculous). The syntax for creating new schemes
4394 time (which was ridiculous). The syntax for creating new schemes
4391 is also cleaner. I think ultraTB is finally done, with a clean
4395 is also cleaner. I think ultraTB is finally done, with a clean
4392 class structure. Names are also much cleaner (now there's proper
4396 class structure. Names are also much cleaner (now there's proper
4393 color tables, no need for every variable to also have 'color' in
4397 color tables, no need for every variable to also have 'color' in
4394 its name).
4398 its name).
4395
4399
4396 * Broke down genutils into separate files. Now genutils only
4400 * Broke down genutils into separate files. Now genutils only
4397 contains utility functions, and classes have been moved to their
4401 contains utility functions, and classes have been moved to their
4398 own files (they had enough independent functionality to warrant
4402 own files (they had enough independent functionality to warrant
4399 it): ConfigLoader, OutputTrap, Struct.
4403 it): ConfigLoader, OutputTrap, Struct.
4400
4404
4401 2001-12-05 Fernando Perez <fperez@colorado.edu>
4405 2001-12-05 Fernando Perez <fperez@colorado.edu>
4402
4406
4403 * IPython turns 21! Released version 0.1.21, as a candidate for
4407 * IPython turns 21! Released version 0.1.21, as a candidate for
4404 public consumption. If all goes well, release in a few days.
4408 public consumption. If all goes well, release in a few days.
4405
4409
4406 * Fixed path bug (files in Extensions/ directory wouldn't be found
4410 * Fixed path bug (files in Extensions/ directory wouldn't be found
4407 unless IPython/ was explicitly in sys.path).
4411 unless IPython/ was explicitly in sys.path).
4408
4412
4409 * Extended the FlexCompleter class as MagicCompleter to allow
4413 * Extended the FlexCompleter class as MagicCompleter to allow
4410 completion of @-starting lines.
4414 completion of @-starting lines.
4411
4415
4412 * Created __release__.py file as a central repository for release
4416 * Created __release__.py file as a central repository for release
4413 info that other files can read from.
4417 info that other files can read from.
4414
4418
4415 * Fixed small bug in logging: when logging was turned on in
4419 * Fixed small bug in logging: when logging was turned on in
4416 mid-session, old lines with special meanings (!@?) were being
4420 mid-session, old lines with special meanings (!@?) were being
4417 logged without the prepended comment, which is necessary since
4421 logged without the prepended comment, which is necessary since
4418 they are not truly valid python syntax. This should make session
4422 they are not truly valid python syntax. This should make session
4419 restores produce less errors.
4423 restores produce less errors.
4420
4424
4421 * The namespace cleanup forced me to make a FlexCompleter class
4425 * The namespace cleanup forced me to make a FlexCompleter class
4422 which is nothing but a ripoff of rlcompleter, but with selectable
4426 which is nothing but a ripoff of rlcompleter, but with selectable
4423 namespace (rlcompleter only works in __main__.__dict__). I'll try
4427 namespace (rlcompleter only works in __main__.__dict__). I'll try
4424 to submit a note to the authors to see if this change can be
4428 to submit a note to the authors to see if this change can be
4425 incorporated in future rlcompleter releases (Dec.6: done)
4429 incorporated in future rlcompleter releases (Dec.6: done)
4426
4430
4427 * More fixes to namespace handling. It was a mess! Now all
4431 * More fixes to namespace handling. It was a mess! Now all
4428 explicit references to __main__.__dict__ are gone (except when
4432 explicit references to __main__.__dict__ are gone (except when
4429 really needed) and everything is handled through the namespace
4433 really needed) and everything is handled through the namespace
4430 dicts in the IPython instance. We seem to be getting somewhere
4434 dicts in the IPython instance. We seem to be getting somewhere
4431 with this, finally...
4435 with this, finally...
4432
4436
4433 * Small documentation updates.
4437 * Small documentation updates.
4434
4438
4435 * Created the Extensions directory under IPython (with an
4439 * Created the Extensions directory under IPython (with an
4436 __init__.py). Put the PhysicalQ stuff there. This directory should
4440 __init__.py). Put the PhysicalQ stuff there. This directory should
4437 be used for all special-purpose extensions.
4441 be used for all special-purpose extensions.
4438
4442
4439 * File renaming:
4443 * File renaming:
4440 ipythonlib --> ipmaker
4444 ipythonlib --> ipmaker
4441 ipplib --> iplib
4445 ipplib --> iplib
4442 This makes a bit more sense in terms of what these files actually do.
4446 This makes a bit more sense in terms of what these files actually do.
4443
4447
4444 * Moved all the classes and functions in ipythonlib to ipplib, so
4448 * Moved all the classes and functions in ipythonlib to ipplib, so
4445 now ipythonlib only has make_IPython(). This will ease up its
4449 now ipythonlib only has make_IPython(). This will ease up its
4446 splitting in smaller functional chunks later.
4450 splitting in smaller functional chunks later.
4447
4451
4448 * Cleaned up (done, I think) output of @whos. Better column
4452 * Cleaned up (done, I think) output of @whos. Better column
4449 formatting, and now shows str(var) for as much as it can, which is
4453 formatting, and now shows str(var) for as much as it can, which is
4450 typically what one gets with a 'print var'.
4454 typically what one gets with a 'print var'.
4451
4455
4452 2001-12-04 Fernando Perez <fperez@colorado.edu>
4456 2001-12-04 Fernando Perez <fperez@colorado.edu>
4453
4457
4454 * Fixed namespace problems. Now builtin/IPyhton/user names get
4458 * Fixed namespace problems. Now builtin/IPyhton/user names get
4455 properly reported in their namespace. Internal namespace handling
4459 properly reported in their namespace. Internal namespace handling
4456 is finally getting decent (not perfect yet, but much better than
4460 is finally getting decent (not perfect yet, but much better than
4457 the ad-hoc mess we had).
4461 the ad-hoc mess we had).
4458
4462
4459 * Removed -exit option. If people just want to run a python
4463 * Removed -exit option. If people just want to run a python
4460 script, that's what the normal interpreter is for. Less
4464 script, that's what the normal interpreter is for. Less
4461 unnecessary options, less chances for bugs.
4465 unnecessary options, less chances for bugs.
4462
4466
4463 * Added a crash handler which generates a complete post-mortem if
4467 * Added a crash handler which generates a complete post-mortem if
4464 IPython crashes. This will help a lot in tracking bugs down the
4468 IPython crashes. This will help a lot in tracking bugs down the
4465 road.
4469 road.
4466
4470
4467 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4471 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4468 which were boud to functions being reassigned would bypass the
4472 which were boud to functions being reassigned would bypass the
4469 logger, breaking the sync of _il with the prompt counter. This
4473 logger, breaking the sync of _il with the prompt counter. This
4470 would then crash IPython later when a new line was logged.
4474 would then crash IPython later when a new line was logged.
4471
4475
4472 2001-12-02 Fernando Perez <fperez@colorado.edu>
4476 2001-12-02 Fernando Perez <fperez@colorado.edu>
4473
4477
4474 * Made IPython a package. This means people don't have to clutter
4478 * Made IPython a package. This means people don't have to clutter
4475 their sys.path with yet another directory. Changed the INSTALL
4479 their sys.path with yet another directory. Changed the INSTALL
4476 file accordingly.
4480 file accordingly.
4477
4481
4478 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4482 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4479 sorts its output (so @who shows it sorted) and @whos formats the
4483 sorts its output (so @who shows it sorted) and @whos formats the
4480 table according to the width of the first column. Nicer, easier to
4484 table according to the width of the first column. Nicer, easier to
4481 read. Todo: write a generic table_format() which takes a list of
4485 read. Todo: write a generic table_format() which takes a list of
4482 lists and prints it nicely formatted, with optional row/column
4486 lists and prints it nicely formatted, with optional row/column
4483 separators and proper padding and justification.
4487 separators and proper padding and justification.
4484
4488
4485 * Released 0.1.20
4489 * Released 0.1.20
4486
4490
4487 * Fixed bug in @log which would reverse the inputcache list (a
4491 * Fixed bug in @log which would reverse the inputcache list (a
4488 copy operation was missing).
4492 copy operation was missing).
4489
4493
4490 * Code cleanup. @config was changed to use page(). Better, since
4494 * Code cleanup. @config was changed to use page(). Better, since
4491 its output is always quite long.
4495 its output is always quite long.
4492
4496
4493 * Itpl is back as a dependency. I was having too many problems
4497 * Itpl is back as a dependency. I was having too many problems
4494 getting the parametric aliases to work reliably, and it's just
4498 getting the parametric aliases to work reliably, and it's just
4495 easier to code weird string operations with it than playing %()s
4499 easier to code weird string operations with it than playing %()s
4496 games. It's only ~6k, so I don't think it's too big a deal.
4500 games. It's only ~6k, so I don't think it's too big a deal.
4497
4501
4498 * Found (and fixed) a very nasty bug with history. !lines weren't
4502 * Found (and fixed) a very nasty bug with history. !lines weren't
4499 getting cached, and the out of sync caches would crash
4503 getting cached, and the out of sync caches would crash
4500 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4504 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4501 division of labor a bit better. Bug fixed, cleaner structure.
4505 division of labor a bit better. Bug fixed, cleaner structure.
4502
4506
4503 2001-12-01 Fernando Perez <fperez@colorado.edu>
4507 2001-12-01 Fernando Perez <fperez@colorado.edu>
4504
4508
4505 * Released 0.1.19
4509 * Released 0.1.19
4506
4510
4507 * Added option -n to @hist to prevent line number printing. Much
4511 * Added option -n to @hist to prevent line number printing. Much
4508 easier to copy/paste code this way.
4512 easier to copy/paste code this way.
4509
4513
4510 * Created global _il to hold the input list. Allows easy
4514 * Created global _il to hold the input list. Allows easy
4511 re-execution of blocks of code by slicing it (inspired by Janko's
4515 re-execution of blocks of code by slicing it (inspired by Janko's
4512 comment on 'macros').
4516 comment on 'macros').
4513
4517
4514 * Small fixes and doc updates.
4518 * Small fixes and doc updates.
4515
4519
4516 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4520 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4517 much too fragile with automagic. Handles properly multi-line
4521 much too fragile with automagic. Handles properly multi-line
4518 statements and takes parameters.
4522 statements and takes parameters.
4519
4523
4520 2001-11-30 Fernando Perez <fperez@colorado.edu>
4524 2001-11-30 Fernando Perez <fperez@colorado.edu>
4521
4525
4522 * Version 0.1.18 released.
4526 * Version 0.1.18 released.
4523
4527
4524 * Fixed nasty namespace bug in initial module imports.
4528 * Fixed nasty namespace bug in initial module imports.
4525
4529
4526 * Added copyright/license notes to all code files (except
4530 * Added copyright/license notes to all code files (except
4527 DPyGetOpt). For the time being, LGPL. That could change.
4531 DPyGetOpt). For the time being, LGPL. That could change.
4528
4532
4529 * Rewrote a much nicer README, updated INSTALL, cleaned up
4533 * Rewrote a much nicer README, updated INSTALL, cleaned up
4530 ipythonrc-* samples.
4534 ipythonrc-* samples.
4531
4535
4532 * Overall code/documentation cleanup. Basically ready for
4536 * Overall code/documentation cleanup. Basically ready for
4533 release. Only remaining thing: licence decision (LGPL?).
4537 release. Only remaining thing: licence decision (LGPL?).
4534
4538
4535 * Converted load_config to a class, ConfigLoader. Now recursion
4539 * Converted load_config to a class, ConfigLoader. Now recursion
4536 control is better organized. Doesn't include the same file twice.
4540 control is better organized. Doesn't include the same file twice.
4537
4541
4538 2001-11-29 Fernando Perez <fperez@colorado.edu>
4542 2001-11-29 Fernando Perez <fperez@colorado.edu>
4539
4543
4540 * Got input history working. Changed output history variables from
4544 * Got input history working. Changed output history variables from
4541 _p to _o so that _i is for input and _o for output. Just cleaner
4545 _p to _o so that _i is for input and _o for output. Just cleaner
4542 convention.
4546 convention.
4543
4547
4544 * Implemented parametric aliases. This pretty much allows the
4548 * Implemented parametric aliases. This pretty much allows the
4545 alias system to offer full-blown shell convenience, I think.
4549 alias system to offer full-blown shell convenience, I think.
4546
4550
4547 * Version 0.1.17 released, 0.1.18 opened.
4551 * Version 0.1.17 released, 0.1.18 opened.
4548
4552
4549 * dot_ipython/ipythonrc (alias): added documentation.
4553 * dot_ipython/ipythonrc (alias): added documentation.
4550 (xcolor): Fixed small bug (xcolors -> xcolor)
4554 (xcolor): Fixed small bug (xcolors -> xcolor)
4551
4555
4552 * Changed the alias system. Now alias is a magic command to define
4556 * Changed the alias system. Now alias is a magic command to define
4553 aliases just like the shell. Rationale: the builtin magics should
4557 aliases just like the shell. Rationale: the builtin magics should
4554 be there for things deeply connected to IPython's
4558 be there for things deeply connected to IPython's
4555 architecture. And this is a much lighter system for what I think
4559 architecture. And this is a much lighter system for what I think
4556 is the really important feature: allowing users to define quickly
4560 is the really important feature: allowing users to define quickly
4557 magics that will do shell things for them, so they can customize
4561 magics that will do shell things for them, so they can customize
4558 IPython easily to match their work habits. If someone is really
4562 IPython easily to match their work habits. If someone is really
4559 desperate to have another name for a builtin alias, they can
4563 desperate to have another name for a builtin alias, they can
4560 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4564 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4561 works.
4565 works.
4562
4566
4563 2001-11-28 Fernando Perez <fperez@colorado.edu>
4567 2001-11-28 Fernando Perez <fperez@colorado.edu>
4564
4568
4565 * Changed @file so that it opens the source file at the proper
4569 * Changed @file so that it opens the source file at the proper
4566 line. Since it uses less, if your EDITOR environment is
4570 line. Since it uses less, if your EDITOR environment is
4567 configured, typing v will immediately open your editor of choice
4571 configured, typing v will immediately open your editor of choice
4568 right at the line where the object is defined. Not as quick as
4572 right at the line where the object is defined. Not as quick as
4569 having a direct @edit command, but for all intents and purposes it
4573 having a direct @edit command, but for all intents and purposes it
4570 works. And I don't have to worry about writing @edit to deal with
4574 works. And I don't have to worry about writing @edit to deal with
4571 all the editors, less does that.
4575 all the editors, less does that.
4572
4576
4573 * Version 0.1.16 released, 0.1.17 opened.
4577 * Version 0.1.16 released, 0.1.17 opened.
4574
4578
4575 * Fixed some nasty bugs in the page/page_dumb combo that could
4579 * Fixed some nasty bugs in the page/page_dumb combo that could
4576 crash IPython.
4580 crash IPython.
4577
4581
4578 2001-11-27 Fernando Perez <fperez@colorado.edu>
4582 2001-11-27 Fernando Perez <fperez@colorado.edu>
4579
4583
4580 * Version 0.1.15 released, 0.1.16 opened.
4584 * Version 0.1.15 released, 0.1.16 opened.
4581
4585
4582 * Finally got ? and ?? to work for undefined things: now it's
4586 * Finally got ? and ?? to work for undefined things: now it's
4583 possible to type {}.get? and get information about the get method
4587 possible to type {}.get? and get information about the get method
4584 of dicts, or os.path? even if only os is defined (so technically
4588 of dicts, or os.path? even if only os is defined (so technically
4585 os.path isn't). Works at any level. For example, after import os,
4589 os.path isn't). Works at any level. For example, after import os,
4586 os?, os.path?, os.path.abspath? all work. This is great, took some
4590 os?, os.path?, os.path.abspath? all work. This is great, took some
4587 work in _ofind.
4591 work in _ofind.
4588
4592
4589 * Fixed more bugs with logging. The sanest way to do it was to add
4593 * Fixed more bugs with logging. The sanest way to do it was to add
4590 to @log a 'mode' parameter. Killed two in one shot (this mode
4594 to @log a 'mode' parameter. Killed two in one shot (this mode
4591 option was a request of Janko's). I think it's finally clean
4595 option was a request of Janko's). I think it's finally clean
4592 (famous last words).
4596 (famous last words).
4593
4597
4594 * Added a page_dumb() pager which does a decent job of paging on
4598 * Added a page_dumb() pager which does a decent job of paging on
4595 screen, if better things (like less) aren't available. One less
4599 screen, if better things (like less) aren't available. One less
4596 unix dependency (someday maybe somebody will port this to
4600 unix dependency (someday maybe somebody will port this to
4597 windows).
4601 windows).
4598
4602
4599 * Fixed problem in magic_log: would lock of logging out if log
4603 * Fixed problem in magic_log: would lock of logging out if log
4600 creation failed (because it would still think it had succeeded).
4604 creation failed (because it would still think it had succeeded).
4601
4605
4602 * Improved the page() function using curses to auto-detect screen
4606 * Improved the page() function using curses to auto-detect screen
4603 size. Now it can make a much better decision on whether to print
4607 size. Now it can make a much better decision on whether to print
4604 or page a string. Option screen_length was modified: a value 0
4608 or page a string. Option screen_length was modified: a value 0
4605 means auto-detect, and that's the default now.
4609 means auto-detect, and that's the default now.
4606
4610
4607 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4611 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4608 go out. I'll test it for a few days, then talk to Janko about
4612 go out. I'll test it for a few days, then talk to Janko about
4609 licences and announce it.
4613 licences and announce it.
4610
4614
4611 * Fixed the length of the auto-generated ---> prompt which appears
4615 * Fixed the length of the auto-generated ---> prompt which appears
4612 for auto-parens and auto-quotes. Getting this right isn't trivial,
4616 for auto-parens and auto-quotes. Getting this right isn't trivial,
4613 with all the color escapes, different prompt types and optional
4617 with all the color escapes, different prompt types and optional
4614 separators. But it seems to be working in all the combinations.
4618 separators. But it seems to be working in all the combinations.
4615
4619
4616 2001-11-26 Fernando Perez <fperez@colorado.edu>
4620 2001-11-26 Fernando Perez <fperez@colorado.edu>
4617
4621
4618 * Wrote a regexp filter to get option types from the option names
4622 * Wrote a regexp filter to get option types from the option names
4619 string. This eliminates the need to manually keep two duplicate
4623 string. This eliminates the need to manually keep two duplicate
4620 lists.
4624 lists.
4621
4625
4622 * Removed the unneeded check_option_names. Now options are handled
4626 * Removed the unneeded check_option_names. Now options are handled
4623 in a much saner manner and it's easy to visually check that things
4627 in a much saner manner and it's easy to visually check that things
4624 are ok.
4628 are ok.
4625
4629
4626 * Updated version numbers on all files I modified to carry a
4630 * Updated version numbers on all files I modified to carry a
4627 notice so Janko and Nathan have clear version markers.
4631 notice so Janko and Nathan have clear version markers.
4628
4632
4629 * Updated docstring for ultraTB with my changes. I should send
4633 * Updated docstring for ultraTB with my changes. I should send
4630 this to Nathan.
4634 this to Nathan.
4631
4635
4632 * Lots of small fixes. Ran everything through pychecker again.
4636 * Lots of small fixes. Ran everything through pychecker again.
4633
4637
4634 * Made loading of deep_reload an cmd line option. If it's not too
4638 * Made loading of deep_reload an cmd line option. If it's not too
4635 kosher, now people can just disable it. With -nodeep_reload it's
4639 kosher, now people can just disable it. With -nodeep_reload it's
4636 still available as dreload(), it just won't overwrite reload().
4640 still available as dreload(), it just won't overwrite reload().
4637
4641
4638 * Moved many options to the no| form (-opt and -noopt
4642 * Moved many options to the no| form (-opt and -noopt
4639 accepted). Cleaner.
4643 accepted). Cleaner.
4640
4644
4641 * Changed magic_log so that if called with no parameters, it uses
4645 * Changed magic_log so that if called with no parameters, it uses
4642 'rotate' mode. That way auto-generated logs aren't automatically
4646 'rotate' mode. That way auto-generated logs aren't automatically
4643 over-written. For normal logs, now a backup is made if it exists
4647 over-written. For normal logs, now a backup is made if it exists
4644 (only 1 level of backups). A new 'backup' mode was added to the
4648 (only 1 level of backups). A new 'backup' mode was added to the
4645 Logger class to support this. This was a request by Janko.
4649 Logger class to support this. This was a request by Janko.
4646
4650
4647 * Added @logoff/@logon to stop/restart an active log.
4651 * Added @logoff/@logon to stop/restart an active log.
4648
4652
4649 * Fixed a lot of bugs in log saving/replay. It was pretty
4653 * Fixed a lot of bugs in log saving/replay. It was pretty
4650 broken. Now special lines (!@,/) appear properly in the command
4654 broken. Now special lines (!@,/) appear properly in the command
4651 history after a log replay.
4655 history after a log replay.
4652
4656
4653 * Tried and failed to implement full session saving via pickle. My
4657 * Tried and failed to implement full session saving via pickle. My
4654 idea was to pickle __main__.__dict__, but modules can't be
4658 idea was to pickle __main__.__dict__, but modules can't be
4655 pickled. This would be a better alternative to replaying logs, but
4659 pickled. This would be a better alternative to replaying logs, but
4656 seems quite tricky to get to work. Changed -session to be called
4660 seems quite tricky to get to work. Changed -session to be called
4657 -logplay, which more accurately reflects what it does. And if we
4661 -logplay, which more accurately reflects what it does. And if we
4658 ever get real session saving working, -session is now available.
4662 ever get real session saving working, -session is now available.
4659
4663
4660 * Implemented color schemes for prompts also. As for tracebacks,
4664 * Implemented color schemes for prompts also. As for tracebacks,
4661 currently only NoColor and Linux are supported. But now the
4665 currently only NoColor and Linux are supported. But now the
4662 infrastructure is in place, based on a generic ColorScheme
4666 infrastructure is in place, based on a generic ColorScheme
4663 class. So writing and activating new schemes both for the prompts
4667 class. So writing and activating new schemes both for the prompts
4664 and the tracebacks should be straightforward.
4668 and the tracebacks should be straightforward.
4665
4669
4666 * Version 0.1.13 released, 0.1.14 opened.
4670 * Version 0.1.13 released, 0.1.14 opened.
4667
4671
4668 * Changed handling of options for output cache. Now counter is
4672 * Changed handling of options for output cache. Now counter is
4669 hardwired starting at 1 and one specifies the maximum number of
4673 hardwired starting at 1 and one specifies the maximum number of
4670 entries *in the outcache* (not the max prompt counter). This is
4674 entries *in the outcache* (not the max prompt counter). This is
4671 much better, since many statements won't increase the cache
4675 much better, since many statements won't increase the cache
4672 count. It also eliminated some confusing options, now there's only
4676 count. It also eliminated some confusing options, now there's only
4673 one: cache_size.
4677 one: cache_size.
4674
4678
4675 * Added 'alias' magic function and magic_alias option in the
4679 * Added 'alias' magic function and magic_alias option in the
4676 ipythonrc file. Now the user can easily define whatever names he
4680 ipythonrc file. Now the user can easily define whatever names he
4677 wants for the magic functions without having to play weird
4681 wants for the magic functions without having to play weird
4678 namespace games. This gives IPython a real shell-like feel.
4682 namespace games. This gives IPython a real shell-like feel.
4679
4683
4680 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4684 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4681 @ or not).
4685 @ or not).
4682
4686
4683 This was one of the last remaining 'visible' bugs (that I know
4687 This was one of the last remaining 'visible' bugs (that I know
4684 of). I think if I can clean up the session loading so it works
4688 of). I think if I can clean up the session loading so it works
4685 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4689 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4686 about licensing).
4690 about licensing).
4687
4691
4688 2001-11-25 Fernando Perez <fperez@colorado.edu>
4692 2001-11-25 Fernando Perez <fperez@colorado.edu>
4689
4693
4690 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4694 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4691 there's a cleaner distinction between what ? and ?? show.
4695 there's a cleaner distinction between what ? and ?? show.
4692
4696
4693 * Added screen_length option. Now the user can define his own
4697 * Added screen_length option. Now the user can define his own
4694 screen size for page() operations.
4698 screen size for page() operations.
4695
4699
4696 * Implemented magic shell-like functions with automatic code
4700 * Implemented magic shell-like functions with automatic code
4697 generation. Now adding another function is just a matter of adding
4701 generation. Now adding another function is just a matter of adding
4698 an entry to a dict, and the function is dynamically generated at
4702 an entry to a dict, and the function is dynamically generated at
4699 run-time. Python has some really cool features!
4703 run-time. Python has some really cool features!
4700
4704
4701 * Renamed many options to cleanup conventions a little. Now all
4705 * Renamed many options to cleanup conventions a little. Now all
4702 are lowercase, and only underscores where needed. Also in the code
4706 are lowercase, and only underscores where needed. Also in the code
4703 option name tables are clearer.
4707 option name tables are clearer.
4704
4708
4705 * Changed prompts a little. Now input is 'In [n]:' instead of
4709 * Changed prompts a little. Now input is 'In [n]:' instead of
4706 'In[n]:='. This allows it the numbers to be aligned with the
4710 'In[n]:='. This allows it the numbers to be aligned with the
4707 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4711 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4708 Python (it was a Mathematica thing). The '...' continuation prompt
4712 Python (it was a Mathematica thing). The '...' continuation prompt
4709 was also changed a little to align better.
4713 was also changed a little to align better.
4710
4714
4711 * Fixed bug when flushing output cache. Not all _p<n> variables
4715 * Fixed bug when flushing output cache. Not all _p<n> variables
4712 exist, so their deletion needs to be wrapped in a try:
4716 exist, so their deletion needs to be wrapped in a try:
4713
4717
4714 * Figured out how to properly use inspect.formatargspec() (it
4718 * Figured out how to properly use inspect.formatargspec() (it
4715 requires the args preceded by *). So I removed all the code from
4719 requires the args preceded by *). So I removed all the code from
4716 _get_pdef in Magic, which was just replicating that.
4720 _get_pdef in Magic, which was just replicating that.
4717
4721
4718 * Added test to prefilter to allow redefining magic function names
4722 * Added test to prefilter to allow redefining magic function names
4719 as variables. This is ok, since the @ form is always available,
4723 as variables. This is ok, since the @ form is always available,
4720 but whe should allow the user to define a variable called 'ls' if
4724 but whe should allow the user to define a variable called 'ls' if
4721 he needs it.
4725 he needs it.
4722
4726
4723 * Moved the ToDo information from README into a separate ToDo.
4727 * Moved the ToDo information from README into a separate ToDo.
4724
4728
4725 * General code cleanup and small bugfixes. I think it's close to a
4729 * General code cleanup and small bugfixes. I think it's close to a
4726 state where it can be released, obviously with a big 'beta'
4730 state where it can be released, obviously with a big 'beta'
4727 warning on it.
4731 warning on it.
4728
4732
4729 * Got the magic function split to work. Now all magics are defined
4733 * Got the magic function split to work. Now all magics are defined
4730 in a separate class. It just organizes things a bit, and now
4734 in a separate class. It just organizes things a bit, and now
4731 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4735 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4732 was too long).
4736 was too long).
4733
4737
4734 * Changed @clear to @reset to avoid potential confusions with
4738 * Changed @clear to @reset to avoid potential confusions with
4735 the shell command clear. Also renamed @cl to @clear, which does
4739 the shell command clear. Also renamed @cl to @clear, which does
4736 exactly what people expect it to from their shell experience.
4740 exactly what people expect it to from their shell experience.
4737
4741
4738 Added a check to the @reset command (since it's so
4742 Added a check to the @reset command (since it's so
4739 destructive, it's probably a good idea to ask for confirmation).
4743 destructive, it's probably a good idea to ask for confirmation).
4740 But now reset only works for full namespace resetting. Since the
4744 But now reset only works for full namespace resetting. Since the
4741 del keyword is already there for deleting a few specific
4745 del keyword is already there for deleting a few specific
4742 variables, I don't see the point of having a redundant magic
4746 variables, I don't see the point of having a redundant magic
4743 function for the same task.
4747 function for the same task.
4744
4748
4745 2001-11-24 Fernando Perez <fperez@colorado.edu>
4749 2001-11-24 Fernando Perez <fperez@colorado.edu>
4746
4750
4747 * Updated the builtin docs (esp. the ? ones).
4751 * Updated the builtin docs (esp. the ? ones).
4748
4752
4749 * Ran all the code through pychecker. Not terribly impressed with
4753 * Ran all the code through pychecker. Not terribly impressed with
4750 it: lots of spurious warnings and didn't really find anything of
4754 it: lots of spurious warnings and didn't really find anything of
4751 substance (just a few modules being imported and not used).
4755 substance (just a few modules being imported and not used).
4752
4756
4753 * Implemented the new ultraTB functionality into IPython. New
4757 * Implemented the new ultraTB functionality into IPython. New
4754 option: xcolors. This chooses color scheme. xmode now only selects
4758 option: xcolors. This chooses color scheme. xmode now only selects
4755 between Plain and Verbose. Better orthogonality.
4759 between Plain and Verbose. Better orthogonality.
4756
4760
4757 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4761 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4758 mode and color scheme for the exception handlers. Now it's
4762 mode and color scheme for the exception handlers. Now it's
4759 possible to have the verbose traceback with no coloring.
4763 possible to have the verbose traceback with no coloring.
4760
4764
4761 2001-11-23 Fernando Perez <fperez@colorado.edu>
4765 2001-11-23 Fernando Perez <fperez@colorado.edu>
4762
4766
4763 * Version 0.1.12 released, 0.1.13 opened.
4767 * Version 0.1.12 released, 0.1.13 opened.
4764
4768
4765 * Removed option to set auto-quote and auto-paren escapes by
4769 * Removed option to set auto-quote and auto-paren escapes by
4766 user. The chances of breaking valid syntax are just too high. If
4770 user. The chances of breaking valid syntax are just too high. If
4767 someone *really* wants, they can always dig into the code.
4771 someone *really* wants, they can always dig into the code.
4768
4772
4769 * Made prompt separators configurable.
4773 * Made prompt separators configurable.
4770
4774
4771 2001-11-22 Fernando Perez <fperez@colorado.edu>
4775 2001-11-22 Fernando Perez <fperez@colorado.edu>
4772
4776
4773 * Small bugfixes in many places.
4777 * Small bugfixes in many places.
4774
4778
4775 * Removed the MyCompleter class from ipplib. It seemed redundant
4779 * Removed the MyCompleter class from ipplib. It seemed redundant
4776 with the C-p,C-n history search functionality. Less code to
4780 with the C-p,C-n history search functionality. Less code to
4777 maintain.
4781 maintain.
4778
4782
4779 * Moved all the original ipython.py code into ipythonlib.py. Right
4783 * Moved all the original ipython.py code into ipythonlib.py. Right
4780 now it's just one big dump into a function called make_IPython, so
4784 now it's just one big dump into a function called make_IPython, so
4781 no real modularity has been gained. But at least it makes the
4785 no real modularity has been gained. But at least it makes the
4782 wrapper script tiny, and since ipythonlib is a module, it gets
4786 wrapper script tiny, and since ipythonlib is a module, it gets
4783 compiled and startup is much faster.
4787 compiled and startup is much faster.
4784
4788
4785 This is a reasobably 'deep' change, so we should test it for a
4789 This is a reasobably 'deep' change, so we should test it for a
4786 while without messing too much more with the code.
4790 while without messing too much more with the code.
4787
4791
4788 2001-11-21 Fernando Perez <fperez@colorado.edu>
4792 2001-11-21 Fernando Perez <fperez@colorado.edu>
4789
4793
4790 * Version 0.1.11 released, 0.1.12 opened for further work.
4794 * Version 0.1.11 released, 0.1.12 opened for further work.
4791
4795
4792 * Removed dependency on Itpl. It was only needed in one place. It
4796 * Removed dependency on Itpl. It was only needed in one place. It
4793 would be nice if this became part of python, though. It makes life
4797 would be nice if this became part of python, though. It makes life
4794 *a lot* easier in some cases.
4798 *a lot* easier in some cases.
4795
4799
4796 * Simplified the prefilter code a bit. Now all handlers are
4800 * Simplified the prefilter code a bit. Now all handlers are
4797 expected to explicitly return a value (at least a blank string).
4801 expected to explicitly return a value (at least a blank string).
4798
4802
4799 * Heavy edits in ipplib. Removed the help system altogether. Now
4803 * Heavy edits in ipplib. Removed the help system altogether. Now
4800 obj?/?? is used for inspecting objects, a magic @doc prints
4804 obj?/?? is used for inspecting objects, a magic @doc prints
4801 docstrings, and full-blown Python help is accessed via the 'help'
4805 docstrings, and full-blown Python help is accessed via the 'help'
4802 keyword. This cleans up a lot of code (less to maintain) and does
4806 keyword. This cleans up a lot of code (less to maintain) and does
4803 the job. Since 'help' is now a standard Python component, might as
4807 the job. Since 'help' is now a standard Python component, might as
4804 well use it and remove duplicate functionality.
4808 well use it and remove duplicate functionality.
4805
4809
4806 Also removed the option to use ipplib as a standalone program. By
4810 Also removed the option to use ipplib as a standalone program. By
4807 now it's too dependent on other parts of IPython to function alone.
4811 now it's too dependent on other parts of IPython to function alone.
4808
4812
4809 * Fixed bug in genutils.pager. It would crash if the pager was
4813 * Fixed bug in genutils.pager. It would crash if the pager was
4810 exited immediately after opening (broken pipe).
4814 exited immediately after opening (broken pipe).
4811
4815
4812 * Trimmed down the VerboseTB reporting a little. The header is
4816 * Trimmed down the VerboseTB reporting a little. The header is
4813 much shorter now and the repeated exception arguments at the end
4817 much shorter now and the repeated exception arguments at the end
4814 have been removed. For interactive use the old header seemed a bit
4818 have been removed. For interactive use the old header seemed a bit
4815 excessive.
4819 excessive.
4816
4820
4817 * Fixed small bug in output of @whos for variables with multi-word
4821 * Fixed small bug in output of @whos for variables with multi-word
4818 types (only first word was displayed).
4822 types (only first word was displayed).
4819
4823
4820 2001-11-17 Fernando Perez <fperez@colorado.edu>
4824 2001-11-17 Fernando Perez <fperez@colorado.edu>
4821
4825
4822 * Version 0.1.10 released, 0.1.11 opened for further work.
4826 * Version 0.1.10 released, 0.1.11 opened for further work.
4823
4827
4824 * Modified dirs and friends. dirs now *returns* the stack (not
4828 * Modified dirs and friends. dirs now *returns* the stack (not
4825 prints), so one can manipulate it as a variable. Convenient to
4829 prints), so one can manipulate it as a variable. Convenient to
4826 travel along many directories.
4830 travel along many directories.
4827
4831
4828 * Fixed bug in magic_pdef: would only work with functions with
4832 * Fixed bug in magic_pdef: would only work with functions with
4829 arguments with default values.
4833 arguments with default values.
4830
4834
4831 2001-11-14 Fernando Perez <fperez@colorado.edu>
4835 2001-11-14 Fernando Perez <fperez@colorado.edu>
4832
4836
4833 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4837 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4834 example with IPython. Various other minor fixes and cleanups.
4838 example with IPython. Various other minor fixes and cleanups.
4835
4839
4836 * Version 0.1.9 released, 0.1.10 opened for further work.
4840 * Version 0.1.9 released, 0.1.10 opened for further work.
4837
4841
4838 * Added sys.path to the list of directories searched in the
4842 * Added sys.path to the list of directories searched in the
4839 execfile= option. It used to be the current directory and the
4843 execfile= option. It used to be the current directory and the
4840 user's IPYTHONDIR only.
4844 user's IPYTHONDIR only.
4841
4845
4842 2001-11-13 Fernando Perez <fperez@colorado.edu>
4846 2001-11-13 Fernando Perez <fperez@colorado.edu>
4843
4847
4844 * Reinstated the raw_input/prefilter separation that Janko had
4848 * Reinstated the raw_input/prefilter separation that Janko had
4845 initially. This gives a more convenient setup for extending the
4849 initially. This gives a more convenient setup for extending the
4846 pre-processor from the outside: raw_input always gets a string,
4850 pre-processor from the outside: raw_input always gets a string,
4847 and prefilter has to process it. We can then redefine prefilter
4851 and prefilter has to process it. We can then redefine prefilter
4848 from the outside and implement extensions for special
4852 from the outside and implement extensions for special
4849 purposes.
4853 purposes.
4850
4854
4851 Today I got one for inputting PhysicalQuantity objects
4855 Today I got one for inputting PhysicalQuantity objects
4852 (from Scientific) without needing any function calls at
4856 (from Scientific) without needing any function calls at
4853 all. Extremely convenient, and it's all done as a user-level
4857 all. Extremely convenient, and it's all done as a user-level
4854 extension (no IPython code was touched). Now instead of:
4858 extension (no IPython code was touched). Now instead of:
4855 a = PhysicalQuantity(4.2,'m/s**2')
4859 a = PhysicalQuantity(4.2,'m/s**2')
4856 one can simply say
4860 one can simply say
4857 a = 4.2 m/s**2
4861 a = 4.2 m/s**2
4858 or even
4862 or even
4859 a = 4.2 m/s^2
4863 a = 4.2 m/s^2
4860
4864
4861 I use this, but it's also a proof of concept: IPython really is
4865 I use this, but it's also a proof of concept: IPython really is
4862 fully user-extensible, even at the level of the parsing of the
4866 fully user-extensible, even at the level of the parsing of the
4863 command line. It's not trivial, but it's perfectly doable.
4867 command line. It's not trivial, but it's perfectly doable.
4864
4868
4865 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4869 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4866 the problem of modules being loaded in the inverse order in which
4870 the problem of modules being loaded in the inverse order in which
4867 they were defined in
4871 they were defined in
4868
4872
4869 * Version 0.1.8 released, 0.1.9 opened for further work.
4873 * Version 0.1.8 released, 0.1.9 opened for further work.
4870
4874
4871 * Added magics pdef, source and file. They respectively show the
4875 * Added magics pdef, source and file. They respectively show the
4872 definition line ('prototype' in C), source code and full python
4876 definition line ('prototype' in C), source code and full python
4873 file for any callable object. The object inspector oinfo uses
4877 file for any callable object. The object inspector oinfo uses
4874 these to show the same information.
4878 these to show the same information.
4875
4879
4876 * Version 0.1.7 released, 0.1.8 opened for further work.
4880 * Version 0.1.7 released, 0.1.8 opened for further work.
4877
4881
4878 * Separated all the magic functions into a class called Magic. The
4882 * Separated all the magic functions into a class called Magic. The
4879 InteractiveShell class was becoming too big for Xemacs to handle
4883 InteractiveShell class was becoming too big for Xemacs to handle
4880 (de-indenting a line would lock it up for 10 seconds while it
4884 (de-indenting a line would lock it up for 10 seconds while it
4881 backtracked on the whole class!)
4885 backtracked on the whole class!)
4882
4886
4883 FIXME: didn't work. It can be done, but right now namespaces are
4887 FIXME: didn't work. It can be done, but right now namespaces are
4884 all messed up. Do it later (reverted it for now, so at least
4888 all messed up. Do it later (reverted it for now, so at least
4885 everything works as before).
4889 everything works as before).
4886
4890
4887 * Got the object introspection system (magic_oinfo) working! I
4891 * Got the object introspection system (magic_oinfo) working! I
4888 think this is pretty much ready for release to Janko, so he can
4892 think this is pretty much ready for release to Janko, so he can
4889 test it for a while and then announce it. Pretty much 100% of what
4893 test it for a while and then announce it. Pretty much 100% of what
4890 I wanted for the 'phase 1' release is ready. Happy, tired.
4894 I wanted for the 'phase 1' release is ready. Happy, tired.
4891
4895
4892 2001-11-12 Fernando Perez <fperez@colorado.edu>
4896 2001-11-12 Fernando Perez <fperez@colorado.edu>
4893
4897
4894 * Version 0.1.6 released, 0.1.7 opened for further work.
4898 * Version 0.1.6 released, 0.1.7 opened for further work.
4895
4899
4896 * Fixed bug in printing: it used to test for truth before
4900 * Fixed bug in printing: it used to test for truth before
4897 printing, so 0 wouldn't print. Now checks for None.
4901 printing, so 0 wouldn't print. Now checks for None.
4898
4902
4899 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4903 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4900 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4904 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4901 reaches by hand into the outputcache. Think of a better way to do
4905 reaches by hand into the outputcache. Think of a better way to do
4902 this later.
4906 this later.
4903
4907
4904 * Various small fixes thanks to Nathan's comments.
4908 * Various small fixes thanks to Nathan's comments.
4905
4909
4906 * Changed magic_pprint to magic_Pprint. This way it doesn't
4910 * Changed magic_pprint to magic_Pprint. This way it doesn't
4907 collide with pprint() and the name is consistent with the command
4911 collide with pprint() and the name is consistent with the command
4908 line option.
4912 line option.
4909
4913
4910 * Changed prompt counter behavior to be fully like
4914 * Changed prompt counter behavior to be fully like
4911 Mathematica's. That is, even input that doesn't return a result
4915 Mathematica's. That is, even input that doesn't return a result
4912 raises the prompt counter. The old behavior was kind of confusing
4916 raises the prompt counter. The old behavior was kind of confusing
4913 (getting the same prompt number several times if the operation
4917 (getting the same prompt number several times if the operation
4914 didn't return a result).
4918 didn't return a result).
4915
4919
4916 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4920 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4917
4921
4918 * Fixed -Classic mode (wasn't working anymore).
4922 * Fixed -Classic mode (wasn't working anymore).
4919
4923
4920 * Added colored prompts using Nathan's new code. Colors are
4924 * Added colored prompts using Nathan's new code. Colors are
4921 currently hardwired, they can be user-configurable. For
4925 currently hardwired, they can be user-configurable. For
4922 developers, they can be chosen in file ipythonlib.py, at the
4926 developers, they can be chosen in file ipythonlib.py, at the
4923 beginning of the CachedOutput class def.
4927 beginning of the CachedOutput class def.
4924
4928
4925 2001-11-11 Fernando Perez <fperez@colorado.edu>
4929 2001-11-11 Fernando Perez <fperez@colorado.edu>
4926
4930
4927 * Version 0.1.5 released, 0.1.6 opened for further work.
4931 * Version 0.1.5 released, 0.1.6 opened for further work.
4928
4932
4929 * Changed magic_env to *return* the environment as a dict (not to
4933 * Changed magic_env to *return* the environment as a dict (not to
4930 print it). This way it prints, but it can also be processed.
4934 print it). This way it prints, but it can also be processed.
4931
4935
4932 * Added Verbose exception reporting to interactive
4936 * Added Verbose exception reporting to interactive
4933 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4937 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4934 traceback. Had to make some changes to the ultraTB file. This is
4938 traceback. Had to make some changes to the ultraTB file. This is
4935 probably the last 'big' thing in my mental todo list. This ties
4939 probably the last 'big' thing in my mental todo list. This ties
4936 in with the next entry:
4940 in with the next entry:
4937
4941
4938 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4942 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4939 has to specify is Plain, Color or Verbose for all exception
4943 has to specify is Plain, Color or Verbose for all exception
4940 handling.
4944 handling.
4941
4945
4942 * Removed ShellServices option. All this can really be done via
4946 * Removed ShellServices option. All this can really be done via
4943 the magic system. It's easier to extend, cleaner and has automatic
4947 the magic system. It's easier to extend, cleaner and has automatic
4944 namespace protection and documentation.
4948 namespace protection and documentation.
4945
4949
4946 2001-11-09 Fernando Perez <fperez@colorado.edu>
4950 2001-11-09 Fernando Perez <fperez@colorado.edu>
4947
4951
4948 * Fixed bug in output cache flushing (missing parameter to
4952 * Fixed bug in output cache flushing (missing parameter to
4949 __init__). Other small bugs fixed (found using pychecker).
4953 __init__). Other small bugs fixed (found using pychecker).
4950
4954
4951 * Version 0.1.4 opened for bugfixing.
4955 * Version 0.1.4 opened for bugfixing.
4952
4956
4953 2001-11-07 Fernando Perez <fperez@colorado.edu>
4957 2001-11-07 Fernando Perez <fperez@colorado.edu>
4954
4958
4955 * Version 0.1.3 released, mainly because of the raw_input bug.
4959 * Version 0.1.3 released, mainly because of the raw_input bug.
4956
4960
4957 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4961 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4958 and when testing for whether things were callable, a call could
4962 and when testing for whether things were callable, a call could
4959 actually be made to certain functions. They would get called again
4963 actually be made to certain functions. They would get called again
4960 once 'really' executed, with a resulting double call. A disaster
4964 once 'really' executed, with a resulting double call. A disaster
4961 in many cases (list.reverse() would never work!).
4965 in many cases (list.reverse() would never work!).
4962
4966
4963 * Removed prefilter() function, moved its code to raw_input (which
4967 * Removed prefilter() function, moved its code to raw_input (which
4964 after all was just a near-empty caller for prefilter). This saves
4968 after all was just a near-empty caller for prefilter). This saves
4965 a function call on every prompt, and simplifies the class a tiny bit.
4969 a function call on every prompt, and simplifies the class a tiny bit.
4966
4970
4967 * Fix _ip to __ip name in magic example file.
4971 * Fix _ip to __ip name in magic example file.
4968
4972
4969 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4973 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4970 work with non-gnu versions of tar.
4974 work with non-gnu versions of tar.
4971
4975
4972 2001-11-06 Fernando Perez <fperez@colorado.edu>
4976 2001-11-06 Fernando Perez <fperez@colorado.edu>
4973
4977
4974 * Version 0.1.2. Just to keep track of the recent changes.
4978 * Version 0.1.2. Just to keep track of the recent changes.
4975
4979
4976 * Fixed nasty bug in output prompt routine. It used to check 'if
4980 * Fixed nasty bug in output prompt routine. It used to check 'if
4977 arg != None...'. Problem is, this fails if arg implements a
4981 arg != None...'. Problem is, this fails if arg implements a
4978 special comparison (__cmp__) which disallows comparing to
4982 special comparison (__cmp__) which disallows comparing to
4979 None. Found it when trying to use the PhysicalQuantity module from
4983 None. Found it when trying to use the PhysicalQuantity module from
4980 ScientificPython.
4984 ScientificPython.
4981
4985
4982 2001-11-05 Fernando Perez <fperez@colorado.edu>
4986 2001-11-05 Fernando Perez <fperez@colorado.edu>
4983
4987
4984 * Also added dirs. Now the pushd/popd/dirs family functions
4988 * Also added dirs. Now the pushd/popd/dirs family functions
4985 basically like the shell, with the added convenience of going home
4989 basically like the shell, with the added convenience of going home
4986 when called with no args.
4990 when called with no args.
4987
4991
4988 * pushd/popd slightly modified to mimic shell behavior more
4992 * pushd/popd slightly modified to mimic shell behavior more
4989 closely.
4993 closely.
4990
4994
4991 * Added env,pushd,popd from ShellServices as magic functions. I
4995 * Added env,pushd,popd from ShellServices as magic functions. I
4992 think the cleanest will be to port all desired functions from
4996 think the cleanest will be to port all desired functions from
4993 ShellServices as magics and remove ShellServices altogether. This
4997 ShellServices as magics and remove ShellServices altogether. This
4994 will provide a single, clean way of adding functionality
4998 will provide a single, clean way of adding functionality
4995 (shell-type or otherwise) to IP.
4999 (shell-type or otherwise) to IP.
4996
5000
4997 2001-11-04 Fernando Perez <fperez@colorado.edu>
5001 2001-11-04 Fernando Perez <fperez@colorado.edu>
4998
5002
4999 * Added .ipython/ directory to sys.path. This way users can keep
5003 * Added .ipython/ directory to sys.path. This way users can keep
5000 customizations there and access them via import.
5004 customizations there and access them via import.
5001
5005
5002 2001-11-03 Fernando Perez <fperez@colorado.edu>
5006 2001-11-03 Fernando Perez <fperez@colorado.edu>
5003
5007
5004 * Opened version 0.1.1 for new changes.
5008 * Opened version 0.1.1 for new changes.
5005
5009
5006 * Changed version number to 0.1.0: first 'public' release, sent to
5010 * Changed version number to 0.1.0: first 'public' release, sent to
5007 Nathan and Janko.
5011 Nathan and Janko.
5008
5012
5009 * Lots of small fixes and tweaks.
5013 * Lots of small fixes and tweaks.
5010
5014
5011 * Minor changes to whos format. Now strings are shown, snipped if
5015 * Minor changes to whos format. Now strings are shown, snipped if
5012 too long.
5016 too long.
5013
5017
5014 * Changed ShellServices to work on __main__ so they show up in @who
5018 * Changed ShellServices to work on __main__ so they show up in @who
5015
5019
5016 * Help also works with ? at the end of a line:
5020 * Help also works with ? at the end of a line:
5017 ?sin and sin?
5021 ?sin and sin?
5018 both produce the same effect. This is nice, as often I use the
5022 both produce the same effect. This is nice, as often I use the
5019 tab-complete to find the name of a method, but I used to then have
5023 tab-complete to find the name of a method, but I used to then have
5020 to go to the beginning of the line to put a ? if I wanted more
5024 to go to the beginning of the line to put a ? if I wanted more
5021 info. Now I can just add the ? and hit return. Convenient.
5025 info. Now I can just add the ? and hit return. Convenient.
5022
5026
5023 2001-11-02 Fernando Perez <fperez@colorado.edu>
5027 2001-11-02 Fernando Perez <fperez@colorado.edu>
5024
5028
5025 * Python version check (>=2.1) added.
5029 * Python version check (>=2.1) added.
5026
5030
5027 * Added LazyPython documentation. At this point the docs are quite
5031 * Added LazyPython documentation. At this point the docs are quite
5028 a mess. A cleanup is in order.
5032 a mess. A cleanup is in order.
5029
5033
5030 * Auto-installer created. For some bizarre reason, the zipfiles
5034 * Auto-installer created. For some bizarre reason, the zipfiles
5031 module isn't working on my system. So I made a tar version
5035 module isn't working on my system. So I made a tar version
5032 (hopefully the command line options in various systems won't kill
5036 (hopefully the command line options in various systems won't kill
5033 me).
5037 me).
5034
5038
5035 * Fixes to Struct in genutils. Now all dictionary-like methods are
5039 * Fixes to Struct in genutils. Now all dictionary-like methods are
5036 protected (reasonably).
5040 protected (reasonably).
5037
5041
5038 * Added pager function to genutils and changed ? to print usage
5042 * Added pager function to genutils and changed ? to print usage
5039 note through it (it was too long).
5043 note through it (it was too long).
5040
5044
5041 * Added the LazyPython functionality. Works great! I changed the
5045 * Added the LazyPython functionality. Works great! I changed the
5042 auto-quote escape to ';', it's on home row and next to '. But
5046 auto-quote escape to ';', it's on home row and next to '. But
5043 both auto-quote and auto-paren (still /) escapes are command-line
5047 both auto-quote and auto-paren (still /) escapes are command-line
5044 parameters.
5048 parameters.
5045
5049
5046
5050
5047 2001-11-01 Fernando Perez <fperez@colorado.edu>
5051 2001-11-01 Fernando Perez <fperez@colorado.edu>
5048
5052
5049 * Version changed to 0.0.7. Fairly large change: configuration now
5053 * Version changed to 0.0.7. Fairly large change: configuration now
5050 is all stored in a directory, by default .ipython. There, all
5054 is all stored in a directory, by default .ipython. There, all
5051 config files have normal looking names (not .names)
5055 config files have normal looking names (not .names)
5052
5056
5053 * Version 0.0.6 Released first to Lucas and Archie as a test
5057 * Version 0.0.6 Released first to Lucas and Archie as a test
5054 run. Since it's the first 'semi-public' release, change version to
5058 run. Since it's the first 'semi-public' release, change version to
5055 > 0.0.6 for any changes now.
5059 > 0.0.6 for any changes now.
5056
5060
5057 * Stuff I had put in the ipplib.py changelog:
5061 * Stuff I had put in the ipplib.py changelog:
5058
5062
5059 Changes to InteractiveShell:
5063 Changes to InteractiveShell:
5060
5064
5061 - Made the usage message a parameter.
5065 - Made the usage message a parameter.
5062
5066
5063 - Require the name of the shell variable to be given. It's a bit
5067 - Require the name of the shell variable to be given. It's a bit
5064 of a hack, but allows the name 'shell' not to be hardwire in the
5068 of a hack, but allows the name 'shell' not to be hardwire in the
5065 magic (@) handler, which is problematic b/c it requires
5069 magic (@) handler, which is problematic b/c it requires
5066 polluting the global namespace with 'shell'. This in turn is
5070 polluting the global namespace with 'shell'. This in turn is
5067 fragile: if a user redefines a variable called shell, things
5071 fragile: if a user redefines a variable called shell, things
5068 break.
5072 break.
5069
5073
5070 - magic @: all functions available through @ need to be defined
5074 - magic @: all functions available through @ need to be defined
5071 as magic_<name>, even though they can be called simply as
5075 as magic_<name>, even though they can be called simply as
5072 @<name>. This allows the special command @magic to gather
5076 @<name>. This allows the special command @magic to gather
5073 information automatically about all existing magic functions,
5077 information automatically about all existing magic functions,
5074 even if they are run-time user extensions, by parsing the shell
5078 even if they are run-time user extensions, by parsing the shell
5075 instance __dict__ looking for special magic_ names.
5079 instance __dict__ looking for special magic_ names.
5076
5080
5077 - mainloop: added *two* local namespace parameters. This allows
5081 - mainloop: added *two* local namespace parameters. This allows
5078 the class to differentiate between parameters which were there
5082 the class to differentiate between parameters which were there
5079 before and after command line initialization was processed. This
5083 before and after command line initialization was processed. This
5080 way, later @who can show things loaded at startup by the
5084 way, later @who can show things loaded at startup by the
5081 user. This trick was necessary to make session saving/reloading
5085 user. This trick was necessary to make session saving/reloading
5082 really work: ideally after saving/exiting/reloading a session,
5086 really work: ideally after saving/exiting/reloading a session,
5083 *everythin* should look the same, including the output of @who. I
5087 *everythin* should look the same, including the output of @who. I
5084 was only able to make this work with this double namespace
5088 was only able to make this work with this double namespace
5085 trick.
5089 trick.
5086
5090
5087 - added a header to the logfile which allows (almost) full
5091 - added a header to the logfile which allows (almost) full
5088 session restoring.
5092 session restoring.
5089
5093
5090 - prepend lines beginning with @ or !, with a and log
5094 - prepend lines beginning with @ or !, with a and log
5091 them. Why? !lines: may be useful to know what you did @lines:
5095 them. Why? !lines: may be useful to know what you did @lines:
5092 they may affect session state. So when restoring a session, at
5096 they may affect session state. So when restoring a session, at
5093 least inform the user of their presence. I couldn't quite get
5097 least inform the user of their presence. I couldn't quite get
5094 them to properly re-execute, but at least the user is warned.
5098 them to properly re-execute, but at least the user is warned.
5095
5099
5096 * Started ChangeLog.
5100 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now