##// END OF EJS Templates
-iplib.py: added InteractiveShell.getapi(). New magics should be...
vivainio -
Show More
@@ -1,2839 +1,2866 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 1089 2006-01-27 19:04:59Z vivainio $"""
4 $Id: Magic.py 1090 2006-01-27 21:24:05Z 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\\
2670 %store foo >>a.txt - Append value of foo to file a.txt\\
2669
2671
2670 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
2671 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.
2672
2674
2673 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
2674 python types can be safely %stored.
2676 python types can be safely %stored.
2675 """
2677 """
2676
2678
2677 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2679 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2680 args = argsl.split(None,1)
2681 ip = self.getapi()
2678 # delete
2682 # delete
2679 if opts.has_key('d'):
2683 if opts.has_key('d'):
2680 try:
2684 try:
2681 todel = args[0]
2685 todel = args[0]
2682 except IndexError:
2686 except IndexError:
2683 error('You must provide the variable to forget')
2687 error('You must provide the variable to forget')
2684 else:
2688 else:
2685 try:
2689 try:
2686 del self.shell.persist['S:' + todel]
2690 del self.shell.persist['S:' + todel]
2687 except:
2691 except:
2688 error("Can't delete variable '%s'" % todel)
2692 error("Can't delete variable '%s'" % todel)
2689 # reset
2693 # reset
2690 elif opts.has_key('r'):
2694 elif opts.has_key('r'):
2691 for k in self.shell.persist.keys():
2695 for k in self.shell.persist.keys():
2692 if k.startswith('S:'):
2696 if k.startswith('S:'):
2693 del self.shell.persist[k]
2697 del self.shell.persist[k]
2694
2698
2695 # run without arguments -> list variables & values
2699 # run without arguments -> list variables & values
2696 elif not args:
2700 elif not args:
2697 vars = [v[2:] for v in self.shell.persist.keys()
2701 vars = [v[2:] for v in self.shell.persist.keys()
2698 if v.startswith('S:')]
2702 if v.startswith('S:')]
2699 vars.sort()
2703 vars.sort()
2700 if vars:
2704 if vars:
2701 size = max(map(len,vars))
2705 size = max(map(len,vars))
2702 else:
2706 else:
2703 size = 0
2707 size = 0
2704
2708
2705 print 'Stored variables and their in-memory values:'
2709 print 'Stored variables and their in-memory values:'
2706 fmt = '%-'+str(size)+'s -> %s'
2710 fmt = '%-'+str(size)+'s -> %s'
2707 get = self.shell.user_ns.get
2711 get = self.shell.user_ns.get
2708 for var in vars:
2712 for var in vars:
2709 # print 30 first characters from every var
2713 # print 30 first characters from every var
2710 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2714 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2711
2715
2712 # default action - store the variable
2716 # default action - store the variable
2713 else:
2717 else:
2718 # %store foo >file.txt or >>file.txt
2719 if len(args) > 1 and args[1].startswith('>'):
2720 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2721 if args[1].startswith('>>'):
2722 fil = open(fnam,'a')
2723 else:
2724 fil = open(fnam,'w')
2725 obj = ip.ev(args[0])
2726 print "Writing '%s' (%s) to file '%s'." % (args[0],
2727 obj.__class__.__name__, fnam)
2728
2729
2730 if not isinstance (obj,basestring):
2731 pprint(obj,fil)
2732 else:
2733 fil.write(obj)
2734 if not obj.endswith('\n'):
2735 fil.write('\n')
2736
2737 fil.close()
2738 return
2739
2740 # %store foo
2714 obj = self.shell.user_ns[args[0] ]
2741 obj = self.shell.user_ns[args[0] ]
2715 if isinstance(inspect.getmodule(obj), FakeModule):
2742 if isinstance(inspect.getmodule(obj), FakeModule):
2716 print textwrap.dedent("""\
2743 print textwrap.dedent("""\
2717 Warning:%s is %s
2744 Warning:%s is %s
2718 Proper storage of interactively declared classes (or instances
2745 Proper storage of interactively declared classes (or instances
2719 of those classes) is not possible! Only instances
2746 of those classes) is not possible! Only instances
2720 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.
2721 """ % (args[0], obj) )
2748 """ % (args[0], obj) )
2722 return
2749 return
2723 pickled = pickle.dumps(obj)
2750 pickled = pickle.dumps(obj)
2724 self.shell.persist[ 'S:' + args[0] ] = pickled
2751 self.shell.persist[ 'S:' + args[0] ] = pickled
2725 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2752 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2726
2753
2727 def magic_bookmark(self, parameter_s=''):
2754 def magic_bookmark(self, parameter_s=''):
2728 """Manage IPython's bookmark system.
2755 """Manage IPython's bookmark system.
2729
2756
2730 %bookmark <name> - set bookmark to current dir
2757 %bookmark <name> - set bookmark to current dir
2731 %bookmark <name> <dir> - set bookmark to <dir>
2758 %bookmark <name> <dir> - set bookmark to <dir>
2732 %bookmark -l - list all bookmarks
2759 %bookmark -l - list all bookmarks
2733 %bookmark -d <name> - remove bookmark
2760 %bookmark -d <name> - remove bookmark
2734 %bookmark -r - remove all bookmarks
2761 %bookmark -r - remove all bookmarks
2735
2762
2736 You can later on access a bookmarked folder with:
2763 You can later on access a bookmarked folder with:
2737 %cd -b <name>
2764 %cd -b <name>
2738 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
2739 there is such a bookmark defined.
2766 there is such a bookmark defined.
2740
2767
2741 Your bookmarks persist through IPython sessions, but they are
2768 Your bookmarks persist through IPython sessions, but they are
2742 associated with each profile."""
2769 associated with each profile."""
2743
2770
2744 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2771 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2745 if len(args) > 2:
2772 if len(args) > 2:
2746 error('You can only give at most two arguments')
2773 error('You can only give at most two arguments')
2747 return
2774 return
2748
2775
2749 bkms = self.shell.persist.get('bookmarks',{})
2776 bkms = self.shell.persist.get('bookmarks',{})
2750
2777
2751 if opts.has_key('d'):
2778 if opts.has_key('d'):
2752 try:
2779 try:
2753 todel = args[0]
2780 todel = args[0]
2754 except IndexError:
2781 except IndexError:
2755 error('You must provide a bookmark to delete')
2782 error('You must provide a bookmark to delete')
2756 else:
2783 else:
2757 try:
2784 try:
2758 del bkms[todel]
2785 del bkms[todel]
2759 except:
2786 except:
2760 error("Can't delete bookmark '%s'" % todel)
2787 error("Can't delete bookmark '%s'" % todel)
2761 elif opts.has_key('r'):
2788 elif opts.has_key('r'):
2762 bkms = {}
2789 bkms = {}
2763 elif opts.has_key('l'):
2790 elif opts.has_key('l'):
2764 bks = bkms.keys()
2791 bks = bkms.keys()
2765 bks.sort()
2792 bks.sort()
2766 if bks:
2793 if bks:
2767 size = max(map(len,bks))
2794 size = max(map(len,bks))
2768 else:
2795 else:
2769 size = 0
2796 size = 0
2770 fmt = '%-'+str(size)+'s -> %s'
2797 fmt = '%-'+str(size)+'s -> %s'
2771 print 'Current bookmarks:'
2798 print 'Current bookmarks:'
2772 for bk in bks:
2799 for bk in bks:
2773 print fmt % (bk,bkms[bk])
2800 print fmt % (bk,bkms[bk])
2774 else:
2801 else:
2775 if not args:
2802 if not args:
2776 error("You must specify the bookmark name")
2803 error("You must specify the bookmark name")
2777 elif len(args)==1:
2804 elif len(args)==1:
2778 bkms[args[0]] = os.getcwd()
2805 bkms[args[0]] = os.getcwd()
2779 elif len(args)==2:
2806 elif len(args)==2:
2780 bkms[args[0]] = args[1]
2807 bkms[args[0]] = args[1]
2781 self.shell.persist['bookmarks'] = bkms
2808 self.shell.persist['bookmarks'] = bkms
2782
2809
2783 def magic_pycat(self, parameter_s=''):
2810 def magic_pycat(self, parameter_s=''):
2784 """Show a syntax-highlighted file through a pager.
2811 """Show a syntax-highlighted file through a pager.
2785
2812
2786 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
2787 to be Python source and will show it with syntax highlighting. """
2814 to be Python source and will show it with syntax highlighting. """
2788
2815
2789 filename = get_py_filename(parameter_s)
2816 filename = get_py_filename(parameter_s)
2790 page(self.shell.pycolorize(file_read(filename)),
2817 page(self.shell.pycolorize(file_read(filename)),
2791 screen_lines=self.shell.rc.screen_length)
2818 screen_lines=self.shell.rc.screen_length)
2792
2819
2793 def magic_cpaste(self, parameter_s=''):
2820 def magic_cpaste(self, parameter_s=''):
2794 """Allows you to paste & execute a pre-formatted code block from
2821 """Allows you to paste & execute a pre-formatted code block from
2795 clipboard.
2822 clipboard.
2796
2823
2797 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
2798 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2825 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2799 is the new sentinel for this operation)
2826 is the new sentinel for this operation)
2800
2827
2801 The block is dedented prior to execution to enable execution of
2828 The block is dedented prior to execution to enable execution of
2802 method definitions. The executed block is also assigned to variable
2829 method definitions. The executed block is also assigned to variable
2803 named 'pasted_block' for later editing with '%edit pasted_block'.
2830 named 'pasted_block' for later editing with '%edit pasted_block'.
2804
2831
2805 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'.
2806 This assigns the pasted block to variable 'foo' as string, without
2833 This assigns the pasted block to variable 'foo' as string, without
2807 dedenting or executing it.
2834 dedenting or executing it.
2808
2835
2809 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).
2810 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
2811 will be what was just pasted.
2838 will be what was just pasted.
2812
2839
2813 IPython statements (magics, shell escapes) are not supported (yet).
2840 IPython statements (magics, shell escapes) are not supported (yet).
2814 """
2841 """
2815 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2842 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2816 par = args.strip()
2843 par = args.strip()
2817 sentinel = opts.get('s','--')
2844 sentinel = opts.get('s','--')
2818
2845
2819 from IPython import iplib
2846 from IPython import iplib
2820 lines = []
2847 lines = []
2821 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
2822 while 1:
2849 while 1:
2823 l = iplib.raw_input_original(':')
2850 l = iplib.raw_input_original(':')
2824 if l ==sentinel:
2851 if l ==sentinel:
2825 break
2852 break
2826 lines.append(l)
2853 lines.append(l)
2827 block = "\n".join(lines)
2854 block = "\n".join(lines) + '\n'
2828 #print "block:\n",block
2855 #print "block:\n",block
2829 if not par:
2856 if not par:
2830 b = textwrap.dedent(block)
2857 b = textwrap.dedent(block)
2831 exec b in self.user_ns
2858 exec b in self.user_ns
2832 self.user_ns['pasted_block'] = b
2859 self.user_ns['pasted_block'] = b
2833 else:
2860 else:
2834 self.user_ns[par] = block
2861 self.user_ns[par] = block
2835 print "Block assigned to '%s'" % par
2862 print "Block assigned to '%s'" % par
2836
2863
2837
2864
2838
2865
2839 # end Magic
2866 # end Magic
@@ -1,2251 +1,2263 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.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1089 2006-01-27 19:04:59Z vivainio $
9 $Id: iplib.py 1090 2006-01-27 21:24:05Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77 import IPython.ipapi
78
78
79 # Globals
79 # Globals
80
80
81 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
82 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
83 raw_input_original = raw_input
83 raw_input_original = raw_input
84
84
85 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
93
93
94 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
95 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
96
96
97 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
98 if ini_spaces:
98 if ini_spaces:
99 return ini_spaces.end()
99 return ini_spaces.end()
100 else:
100 else:
101 return 0
101 return 0
102
102
103 def softspace(file, newvalue):
103 def softspace(file, newvalue):
104 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
105
105
106 oldvalue = 0
106 oldvalue = 0
107 try:
107 try:
108 oldvalue = file.softspace
108 oldvalue = file.softspace
109 except AttributeError:
109 except AttributeError:
110 pass
110 pass
111 try:
111 try:
112 file.softspace = newvalue
112 file.softspace = newvalue
113 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
114 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
115 pass
115 pass
116 return oldvalue
116 return oldvalue
117
117
118
118
119 #****************************************************************************
119 #****************************************************************************
120 # Local use exceptions
120 # Local use exceptions
121 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
122
122
123
123
124 #****************************************************************************
124 #****************************************************************************
125 # Local use classes
125 # Local use classes
126 class Bunch: pass
126 class Bunch: pass
127
127
128 class Undefined: pass
128 class Undefined: pass
129
129
130 class InputList(list):
130 class InputList(list):
131 """Class to store user input.
131 """Class to store user input.
132
132
133 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
134 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
135
135
136 exec In[4:7]
136 exec In[4:7]
137
137
138 or
138 or
139
139
140 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
141
141
142 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
143 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
144
144
145 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
146 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
147
147
148 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
149 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
150 self.last_syntax_error = None
150 self.last_syntax_error = None
151
151
152 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
153 self.last_syntax_error = value
153 self.last_syntax_error = value
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
155
155
156 def clear_err_state(self):
156 def clear_err_state(self):
157 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
158 e = self.last_syntax_error
158 e = self.last_syntax_error
159 self.last_syntax_error = None
159 self.last_syntax_error = None
160 return e
160 return e
161
161
162 #****************************************************************************
162 #****************************************************************************
163 # Main IPython class
163 # Main IPython class
164
164
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 #
169 #
170 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
171 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
172 # chainsaw branch.
172 # chainsaw branch.
173
173
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class, to prevent clashes.
176 # class, to prevent clashes.
177
177
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.value']
181 # 'self.value']
182
182
183 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
184 """An enhanced console for Python."""
184 """An enhanced console for Python."""
185
185
186 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
187 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
188 isthreaded = False
188 isthreaded = False
189
189
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
192 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
193
193
194 # log system
194 # log system
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
196
196
197 # Produce a public API instance
197 # Produce a public API instance
198
198
199 self.api = IPython.ipapi.IPApi(self)
199 self.api = IPython.ipapi.IPApi(self)
200
200
201 # some minimal strict typechecks. For some core data structures, I
201 # some minimal strict typechecks. For some core data structures, I
202 # want actual basic python types, not just anything that looks like
202 # want actual basic python types, not just anything that looks like
203 # one. This is especially true for namespaces.
203 # one. This is especially true for namespaces.
204 for ns in (user_ns,user_global_ns):
204 for ns in (user_ns,user_global_ns):
205 if ns is not None and type(ns) != types.DictType:
205 if ns is not None and type(ns) != types.DictType:
206 raise TypeError,'namespace must be a dictionary'
206 raise TypeError,'namespace must be a dictionary'
207
207
208 # Job manager (for jobs run as background threads)
208 # Job manager (for jobs run as background threads)
209 self.jobs = BackgroundJobManager()
209 self.jobs = BackgroundJobManager()
210
210
211 # track which builtins we add, so we can clean up later
211 # track which builtins we add, so we can clean up later
212 self.builtins_added = {}
212 self.builtins_added = {}
213 # This method will add the necessary builtins for operation, but
213 # This method will add the necessary builtins for operation, but
214 # tracking what it did via the builtins_added dict.
214 # tracking what it did via the builtins_added dict.
215 self.add_builtins()
215 self.add_builtins()
216
216
217 # Do the intuitively correct thing for quit/exit: we remove the
217 # Do the intuitively correct thing for quit/exit: we remove the
218 # builtins if they exist, and our own magics will deal with this
218 # builtins if they exist, and our own magics will deal with this
219 try:
219 try:
220 del __builtin__.exit, __builtin__.quit
220 del __builtin__.exit, __builtin__.quit
221 except AttributeError:
221 except AttributeError:
222 pass
222 pass
223
223
224 # Store the actual shell's name
224 # Store the actual shell's name
225 self.name = name
225 self.name = name
226
226
227 # We need to know whether the instance is meant for embedding, since
227 # We need to know whether the instance is meant for embedding, since
228 # global/local namespaces need to be handled differently in that case
228 # global/local namespaces need to be handled differently in that case
229 self.embedded = embedded
229 self.embedded = embedded
230
230
231 # command compiler
231 # command compiler
232 self.compile = codeop.CommandCompiler()
232 self.compile = codeop.CommandCompiler()
233
233
234 # User input buffer
234 # User input buffer
235 self.buffer = []
235 self.buffer = []
236
236
237 # Default name given in compilation of code
237 # Default name given in compilation of code
238 self.filename = '<ipython console>'
238 self.filename = '<ipython console>'
239
239
240 # Make an empty namespace, which extension writers can rely on both
240 # Make an empty namespace, which extension writers can rely on both
241 # existing and NEVER being used by ipython itself. This gives them a
241 # existing and NEVER being used by ipython itself. This gives them a
242 # convenient location for storing additional information and state
242 # convenient location for storing additional information and state
243 # their extensions may require, without fear of collisions with other
243 # their extensions may require, without fear of collisions with other
244 # ipython names that may develop later.
244 # ipython names that may develop later.
245 self.meta = Struct()
245 self.meta = Struct()
246
246
247 # Create the namespace where the user will operate. user_ns is
247 # Create the namespace where the user will operate. user_ns is
248 # normally the only one used, and it is passed to the exec calls as
248 # normally the only one used, and it is passed to the exec calls as
249 # the locals argument. But we do carry a user_global_ns namespace
249 # the locals argument. But we do carry a user_global_ns namespace
250 # given as the exec 'globals' argument, This is useful in embedding
250 # given as the exec 'globals' argument, This is useful in embedding
251 # situations where the ipython shell opens in a context where the
251 # situations where the ipython shell opens in a context where the
252 # distinction between locals and globals is meaningful.
252 # distinction between locals and globals is meaningful.
253
253
254 # FIXME. For some strange reason, __builtins__ is showing up at user
254 # FIXME. For some strange reason, __builtins__ is showing up at user
255 # level as a dict instead of a module. This is a manual fix, but I
255 # level as a dict instead of a module. This is a manual fix, but I
256 # should really track down where the problem is coming from. Alex
256 # should really track down where the problem is coming from. Alex
257 # Schmolck reported this problem first.
257 # Schmolck reported this problem first.
258
258
259 # A useful post by Alex Martelli on this topic:
259 # A useful post by Alex Martelli on this topic:
260 # Re: inconsistent value from __builtins__
260 # Re: inconsistent value from __builtins__
261 # Von: Alex Martelli <aleaxit@yahoo.com>
261 # Von: Alex Martelli <aleaxit@yahoo.com>
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
263 # Gruppen: comp.lang.python
263 # Gruppen: comp.lang.python
264
264
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
267 # > <type 'dict'>
267 # > <type 'dict'>
268 # > >>> print type(__builtins__)
268 # > >>> print type(__builtins__)
269 # > <type 'module'>
269 # > <type 'module'>
270 # > Is this difference in return value intentional?
270 # > Is this difference in return value intentional?
271
271
272 # Well, it's documented that '__builtins__' can be either a dictionary
272 # Well, it's documented that '__builtins__' can be either a dictionary
273 # or a module, and it's been that way for a long time. Whether it's
273 # or a module, and it's been that way for a long time. Whether it's
274 # intentional (or sensible), I don't know. In any case, the idea is
274 # intentional (or sensible), I don't know. In any case, the idea is
275 # that if you need to access the built-in namespace directly, you
275 # that if you need to access the built-in namespace directly, you
276 # should start with "import __builtin__" (note, no 's') which will
276 # should start with "import __builtin__" (note, no 's') which will
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
278
278
279 if user_ns is None:
279 if user_ns is None:
280 # Set __name__ to __main__ to better match the behavior of the
280 # Set __name__ to __main__ to better match the behavior of the
281 # normal interpreter.
281 # normal interpreter.
282 user_ns = {'__name__' :'__main__',
282 user_ns = {'__name__' :'__main__',
283 '__builtins__' : __builtin__,
283 '__builtins__' : __builtin__,
284 }
284 }
285
285
286 if user_global_ns is None:
286 if user_global_ns is None:
287 user_global_ns = {}
287 user_global_ns = {}
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 # Set all default hooks, defined in the IPython.hooks module.
408 # Set all default hooks, defined in the IPython.hooks module.
409 hooks = IPython.hooks
409 hooks = IPython.hooks
410 for hook_name in hooks.__all__:
410 for hook_name in hooks.__all__:
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
413 #print "bound hook",hook_name
413 #print "bound hook",hook_name
414
414
415 # Flag to mark unconditional exit
415 # Flag to mark unconditional exit
416 self.exit_now = False
416 self.exit_now = False
417
417
418 self.usage_min = """\
418 self.usage_min = """\
419 An enhanced console for Python.
419 An enhanced console for Python.
420 Some of its features are:
420 Some of its features are:
421 - Readline support if the readline library is present.
421 - Readline support if the readline library is present.
422 - Tab completion in the local namespace.
422 - Tab completion in the local namespace.
423 - Logging of input, see command-line options.
423 - Logging of input, see command-line options.
424 - System shell escape via ! , eg !ls.
424 - System shell escape via ! , eg !ls.
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
426 - Keeps track of locally defined variables via %who, %whos.
426 - Keeps track of locally defined variables via %who, %whos.
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
428 """
428 """
429 if usage: self.usage = usage
429 if usage: self.usage = usage
430 else: self.usage = self.usage_min
430 else: self.usage = self.usage_min
431
431
432 # Storage
432 # Storage
433 self.rc = rc # This will hold all configuration information
433 self.rc = rc # This will hold all configuration information
434 self.pager = 'less'
434 self.pager = 'less'
435 # temporary files used for various purposes. Deleted at exit.
435 # temporary files used for various purposes. Deleted at exit.
436 self.tempfiles = []
436 self.tempfiles = []
437
437
438 # Keep track of readline usage (later set by init_readline)
438 # Keep track of readline usage (later set by init_readline)
439 self.has_readline = False
439 self.has_readline = False
440
440
441 # template for logfile headers. It gets resolved at runtime by the
441 # template for logfile headers. It gets resolved at runtime by the
442 # logstart method.
442 # logstart method.
443 self.loghead_tpl = \
443 self.loghead_tpl = \
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
446 #log# opts = %s
446 #log# opts = %s
447 #log# args = %s
447 #log# args = %s
448 #log# It is safe to make manual edits below here.
448 #log# It is safe to make manual edits below here.
449 #log#-----------------------------------------------------------------------
449 #log#-----------------------------------------------------------------------
450 """
450 """
451 # for pushd/popd management
451 # for pushd/popd management
452 try:
452 try:
453 self.home_dir = get_home_dir()
453 self.home_dir = get_home_dir()
454 except HomeDirError,msg:
454 except HomeDirError,msg:
455 fatal(msg)
455 fatal(msg)
456
456
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
458
458
459 # Functions to call the underlying shell.
459 # Functions to call the underlying shell.
460
460
461 # utility to expand user variables via Itpl
461 # utility to expand user variables via Itpl
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
463 self.user_ns))
463 self.user_ns))
464 # The first is similar to os.system, but it doesn't return a value,
464 # The first is similar to os.system, but it doesn't return a value,
465 # and it allows interpolation of variables in the user's namespace.
465 # and it allows interpolation of variables in the user's namespace.
466 self.system = lambda cmd: shell(self.var_expand(cmd),
466 self.system = lambda cmd: shell(self.var_expand(cmd),
467 header='IPython system call: ',
467 header='IPython system call: ',
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469 # These are for getoutput and getoutputerror:
469 # These are for getoutput and getoutputerror:
470 self.getoutput = lambda cmd: \
470 self.getoutput = lambda cmd: \
471 getoutput(self.var_expand(cmd),
471 getoutput(self.var_expand(cmd),
472 header='IPython system call: ',
472 header='IPython system call: ',
473 verbose=self.rc.system_verbose)
473 verbose=self.rc.system_verbose)
474 self.getoutputerror = lambda cmd: \
474 self.getoutputerror = lambda cmd: \
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
476 self.user_ns)),
476 self.user_ns)),
477 header='IPython system call: ',
477 header='IPython system call: ',
478 verbose=self.rc.system_verbose)
478 verbose=self.rc.system_verbose)
479
479
480 # RegExp for splitting line contents into pre-char//first
480 # RegExp for splitting line contents into pre-char//first
481 # word-method//rest. For clarity, each group in on one line.
481 # word-method//rest. For clarity, each group in on one line.
482
482
483 # WARNING: update the regexp if the above escapes are changed, as they
483 # WARNING: update the regexp if the above escapes are changed, as they
484 # are hardwired in.
484 # are hardwired in.
485
485
486 # Don't get carried away with trying to make the autocalling catch too
486 # Don't get carried away with trying to make the autocalling catch too
487 # much: it's better to be conservative rather than to trigger hidden
487 # much: it's better to be conservative rather than to trigger hidden
488 # evals() somewhere and end up causing side effects.
488 # evals() somewhere and end up causing side effects.
489
489
490 self.line_split = re.compile(r'^([\s*,;/])'
490 self.line_split = re.compile(r'^([\s*,;/])'
491 r'([\?\w\.]+\w*\s*)'
491 r'([\?\w\.]+\w*\s*)'
492 r'(\(?.*$)')
492 r'(\(?.*$)')
493
493
494 # Original re, keep around for a while in case changes break something
494 # Original re, keep around for a while in case changes break something
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
497 # r'(\(?.*$)')
497 # r'(\(?.*$)')
498
498
499 # RegExp to identify potential function names
499 # RegExp to identify potential function names
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501
501
502 # RegExp to exclude strings with this start from autocalling. In
502 # RegExp to exclude strings with this start from autocalling. In
503 # particular, all binary operators should be excluded, so that if foo
503 # particular, all binary operators should be excluded, so that if foo
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 # invalid. The characters '!=()' don't need to be checked for, as the
505 # invalid. The characters '!=()' don't need to be checked for, as the
506 # _prefilter routine explicitely does so, to catch direct calls and
506 # _prefilter routine explicitely does so, to catch direct calls and
507 # rebindings of existing names.
507 # rebindings of existing names.
508
508
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 # it affects the rest of the group in square brackets.
510 # it affects the rest of the group in square brackets.
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 '|^is |^not |^in |^and |^or ')
512 '|^is |^not |^in |^and |^or ')
513
513
514 # try to catch also methods for stuff in lists/tuples/dicts: off
514 # try to catch also methods for stuff in lists/tuples/dicts: off
515 # (experimental). For this to work, the line_split regexp would need
515 # (experimental). For this to work, the line_split regexp would need
516 # to be modified so it wouldn't break things at '['. That line is
516 # to be modified so it wouldn't break things at '['. That line is
517 # nasty enough that I shouldn't change it until I can test it _well_.
517 # nasty enough that I shouldn't change it until I can test it _well_.
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519
519
520 # keep track of where we started running (mainly for crash post-mortem)
520 # keep track of where we started running (mainly for crash post-mortem)
521 self.starting_dir = os.getcwd()
521 self.starting_dir = os.getcwd()
522
522
523 # Various switches which can be set
523 # Various switches which can be set
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 self.banner2 = banner2
526 self.banner2 = banner2
527
527
528 # TraceBack handlers:
528 # TraceBack handlers:
529
529
530 # Syntax error handler.
530 # Syntax error handler.
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532
532
533 # The interactive one is initialized with an offset, meaning we always
533 # The interactive one is initialized with an offset, meaning we always
534 # want to remove the topmost item in the traceback, which is our own
534 # want to remove the topmost item in the traceback, which is our own
535 # internal code. Valid modes: ['Plain','Context','Verbose']
535 # internal code. Valid modes: ['Plain','Context','Verbose']
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 color_scheme='NoColor',
537 color_scheme='NoColor',
538 tb_offset = 1)
538 tb_offset = 1)
539
539
540 # IPython itself shouldn't crash. This will produce a detailed
540 # IPython itself shouldn't crash. This will produce a detailed
541 # post-mortem if it does. But we only install the crash handler for
541 # post-mortem if it does. But we only install the crash handler for
542 # non-threaded shells, the threaded ones use a normal verbose reporter
542 # non-threaded shells, the threaded ones use a normal verbose reporter
543 # and lose the crash handler. This is because exceptions in the main
543 # and lose the crash handler. This is because exceptions in the main
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 # and there's no point in printing crash dumps for every user exception.
545 # and there's no point in printing crash dumps for every user exception.
546 if self.isthreaded:
546 if self.isthreaded:
547 sys.excepthook = ultraTB.FormattedTB()
547 sys.excepthook = ultraTB.FormattedTB()
548 else:
548 else:
549 from IPython import CrashHandler
549 from IPython import CrashHandler
550 sys.excepthook = CrashHandler.CrashHandler(self)
550 sys.excepthook = CrashHandler.CrashHandler(self)
551
551
552 # The instance will store a pointer to this, so that runtime code
552 # The instance will store a pointer to this, so that runtime code
553 # (such as magics) can access it. This is because during the
553 # (such as magics) can access it. This is because during the
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
555 # frameworks).
555 # frameworks).
556 self.sys_excepthook = sys.excepthook
556 self.sys_excepthook = sys.excepthook
557
557
558 # and add any custom exception handlers the user may have specified
558 # and add any custom exception handlers the user may have specified
559 self.set_custom_exc(*custom_exceptions)
559 self.set_custom_exc(*custom_exceptions)
560
560
561 # Object inspector
561 # Object inspector
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
563 PyColorize.ANSICodeColors,
563 PyColorize.ANSICodeColors,
564 'NoColor')
564 'NoColor')
565 # indentation management
565 # indentation management
566 self.autoindent = False
566 self.autoindent = False
567 self.indent_current_nsp = 0
567 self.indent_current_nsp = 0
568
568
569 # Make some aliases automatically
569 # Make some aliases automatically
570 # Prepare list of shell aliases to auto-define
570 # Prepare list of shell aliases to auto-define
571 if os.name == 'posix':
571 if os.name == 'posix':
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 'mv mv -i','rm rm -i','cp cp -i',
573 'mv mv -i','rm rm -i','cp cp -i',
574 'cat cat','less less','clear clear',
574 'cat cat','less less','clear clear',
575 # a better ls
575 # a better ls
576 'ls ls -F',
576 'ls ls -F',
577 # long ls
577 # long ls
578 'll ls -lF',
578 'll ls -lF',
579 # color ls
579 # color ls
580 'lc ls -F -o --color',
580 'lc ls -F -o --color',
581 # ls normal files only
581 # ls normal files only
582 'lf ls -F -o --color %l | grep ^-',
582 'lf ls -F -o --color %l | grep ^-',
583 # ls symbolic links
583 # ls symbolic links
584 'lk ls -F -o --color %l | grep ^l',
584 'lk ls -F -o --color %l | grep ^l',
585 # directories or links to directories,
585 # directories or links to directories,
586 'ldir ls -F -o --color %l | grep /$',
586 'ldir ls -F -o --color %l | grep /$',
587 # things which are executable
587 # things which are executable
588 'lx ls -F -o --color %l | grep ^-..x',
588 'lx ls -F -o --color %l | grep ^-..x',
589 )
589 )
590 elif os.name in ['nt','dos']:
590 elif os.name in ['nt','dos']:
591 auto_alias = ('dir dir /on', 'ls dir /on',
591 auto_alias = ('dir dir /on', 'ls dir /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
593 'mkdir mkdir','rmdir rmdir','echo echo',
593 'mkdir mkdir','rmdir rmdir','echo echo',
594 'ren ren','cls cls','copy copy')
594 'ren ren','cls cls','copy copy')
595 else:
595 else:
596 auto_alias = ()
596 auto_alias = ()
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
598 # Call the actual (public) initializer
598 # Call the actual (public) initializer
599 self.init_auto_alias()
599 self.init_auto_alias()
600 # end __init__
600 # end __init__
601
601
602 def post_config_initialization(self):
602 def post_config_initialization(self):
603 """Post configuration init method
603 """Post configuration init method
604
604
605 This is called after the configuration files have been processed to
605 This is called after the configuration files have been processed to
606 'finalize' the initialization."""
606 'finalize' the initialization."""
607
607
608 rc = self.rc
608 rc = self.rc
609
609
610 # Load readline proper
610 # Load readline proper
611 if rc.readline:
611 if rc.readline:
612 self.init_readline()
612 self.init_readline()
613
613
614 # local shortcut, this is used a LOT
614 # local shortcut, this is used a LOT
615 self.log = self.logger.log
615 self.log = self.logger.log
616
616
617 # Initialize cache, set in/out prompts and printing system
617 # Initialize cache, set in/out prompts and printing system
618 self.outputcache = CachedOutput(self,
618 self.outputcache = CachedOutput(self,
619 rc.cache_size,
619 rc.cache_size,
620 rc.pprint,
620 rc.pprint,
621 input_sep = rc.separate_in,
621 input_sep = rc.separate_in,
622 output_sep = rc.separate_out,
622 output_sep = rc.separate_out,
623 output_sep2 = rc.separate_out2,
623 output_sep2 = rc.separate_out2,
624 ps1 = rc.prompt_in1,
624 ps1 = rc.prompt_in1,
625 ps2 = rc.prompt_in2,
625 ps2 = rc.prompt_in2,
626 ps_out = rc.prompt_out,
626 ps_out = rc.prompt_out,
627 pad_left = rc.prompts_pad_left)
627 pad_left = rc.prompts_pad_left)
628
628
629 # user may have over-ridden the default print hook:
629 # user may have over-ridden the default print hook:
630 try:
630 try:
631 self.outputcache.__class__.display = self.hooks.display
631 self.outputcache.__class__.display = self.hooks.display
632 except AttributeError:
632 except AttributeError:
633 pass
633 pass
634
634
635 # I don't like assigning globally to sys, because it means when embedding
635 # I don't like assigning globally to sys, because it means when embedding
636 # instances, each embedded instance overrides the previous choice. But
636 # instances, each embedded instance overrides the previous choice. But
637 # sys.displayhook seems to be called internally by exec, so I don't see a
637 # sys.displayhook seems to be called internally by exec, so I don't see a
638 # way around it.
638 # way around it.
639 sys.displayhook = self.outputcache
639 sys.displayhook = self.outputcache
640
640
641 # Set user colors (don't do it in the constructor above so that it
641 # Set user colors (don't do it in the constructor above so that it
642 # doesn't crash if colors option is invalid)
642 # doesn't crash if colors option is invalid)
643 self.magic_colors(rc.colors)
643 self.magic_colors(rc.colors)
644
644
645 # Set calling of pdb on exceptions
645 # Set calling of pdb on exceptions
646 self.call_pdb = rc.pdb
646 self.call_pdb = rc.pdb
647
647
648 # Load user aliases
648 # Load user aliases
649 for alias in rc.alias:
649 for alias in rc.alias:
650 self.magic_alias(alias)
650 self.magic_alias(alias)
651
651
652 # dynamic data that survives through sessions
652 # dynamic data that survives through sessions
653 # XXX make the filename a config option?
653 # XXX make the filename a config option?
654 persist_base = 'persist'
654 persist_base = 'persist'
655 if rc.profile:
655 if rc.profile:
656 persist_base += '_%s' % rc.profile
656 persist_base += '_%s' % rc.profile
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
658
658
659 try:
659 try:
660 self.persist = pickle.load(file(self.persist_fname))
660 self.persist = pickle.load(file(self.persist_fname))
661 except:
661 except:
662 self.persist = {}
662 self.persist = {}
663
663
664
664
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
666 try:
666 try:
667 obj = pickle.loads(value)
667 obj = pickle.loads(value)
668 except:
668 except:
669
669
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
671 print "The error was:",sys.exc_info()[0]
671 print "The error was:",sys.exc_info()[0]
672 continue
672 continue
673
673
674
674
675 self.user_ns[key] = obj
675 self.user_ns[key] = obj
676
676
677 def add_builtins(self):
677 def add_builtins(self):
678 """Store ipython references into the builtin namespace.
678 """Store ipython references into the builtin namespace.
679
679
680 Some parts of ipython operate via builtins injected here, which hold a
680 Some parts of ipython operate via builtins injected here, which hold a
681 reference to IPython itself."""
681 reference to IPython itself."""
682
682
683 builtins_new = dict(__IPYTHON__ = self,
683 builtins_new = dict(__IPYTHON__ = self,
684 ip_set_hook = self.set_hook,
684 ip_set_hook = self.set_hook,
685 jobs = self.jobs,
685 jobs = self.jobs,
686 ipmagic = self.ipmagic,
686 ipmagic = self.ipmagic,
687 ipalias = self.ipalias,
687 ipalias = self.ipalias,
688 ipsystem = self.ipsystem,
688 ipsystem = self.ipsystem,
689 )
689 )
690 for biname,bival in builtins_new.items():
690 for biname,bival in builtins_new.items():
691 try:
691 try:
692 # store the orignal value so we can restore it
692 # store the orignal value so we can restore it
693 self.builtins_added[biname] = __builtin__.__dict__[biname]
693 self.builtins_added[biname] = __builtin__.__dict__[biname]
694 except KeyError:
694 except KeyError:
695 # or mark that it wasn't defined, and we'll just delete it at
695 # or mark that it wasn't defined, and we'll just delete it at
696 # cleanup
696 # cleanup
697 self.builtins_added[biname] = Undefined
697 self.builtins_added[biname] = Undefined
698 __builtin__.__dict__[biname] = bival
698 __builtin__.__dict__[biname] = bival
699
699
700 # Keep in the builtins a flag for when IPython is active. We set it
700 # Keep in the builtins a flag for when IPython is active. We set it
701 # with setdefault so that multiple nested IPythons don't clobber one
701 # with setdefault so that multiple nested IPythons don't clobber one
702 # another. Each will increase its value by one upon being activated,
702 # another. Each will increase its value by one upon being activated,
703 # which also gives us a way to determine the nesting level.
703 # which also gives us a way to determine the nesting level.
704 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
704 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
705
705
706 def clean_builtins(self):
706 def clean_builtins(self):
707 """Remove any builtins which might have been added by add_builtins, or
707 """Remove any builtins which might have been added by add_builtins, or
708 restore overwritten ones to their previous values."""
708 restore overwritten ones to their previous values."""
709 for biname,bival in self.builtins_added.items():
709 for biname,bival in self.builtins_added.items():
710 if bival is Undefined:
710 if bival is Undefined:
711 del __builtin__.__dict__[biname]
711 del __builtin__.__dict__[biname]
712 else:
712 else:
713 __builtin__.__dict__[biname] = bival
713 __builtin__.__dict__[biname] = bival
714 self.builtins_added.clear()
714 self.builtins_added.clear()
715
715
716 def set_hook(self,name,hook, priority = 50):
716 def set_hook(self,name,hook, priority = 50):
717 """set_hook(name,hook) -> sets an internal IPython hook.
717 """set_hook(name,hook) -> sets an internal IPython hook.
718
718
719 IPython exposes some of its internal API as user-modifiable hooks. By
719 IPython exposes some of its internal API as user-modifiable hooks. By
720 adding your function to one of these hooks, you can modify IPython's
720 adding your function to one of these hooks, you can modify IPython's
721 behavior to call at runtime your own routines."""
721 behavior to call at runtime your own routines."""
722
722
723 # At some point in the future, this should validate the hook before it
723 # At some point in the future, this should validate the hook before it
724 # accepts it. Probably at least check that the hook takes the number
724 # accepts it. Probably at least check that the hook takes the number
725 # of args it's supposed to.
725 # of args it's supposed to.
726 dp = getattr(self.hooks, name, None)
726 dp = getattr(self.hooks, name, None)
727 if name not in IPython.hooks.__all__:
727 if name not in IPython.hooks.__all__:
728 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
728 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
729 if not dp:
729 if not dp:
730 dp = IPython.hooks.CommandChainDispatcher()
730 dp = IPython.hooks.CommandChainDispatcher()
731
731
732 f = new.instancemethod(hook,self,self.__class__)
732 f = new.instancemethod(hook,self,self.__class__)
733 try:
733 try:
734 dp.add(f,priority)
734 dp.add(f,priority)
735 except AttributeError:
735 except AttributeError:
736 # it was not commandchain, plain old func - replace
736 # it was not commandchain, plain old func - replace
737 dp = f
737 dp = f
738
738
739 setattr(self.hooks,name, dp)
739 setattr(self.hooks,name, dp)
740
740
741
741
742 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
742 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
743
743
744 def set_custom_exc(self,exc_tuple,handler):
744 def set_custom_exc(self,exc_tuple,handler):
745 """set_custom_exc(exc_tuple,handler)
745 """set_custom_exc(exc_tuple,handler)
746
746
747 Set a custom exception handler, which will be called if any of the
747 Set a custom exception handler, which will be called if any of the
748 exceptions in exc_tuple occur in the mainloop (specifically, in the
748 exceptions in exc_tuple occur in the mainloop (specifically, in the
749 runcode() method.
749 runcode() method.
750
750
751 Inputs:
751 Inputs:
752
752
753 - exc_tuple: a *tuple* of valid exceptions to call the defined
753 - exc_tuple: a *tuple* of valid exceptions to call the defined
754 handler for. It is very important that you use a tuple, and NOT A
754 handler for. It is very important that you use a tuple, and NOT A
755 LIST here, because of the way Python's except statement works. If
755 LIST here, because of the way Python's except statement works. If
756 you only want to trap a single exception, use a singleton tuple:
756 you only want to trap a single exception, use a singleton tuple:
757
757
758 exc_tuple == (MyCustomException,)
758 exc_tuple == (MyCustomException,)
759
759
760 - handler: this must be defined as a function with the following
760 - handler: this must be defined as a function with the following
761 basic interface: def my_handler(self,etype,value,tb).
761 basic interface: def my_handler(self,etype,value,tb).
762
762
763 This will be made into an instance method (via new.instancemethod)
763 This will be made into an instance method (via new.instancemethod)
764 of IPython itself, and it will be called if any of the exceptions
764 of IPython itself, and it will be called if any of the exceptions
765 listed in the exc_tuple are caught. If the handler is None, an
765 listed in the exc_tuple are caught. If the handler is None, an
766 internal basic one is used, which just prints basic info.
766 internal basic one is used, which just prints basic info.
767
767
768 WARNING: by putting in your own exception handler into IPython's main
768 WARNING: by putting in your own exception handler into IPython's main
769 execution loop, you run a very good chance of nasty crashes. This
769 execution loop, you run a very good chance of nasty crashes. This
770 facility should only be used if you really know what you are doing."""
770 facility should only be used if you really know what you are doing."""
771
771
772 assert type(exc_tuple)==type(()) , \
772 assert type(exc_tuple)==type(()) , \
773 "The custom exceptions must be given AS A TUPLE."
773 "The custom exceptions must be given AS A TUPLE."
774
774
775 def dummy_handler(self,etype,value,tb):
775 def dummy_handler(self,etype,value,tb):
776 print '*** Simple custom exception handler ***'
776 print '*** Simple custom exception handler ***'
777 print 'Exception type :',etype
777 print 'Exception type :',etype
778 print 'Exception value:',value
778 print 'Exception value:',value
779 print 'Traceback :',tb
779 print 'Traceback :',tb
780 print 'Source code :','\n'.join(self.buffer)
780 print 'Source code :','\n'.join(self.buffer)
781
781
782 if handler is None: handler = dummy_handler
782 if handler is None: handler = dummy_handler
783
783
784 self.CustomTB = new.instancemethod(handler,self,self.__class__)
784 self.CustomTB = new.instancemethod(handler,self,self.__class__)
785 self.custom_exceptions = exc_tuple
785 self.custom_exceptions = exc_tuple
786
786
787 def set_custom_completer(self,completer,pos=0):
787 def set_custom_completer(self,completer,pos=0):
788 """set_custom_completer(completer,pos=0)
788 """set_custom_completer(completer,pos=0)
789
789
790 Adds a new custom completer function.
790 Adds a new custom completer function.
791
791
792 The position argument (defaults to 0) is the index in the completers
792 The position argument (defaults to 0) is the index in the completers
793 list where you want the completer to be inserted."""
793 list where you want the completer to be inserted."""
794
794
795 newcomp = new.instancemethod(completer,self.Completer,
795 newcomp = new.instancemethod(completer,self.Completer,
796 self.Completer.__class__)
796 self.Completer.__class__)
797 self.Completer.matchers.insert(pos,newcomp)
797 self.Completer.matchers.insert(pos,newcomp)
798
798
799 def _get_call_pdb(self):
799 def _get_call_pdb(self):
800 return self._call_pdb
800 return self._call_pdb
801
801
802 def _set_call_pdb(self,val):
802 def _set_call_pdb(self,val):
803
803
804 if val not in (0,1,False,True):
804 if val not in (0,1,False,True):
805 raise ValueError,'new call_pdb value must be boolean'
805 raise ValueError,'new call_pdb value must be boolean'
806
806
807 # store value in instance
807 # store value in instance
808 self._call_pdb = val
808 self._call_pdb = val
809
809
810 # notify the actual exception handlers
810 # notify the actual exception handlers
811 self.InteractiveTB.call_pdb = val
811 self.InteractiveTB.call_pdb = val
812 if self.isthreaded:
812 if self.isthreaded:
813 try:
813 try:
814 self.sys_excepthook.call_pdb = val
814 self.sys_excepthook.call_pdb = val
815 except:
815 except:
816 warn('Failed to activate pdb for threaded exception handler')
816 warn('Failed to activate pdb for threaded exception handler')
817
817
818 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
818 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
819 'Control auto-activation of pdb at exceptions')
819 'Control auto-activation of pdb at exceptions')
820
820
821
821
822 # These special functions get installed in the builtin namespace, to
822 # These special functions get installed in the builtin namespace, to
823 # provide programmatic (pure python) access to magics, aliases and system
823 # provide programmatic (pure python) access to magics, aliases and system
824 # calls. This is important for logging, user scripting, and more.
824 # calls. This is important for logging, user scripting, and more.
825
825
826 # We are basically exposing, via normal python functions, the three
826 # We are basically exposing, via normal python functions, the three
827 # mechanisms in which ipython offers special call modes (magics for
827 # mechanisms in which ipython offers special call modes (magics for
828 # internal control, aliases for direct system access via pre-selected
828 # internal control, aliases for direct system access via pre-selected
829 # names, and !cmd for calling arbitrary system commands).
829 # names, and !cmd for calling arbitrary system commands).
830
830
831 def ipmagic(self,arg_s):
831 def ipmagic(self,arg_s):
832 """Call a magic function by name.
832 """Call a magic function by name.
833
833
834 Input: a string containing the name of the magic function to call and any
834 Input: a string containing the name of the magic function to call and any
835 additional arguments to be passed to the magic.
835 additional arguments to be passed to the magic.
836
836
837 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
837 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
838 prompt:
838 prompt:
839
839
840 In[1]: %name -opt foo bar
840 In[1]: %name -opt foo bar
841
841
842 To call a magic without arguments, simply use ipmagic('name').
842 To call a magic without arguments, simply use ipmagic('name').
843
843
844 This provides a proper Python function to call IPython's magics in any
844 This provides a proper Python function to call IPython's magics in any
845 valid Python code you can type at the interpreter, including loops and
845 valid Python code you can type at the interpreter, including loops and
846 compound statements. It is added by IPython to the Python builtin
846 compound statements. It is added by IPython to the Python builtin
847 namespace upon initialization."""
847 namespace upon initialization."""
848
848
849 args = arg_s.split(' ',1)
849 args = arg_s.split(' ',1)
850 magic_name = args[0]
850 magic_name = args[0]
851 magic_name = magic_name.lstrip(self.ESC_MAGIC)
851 magic_name = magic_name.lstrip(self.ESC_MAGIC)
852
852
853 try:
853 try:
854 magic_args = args[1]
854 magic_args = args[1]
855 except IndexError:
855 except IndexError:
856 magic_args = ''
856 magic_args = ''
857 fn = getattr(self,'magic_'+magic_name,None)
857 fn = getattr(self,'magic_'+magic_name,None)
858 if fn is None:
858 if fn is None:
859 error("Magic function `%s` not found." % magic_name)
859 error("Magic function `%s` not found." % magic_name)
860 else:
860 else:
861 magic_args = self.var_expand(magic_args)
861 magic_args = self.var_expand(magic_args)
862 return fn(magic_args)
862 return fn(magic_args)
863
863
864 def ipalias(self,arg_s):
864 def ipalias(self,arg_s):
865 """Call an alias by name.
865 """Call an alias by name.
866
866
867 Input: a string containing the name of the alias to call and any
867 Input: a string containing the name of the alias to call and any
868 additional arguments to be passed to the magic.
868 additional arguments to be passed to the magic.
869
869
870 ipalias('name -opt foo bar') is equivalent to typing at the ipython
870 ipalias('name -opt foo bar') is equivalent to typing at the ipython
871 prompt:
871 prompt:
872
872
873 In[1]: name -opt foo bar
873 In[1]: name -opt foo bar
874
874
875 To call an alias without arguments, simply use ipalias('name').
875 To call an alias without arguments, simply use ipalias('name').
876
876
877 This provides a proper Python function to call IPython's aliases in any
877 This provides a proper Python function to call IPython's aliases in any
878 valid Python code you can type at the interpreter, including loops and
878 valid Python code you can type at the interpreter, including loops and
879 compound statements. It is added by IPython to the Python builtin
879 compound statements. It is added by IPython to the Python builtin
880 namespace upon initialization."""
880 namespace upon initialization."""
881
881
882 args = arg_s.split(' ',1)
882 args = arg_s.split(' ',1)
883 alias_name = args[0]
883 alias_name = args[0]
884 try:
884 try:
885 alias_args = args[1]
885 alias_args = args[1]
886 except IndexError:
886 except IndexError:
887 alias_args = ''
887 alias_args = ''
888 if alias_name in self.alias_table:
888 if alias_name in self.alias_table:
889 self.call_alias(alias_name,alias_args)
889 self.call_alias(alias_name,alias_args)
890 else:
890 else:
891 error("Alias `%s` not found." % alias_name)
891 error("Alias `%s` not found." % alias_name)
892
892
893 def ipsystem(self,arg_s):
893 def ipsystem(self,arg_s):
894 """Make a system call, using IPython."""
894 """Make a system call, using IPython."""
895
895
896 self.system(arg_s)
896 self.system(arg_s)
897
897
898 def complete(self,text):
898 def complete(self,text):
899 """Return a sorted list of all possible completions on text.
899 """Return a sorted list of all possible completions on text.
900
900
901 Inputs:
901 Inputs:
902
902
903 - text: a string of text to be completed on.
903 - text: a string of text to be completed on.
904
904
905 This is a wrapper around the completion mechanism, similar to what
905 This is a wrapper around the completion mechanism, similar to what
906 readline does at the command line when the TAB key is hit. By
906 readline does at the command line when the TAB key is hit. By
907 exposing it as a method, it can be used by other non-readline
907 exposing it as a method, it can be used by other non-readline
908 environments (such as GUIs) for text completion.
908 environments (such as GUIs) for text completion.
909
909
910 Simple usage example:
910 Simple usage example:
911
911
912 In [1]: x = 'hello'
912 In [1]: x = 'hello'
913
913
914 In [2]: __IP.complete('x.l')
914 In [2]: __IP.complete('x.l')
915 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
915 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
916
916
917 complete = self.Completer.complete
917 complete = self.Completer.complete
918 state = 0
918 state = 0
919 # use a dict so we get unique keys, since ipyhton's multiple
919 # use a dict so we get unique keys, since ipyhton's multiple
920 # completers can return duplicates.
920 # completers can return duplicates.
921 comps = {}
921 comps = {}
922 while True:
922 while True:
923 newcomp = complete(text,state)
923 newcomp = complete(text,state)
924 if newcomp is None:
924 if newcomp is None:
925 break
925 break
926 comps[newcomp] = 1
926 comps[newcomp] = 1
927 state += 1
927 state += 1
928 outcomps = comps.keys()
928 outcomps = comps.keys()
929 outcomps.sort()
929 outcomps.sort()
930 return outcomps
930 return outcomps
931
931
932 def set_completer_frame(self, frame=None):
932 def set_completer_frame(self, frame=None):
933 if frame:
933 if frame:
934 self.Completer.namespace = frame.f_locals
934 self.Completer.namespace = frame.f_locals
935 self.Completer.global_namespace = frame.f_globals
935 self.Completer.global_namespace = frame.f_globals
936 else:
936 else:
937 self.Completer.namespace = self.user_ns
937 self.Completer.namespace = self.user_ns
938 self.Completer.global_namespace = self.user_global_ns
938 self.Completer.global_namespace = self.user_global_ns
939
939
940 def init_auto_alias(self):
940 def init_auto_alias(self):
941 """Define some aliases automatically.
941 """Define some aliases automatically.
942
942
943 These are ALL parameter-less aliases"""
943 These are ALL parameter-less aliases"""
944
944
945 for alias,cmd in self.auto_alias:
945 for alias,cmd in self.auto_alias:
946 self.alias_table[alias] = (0,cmd)
946 self.alias_table[alias] = (0,cmd)
947
947
948 def alias_table_validate(self,verbose=0):
948 def alias_table_validate(self,verbose=0):
949 """Update information about the alias table.
949 """Update information about the alias table.
950
950
951 In particular, make sure no Python keywords/builtins are in it."""
951 In particular, make sure no Python keywords/builtins are in it."""
952
952
953 no_alias = self.no_alias
953 no_alias = self.no_alias
954 for k in self.alias_table.keys():
954 for k in self.alias_table.keys():
955 if k in no_alias:
955 if k in no_alias:
956 del self.alias_table[k]
956 del self.alias_table[k]
957 if verbose:
957 if verbose:
958 print ("Deleting alias <%s>, it's a Python "
958 print ("Deleting alias <%s>, it's a Python "
959 "keyword or builtin." % k)
959 "keyword or builtin." % k)
960
960
961 def set_autoindent(self,value=None):
961 def set_autoindent(self,value=None):
962 """Set the autoindent flag, checking for readline support.
962 """Set the autoindent flag, checking for readline support.
963
963
964 If called with no arguments, it acts as a toggle."""
964 If called with no arguments, it acts as a toggle."""
965
965
966 if not self.has_readline:
966 if not self.has_readline:
967 if os.name == 'posix':
967 if os.name == 'posix':
968 warn("The auto-indent feature requires the readline library")
968 warn("The auto-indent feature requires the readline library")
969 self.autoindent = 0
969 self.autoindent = 0
970 return
970 return
971 if value is None:
971 if value is None:
972 self.autoindent = not self.autoindent
972 self.autoindent = not self.autoindent
973 else:
973 else:
974 self.autoindent = value
974 self.autoindent = value
975
975
976 def rc_set_toggle(self,rc_field,value=None):
976 def rc_set_toggle(self,rc_field,value=None):
977 """Set or toggle a field in IPython's rc config. structure.
977 """Set or toggle a field in IPython's rc config. structure.
978
978
979 If called with no arguments, it acts as a toggle.
979 If called with no arguments, it acts as a toggle.
980
980
981 If called with a non-existent field, the resulting AttributeError
981 If called with a non-existent field, the resulting AttributeError
982 exception will propagate out."""
982 exception will propagate out."""
983
983
984 rc_val = getattr(self.rc,rc_field)
984 rc_val = getattr(self.rc,rc_field)
985 if value is None:
985 if value is None:
986 value = not rc_val
986 value = not rc_val
987 setattr(self.rc,rc_field,value)
987 setattr(self.rc,rc_field,value)
988
988
989 def user_setup(self,ipythondir,rc_suffix,mode='install'):
989 def user_setup(self,ipythondir,rc_suffix,mode='install'):
990 """Install the user configuration directory.
990 """Install the user configuration directory.
991
991
992 Can be called when running for the first time or to upgrade the user's
992 Can be called when running for the first time or to upgrade the user's
993 .ipython/ directory with the mode parameter. Valid modes are 'install'
993 .ipython/ directory with the mode parameter. Valid modes are 'install'
994 and 'upgrade'."""
994 and 'upgrade'."""
995
995
996 def wait():
996 def wait():
997 try:
997 try:
998 raw_input("Please press <RETURN> to start IPython.")
998 raw_input("Please press <RETURN> to start IPython.")
999 except EOFError:
999 except EOFError:
1000 print >> Term.cout
1000 print >> Term.cout
1001 print '*'*70
1001 print '*'*70
1002
1002
1003 cwd = os.getcwd() # remember where we started
1003 cwd = os.getcwd() # remember where we started
1004 glb = glob.glob
1004 glb = glob.glob
1005 print '*'*70
1005 print '*'*70
1006 if mode == 'install':
1006 if mode == 'install':
1007 print \
1007 print \
1008 """Welcome to IPython. I will try to create a personal configuration directory
1008 """Welcome to IPython. I will try to create a personal configuration directory
1009 where you can customize many aspects of IPython's functionality in:\n"""
1009 where you can customize many aspects of IPython's functionality in:\n"""
1010 else:
1010 else:
1011 print 'I am going to upgrade your configuration in:'
1011 print 'I am going to upgrade your configuration in:'
1012
1012
1013 print ipythondir
1013 print ipythondir
1014
1014
1015 rcdirend = os.path.join('IPython','UserConfig')
1015 rcdirend = os.path.join('IPython','UserConfig')
1016 cfg = lambda d: os.path.join(d,rcdirend)
1016 cfg = lambda d: os.path.join(d,rcdirend)
1017 try:
1017 try:
1018 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1018 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1019 except IOError:
1019 except IOError:
1020 warning = """
1020 warning = """
1021 Installation error. IPython's directory was not found.
1021 Installation error. IPython's directory was not found.
1022
1022
1023 Check the following:
1023 Check the following:
1024
1024
1025 The ipython/IPython directory should be in a directory belonging to your
1025 The ipython/IPython directory should be in a directory belonging to your
1026 PYTHONPATH environment variable (that is, it should be in a directory
1026 PYTHONPATH environment variable (that is, it should be in a directory
1027 belonging to sys.path). You can copy it explicitly there or just link to it.
1027 belonging to sys.path). You can copy it explicitly there or just link to it.
1028
1028
1029 IPython will proceed with builtin defaults.
1029 IPython will proceed with builtin defaults.
1030 """
1030 """
1031 warn(warning)
1031 warn(warning)
1032 wait()
1032 wait()
1033 return
1033 return
1034
1034
1035 if mode == 'install':
1035 if mode == 'install':
1036 try:
1036 try:
1037 shutil.copytree(rcdir,ipythondir)
1037 shutil.copytree(rcdir,ipythondir)
1038 os.chdir(ipythondir)
1038 os.chdir(ipythondir)
1039 rc_files = glb("ipythonrc*")
1039 rc_files = glb("ipythonrc*")
1040 for rc_file in rc_files:
1040 for rc_file in rc_files:
1041 os.rename(rc_file,rc_file+rc_suffix)
1041 os.rename(rc_file,rc_file+rc_suffix)
1042 except:
1042 except:
1043 warning = """
1043 warning = """
1044
1044
1045 There was a problem with the installation:
1045 There was a problem with the installation:
1046 %s
1046 %s
1047 Try to correct it or contact the developers if you think it's a bug.
1047 Try to correct it or contact the developers if you think it's a bug.
1048 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1048 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1049 warn(warning)
1049 warn(warning)
1050 wait()
1050 wait()
1051 return
1051 return
1052
1052
1053 elif mode == 'upgrade':
1053 elif mode == 'upgrade':
1054 try:
1054 try:
1055 os.chdir(ipythondir)
1055 os.chdir(ipythondir)
1056 except:
1056 except:
1057 print """
1057 print """
1058 Can not upgrade: changing to directory %s failed. Details:
1058 Can not upgrade: changing to directory %s failed. Details:
1059 %s
1059 %s
1060 """ % (ipythondir,sys.exc_info()[1])
1060 """ % (ipythondir,sys.exc_info()[1])
1061 wait()
1061 wait()
1062 return
1062 return
1063 else:
1063 else:
1064 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1064 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1065 for new_full_path in sources:
1065 for new_full_path in sources:
1066 new_filename = os.path.basename(new_full_path)
1066 new_filename = os.path.basename(new_full_path)
1067 if new_filename.startswith('ipythonrc'):
1067 if new_filename.startswith('ipythonrc'):
1068 new_filename = new_filename + rc_suffix
1068 new_filename = new_filename + rc_suffix
1069 # The config directory should only contain files, skip any
1069 # The config directory should only contain files, skip any
1070 # directories which may be there (like CVS)
1070 # directories which may be there (like CVS)
1071 if os.path.isdir(new_full_path):
1071 if os.path.isdir(new_full_path):
1072 continue
1072 continue
1073 if os.path.exists(new_filename):
1073 if os.path.exists(new_filename):
1074 old_file = new_filename+'.old'
1074 old_file = new_filename+'.old'
1075 if os.path.exists(old_file):
1075 if os.path.exists(old_file):
1076 os.remove(old_file)
1076 os.remove(old_file)
1077 os.rename(new_filename,old_file)
1077 os.rename(new_filename,old_file)
1078 shutil.copy(new_full_path,new_filename)
1078 shutil.copy(new_full_path,new_filename)
1079 else:
1079 else:
1080 raise ValueError,'unrecognized mode for install:',`mode`
1080 raise ValueError,'unrecognized mode for install:',`mode`
1081
1081
1082 # Fix line-endings to those native to each platform in the config
1082 # Fix line-endings to those native to each platform in the config
1083 # directory.
1083 # directory.
1084 try:
1084 try:
1085 os.chdir(ipythondir)
1085 os.chdir(ipythondir)
1086 except:
1086 except:
1087 print """
1087 print """
1088 Problem: changing to directory %s failed.
1088 Problem: changing to directory %s failed.
1089 Details:
1089 Details:
1090 %s
1090 %s
1091
1091
1092 Some configuration files may have incorrect line endings. This should not
1092 Some configuration files may have incorrect line endings. This should not
1093 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1093 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1094 wait()
1094 wait()
1095 else:
1095 else:
1096 for fname in glb('ipythonrc*'):
1096 for fname in glb('ipythonrc*'):
1097 try:
1097 try:
1098 native_line_ends(fname,backup=0)
1098 native_line_ends(fname,backup=0)
1099 except IOError:
1099 except IOError:
1100 pass
1100 pass
1101
1101
1102 if mode == 'install':
1102 if mode == 'install':
1103 print """
1103 print """
1104 Successful installation!
1104 Successful installation!
1105
1105
1106 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1106 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1107 IPython manual (there are both HTML and PDF versions supplied with the
1107 IPython manual (there are both HTML and PDF versions supplied with the
1108 distribution) to make sure that your system environment is properly configured
1108 distribution) to make sure that your system environment is properly configured
1109 to take advantage of IPython's features.
1109 to take advantage of IPython's features.
1110
1110
1111 Important note: the configuration system has changed! The old system is
1111 Important note: the configuration system has changed! The old system is
1112 still in place, but its setting may be partly overridden by the settings in
1112 still in place, but its setting may be partly overridden by the settings in
1113 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1113 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1114 if some of the new settings bother you.
1114 if some of the new settings bother you.
1115
1115
1116 """
1116 """
1117 else:
1117 else:
1118 print """
1118 print """
1119 Successful upgrade!
1119 Successful upgrade!
1120
1120
1121 All files in your directory:
1121 All files in your directory:
1122 %(ipythondir)s
1122 %(ipythondir)s
1123 which would have been overwritten by the upgrade were backed up with a .old
1123 which would have been overwritten by the upgrade were backed up with a .old
1124 extension. If you had made particular customizations in those files you may
1124 extension. If you had made particular customizations in those files you may
1125 want to merge them back into the new files.""" % locals()
1125 want to merge them back into the new files.""" % locals()
1126 wait()
1126 wait()
1127 os.chdir(cwd)
1127 os.chdir(cwd)
1128 # end user_setup()
1128 # end user_setup()
1129
1129
1130 def atexit_operations(self):
1130 def atexit_operations(self):
1131 """This will be executed at the time of exit.
1131 """This will be executed at the time of exit.
1132
1132
1133 Saving of persistent data should be performed here. """
1133 Saving of persistent data should be performed here. """
1134
1134
1135 #print '*** IPython exit cleanup ***' # dbg
1135 #print '*** IPython exit cleanup ***' # dbg
1136 # input history
1136 # input history
1137 self.savehist()
1137 self.savehist()
1138
1138
1139 # Cleanup all tempfiles left around
1139 # Cleanup all tempfiles left around
1140 for tfile in self.tempfiles:
1140 for tfile in self.tempfiles:
1141 try:
1141 try:
1142 os.unlink(tfile)
1142 os.unlink(tfile)
1143 except OSError:
1143 except OSError:
1144 pass
1144 pass
1145
1145
1146 # save the "persistent data" catch-all dictionary
1146 # save the "persistent data" catch-all dictionary
1147 try:
1147 try:
1148 pickle.dump(self.persist, open(self.persist_fname,"w"))
1148 pickle.dump(self.persist, open(self.persist_fname,"w"))
1149 except:
1149 except:
1150 print "*** ERROR *** persistent data saving failed."
1150 print "*** ERROR *** persistent data saving failed."
1151
1151
1152 def savehist(self):
1152 def savehist(self):
1153 """Save input history to a file (via readline library)."""
1153 """Save input history to a file (via readline library)."""
1154 try:
1154 try:
1155 self.readline.write_history_file(self.histfile)
1155 self.readline.write_history_file(self.histfile)
1156 except:
1156 except:
1157 print 'Unable to save IPython command history to file: ' + \
1157 print 'Unable to save IPython command history to file: ' + \
1158 `self.histfile`
1158 `self.histfile`
1159
1159
1160 def pre_readline(self):
1160 def pre_readline(self):
1161 """readline hook to be used at the start of each line.
1161 """readline hook to be used at the start of each line.
1162
1162
1163 Currently it handles auto-indent only."""
1163 Currently it handles auto-indent only."""
1164
1164
1165 #debugx('self.indent_current_nsp','pre_readline:')
1165 #debugx('self.indent_current_nsp','pre_readline:')
1166 self.readline.insert_text(self.indent_current_str())
1166 self.readline.insert_text(self.indent_current_str())
1167
1167
1168 def init_readline(self):
1168 def init_readline(self):
1169 """Command history completion/saving/reloading."""
1169 """Command history completion/saving/reloading."""
1170 try:
1170 try:
1171 import readline
1171 import readline
1172 except ImportError:
1172 except ImportError:
1173 self.has_readline = 0
1173 self.has_readline = 0
1174 self.readline = None
1174 self.readline = None
1175 # no point in bugging windows users with this every time:
1175 # no point in bugging windows users with this every time:
1176 if os.name == 'posix':
1176 if os.name == 'posix':
1177 warn('Readline services not available on this platform.')
1177 warn('Readline services not available on this platform.')
1178 else:
1178 else:
1179 import atexit
1179 import atexit
1180 from IPython.completer import IPCompleter
1180 from IPython.completer import IPCompleter
1181 self.Completer = IPCompleter(self,
1181 self.Completer = IPCompleter(self,
1182 self.user_ns,
1182 self.user_ns,
1183 self.user_global_ns,
1183 self.user_global_ns,
1184 self.rc.readline_omit__names,
1184 self.rc.readline_omit__names,
1185 self.alias_table)
1185 self.alias_table)
1186
1186
1187 # Platform-specific configuration
1187 # Platform-specific configuration
1188 if os.name == 'nt':
1188 if os.name == 'nt':
1189 self.readline_startup_hook = readline.set_pre_input_hook
1189 self.readline_startup_hook = readline.set_pre_input_hook
1190 else:
1190 else:
1191 self.readline_startup_hook = readline.set_startup_hook
1191 self.readline_startup_hook = readline.set_startup_hook
1192
1192
1193 # Load user's initrc file (readline config)
1193 # Load user's initrc file (readline config)
1194 inputrc_name = os.environ.get('INPUTRC')
1194 inputrc_name = os.environ.get('INPUTRC')
1195 if inputrc_name is None:
1195 if inputrc_name is None:
1196 home_dir = get_home_dir()
1196 home_dir = get_home_dir()
1197 if home_dir is not None:
1197 if home_dir is not None:
1198 inputrc_name = os.path.join(home_dir,'.inputrc')
1198 inputrc_name = os.path.join(home_dir,'.inputrc')
1199 if os.path.isfile(inputrc_name):
1199 if os.path.isfile(inputrc_name):
1200 try:
1200 try:
1201 readline.read_init_file(inputrc_name)
1201 readline.read_init_file(inputrc_name)
1202 except:
1202 except:
1203 warn('Problems reading readline initialization file <%s>'
1203 warn('Problems reading readline initialization file <%s>'
1204 % inputrc_name)
1204 % inputrc_name)
1205
1205
1206 self.has_readline = 1
1206 self.has_readline = 1
1207 self.readline = readline
1207 self.readline = readline
1208 # save this in sys so embedded copies can restore it properly
1208 # save this in sys so embedded copies can restore it properly
1209 sys.ipcompleter = self.Completer.complete
1209 sys.ipcompleter = self.Completer.complete
1210 readline.set_completer(self.Completer.complete)
1210 readline.set_completer(self.Completer.complete)
1211
1211
1212 # Configure readline according to user's prefs
1212 # Configure readline according to user's prefs
1213 for rlcommand in self.rc.readline_parse_and_bind:
1213 for rlcommand in self.rc.readline_parse_and_bind:
1214 readline.parse_and_bind(rlcommand)
1214 readline.parse_and_bind(rlcommand)
1215
1215
1216 # remove some chars from the delimiters list
1216 # remove some chars from the delimiters list
1217 delims = readline.get_completer_delims()
1217 delims = readline.get_completer_delims()
1218 delims = delims.translate(string._idmap,
1218 delims = delims.translate(string._idmap,
1219 self.rc.readline_remove_delims)
1219 self.rc.readline_remove_delims)
1220 readline.set_completer_delims(delims)
1220 readline.set_completer_delims(delims)
1221 # otherwise we end up with a monster history after a while:
1221 # otherwise we end up with a monster history after a while:
1222 readline.set_history_length(1000)
1222 readline.set_history_length(1000)
1223 try:
1223 try:
1224 #print '*** Reading readline history' # dbg
1224 #print '*** Reading readline history' # dbg
1225 readline.read_history_file(self.histfile)
1225 readline.read_history_file(self.histfile)
1226 except IOError:
1226 except IOError:
1227 pass # It doesn't exist yet.
1227 pass # It doesn't exist yet.
1228
1228
1229 atexit.register(self.atexit_operations)
1229 atexit.register(self.atexit_operations)
1230 del atexit
1230 del atexit
1231
1231
1232 # Configure auto-indent for all platforms
1232 # Configure auto-indent for all platforms
1233 self.set_autoindent(self.rc.autoindent)
1233 self.set_autoindent(self.rc.autoindent)
1234
1234
1235 def _should_recompile(self,e):
1235 def _should_recompile(self,e):
1236 """Utility routine for edit_syntax_error"""
1236 """Utility routine for edit_syntax_error"""
1237
1237
1238 if e.filename in ('<ipython console>','<input>','<string>',
1238 if e.filename in ('<ipython console>','<input>','<string>',
1239 '<console>',None):
1239 '<console>',None):
1240
1240
1241 return False
1241 return False
1242 try:
1242 try:
1243 if not ask_yes_no('Return to editor to correct syntax error? '
1243 if not ask_yes_no('Return to editor to correct syntax error? '
1244 '[Y/n] ','y'):
1244 '[Y/n] ','y'):
1245 return False
1245 return False
1246 except EOFError:
1246 except EOFError:
1247 return False
1247 return False
1248
1248
1249 def int0(x):
1249 def int0(x):
1250 try:
1250 try:
1251 return int(x)
1251 return int(x)
1252 except TypeError:
1252 except TypeError:
1253 return 0
1253 return 0
1254 # always pass integer line and offset values to editor hook
1254 # always pass integer line and offset values to editor hook
1255 self.hooks.fix_error_editor(e.filename,
1255 self.hooks.fix_error_editor(e.filename,
1256 int0(e.lineno),int0(e.offset),e.msg)
1256 int0(e.lineno),int0(e.offset),e.msg)
1257 return True
1257 return True
1258
1258
1259 def edit_syntax_error(self):
1259 def edit_syntax_error(self):
1260 """The bottom half of the syntax error handler called in the main loop.
1260 """The bottom half of the syntax error handler called in the main loop.
1261
1261
1262 Loop until syntax error is fixed or user cancels.
1262 Loop until syntax error is fixed or user cancels.
1263 """
1263 """
1264
1264
1265 while self.SyntaxTB.last_syntax_error:
1265 while self.SyntaxTB.last_syntax_error:
1266 # copy and clear last_syntax_error
1266 # copy and clear last_syntax_error
1267 err = self.SyntaxTB.clear_err_state()
1267 err = self.SyntaxTB.clear_err_state()
1268 if not self._should_recompile(err):
1268 if not self._should_recompile(err):
1269 return
1269 return
1270 try:
1270 try:
1271 # may set last_syntax_error again if a SyntaxError is raised
1271 # may set last_syntax_error again if a SyntaxError is raised
1272 self.safe_execfile(err.filename,self.shell.user_ns)
1272 self.safe_execfile(err.filename,self.shell.user_ns)
1273 except:
1273 except:
1274 self.showtraceback()
1274 self.showtraceback()
1275 else:
1275 else:
1276 f = file(err.filename)
1276 f = file(err.filename)
1277 try:
1277 try:
1278 sys.displayhook(f.read())
1278 sys.displayhook(f.read())
1279 finally:
1279 finally:
1280 f.close()
1280 f.close()
1281
1281
1282 def showsyntaxerror(self, filename=None):
1282 def showsyntaxerror(self, filename=None):
1283 """Display the syntax error that just occurred.
1283 """Display the syntax error that just occurred.
1284
1284
1285 This doesn't display a stack trace because there isn't one.
1285 This doesn't display a stack trace because there isn't one.
1286
1286
1287 If a filename is given, it is stuffed in the exception instead
1287 If a filename is given, it is stuffed in the exception instead
1288 of what was there before (because Python's parser always uses
1288 of what was there before (because Python's parser always uses
1289 "<string>" when reading from a string).
1289 "<string>" when reading from a string).
1290 """
1290 """
1291 etype, value, last_traceback = sys.exc_info()
1291 etype, value, last_traceback = sys.exc_info()
1292 if filename and etype is SyntaxError:
1292 if filename and etype is SyntaxError:
1293 # Work hard to stuff the correct filename in the exception
1293 # Work hard to stuff the correct filename in the exception
1294 try:
1294 try:
1295 msg, (dummy_filename, lineno, offset, line) = value
1295 msg, (dummy_filename, lineno, offset, line) = value
1296 except:
1296 except:
1297 # Not the format we expect; leave it alone
1297 # Not the format we expect; leave it alone
1298 pass
1298 pass
1299 else:
1299 else:
1300 # Stuff in the right filename
1300 # Stuff in the right filename
1301 try:
1301 try:
1302 # Assume SyntaxError is a class exception
1302 # Assume SyntaxError is a class exception
1303 value = SyntaxError(msg, (filename, lineno, offset, line))
1303 value = SyntaxError(msg, (filename, lineno, offset, line))
1304 except:
1304 except:
1305 # If that failed, assume SyntaxError is a string
1305 # If that failed, assume SyntaxError is a string
1306 value = msg, (filename, lineno, offset, line)
1306 value = msg, (filename, lineno, offset, line)
1307 self.SyntaxTB(etype,value,[])
1307 self.SyntaxTB(etype,value,[])
1308
1308
1309 def debugger(self):
1309 def debugger(self):
1310 """Call the pdb debugger."""
1310 """Call the pdb debugger."""
1311
1311
1312 if not self.rc.pdb:
1312 if not self.rc.pdb:
1313 return
1313 return
1314 pdb.pm()
1314 pdb.pm()
1315
1315
1316 def showtraceback(self,exc_tuple = None,filename=None):
1316 def showtraceback(self,exc_tuple = None,filename=None):
1317 """Display the exception that just occurred."""
1317 """Display the exception that just occurred."""
1318
1318
1319 # Though this won't be called by syntax errors in the input line,
1319 # Though this won't be called by syntax errors in the input line,
1320 # there may be SyntaxError cases whith imported code.
1320 # there may be SyntaxError cases whith imported code.
1321 if exc_tuple is None:
1321 if exc_tuple is None:
1322 type, value, tb = sys.exc_info()
1322 type, value, tb = sys.exc_info()
1323 else:
1323 else:
1324 type, value, tb = exc_tuple
1324 type, value, tb = exc_tuple
1325 if type is SyntaxError:
1325 if type is SyntaxError:
1326 self.showsyntaxerror(filename)
1326 self.showsyntaxerror(filename)
1327 else:
1327 else:
1328 self.InteractiveTB()
1328 self.InteractiveTB()
1329 if self.InteractiveTB.call_pdb and self.has_readline:
1329 if self.InteractiveTB.call_pdb and self.has_readline:
1330 # pdb mucks up readline, fix it back
1330 # pdb mucks up readline, fix it back
1331 self.readline.set_completer(self.Completer.complete)
1331 self.readline.set_completer(self.Completer.complete)
1332
1332
1333 def mainloop(self,banner=None):
1333 def mainloop(self,banner=None):
1334 """Creates the local namespace and starts the mainloop.
1334 """Creates the local namespace and starts the mainloop.
1335
1335
1336 If an optional banner argument is given, it will override the
1336 If an optional banner argument is given, it will override the
1337 internally created default banner."""
1337 internally created default banner."""
1338
1338
1339 if self.rc.c: # Emulate Python's -c option
1339 if self.rc.c: # Emulate Python's -c option
1340 self.exec_init_cmd()
1340 self.exec_init_cmd()
1341 if banner is None:
1341 if banner is None:
1342 if self.rc.banner:
1342 if self.rc.banner:
1343 banner = self.BANNER+self.banner2
1343 banner = self.BANNER+self.banner2
1344 else:
1344 else:
1345 banner = ''
1345 banner = ''
1346 self.interact(banner)
1346 self.interact(banner)
1347
1347
1348 def exec_init_cmd(self):
1348 def exec_init_cmd(self):
1349 """Execute a command given at the command line.
1349 """Execute a command given at the command line.
1350
1350
1351 This emulates Python's -c option."""
1351 This emulates Python's -c option."""
1352
1352
1353 sys.argv = ['-c']
1353 sys.argv = ['-c']
1354 self.push(self.rc.c)
1354 self.push(self.rc.c)
1355
1355
1356 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1356 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1357 """Embeds IPython into a running python program.
1357 """Embeds IPython into a running python program.
1358
1358
1359 Input:
1359 Input:
1360
1360
1361 - header: An optional header message can be specified.
1361 - header: An optional header message can be specified.
1362
1362
1363 - local_ns, global_ns: working namespaces. If given as None, the
1363 - local_ns, global_ns: working namespaces. If given as None, the
1364 IPython-initialized one is updated with __main__.__dict__, so that
1364 IPython-initialized one is updated with __main__.__dict__, so that
1365 program variables become visible but user-specific configuration
1365 program variables become visible but user-specific configuration
1366 remains possible.
1366 remains possible.
1367
1367
1368 - stack_depth: specifies how many levels in the stack to go to
1368 - stack_depth: specifies how many levels in the stack to go to
1369 looking for namespaces (when local_ns and global_ns are None). This
1369 looking for namespaces (when local_ns and global_ns are None). This
1370 allows an intermediate caller to make sure that this function gets
1370 allows an intermediate caller to make sure that this function gets
1371 the namespace from the intended level in the stack. By default (0)
1371 the namespace from the intended level in the stack. By default (0)
1372 it will get its locals and globals from the immediate caller.
1372 it will get its locals and globals from the immediate caller.
1373
1373
1374 Warning: it's possible to use this in a program which is being run by
1374 Warning: it's possible to use this in a program which is being run by
1375 IPython itself (via %run), but some funny things will happen (a few
1375 IPython itself (via %run), but some funny things will happen (a few
1376 globals get overwritten). In the future this will be cleaned up, as
1376 globals get overwritten). In the future this will be cleaned up, as
1377 there is no fundamental reason why it can't work perfectly."""
1377 there is no fundamental reason why it can't work perfectly."""
1378
1378
1379 # Get locals and globals from caller
1379 # Get locals and globals from caller
1380 if local_ns is None or global_ns is None:
1380 if local_ns is None or global_ns is None:
1381 call_frame = sys._getframe(stack_depth).f_back
1381 call_frame = sys._getframe(stack_depth).f_back
1382
1382
1383 if local_ns is None:
1383 if local_ns is None:
1384 local_ns = call_frame.f_locals
1384 local_ns = call_frame.f_locals
1385 if global_ns is None:
1385 if global_ns is None:
1386 global_ns = call_frame.f_globals
1386 global_ns = call_frame.f_globals
1387
1387
1388 # Update namespaces and fire up interpreter
1388 # Update namespaces and fire up interpreter
1389
1389
1390 # The global one is easy, we can just throw it in
1390 # The global one is easy, we can just throw it in
1391 self.user_global_ns = global_ns
1391 self.user_global_ns = global_ns
1392
1392
1393 # but the user/local one is tricky: ipython needs it to store internal
1393 # but the user/local one is tricky: ipython needs it to store internal
1394 # data, but we also need the locals. We'll copy locals in the user
1394 # data, but we also need the locals. We'll copy locals in the user
1395 # one, but will track what got copied so we can delete them at exit.
1395 # one, but will track what got copied so we can delete them at exit.
1396 # This is so that a later embedded call doesn't see locals from a
1396 # This is so that a later embedded call doesn't see locals from a
1397 # previous call (which most likely existed in a separate scope).
1397 # previous call (which most likely existed in a separate scope).
1398 local_varnames = local_ns.keys()
1398 local_varnames = local_ns.keys()
1399 self.user_ns.update(local_ns)
1399 self.user_ns.update(local_ns)
1400
1400
1401 # Patch for global embedding to make sure that things don't overwrite
1401 # Patch for global embedding to make sure that things don't overwrite
1402 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1402 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1403 # FIXME. Test this a bit more carefully (the if.. is new)
1403 # FIXME. Test this a bit more carefully (the if.. is new)
1404 if local_ns is None and global_ns is None:
1404 if local_ns is None and global_ns is None:
1405 self.user_global_ns.update(__main__.__dict__)
1405 self.user_global_ns.update(__main__.__dict__)
1406
1406
1407 # make sure the tab-completer has the correct frame information, so it
1407 # make sure the tab-completer has the correct frame information, so it
1408 # actually completes using the frame's locals/globals
1408 # actually completes using the frame's locals/globals
1409 self.set_completer_frame()
1409 self.set_completer_frame()
1410
1410
1411 # before activating the interactive mode, we need to make sure that
1411 # before activating the interactive mode, we need to make sure that
1412 # all names in the builtin namespace needed by ipython point to
1412 # all names in the builtin namespace needed by ipython point to
1413 # ourselves, and not to other instances.
1413 # ourselves, and not to other instances.
1414 self.add_builtins()
1414 self.add_builtins()
1415
1415
1416 self.interact(header)
1416 self.interact(header)
1417
1417
1418 # now, purge out the user namespace from anything we might have added
1418 # now, purge out the user namespace from anything we might have added
1419 # from the caller's local namespace
1419 # from the caller's local namespace
1420 delvar = self.user_ns.pop
1420 delvar = self.user_ns.pop
1421 for var in local_varnames:
1421 for var in local_varnames:
1422 delvar(var,None)
1422 delvar(var,None)
1423 # and clean builtins we may have overridden
1423 # and clean builtins we may have overridden
1424 self.clean_builtins()
1424 self.clean_builtins()
1425
1425
1426 def interact(self, banner=None):
1426 def interact(self, banner=None):
1427 """Closely emulate the interactive Python console.
1427 """Closely emulate the interactive Python console.
1428
1428
1429 The optional banner argument specify the banner to print
1429 The optional banner argument specify the banner to print
1430 before the first interaction; by default it prints a banner
1430 before the first interaction; by default it prints a banner
1431 similar to the one printed by the real Python interpreter,
1431 similar to the one printed by the real Python interpreter,
1432 followed by the current class name in parentheses (so as not
1432 followed by the current class name in parentheses (so as not
1433 to confuse this with the real interpreter -- since it's so
1433 to confuse this with the real interpreter -- since it's so
1434 close!).
1434 close!).
1435
1435
1436 """
1436 """
1437 cprt = 'Type "copyright", "credits" or "license" for more information.'
1437 cprt = 'Type "copyright", "credits" or "license" for more information.'
1438 if banner is None:
1438 if banner is None:
1439 self.write("Python %s on %s\n%s\n(%s)\n" %
1439 self.write("Python %s on %s\n%s\n(%s)\n" %
1440 (sys.version, sys.platform, cprt,
1440 (sys.version, sys.platform, cprt,
1441 self.__class__.__name__))
1441 self.__class__.__name__))
1442 else:
1442 else:
1443 self.write(banner)
1443 self.write(banner)
1444
1444
1445 more = 0
1445 more = 0
1446
1446
1447 # Mark activity in the builtins
1447 # Mark activity in the builtins
1448 __builtin__.__dict__['__IPYTHON__active'] += 1
1448 __builtin__.__dict__['__IPYTHON__active'] += 1
1449
1449
1450 # exit_now is set by a call to %Exit or %Quit
1450 # exit_now is set by a call to %Exit or %Quit
1451 self.exit_now = False
1451 self.exit_now = False
1452 while not self.exit_now:
1452 while not self.exit_now:
1453
1453
1454 try:
1454 try:
1455 if more:
1455 if more:
1456 prompt = self.outputcache.prompt2
1456 prompt = self.outputcache.prompt2
1457 if self.autoindent:
1457 if self.autoindent:
1458 self.readline_startup_hook(self.pre_readline)
1458 self.readline_startup_hook(self.pre_readline)
1459 else:
1459 else:
1460 prompt = self.outputcache.prompt1
1460 prompt = self.outputcache.prompt1
1461 try:
1461 try:
1462 line = self.raw_input(prompt,more)
1462 line = self.raw_input(prompt,more)
1463 if self.autoindent:
1463 if self.autoindent:
1464 self.readline_startup_hook(None)
1464 self.readline_startup_hook(None)
1465 except EOFError:
1465 except EOFError:
1466 if self.autoindent:
1466 if self.autoindent:
1467 self.readline_startup_hook(None)
1467 self.readline_startup_hook(None)
1468 self.write("\n")
1468 self.write("\n")
1469 self.exit()
1469 self.exit()
1470 except:
1470 except:
1471 # exceptions here are VERY RARE, but they can be triggered
1471 # exceptions here are VERY RARE, but they can be triggered
1472 # asynchronously by signal handlers, for example.
1472 # asynchronously by signal handlers, for example.
1473 self.showtraceback()
1473 self.showtraceback()
1474 else:
1474 else:
1475 more = self.push(line)
1475 more = self.push(line)
1476
1476
1477 if (self.SyntaxTB.last_syntax_error and
1477 if (self.SyntaxTB.last_syntax_error and
1478 self.rc.autoedit_syntax):
1478 self.rc.autoedit_syntax):
1479 self.edit_syntax_error()
1479 self.edit_syntax_error()
1480
1480
1481 except KeyboardInterrupt:
1481 except KeyboardInterrupt:
1482 self.write("\nKeyboardInterrupt\n")
1482 self.write("\nKeyboardInterrupt\n")
1483 self.resetbuffer()
1483 self.resetbuffer()
1484 more = 0
1484 more = 0
1485 # keep cache in sync with the prompt counter:
1485 # keep cache in sync with the prompt counter:
1486 self.outputcache.prompt_count -= 1
1486 self.outputcache.prompt_count -= 1
1487
1487
1488 if self.autoindent:
1488 if self.autoindent:
1489 self.indent_current_nsp = 0
1489 self.indent_current_nsp = 0
1490
1490
1491 except bdb.BdbQuit:
1491 except bdb.BdbQuit:
1492 warn("The Python debugger has exited with a BdbQuit exception.\n"
1492 warn("The Python debugger has exited with a BdbQuit exception.\n"
1493 "Because of how pdb handles the stack, it is impossible\n"
1493 "Because of how pdb handles the stack, it is impossible\n"
1494 "for IPython to properly format this particular exception.\n"
1494 "for IPython to properly format this particular exception.\n"
1495 "IPython will resume normal operation.")
1495 "IPython will resume normal operation.")
1496
1496
1497 # We are off again...
1497 # We are off again...
1498 __builtin__.__dict__['__IPYTHON__active'] -= 1
1498 __builtin__.__dict__['__IPYTHON__active'] -= 1
1499
1499
1500 def excepthook(self, type, value, tb):
1500 def excepthook(self, type, value, tb):
1501 """One more defense for GUI apps that call sys.excepthook.
1501 """One more defense for GUI apps that call sys.excepthook.
1502
1502
1503 GUI frameworks like wxPython trap exceptions and call
1503 GUI frameworks like wxPython trap exceptions and call
1504 sys.excepthook themselves. I guess this is a feature that
1504 sys.excepthook themselves. I guess this is a feature that
1505 enables them to keep running after exceptions that would
1505 enables them to keep running after exceptions that would
1506 otherwise kill their mainloop. This is a bother for IPython
1506 otherwise kill their mainloop. This is a bother for IPython
1507 which excepts to catch all of the program exceptions with a try:
1507 which excepts to catch all of the program exceptions with a try:
1508 except: statement.
1508 except: statement.
1509
1509
1510 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1510 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1511 any app directly invokes sys.excepthook, it will look to the user like
1511 any app directly invokes sys.excepthook, it will look to the user like
1512 IPython crashed. In order to work around this, we can disable the
1512 IPython crashed. In order to work around this, we can disable the
1513 CrashHandler and replace it with this excepthook instead, which prints a
1513 CrashHandler and replace it with this excepthook instead, which prints a
1514 regular traceback using our InteractiveTB. In this fashion, apps which
1514 regular traceback using our InteractiveTB. In this fashion, apps which
1515 call sys.excepthook will generate a regular-looking exception from
1515 call sys.excepthook will generate a regular-looking exception from
1516 IPython, and the CrashHandler will only be triggered by real IPython
1516 IPython, and the CrashHandler will only be triggered by real IPython
1517 crashes.
1517 crashes.
1518
1518
1519 This hook should be used sparingly, only in places which are not likely
1519 This hook should be used sparingly, only in places which are not likely
1520 to be true IPython errors.
1520 to be true IPython errors.
1521 """
1521 """
1522
1522
1523 self.InteractiveTB(type, value, tb, tb_offset=0)
1523 self.InteractiveTB(type, value, tb, tb_offset=0)
1524 if self.InteractiveTB.call_pdb and self.has_readline:
1524 if self.InteractiveTB.call_pdb and self.has_readline:
1525 self.readline.set_completer(self.Completer.complete)
1525 self.readline.set_completer(self.Completer.complete)
1526
1526
1527 def call_alias(self,alias,rest=''):
1527 def call_alias(self,alias,rest=''):
1528 """Call an alias given its name and the rest of the line.
1528 """Call an alias given its name and the rest of the line.
1529
1529
1530 This function MUST be given a proper alias, because it doesn't make
1530 This function MUST be given a proper alias, because it doesn't make
1531 any checks when looking up into the alias table. The caller is
1531 any checks when looking up into the alias table. The caller is
1532 responsible for invoking it only with a valid alias."""
1532 responsible for invoking it only with a valid alias."""
1533
1533
1534 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1534 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1535 nargs,cmd = self.alias_table[alias]
1535 nargs,cmd = self.alias_table[alias]
1536 # Expand the %l special to be the user's input line
1536 # Expand the %l special to be the user's input line
1537 if cmd.find('%l') >= 0:
1537 if cmd.find('%l') >= 0:
1538 cmd = cmd.replace('%l',rest)
1538 cmd = cmd.replace('%l',rest)
1539 rest = ''
1539 rest = ''
1540 if nargs==0:
1540 if nargs==0:
1541 # Simple, argument-less aliases
1541 # Simple, argument-less aliases
1542 cmd = '%s %s' % (cmd,rest)
1542 cmd = '%s %s' % (cmd,rest)
1543 else:
1543 else:
1544 # Handle aliases with positional arguments
1544 # Handle aliases with positional arguments
1545 args = rest.split(None,nargs)
1545 args = rest.split(None,nargs)
1546 if len(args)< nargs:
1546 if len(args)< nargs:
1547 error('Alias <%s> requires %s arguments, %s given.' %
1547 error('Alias <%s> requires %s arguments, %s given.' %
1548 (alias,nargs,len(args)))
1548 (alias,nargs,len(args)))
1549 return
1549 return
1550 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1550 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1551 # Now call the macro, evaluating in the user's namespace
1551 # Now call the macro, evaluating in the user's namespace
1552 try:
1552 try:
1553 self.system(cmd)
1553 self.system(cmd)
1554 except:
1554 except:
1555 self.showtraceback()
1555 self.showtraceback()
1556
1556
1557 def indent_current_str(self):
1557 def indent_current_str(self):
1558 """return the current level of indentation as a string"""
1558 """return the current level of indentation as a string"""
1559 return self.indent_current_nsp * ' '
1559 return self.indent_current_nsp * ' '
1560
1560
1561 def autoindent_update(self,line):
1561 def autoindent_update(self,line):
1562 """Keep track of the indent level."""
1562 """Keep track of the indent level."""
1563
1563
1564 #debugx('line')
1564 #debugx('line')
1565 #debugx('self.indent_current_nsp')
1565 #debugx('self.indent_current_nsp')
1566 if self.autoindent:
1566 if self.autoindent:
1567 if line:
1567 if line:
1568 inisp = num_ini_spaces(line)
1568 inisp = num_ini_spaces(line)
1569 if inisp < self.indent_current_nsp:
1569 if inisp < self.indent_current_nsp:
1570 self.indent_current_nsp = inisp
1570 self.indent_current_nsp = inisp
1571
1571
1572 if line[-1] == ':':
1572 if line[-1] == ':':
1573 self.indent_current_nsp += 4
1573 self.indent_current_nsp += 4
1574 elif dedent_re.match(line):
1574 elif dedent_re.match(line):
1575 self.indent_current_nsp -= 4
1575 self.indent_current_nsp -= 4
1576 else:
1576 else:
1577 self.indent_current_nsp = 0
1577 self.indent_current_nsp = 0
1578
1578
1579 def runlines(self,lines):
1579 def runlines(self,lines):
1580 """Run a string of one or more lines of source.
1580 """Run a string of one or more lines of source.
1581
1581
1582 This method is capable of running a string containing multiple source
1582 This method is capable of running a string containing multiple source
1583 lines, as if they had been entered at the IPython prompt. Since it
1583 lines, as if they had been entered at the IPython prompt. Since it
1584 exposes IPython's processing machinery, the given strings can contain
1584 exposes IPython's processing machinery, the given strings can contain
1585 magic calls (%magic), special shell access (!cmd), etc."""
1585 magic calls (%magic), special shell access (!cmd), etc."""
1586
1586
1587 # We must start with a clean buffer, in case this is run from an
1587 # We must start with a clean buffer, in case this is run from an
1588 # interactive IPython session (via a magic, for example).
1588 # interactive IPython session (via a magic, for example).
1589 self.resetbuffer()
1589 self.resetbuffer()
1590 lines = lines.split('\n')
1590 lines = lines.split('\n')
1591 more = 0
1591 more = 0
1592 for line in lines:
1592 for line in lines:
1593 # skip blank lines so we don't mess up the prompt counter, but do
1593 # skip blank lines so we don't mess up the prompt counter, but do
1594 # NOT skip even a blank line if we are in a code block (more is
1594 # NOT skip even a blank line if we are in a code block (more is
1595 # true)
1595 # true)
1596 if line or more:
1596 if line or more:
1597 more = self.push(self.prefilter(line,more))
1597 more = self.push(self.prefilter(line,more))
1598 # IPython's runsource returns None if there was an error
1598 # IPython's runsource returns None if there was an error
1599 # compiling the code. This allows us to stop processing right
1599 # compiling the code. This allows us to stop processing right
1600 # away, so the user gets the error message at the right place.
1600 # away, so the user gets the error message at the right place.
1601 if more is None:
1601 if more is None:
1602 break
1602 break
1603 # final newline in case the input didn't have it, so that the code
1603 # final newline in case the input didn't have it, so that the code
1604 # actually does get executed
1604 # actually does get executed
1605 if more:
1605 if more:
1606 self.push('\n')
1606 self.push('\n')
1607
1607
1608 def runsource(self, source, filename='<input>', symbol='single'):
1608 def runsource(self, source, filename='<input>', symbol='single'):
1609 """Compile and run some source in the interpreter.
1609 """Compile and run some source in the interpreter.
1610
1610
1611 Arguments are as for compile_command().
1611 Arguments are as for compile_command().
1612
1612
1613 One several things can happen:
1613 One several things can happen:
1614
1614
1615 1) The input is incorrect; compile_command() raised an
1615 1) The input is incorrect; compile_command() raised an
1616 exception (SyntaxError or OverflowError). A syntax traceback
1616 exception (SyntaxError or OverflowError). A syntax traceback
1617 will be printed by calling the showsyntaxerror() method.
1617 will be printed by calling the showsyntaxerror() method.
1618
1618
1619 2) The input is incomplete, and more input is required;
1619 2) The input is incomplete, and more input is required;
1620 compile_command() returned None. Nothing happens.
1620 compile_command() returned None. Nothing happens.
1621
1621
1622 3) The input is complete; compile_command() returned a code
1622 3) The input is complete; compile_command() returned a code
1623 object. The code is executed by calling self.runcode() (which
1623 object. The code is executed by calling self.runcode() (which
1624 also handles run-time exceptions, except for SystemExit).
1624 also handles run-time exceptions, except for SystemExit).
1625
1625
1626 The return value is:
1626 The return value is:
1627
1627
1628 - True in case 2
1628 - True in case 2
1629
1629
1630 - False in the other cases, unless an exception is raised, where
1630 - False in the other cases, unless an exception is raised, where
1631 None is returned instead. This can be used by external callers to
1631 None is returned instead. This can be used by external callers to
1632 know whether to continue feeding input or not.
1632 know whether to continue feeding input or not.
1633
1633
1634 The return value can be used to decide whether to use sys.ps1 or
1634 The return value can be used to decide whether to use sys.ps1 or
1635 sys.ps2 to prompt the next line."""
1635 sys.ps2 to prompt the next line."""
1636
1636
1637 try:
1637 try:
1638 code = self.compile(source,filename,symbol)
1638 code = self.compile(source,filename,symbol)
1639 except (OverflowError, SyntaxError, ValueError):
1639 except (OverflowError, SyntaxError, ValueError):
1640 # Case 1
1640 # Case 1
1641 self.showsyntaxerror(filename)
1641 self.showsyntaxerror(filename)
1642 return None
1642 return None
1643
1643
1644 if code is None:
1644 if code is None:
1645 # Case 2
1645 # Case 2
1646 return True
1646 return True
1647
1647
1648 # Case 3
1648 # Case 3
1649 # We store the code object so that threaded shells and
1649 # We store the code object so that threaded shells and
1650 # custom exception handlers can access all this info if needed.
1650 # custom exception handlers can access all this info if needed.
1651 # The source corresponding to this can be obtained from the
1651 # The source corresponding to this can be obtained from the
1652 # buffer attribute as '\n'.join(self.buffer).
1652 # buffer attribute as '\n'.join(self.buffer).
1653 self.code_to_run = code
1653 self.code_to_run = code
1654 # now actually execute the code object
1654 # now actually execute the code object
1655 if self.runcode(code) == 0:
1655 if self.runcode(code) == 0:
1656 return False
1656 return False
1657 else:
1657 else:
1658 return None
1658 return None
1659
1659
1660 def runcode(self,code_obj):
1660 def runcode(self,code_obj):
1661 """Execute a code object.
1661 """Execute a code object.
1662
1662
1663 When an exception occurs, self.showtraceback() is called to display a
1663 When an exception occurs, self.showtraceback() is called to display a
1664 traceback.
1664 traceback.
1665
1665
1666 Return value: a flag indicating whether the code to be run completed
1666 Return value: a flag indicating whether the code to be run completed
1667 successfully:
1667 successfully:
1668
1668
1669 - 0: successful execution.
1669 - 0: successful execution.
1670 - 1: an error occurred.
1670 - 1: an error occurred.
1671 """
1671 """
1672
1672
1673 # Set our own excepthook in case the user code tries to call it
1673 # Set our own excepthook in case the user code tries to call it
1674 # directly, so that the IPython crash handler doesn't get triggered
1674 # directly, so that the IPython crash handler doesn't get triggered
1675 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1675 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1676
1676
1677 # we save the original sys.excepthook in the instance, in case config
1677 # we save the original sys.excepthook in the instance, in case config
1678 # code (such as magics) needs access to it.
1678 # code (such as magics) needs access to it.
1679 self.sys_excepthook = old_excepthook
1679 self.sys_excepthook = old_excepthook
1680 outflag = 1 # happens in more places, so it's easier as default
1680 outflag = 1 # happens in more places, so it's easier as default
1681 try:
1681 try:
1682 try:
1682 try:
1683 # Embedded instances require separate global/local namespaces
1683 # Embedded instances require separate global/local namespaces
1684 # so they can see both the surrounding (local) namespace and
1684 # so they can see both the surrounding (local) namespace and
1685 # the module-level globals when called inside another function.
1685 # the module-level globals when called inside another function.
1686 if self.embedded:
1686 if self.embedded:
1687 exec code_obj in self.user_global_ns, self.user_ns
1687 exec code_obj in self.user_global_ns, self.user_ns
1688 # Normal (non-embedded) instances should only have a single
1688 # Normal (non-embedded) instances should only have a single
1689 # namespace for user code execution, otherwise functions won't
1689 # namespace for user code execution, otherwise functions won't
1690 # see interactive top-level globals.
1690 # see interactive top-level globals.
1691 else:
1691 else:
1692 exec code_obj in self.user_ns
1692 exec code_obj in self.user_ns
1693 finally:
1693 finally:
1694 # Reset our crash handler in place
1694 # Reset our crash handler in place
1695 sys.excepthook = old_excepthook
1695 sys.excepthook = old_excepthook
1696 except SystemExit:
1696 except SystemExit:
1697 self.resetbuffer()
1697 self.resetbuffer()
1698 self.showtraceback()
1698 self.showtraceback()
1699 warn("Type exit or quit to exit IPython "
1699 warn("Type exit or quit to exit IPython "
1700 "(%Exit or %Quit do so unconditionally).",level=1)
1700 "(%Exit or %Quit do so unconditionally).",level=1)
1701 except self.custom_exceptions:
1701 except self.custom_exceptions:
1702 etype,value,tb = sys.exc_info()
1702 etype,value,tb = sys.exc_info()
1703 self.CustomTB(etype,value,tb)
1703 self.CustomTB(etype,value,tb)
1704 except:
1704 except:
1705 self.showtraceback()
1705 self.showtraceback()
1706 else:
1706 else:
1707 outflag = 0
1707 outflag = 0
1708 if softspace(sys.stdout, 0):
1708 if softspace(sys.stdout, 0):
1709 print
1709 print
1710 # Flush out code object which has been run (and source)
1710 # Flush out code object which has been run (and source)
1711 self.code_to_run = None
1711 self.code_to_run = None
1712 return outflag
1712 return outflag
1713
1713
1714 def push(self, line):
1714 def push(self, line):
1715 """Push a line to the interpreter.
1715 """Push a line to the interpreter.
1716
1716
1717 The line should not have a trailing newline; it may have
1717 The line should not have a trailing newline; it may have
1718 internal newlines. The line is appended to a buffer and the
1718 internal newlines. The line is appended to a buffer and the
1719 interpreter's runsource() method is called with the
1719 interpreter's runsource() method is called with the
1720 concatenated contents of the buffer as source. If this
1720 concatenated contents of the buffer as source. If this
1721 indicates that the command was executed or invalid, the buffer
1721 indicates that the command was executed or invalid, the buffer
1722 is reset; otherwise, the command is incomplete, and the buffer
1722 is reset; otherwise, the command is incomplete, and the buffer
1723 is left as it was after the line was appended. The return
1723 is left as it was after the line was appended. The return
1724 value is 1 if more input is required, 0 if the line was dealt
1724 value is 1 if more input is required, 0 if the line was dealt
1725 with in some way (this is the same as runsource()).
1725 with in some way (this is the same as runsource()).
1726 """
1726 """
1727
1727
1728 # autoindent management should be done here, and not in the
1728 # autoindent management should be done here, and not in the
1729 # interactive loop, since that one is only seen by keyboard input. We
1729 # interactive loop, since that one is only seen by keyboard input. We
1730 # need this done correctly even for code run via runlines (which uses
1730 # need this done correctly even for code run via runlines (which uses
1731 # push).
1731 # push).
1732
1732
1733 #print 'push line: <%s>' % line # dbg
1733 #print 'push line: <%s>' % line # dbg
1734 self.autoindent_update(line)
1734 self.autoindent_update(line)
1735
1735
1736 self.buffer.append(line)
1736 self.buffer.append(line)
1737 more = self.runsource('\n'.join(self.buffer), self.filename)
1737 more = self.runsource('\n'.join(self.buffer), self.filename)
1738 if not more:
1738 if not more:
1739 self.resetbuffer()
1739 self.resetbuffer()
1740 return more
1740 return more
1741
1741
1742 def resetbuffer(self):
1742 def resetbuffer(self):
1743 """Reset the input buffer."""
1743 """Reset the input buffer."""
1744 self.buffer[:] = []
1744 self.buffer[:] = []
1745
1745
1746 def raw_input(self,prompt='',continue_prompt=False):
1746 def raw_input(self,prompt='',continue_prompt=False):
1747 """Write a prompt and read a line.
1747 """Write a prompt and read a line.
1748
1748
1749 The returned line does not include the trailing newline.
1749 The returned line does not include the trailing newline.
1750 When the user enters the EOF key sequence, EOFError is raised.
1750 When the user enters the EOF key sequence, EOFError is raised.
1751
1751
1752 Optional inputs:
1752 Optional inputs:
1753
1753
1754 - prompt(''): a string to be printed to prompt the user.
1754 - prompt(''): a string to be printed to prompt the user.
1755
1755
1756 - continue_prompt(False): whether this line is the first one or a
1756 - continue_prompt(False): whether this line is the first one or a
1757 continuation in a sequence of inputs.
1757 continuation in a sequence of inputs.
1758 """
1758 """
1759
1759
1760 line = raw_input_original(prompt)
1760 line = raw_input_original(prompt)
1761 # Try to be reasonably smart about not re-indenting pasted input more
1761 # Try to be reasonably smart about not re-indenting pasted input more
1762 # than necessary. We do this by trimming out the auto-indent initial
1762 # than necessary. We do this by trimming out the auto-indent initial
1763 # spaces, if the user's actual input started itself with whitespace.
1763 # spaces, if the user's actual input started itself with whitespace.
1764 #debugx('self.buffer[-1]')
1764 #debugx('self.buffer[-1]')
1765
1765
1766 if self.autoindent:
1766 if self.autoindent:
1767 if num_ini_spaces(line) > self.indent_current_nsp:
1767 if num_ini_spaces(line) > self.indent_current_nsp:
1768 line = line[self.indent_current_nsp:]
1768 line = line[self.indent_current_nsp:]
1769 self.indent_current_nsp = 0
1769 self.indent_current_nsp = 0
1770
1770
1771 # store the unfiltered input before the user has any chance to modify
1771 # store the unfiltered input before the user has any chance to modify
1772 # it.
1772 # it.
1773 if line.strip():
1773 if line.strip():
1774 if continue_prompt:
1774 if continue_prompt:
1775 self.input_hist_raw[-1] += '%s\n' % line
1775 self.input_hist_raw[-1] += '%s\n' % line
1776 else:
1776 else:
1777 self.input_hist_raw.append('%s\n' % line)
1777 self.input_hist_raw.append('%s\n' % line)
1778
1778
1779 lineout = self.prefilter(line,continue_prompt)
1779 lineout = self.prefilter(line,continue_prompt)
1780 return lineout
1780 return lineout
1781
1781
1782 def split_user_input(self,line):
1782 def split_user_input(self,line):
1783 """Split user input into pre-char, function part and rest."""
1783 """Split user input into pre-char, function part and rest."""
1784
1784
1785 lsplit = self.line_split.match(line)
1785 lsplit = self.line_split.match(line)
1786 if lsplit is None: # no regexp match returns None
1786 if lsplit is None: # no regexp match returns None
1787 try:
1787 try:
1788 iFun,theRest = line.split(None,1)
1788 iFun,theRest = line.split(None,1)
1789 except ValueError:
1789 except ValueError:
1790 iFun,theRest = line,''
1790 iFun,theRest = line,''
1791 pre = re.match('^(\s*)(.*)',line).groups()[0]
1791 pre = re.match('^(\s*)(.*)',line).groups()[0]
1792 else:
1792 else:
1793 pre,iFun,theRest = lsplit.groups()
1793 pre,iFun,theRest = lsplit.groups()
1794
1794
1795 #print 'line:<%s>' % line # dbg
1795 #print 'line:<%s>' % line # dbg
1796 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1796 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1797 return pre,iFun.strip(),theRest
1797 return pre,iFun.strip(),theRest
1798
1798
1799 def _prefilter(self, line, continue_prompt):
1799 def _prefilter(self, line, continue_prompt):
1800 """Calls different preprocessors, depending on the form of line."""
1800 """Calls different preprocessors, depending on the form of line."""
1801
1801
1802 # All handlers *must* return a value, even if it's blank ('').
1802 # All handlers *must* return a value, even if it's blank ('').
1803
1803
1804 # Lines are NOT logged here. Handlers should process the line as
1804 # Lines are NOT logged here. Handlers should process the line as
1805 # needed, update the cache AND log it (so that the input cache array
1805 # needed, update the cache AND log it (so that the input cache array
1806 # stays synced).
1806 # stays synced).
1807
1807
1808 # This function is _very_ delicate, and since it's also the one which
1808 # This function is _very_ delicate, and since it's also the one which
1809 # determines IPython's response to user input, it must be as efficient
1809 # determines IPython's response to user input, it must be as efficient
1810 # as possible. For this reason it has _many_ returns in it, trying
1810 # as possible. For this reason it has _many_ returns in it, trying
1811 # always to exit as quickly as it can figure out what it needs to do.
1811 # always to exit as quickly as it can figure out what it needs to do.
1812
1812
1813 # This function is the main responsible for maintaining IPython's
1813 # This function is the main responsible for maintaining IPython's
1814 # behavior respectful of Python's semantics. So be _very_ careful if
1814 # behavior respectful of Python's semantics. So be _very_ careful if
1815 # making changes to anything here.
1815 # making changes to anything here.
1816
1816
1817 #.....................................................................
1817 #.....................................................................
1818 # Code begins
1818 # Code begins
1819
1819
1820 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1820 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1821
1821
1822 # save the line away in case we crash, so the post-mortem handler can
1822 # save the line away in case we crash, so the post-mortem handler can
1823 # record it
1823 # record it
1824 self._last_input_line = line
1824 self._last_input_line = line
1825
1825
1826 #print '***line: <%s>' % line # dbg
1826 #print '***line: <%s>' % line # dbg
1827
1827
1828 # the input history needs to track even empty lines
1828 # the input history needs to track even empty lines
1829 stripped = line.strip()
1829 stripped = line.strip()
1830
1830
1831 if not stripped:
1831 if not stripped:
1832 if not continue_prompt:
1832 if not continue_prompt:
1833 self.outputcache.prompt_count -= 1
1833 self.outputcache.prompt_count -= 1
1834 return self.handle_normal(line,continue_prompt)
1834 return self.handle_normal(line,continue_prompt)
1835 #return self.handle_normal('',continue_prompt)
1835 #return self.handle_normal('',continue_prompt)
1836
1836
1837 # print '***cont',continue_prompt # dbg
1837 # print '***cont',continue_prompt # dbg
1838 # special handlers are only allowed for single line statements
1838 # special handlers are only allowed for single line statements
1839 if continue_prompt and not self.rc.multi_line_specials:
1839 if continue_prompt and not self.rc.multi_line_specials:
1840 return self.handle_normal(line,continue_prompt)
1840 return self.handle_normal(line,continue_prompt)
1841
1841
1842
1842
1843 # For the rest, we need the structure of the input
1843 # For the rest, we need the structure of the input
1844 pre,iFun,theRest = self.split_user_input(line)
1844 pre,iFun,theRest = self.split_user_input(line)
1845
1845
1846 # See whether any pre-existing handler can take care of it
1846 # See whether any pre-existing handler can take care of it
1847
1847
1848 rewritten = self.hooks.input_prefilter(stripped)
1848 rewritten = self.hooks.input_prefilter(stripped)
1849 if rewritten != stripped: # ok, some prefilter did something
1849 if rewritten != stripped: # ok, some prefilter did something
1850 rewritten = pre + rewritten # add indentation
1850 rewritten = pre + rewritten # add indentation
1851 return self.handle_normal(rewritten)
1851 return self.handle_normal(rewritten)
1852
1852
1853
1853
1854
1854
1855
1855
1856 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1856 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1857
1857
1858 # First check for explicit escapes in the last/first character
1858 # First check for explicit escapes in the last/first character
1859 handler = None
1859 handler = None
1860 if line[-1] == self.ESC_HELP:
1860 if line[-1] == self.ESC_HELP:
1861 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1861 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1862 if handler is None:
1862 if handler is None:
1863 # look at the first character of iFun, NOT of line, so we skip
1863 # look at the first character of iFun, NOT of line, so we skip
1864 # leading whitespace in multiline input
1864 # leading whitespace in multiline input
1865 handler = self.esc_handlers.get(iFun[0:1])
1865 handler = self.esc_handlers.get(iFun[0:1])
1866 if handler is not None:
1866 if handler is not None:
1867 return handler(line,continue_prompt,pre,iFun,theRest)
1867 return handler(line,continue_prompt,pre,iFun,theRest)
1868 # Emacs ipython-mode tags certain input lines
1868 # Emacs ipython-mode tags certain input lines
1869 if line.endswith('# PYTHON-MODE'):
1869 if line.endswith('# PYTHON-MODE'):
1870 return self.handle_emacs(line,continue_prompt)
1870 return self.handle_emacs(line,continue_prompt)
1871
1871
1872 # Next, check if we can automatically execute this thing
1872 # Next, check if we can automatically execute this thing
1873
1873
1874 # Allow ! in multi-line statements if multi_line_specials is on:
1874 # Allow ! in multi-line statements if multi_line_specials is on:
1875 if continue_prompt and self.rc.multi_line_specials and \
1875 if continue_prompt and self.rc.multi_line_specials and \
1876 iFun.startswith(self.ESC_SHELL):
1876 iFun.startswith(self.ESC_SHELL):
1877 return self.handle_shell_escape(line,continue_prompt,
1877 return self.handle_shell_escape(line,continue_prompt,
1878 pre=pre,iFun=iFun,
1878 pre=pre,iFun=iFun,
1879 theRest=theRest)
1879 theRest=theRest)
1880
1880
1881 # Let's try to find if the input line is a magic fn
1881 # Let's try to find if the input line is a magic fn
1882 oinfo = None
1882 oinfo = None
1883 if hasattr(self,'magic_'+iFun):
1883 if hasattr(self,'magic_'+iFun):
1884 # WARNING: _ofind uses getattr(), so it can consume generators and
1884 # WARNING: _ofind uses getattr(), so it can consume generators and
1885 # cause other side effects.
1885 # cause other side effects.
1886 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1886 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1887 if oinfo['ismagic']:
1887 if oinfo['ismagic']:
1888 # Be careful not to call magics when a variable assignment is
1888 # Be careful not to call magics when a variable assignment is
1889 # being made (ls='hi', for example)
1889 # being made (ls='hi', for example)
1890 if self.rc.automagic and \
1890 if self.rc.automagic and \
1891 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1891 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1892 (self.rc.multi_line_specials or not continue_prompt):
1892 (self.rc.multi_line_specials or not continue_prompt):
1893 return self.handle_magic(line,continue_prompt,
1893 return self.handle_magic(line,continue_prompt,
1894 pre,iFun,theRest)
1894 pre,iFun,theRest)
1895 else:
1895 else:
1896 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1897
1897
1898 # If the rest of the line begins with an (in)equality, assginment or
1898 # If the rest of the line begins with an (in)equality, assginment or
1899 # function call, we should not call _ofind but simply execute it.
1899 # function call, we should not call _ofind but simply execute it.
1900 # This avoids spurious geattr() accesses on objects upon assignment.
1900 # This avoids spurious geattr() accesses on objects upon assignment.
1901 #
1901 #
1902 # It also allows users to assign to either alias or magic names true
1902 # It also allows users to assign to either alias or magic names true
1903 # python variables (the magic/alias systems always take second seat to
1903 # python variables (the magic/alias systems always take second seat to
1904 # true python code).
1904 # true python code).
1905 if theRest and theRest[0] in '!=()':
1905 if theRest and theRest[0] in '!=()':
1906 return self.handle_normal(line,continue_prompt)
1906 return self.handle_normal(line,continue_prompt)
1907
1907
1908 if oinfo is None:
1908 if oinfo is None:
1909 # let's try to ensure that _oinfo is ONLY called when autocall is
1909 # let's try to ensure that _oinfo is ONLY called when autocall is
1910 # on. Since it has inevitable potential side effects, at least
1910 # on. Since it has inevitable potential side effects, at least
1911 # having autocall off should be a guarantee to the user that no
1911 # having autocall off should be a guarantee to the user that no
1912 # weird things will happen.
1912 # weird things will happen.
1913
1913
1914 if self.rc.autocall:
1914 if self.rc.autocall:
1915 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1915 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1916 else:
1916 else:
1917 # in this case, all that's left is either an alias or
1917 # in this case, all that's left is either an alias or
1918 # processing the line normally.
1918 # processing the line normally.
1919 if iFun in self.alias_table:
1919 if iFun in self.alias_table:
1920 return self.handle_alias(line,continue_prompt,
1920 return self.handle_alias(line,continue_prompt,
1921 pre,iFun,theRest)
1921 pre,iFun,theRest)
1922
1922
1923 else:
1923 else:
1924 return self.handle_normal(line,continue_prompt)
1924 return self.handle_normal(line,continue_prompt)
1925
1925
1926 if not oinfo['found']:
1926 if not oinfo['found']:
1927 return self.handle_normal(line,continue_prompt)
1927 return self.handle_normal(line,continue_prompt)
1928 else:
1928 else:
1929 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1929 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1930 if oinfo['isalias']:
1930 if oinfo['isalias']:
1931 return self.handle_alias(line,continue_prompt,
1931 return self.handle_alias(line,continue_prompt,
1932 pre,iFun,theRest)
1932 pre,iFun,theRest)
1933
1933
1934 if (self.rc.autocall
1934 if (self.rc.autocall
1935 and
1935 and
1936 (
1936 (
1937 #only consider exclusion re if not "," or ";" autoquoting
1937 #only consider exclusion re if not "," or ";" autoquoting
1938 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2) or
1938 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2) or
1939 (not self.re_exclude_auto.match(theRest)))
1939 (not self.re_exclude_auto.match(theRest)))
1940 and
1940 and
1941 self.re_fun_name.match(iFun) and
1941 self.re_fun_name.match(iFun) and
1942 callable(oinfo['obj'])) :
1942 callable(oinfo['obj'])) :
1943 #print 'going auto' # dbg
1943 #print 'going auto' # dbg
1944 return self.handle_auto(line,continue_prompt,
1944 return self.handle_auto(line,continue_prompt,
1945 pre,iFun,theRest,oinfo['obj'])
1945 pre,iFun,theRest,oinfo['obj'])
1946 else:
1946 else:
1947 #print 'was callable?', callable(oinfo['obj']) # dbg
1947 #print 'was callable?', callable(oinfo['obj']) # dbg
1948 return self.handle_normal(line,continue_prompt)
1948 return self.handle_normal(line,continue_prompt)
1949
1949
1950 # If we get here, we have a normal Python line. Log and return.
1950 # If we get here, we have a normal Python line. Log and return.
1951 return self.handle_normal(line,continue_prompt)
1951 return self.handle_normal(line,continue_prompt)
1952
1952
1953 def _prefilter_dumb(self, line, continue_prompt):
1953 def _prefilter_dumb(self, line, continue_prompt):
1954 """simple prefilter function, for debugging"""
1954 """simple prefilter function, for debugging"""
1955 return self.handle_normal(line,continue_prompt)
1955 return self.handle_normal(line,continue_prompt)
1956
1956
1957 # Set the default prefilter() function (this can be user-overridden)
1957 # Set the default prefilter() function (this can be user-overridden)
1958 prefilter = _prefilter
1958 prefilter = _prefilter
1959
1959
1960 def handle_normal(self,line,continue_prompt=None,
1960 def handle_normal(self,line,continue_prompt=None,
1961 pre=None,iFun=None,theRest=None):
1961 pre=None,iFun=None,theRest=None):
1962 """Handle normal input lines. Use as a template for handlers."""
1962 """Handle normal input lines. Use as a template for handlers."""
1963
1963
1964 # With autoindent on, we need some way to exit the input loop, and I
1964 # With autoindent on, we need some way to exit the input loop, and I
1965 # don't want to force the user to have to backspace all the way to
1965 # don't want to force the user to have to backspace all the way to
1966 # clear the line. The rule will be in this case, that either two
1966 # clear the line. The rule will be in this case, that either two
1967 # lines of pure whitespace in a row, or a line of pure whitespace but
1967 # lines of pure whitespace in a row, or a line of pure whitespace but
1968 # of a size different to the indent level, will exit the input loop.
1968 # of a size different to the indent level, will exit the input loop.
1969
1969
1970 if (continue_prompt and self.autoindent and line.isspace() and
1970 if (continue_prompt and self.autoindent and line.isspace() and
1971 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1971 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1972 (self.buffer[-1]).isspace() )):
1972 (self.buffer[-1]).isspace() )):
1973 line = ''
1973 line = ''
1974
1974
1975 self.log(line,continue_prompt)
1975 self.log(line,continue_prompt)
1976 return line
1976 return line
1977
1977
1978 def handle_alias(self,line,continue_prompt=None,
1978 def handle_alias(self,line,continue_prompt=None,
1979 pre=None,iFun=None,theRest=None):
1979 pre=None,iFun=None,theRest=None):
1980 """Handle alias input lines. """
1980 """Handle alias input lines. """
1981
1981
1982 # pre is needed, because it carries the leading whitespace. Otherwise
1982 # pre is needed, because it carries the leading whitespace. Otherwise
1983 # aliases won't work in indented sections.
1983 # aliases won't work in indented sections.
1984 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1984 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1985 self.log(line_out,continue_prompt)
1985 self.log(line_out,continue_prompt)
1986 return line_out
1986 return line_out
1987
1987
1988 def handle_shell_escape(self, line, continue_prompt=None,
1988 def handle_shell_escape(self, line, continue_prompt=None,
1989 pre=None,iFun=None,theRest=None):
1989 pre=None,iFun=None,theRest=None):
1990 """Execute the line in a shell, empty return value"""
1990 """Execute the line in a shell, empty return value"""
1991
1991
1992 #print 'line in :', `line` # dbg
1992 #print 'line in :', `line` # dbg
1993 # Example of a special handler. Others follow a similar pattern.
1993 # Example of a special handler. Others follow a similar pattern.
1994 if line.lstrip().startswith('!!'):
1994 if line.lstrip().startswith('!!'):
1995 # rewrite iFun/theRest to properly hold the call to %sx and
1995 # rewrite iFun/theRest to properly hold the call to %sx and
1996 # the actual command to be executed, so handle_magic can work
1996 # the actual command to be executed, so handle_magic can work
1997 # correctly
1997 # correctly
1998 theRest = '%s %s' % (iFun[2:],theRest)
1998 theRest = '%s %s' % (iFun[2:],theRest)
1999 iFun = 'sx'
1999 iFun = 'sx'
2000 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2000 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2001 line.lstrip()[2:]),
2001 line.lstrip()[2:]),
2002 continue_prompt,pre,iFun,theRest)
2002 continue_prompt,pre,iFun,theRest)
2003 else:
2003 else:
2004 cmd=line.lstrip().lstrip('!')
2004 cmd=line.lstrip().lstrip('!')
2005 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2005 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2006 # update cache/log and return
2006 # update cache/log and return
2007 self.log(line_out,continue_prompt)
2007 self.log(line_out,continue_prompt)
2008 return line_out
2008 return line_out
2009
2009
2010 def handle_magic(self, line, continue_prompt=None,
2010 def handle_magic(self, line, continue_prompt=None,
2011 pre=None,iFun=None,theRest=None):
2011 pre=None,iFun=None,theRest=None):
2012 """Execute magic functions."""
2012 """Execute magic functions."""
2013
2013
2014
2014
2015 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2015 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2016 self.log(cmd,continue_prompt)
2016 self.log(cmd,continue_prompt)
2017 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2017 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2018 return cmd
2018 return cmd
2019
2019
2020 def handle_auto(self, line, continue_prompt=None,
2020 def handle_auto(self, line, continue_prompt=None,
2021 pre=None,iFun=None,theRest=None,obj=None):
2021 pre=None,iFun=None,theRest=None,obj=None):
2022 """Hande lines which can be auto-executed, quoting if requested."""
2022 """Hande lines which can be auto-executed, quoting if requested."""
2023
2023
2024 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2024 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2025
2025
2026 # This should only be active for single-line input!
2026 # This should only be active for single-line input!
2027 if continue_prompt:
2027 if continue_prompt:
2028 self.log(line,continue_prompt)
2028 self.log(line,continue_prompt)
2029 return line
2029 return line
2030
2030
2031 auto_rewrite = True
2031 auto_rewrite = True
2032 if pre == self.ESC_QUOTE:
2032 if pre == self.ESC_QUOTE:
2033 # Auto-quote splitting on whitespace
2033 # Auto-quote splitting on whitespace
2034 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2034 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2035 elif pre == self.ESC_QUOTE2:
2035 elif pre == self.ESC_QUOTE2:
2036 # Auto-quote whole string
2036 # Auto-quote whole string
2037 newcmd = '%s("%s")' % (iFun,theRest)
2037 newcmd = '%s("%s")' % (iFun,theRest)
2038 else:
2038 else:
2039 # Auto-paren.
2039 # Auto-paren.
2040 # We only apply it to argument-less calls if the autocall
2040 # We only apply it to argument-less calls if the autocall
2041 # parameter is set to 2. We only need to check that autocall is <
2041 # parameter is set to 2. We only need to check that autocall is <
2042 # 2, since this function isn't called unless it's at least 1.
2042 # 2, since this function isn't called unless it's at least 1.
2043 if not theRest and (self.rc.autocall < 2):
2043 if not theRest and (self.rc.autocall < 2):
2044 newcmd = '%s %s' % (iFun,theRest)
2044 newcmd = '%s %s' % (iFun,theRest)
2045 auto_rewrite = False
2045 auto_rewrite = False
2046 else:
2046 else:
2047 if theRest.startswith('['):
2047 if theRest.startswith('['):
2048 if hasattr(obj,'__getitem__'):
2048 if hasattr(obj,'__getitem__'):
2049 # Don't autocall in this case: item access for an object
2049 # Don't autocall in this case: item access for an object
2050 # which is BOTH callable and implements __getitem__.
2050 # which is BOTH callable and implements __getitem__.
2051 newcmd = '%s %s' % (iFun,theRest)
2051 newcmd = '%s %s' % (iFun,theRest)
2052 auto_rewrite = False
2052 auto_rewrite = False
2053 else:
2053 else:
2054 # if the object doesn't support [] access, go ahead and
2054 # if the object doesn't support [] access, go ahead and
2055 # autocall
2055 # autocall
2056 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2056 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2057 elif theRest.endswith(';'):
2057 elif theRest.endswith(';'):
2058 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2058 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2059 else:
2059 else:
2060 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2060 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2061
2061
2062 if auto_rewrite:
2062 if auto_rewrite:
2063 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2063 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2064 # log what is now valid Python, not the actual user input (without the
2064 # log what is now valid Python, not the actual user input (without the
2065 # final newline)
2065 # final newline)
2066 self.log(newcmd,continue_prompt)
2066 self.log(newcmd,continue_prompt)
2067 return newcmd
2067 return newcmd
2068
2068
2069 def handle_help(self, line, continue_prompt=None,
2069 def handle_help(self, line, continue_prompt=None,
2070 pre=None,iFun=None,theRest=None):
2070 pre=None,iFun=None,theRest=None):
2071 """Try to get some help for the object.
2071 """Try to get some help for the object.
2072
2072
2073 obj? or ?obj -> basic information.
2073 obj? or ?obj -> basic information.
2074 obj?? or ??obj -> more details.
2074 obj?? or ??obj -> more details.
2075 """
2075 """
2076
2076
2077 # We need to make sure that we don't process lines which would be
2077 # We need to make sure that we don't process lines which would be
2078 # otherwise valid python, such as "x=1 # what?"
2078 # otherwise valid python, such as "x=1 # what?"
2079 try:
2079 try:
2080 codeop.compile_command(line)
2080 codeop.compile_command(line)
2081 except SyntaxError:
2081 except SyntaxError:
2082 # We should only handle as help stuff which is NOT valid syntax
2082 # We should only handle as help stuff which is NOT valid syntax
2083 if line[0]==self.ESC_HELP:
2083 if line[0]==self.ESC_HELP:
2084 line = line[1:]
2084 line = line[1:]
2085 elif line[-1]==self.ESC_HELP:
2085 elif line[-1]==self.ESC_HELP:
2086 line = line[:-1]
2086 line = line[:-1]
2087 self.log('#?'+line)
2087 self.log('#?'+line)
2088 if line:
2088 if line:
2089 self.magic_pinfo(line)
2089 self.magic_pinfo(line)
2090 else:
2090 else:
2091 page(self.usage,screen_lines=self.rc.screen_length)
2091 page(self.usage,screen_lines=self.rc.screen_length)
2092 return '' # Empty string is needed here!
2092 return '' # Empty string is needed here!
2093 except:
2093 except:
2094 # Pass any other exceptions through to the normal handler
2094 # Pass any other exceptions through to the normal handler
2095 return self.handle_normal(line,continue_prompt)
2095 return self.handle_normal(line,continue_prompt)
2096 else:
2096 else:
2097 # If the code compiles ok, we should handle it normally
2097 # If the code compiles ok, we should handle it normally
2098 return self.handle_normal(line,continue_prompt)
2098 return self.handle_normal(line,continue_prompt)
2099
2099
2100 def getapi(self):
2101 """ Get an IPApi object for this shell instance
2102
2103 Getting an IPApi object is always preferable to accessing the shell
2104 directly, but this holds true especially for extensions.
2105
2106 It should always be possible to implement an extension with IPApi
2107 alone. If not, contact maintainer to request an addition.
2108
2109 """
2110 return self.api
2111
2100 def handle_emacs(self,line,continue_prompt=None,
2112 def handle_emacs(self,line,continue_prompt=None,
2101 pre=None,iFun=None,theRest=None):
2113 pre=None,iFun=None,theRest=None):
2102 """Handle input lines marked by python-mode."""
2114 """Handle input lines marked by python-mode."""
2103
2115
2104 # Currently, nothing is done. Later more functionality can be added
2116 # Currently, nothing is done. Later more functionality can be added
2105 # here if needed.
2117 # here if needed.
2106
2118
2107 # The input cache shouldn't be updated
2119 # The input cache shouldn't be updated
2108
2120
2109 return line
2121 return line
2110
2122
2111 def mktempfile(self,data=None):
2123 def mktempfile(self,data=None):
2112 """Make a new tempfile and return its filename.
2124 """Make a new tempfile and return its filename.
2113
2125
2114 This makes a call to tempfile.mktemp, but it registers the created
2126 This makes a call to tempfile.mktemp, but it registers the created
2115 filename internally so ipython cleans it up at exit time.
2127 filename internally so ipython cleans it up at exit time.
2116
2128
2117 Optional inputs:
2129 Optional inputs:
2118
2130
2119 - data(None): if data is given, it gets written out to the temp file
2131 - data(None): if data is given, it gets written out to the temp file
2120 immediately, and the file is closed again."""
2132 immediately, and the file is closed again."""
2121
2133
2122 filename = tempfile.mktemp('.py','ipython_edit_')
2134 filename = tempfile.mktemp('.py','ipython_edit_')
2123 self.tempfiles.append(filename)
2135 self.tempfiles.append(filename)
2124
2136
2125 if data:
2137 if data:
2126 tmp_file = open(filename,'w')
2138 tmp_file = open(filename,'w')
2127 tmp_file.write(data)
2139 tmp_file.write(data)
2128 tmp_file.close()
2140 tmp_file.close()
2129 return filename
2141 return filename
2130
2142
2131 def write(self,data):
2143 def write(self,data):
2132 """Write a string to the default output"""
2144 """Write a string to the default output"""
2133 Term.cout.write(data)
2145 Term.cout.write(data)
2134
2146
2135 def write_err(self,data):
2147 def write_err(self,data):
2136 """Write a string to the default error output"""
2148 """Write a string to the default error output"""
2137 Term.cerr.write(data)
2149 Term.cerr.write(data)
2138
2150
2139 def exit(self):
2151 def exit(self):
2140 """Handle interactive exit.
2152 """Handle interactive exit.
2141
2153
2142 This method sets the exit_now attribute."""
2154 This method sets the exit_now attribute."""
2143
2155
2144 if self.rc.confirm_exit:
2156 if self.rc.confirm_exit:
2145 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2157 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2146 self.exit_now = True
2158 self.exit_now = True
2147 else:
2159 else:
2148 self.exit_now = True
2160 self.exit_now = True
2149 return self.exit_now
2161 return self.exit_now
2150
2162
2151 def safe_execfile(self,fname,*where,**kw):
2163 def safe_execfile(self,fname,*where,**kw):
2152 fname = os.path.expanduser(fname)
2164 fname = os.path.expanduser(fname)
2153
2165
2154 # find things also in current directory
2166 # find things also in current directory
2155 dname = os.path.dirname(fname)
2167 dname = os.path.dirname(fname)
2156 if not sys.path.count(dname):
2168 if not sys.path.count(dname):
2157 sys.path.append(dname)
2169 sys.path.append(dname)
2158
2170
2159 try:
2171 try:
2160 xfile = open(fname)
2172 xfile = open(fname)
2161 except:
2173 except:
2162 print >> Term.cerr, \
2174 print >> Term.cerr, \
2163 'Could not open file <%s> for safe execution.' % fname
2175 'Could not open file <%s> for safe execution.' % fname
2164 return None
2176 return None
2165
2177
2166 kw.setdefault('islog',0)
2178 kw.setdefault('islog',0)
2167 kw.setdefault('quiet',1)
2179 kw.setdefault('quiet',1)
2168 kw.setdefault('exit_ignore',0)
2180 kw.setdefault('exit_ignore',0)
2169 first = xfile.readline()
2181 first = xfile.readline()
2170 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2182 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2171 xfile.close()
2183 xfile.close()
2172 # line by line execution
2184 # line by line execution
2173 if first.startswith(loghead) or kw['islog']:
2185 if first.startswith(loghead) or kw['islog']:
2174 print 'Loading log file <%s> one line at a time...' % fname
2186 print 'Loading log file <%s> one line at a time...' % fname
2175 if kw['quiet']:
2187 if kw['quiet']:
2176 stdout_save = sys.stdout
2188 stdout_save = sys.stdout
2177 sys.stdout = StringIO.StringIO()
2189 sys.stdout = StringIO.StringIO()
2178 try:
2190 try:
2179 globs,locs = where[0:2]
2191 globs,locs = where[0:2]
2180 except:
2192 except:
2181 try:
2193 try:
2182 globs = locs = where[0]
2194 globs = locs = where[0]
2183 except:
2195 except:
2184 globs = locs = globals()
2196 globs = locs = globals()
2185 badblocks = []
2197 badblocks = []
2186
2198
2187 # we also need to identify indented blocks of code when replaying
2199 # we also need to identify indented blocks of code when replaying
2188 # logs and put them together before passing them to an exec
2200 # logs and put them together before passing them to an exec
2189 # statement. This takes a bit of regexp and look-ahead work in the
2201 # statement. This takes a bit of regexp and look-ahead work in the
2190 # file. It's easiest if we swallow the whole thing in memory
2202 # file. It's easiest if we swallow the whole thing in memory
2191 # first, and manually walk through the lines list moving the
2203 # first, and manually walk through the lines list moving the
2192 # counter ourselves.
2204 # counter ourselves.
2193 indent_re = re.compile('\s+\S')
2205 indent_re = re.compile('\s+\S')
2194 xfile = open(fname)
2206 xfile = open(fname)
2195 filelines = xfile.readlines()
2207 filelines = xfile.readlines()
2196 xfile.close()
2208 xfile.close()
2197 nlines = len(filelines)
2209 nlines = len(filelines)
2198 lnum = 0
2210 lnum = 0
2199 while lnum < nlines:
2211 while lnum < nlines:
2200 line = filelines[lnum]
2212 line = filelines[lnum]
2201 lnum += 1
2213 lnum += 1
2202 # don't re-insert logger status info into cache
2214 # don't re-insert logger status info into cache
2203 if line.startswith('#log#'):
2215 if line.startswith('#log#'):
2204 continue
2216 continue
2205 else:
2217 else:
2206 # build a block of code (maybe a single line) for execution
2218 # build a block of code (maybe a single line) for execution
2207 block = line
2219 block = line
2208 try:
2220 try:
2209 next = filelines[lnum] # lnum has already incremented
2221 next = filelines[lnum] # lnum has already incremented
2210 except:
2222 except:
2211 next = None
2223 next = None
2212 while next and indent_re.match(next):
2224 while next and indent_re.match(next):
2213 block += next
2225 block += next
2214 lnum += 1
2226 lnum += 1
2215 try:
2227 try:
2216 next = filelines[lnum]
2228 next = filelines[lnum]
2217 except:
2229 except:
2218 next = None
2230 next = None
2219 # now execute the block of one or more lines
2231 # now execute the block of one or more lines
2220 try:
2232 try:
2221 exec block in globs,locs
2233 exec block in globs,locs
2222 except SystemExit:
2234 except SystemExit:
2223 pass
2235 pass
2224 except:
2236 except:
2225 badblocks.append(block.rstrip())
2237 badblocks.append(block.rstrip())
2226 if kw['quiet']: # restore stdout
2238 if kw['quiet']: # restore stdout
2227 sys.stdout.close()
2239 sys.stdout.close()
2228 sys.stdout = stdout_save
2240 sys.stdout = stdout_save
2229 print 'Finished replaying log file <%s>' % fname
2241 print 'Finished replaying log file <%s>' % fname
2230 if badblocks:
2242 if badblocks:
2231 print >> sys.stderr, ('\nThe following lines/blocks in file '
2243 print >> sys.stderr, ('\nThe following lines/blocks in file '
2232 '<%s> reported errors:' % fname)
2244 '<%s> reported errors:' % fname)
2233
2245
2234 for badline in badblocks:
2246 for badline in badblocks:
2235 print >> sys.stderr, badline
2247 print >> sys.stderr, badline
2236 else: # regular file execution
2248 else: # regular file execution
2237 try:
2249 try:
2238 execfile(fname,*where)
2250 execfile(fname,*where)
2239 except SyntaxError:
2251 except SyntaxError:
2240 etype,evalue = sys.exc_info()[:2]
2252 etype,evalue = sys.exc_info()[:2]
2241 self.SyntaxTB(etype,evalue,[])
2253 self.SyntaxTB(etype,evalue,[])
2242 warn('Failure executing file: <%s>' % fname)
2254 warn('Failure executing file: <%s>' % fname)
2243 except SystemExit,status:
2255 except SystemExit,status:
2244 if not kw['exit_ignore']:
2256 if not kw['exit_ignore']:
2245 self.InteractiveTB()
2257 self.InteractiveTB()
2246 warn('Failure executing file: <%s>' % fname)
2258 warn('Failure executing file: <%s>' % fname)
2247 except:
2259 except:
2248 self.InteractiveTB()
2260 self.InteractiveTB()
2249 warn('Failure executing file: <%s>' % fname)
2261 warn('Failure executing file: <%s>' % fname)
2250
2262
2251 #************************* end of file <iplib.py> *****************************
2263 #************************* end of file <iplib.py> *****************************
@@ -1,5089 +1,5096 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
19 written doing self.getapi() instead of using the shell directly.
20
21 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
22 %store foo >> ~/myfoo.txt to store variables to files (in clean
23 textual form, not a restorable pickle).
24
18 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
25 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
19
26
20 * IPython/demo.py (Demo.show): Flush stdout after each block, so
27 * IPython/demo.py (Demo.show): Flush stdout after each block, so
21 computationally intensive blocks don't appear to stall the demo.
28 computationally intensive blocks don't appear to stall the demo.
22
29
23 2006-01-24 Ville Vainio <vivainio@gmail.com>
30 2006-01-24 Ville Vainio <vivainio@gmail.com>
24
31
25 * iplib.py, hooks.py: 'result_display' hook can return a non-None
32 * iplib.py, hooks.py: 'result_display' hook can return a non-None
26 value to manipulate resulting history entry.
33 value to manipulate resulting history entry.
27
34
28 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
35 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
29 to instance methods of IPApi class, to make extending an embedded
36 to instance methods of IPApi class, to make extending an embedded
30 IPython feasible. See ext_rehashdir.py for example usage.
37 IPython feasible. See ext_rehashdir.py for example usage.
31
38
32 * Merged 1071-1076 from banches/0.7.1
39 * Merged 1071-1076 from banches/0.7.1
33
40
34
41
35 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
42 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
36
43
37 * tools/release (daystamp): Fix build tools to use the new
44 * tools/release (daystamp): Fix build tools to use the new
38 eggsetup.py script to build lightweight eggs.
45 eggsetup.py script to build lightweight eggs.
39
46
40 * Applied changesets 1062 and 1064 before 0.7.1 release.
47 * Applied changesets 1062 and 1064 before 0.7.1 release.
41
48
42 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
49 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
43 see the raw input history (without conversions like %ls ->
50 see the raw input history (without conversions like %ls ->
44 ipmagic("ls")). After a request from W. Stein, SAGE
51 ipmagic("ls")). After a request from W. Stein, SAGE
45 (http://modular.ucsd.edu/sage) developer. This information is
52 (http://modular.ucsd.edu/sage) developer. This information is
46 stored in the input_hist_raw attribute of the IPython instance, so
53 stored in the input_hist_raw attribute of the IPython instance, so
47 developers can access it if needed (it's an InputList instance).
54 developers can access it if needed (it's an InputList instance).
48
55
49 * Versionstring = 0.7.2.svn
56 * Versionstring = 0.7.2.svn
50
57
51 * eggsetup.py: A separate script for constructing eggs, creates
58 * eggsetup.py: A separate script for constructing eggs, creates
52 proper launch scripts even on Windows (an .exe file in
59 proper launch scripts even on Windows (an .exe file in
53 \python24\scripts).
60 \python24\scripts).
54
61
55 * ipapi.py: launch_new_instance, launch entry point needed for the
62 * ipapi.py: launch_new_instance, launch entry point needed for the
56 egg.
63 egg.
57
64
58 2006-01-23 Ville Vainio <vivainio@gmail.com>
65 2006-01-23 Ville Vainio <vivainio@gmail.com>
59
66
60 * Added %cpaste magic for pasting python code
67 * Added %cpaste magic for pasting python code
61
68
62 2006-01-22 Ville Vainio <vivainio@gmail.com>
69 2006-01-22 Ville Vainio <vivainio@gmail.com>
63
70
64 * Merge from branches/0.7.1 into trunk, revs 1052-1057
71 * Merge from branches/0.7.1 into trunk, revs 1052-1057
65
72
66 * Versionstring = 0.7.2.svn
73 * Versionstring = 0.7.2.svn
67
74
68 * eggsetup.py: A separate script for constructing eggs, creates
75 * eggsetup.py: A separate script for constructing eggs, creates
69 proper launch scripts even on Windows (an .exe file in
76 proper launch scripts even on Windows (an .exe file in
70 \python24\scripts).
77 \python24\scripts).
71
78
72 * ipapi.py: launch_new_instance, launch entry point needed for the
79 * ipapi.py: launch_new_instance, launch entry point needed for the
73 egg.
80 egg.
74
81
75 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
82 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
76
83
77 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
84 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
78 %pfile foo would print the file for foo even if it was a binary.
85 %pfile foo would print the file for foo even if it was a binary.
79 Now, extensions '.so' and '.dll' are skipped.
86 Now, extensions '.so' and '.dll' are skipped.
80
87
81 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
88 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
82 bug, where macros would fail in all threaded modes. I'm not 100%
89 bug, where macros would fail in all threaded modes. I'm not 100%
83 sure, so I'm going to put out an rc instead of making a release
90 sure, so I'm going to put out an rc instead of making a release
84 today, and wait for feedback for at least a few days.
91 today, and wait for feedback for at least a few days.
85
92
86 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
93 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
87 it...) the handling of pasting external code with autoindent on.
94 it...) the handling of pasting external code with autoindent on.
88 To get out of a multiline input, the rule will appear for most
95 To get out of a multiline input, the rule will appear for most
89 users unchanged: two blank lines or change the indent level
96 users unchanged: two blank lines or change the indent level
90 proposed by IPython. But there is a twist now: you can
97 proposed by IPython. But there is a twist now: you can
91 add/subtract only *one or two spaces*. If you add/subtract three
98 add/subtract only *one or two spaces*. If you add/subtract three
92 or more (unless you completely delete the line), IPython will
99 or more (unless you completely delete the line), IPython will
93 accept that line, and you'll need to enter a second one of pure
100 accept that line, and you'll need to enter a second one of pure
94 whitespace. I know it sounds complicated, but I can't find a
101 whitespace. I know it sounds complicated, but I can't find a
95 different solution that covers all the cases, with the right
102 different solution that covers all the cases, with the right
96 heuristics. Hopefully in actual use, nobody will really notice
103 heuristics. Hopefully in actual use, nobody will really notice
97 all these strange rules and things will 'just work'.
104 all these strange rules and things will 'just work'.
98
105
99 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
106 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
100
107
101 * IPython/iplib.py (interact): catch exceptions which can be
108 * IPython/iplib.py (interact): catch exceptions which can be
102 triggered asynchronously by signal handlers. Thanks to an
109 triggered asynchronously by signal handlers. Thanks to an
103 automatic crash report, submitted by Colin Kingsley
110 automatic crash report, submitted by Colin Kingsley
104 <tercel-AT-gentoo.org>.
111 <tercel-AT-gentoo.org>.
105
112
106 2006-01-20 Ville Vainio <vivainio@gmail.com>
113 2006-01-20 Ville Vainio <vivainio@gmail.com>
107
114
108 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
115 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
109 (%rehashdir, very useful, try it out) of how to extend ipython
116 (%rehashdir, very useful, try it out) of how to extend ipython
110 with new magics. Also added Extensions dir to pythonpath to make
117 with new magics. Also added Extensions dir to pythonpath to make
111 importing extensions easy.
118 importing extensions easy.
112
119
113 * %store now complains when trying to store interactively declared
120 * %store now complains when trying to store interactively declared
114 classes / instances of those classes.
121 classes / instances of those classes.
115
122
116 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
123 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
117 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
124 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
118 if they exist, and ipy_user_conf.py with some defaults is created for
125 if they exist, and ipy_user_conf.py with some defaults is created for
119 the user.
126 the user.
120
127
121 * Startup rehashing done by the config file, not InterpreterExec.
128 * Startup rehashing done by the config file, not InterpreterExec.
122 This means system commands are available even without selecting the
129 This means system commands are available even without selecting the
123 pysh profile. It's the sensible default after all.
130 pysh profile. It's the sensible default after all.
124
131
125 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
132 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
126
133
127 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
134 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
128 multiline code with autoindent on working. But I am really not
135 multiline code with autoindent on working. But I am really not
129 sure, so this needs more testing. Will commit a debug-enabled
136 sure, so this needs more testing. Will commit a debug-enabled
130 version for now, while I test it some more, so that Ville and
137 version for now, while I test it some more, so that Ville and
131 others may also catch any problems. Also made
138 others may also catch any problems. Also made
132 self.indent_current_str() a method, to ensure that there's no
139 self.indent_current_str() a method, to ensure that there's no
133 chance of the indent space count and the corresponding string
140 chance of the indent space count and the corresponding string
134 falling out of sync. All code needing the string should just call
141 falling out of sync. All code needing the string should just call
135 the method.
142 the method.
136
143
137 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
144 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
138
145
139 * IPython/Magic.py (magic_edit): fix check for when users don't
146 * IPython/Magic.py (magic_edit): fix check for when users don't
140 save their output files, the try/except was in the wrong section.
147 save their output files, the try/except was in the wrong section.
141
148
142 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
149 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
143
150
144 * IPython/Magic.py (magic_run): fix __file__ global missing from
151 * IPython/Magic.py (magic_run): fix __file__ global missing from
145 script's namespace when executed via %run. After a report by
152 script's namespace when executed via %run. After a report by
146 Vivian.
153 Vivian.
147
154
148 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
155 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
149 when using python 2.4. The parent constructor changed in 2.4, and
156 when using python 2.4. The parent constructor changed in 2.4, and
150 we need to track it directly (we can't call it, as it messes up
157 we need to track it directly (we can't call it, as it messes up
151 readline and tab-completion inside our pdb would stop working).
158 readline and tab-completion inside our pdb would stop working).
152 After a bug report by R. Bernstein <rocky-AT-panix.com>.
159 After a bug report by R. Bernstein <rocky-AT-panix.com>.
153
160
154 2006-01-16 Ville Vainio <vivainio@gmail.com>
161 2006-01-16 Ville Vainio <vivainio@gmail.com>
155
162
156 * Ipython/magic.py:Reverted back to old %edit functionality
163 * Ipython/magic.py:Reverted back to old %edit functionality
157 that returns file contents on exit.
164 that returns file contents on exit.
158
165
159 * IPython/path.py: Added Jason Orendorff's "path" module to
166 * IPython/path.py: Added Jason Orendorff's "path" module to
160 IPython tree, http://www.jorendorff.com/articles/python/path/.
167 IPython tree, http://www.jorendorff.com/articles/python/path/.
161 You can get path objects conveniently through %sc, and !!, e.g.:
168 You can get path objects conveniently through %sc, and !!, e.g.:
162 sc files=ls
169 sc files=ls
163 for p in files.paths: # or files.p
170 for p in files.paths: # or files.p
164 print p,p.mtime
171 print p,p.mtime
165
172
166 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
173 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
167 now work again without considering the exclusion regexp -
174 now work again without considering the exclusion regexp -
168 hence, things like ',foo my/path' turn to 'foo("my/path")'
175 hence, things like ',foo my/path' turn to 'foo("my/path")'
169 instead of syntax error.
176 instead of syntax error.
170
177
171
178
172 2006-01-14 Ville Vainio <vivainio@gmail.com>
179 2006-01-14 Ville Vainio <vivainio@gmail.com>
173
180
174 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
181 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
175 ipapi decorators for python 2.4 users, options() provides access to rc
182 ipapi decorators for python 2.4 users, options() provides access to rc
176 data.
183 data.
177
184
178 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
185 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
179 as path separators (even on Linux ;-). Space character after
186 as path separators (even on Linux ;-). Space character after
180 backslash (as yielded by tab completer) is still space;
187 backslash (as yielded by tab completer) is still space;
181 "%cd long\ name" works as expected.
188 "%cd long\ name" works as expected.
182
189
183 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
190 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
184 as "chain of command", with priority. API stays the same,
191 as "chain of command", with priority. API stays the same,
185 TryNext exception raised by a hook function signals that
192 TryNext exception raised by a hook function signals that
186 current hook failed and next hook should try handling it, as
193 current hook failed and next hook should try handling it, as
187 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
194 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
188 requested configurable display hook, which is now implemented.
195 requested configurable display hook, which is now implemented.
189
196
190 2006-01-13 Ville Vainio <vivainio@gmail.com>
197 2006-01-13 Ville Vainio <vivainio@gmail.com>
191
198
192 * IPython/platutils*.py: platform specific utility functions,
199 * IPython/platutils*.py: platform specific utility functions,
193 so far only set_term_title is implemented (change terminal
200 so far only set_term_title is implemented (change terminal
194 label in windowing systems). %cd now changes the title to
201 label in windowing systems). %cd now changes the title to
195 current dir.
202 current dir.
196
203
197 * IPython/Release.py: Added myself to "authors" list,
204 * IPython/Release.py: Added myself to "authors" list,
198 had to create new files.
205 had to create new files.
199
206
200 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
207 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
201 shell escape; not a known bug but had potential to be one in the
208 shell escape; not a known bug but had potential to be one in the
202 future.
209 future.
203
210
204 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
211 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
205 extension API for IPython! See the module for usage example. Fix
212 extension API for IPython! See the module for usage example. Fix
206 OInspect for docstring-less magic functions.
213 OInspect for docstring-less magic functions.
207
214
208
215
209 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
216 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
210
217
211 * IPython/iplib.py (raw_input): temporarily deactivate all
218 * IPython/iplib.py (raw_input): temporarily deactivate all
212 attempts at allowing pasting of code with autoindent on. It
219 attempts at allowing pasting of code with autoindent on. It
213 introduced bugs (reported by Prabhu) and I can't seem to find a
220 introduced bugs (reported by Prabhu) and I can't seem to find a
214 robust combination which works in all cases. Will have to revisit
221 robust combination which works in all cases. Will have to revisit
215 later.
222 later.
216
223
217 * IPython/genutils.py: remove isspace() function. We've dropped
224 * IPython/genutils.py: remove isspace() function. We've dropped
218 2.2 compatibility, so it's OK to use the string method.
225 2.2 compatibility, so it's OK to use the string method.
219
226
220 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
227 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
221
228
222 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
229 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
223 matching what NOT to autocall on, to include all python binary
230 matching what NOT to autocall on, to include all python binary
224 operators (including things like 'and', 'or', 'is' and 'in').
231 operators (including things like 'and', 'or', 'is' and 'in').
225 Prompted by a bug report on 'foo & bar', but I realized we had
232 Prompted by a bug report on 'foo & bar', but I realized we had
226 many more potential bug cases with other operators. The regexp is
233 many more potential bug cases with other operators. The regexp is
227 self.re_exclude_auto, it's fairly commented.
234 self.re_exclude_auto, it's fairly commented.
228
235
229 2006-01-12 Ville Vainio <vivainio@gmail.com>
236 2006-01-12 Ville Vainio <vivainio@gmail.com>
230
237
231 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
238 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
232 Prettified and hardened string/backslash quoting with ipsystem(),
239 Prettified and hardened string/backslash quoting with ipsystem(),
233 ipalias() and ipmagic(). Now even \ characters are passed to
240 ipalias() and ipmagic(). Now even \ characters are passed to
234 %magics, !shell escapes and aliases exactly as they are in the
241 %magics, !shell escapes and aliases exactly as they are in the
235 ipython command line. Should improve backslash experience,
242 ipython command line. Should improve backslash experience,
236 particularly in Windows (path delimiter for some commands that
243 particularly in Windows (path delimiter for some commands that
237 won't understand '/'), but Unix benefits as well (regexps). %cd
244 won't understand '/'), but Unix benefits as well (regexps). %cd
238 magic still doesn't support backslash path delimiters, though. Also
245 magic still doesn't support backslash path delimiters, though. Also
239 deleted all pretense of supporting multiline command strings in
246 deleted all pretense of supporting multiline command strings in
240 !system or %magic commands. Thanks to Jerry McRae for suggestions.
247 !system or %magic commands. Thanks to Jerry McRae for suggestions.
241
248
242 * doc/build_doc_instructions.txt added. Documentation on how to
249 * doc/build_doc_instructions.txt added. Documentation on how to
243 use doc/update_manual.py, added yesterday. Both files contributed
250 use doc/update_manual.py, added yesterday. Both files contributed
244 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
251 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
245 doc/*.sh for deprecation at a later date.
252 doc/*.sh for deprecation at a later date.
246
253
247 * /ipython.py Added ipython.py to root directory for
254 * /ipython.py Added ipython.py to root directory for
248 zero-installation (tar xzvf ipython.tgz; cd ipython; python
255 zero-installation (tar xzvf ipython.tgz; cd ipython; python
249 ipython.py) and development convenience (no need to kee doing
256 ipython.py) and development convenience (no need to kee doing
250 "setup.py install" between changes).
257 "setup.py install" between changes).
251
258
252 * Made ! and !! shell escapes work (again) in multiline expressions:
259 * Made ! and !! shell escapes work (again) in multiline expressions:
253 if 1:
260 if 1:
254 !ls
261 !ls
255 !!ls
262 !!ls
256
263
257 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
264 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
258
265
259 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
266 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
260 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
267 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
261 module in case-insensitive installation. Was causing crashes
268 module in case-insensitive installation. Was causing crashes
262 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
269 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
263
270
264 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
271 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
265 <marienz-AT-gentoo.org>, closes
272 <marienz-AT-gentoo.org>, closes
266 http://www.scipy.net/roundup/ipython/issue51.
273 http://www.scipy.net/roundup/ipython/issue51.
267
274
268 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
275 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
269
276
270 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
277 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
271 problem of excessive CPU usage under *nix and keyboard lag under
278 problem of excessive CPU usage under *nix and keyboard lag under
272 win32.
279 win32.
273
280
274 2006-01-10 *** Released version 0.7.0
281 2006-01-10 *** Released version 0.7.0
275
282
276 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
283 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
277
284
278 * IPython/Release.py (revision): tag version number to 0.7.0,
285 * IPython/Release.py (revision): tag version number to 0.7.0,
279 ready for release.
286 ready for release.
280
287
281 * IPython/Magic.py (magic_edit): Add print statement to %edit so
288 * IPython/Magic.py (magic_edit): Add print statement to %edit so
282 it informs the user of the name of the temp. file used. This can
289 it informs the user of the name of the temp. file used. This can
283 help if you decide later to reuse that same file, so you know
290 help if you decide later to reuse that same file, so you know
284 where to copy the info from.
291 where to copy the info from.
285
292
286 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
287
294
288 * setup_bdist_egg.py: little script to build an egg. Added
295 * setup_bdist_egg.py: little script to build an egg. Added
289 support in the release tools as well.
296 support in the release tools as well.
290
297
291 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
298 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
292
299
293 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
300 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
294 version selection (new -wxversion command line and ipythonrc
301 version selection (new -wxversion command line and ipythonrc
295 parameter). Patch contributed by Arnd Baecker
302 parameter). Patch contributed by Arnd Baecker
296 <arnd.baecker-AT-web.de>.
303 <arnd.baecker-AT-web.de>.
297
304
298 * IPython/iplib.py (embed_mainloop): fix tab-completion in
305 * IPython/iplib.py (embed_mainloop): fix tab-completion in
299 embedded instances, for variables defined at the interactive
306 embedded instances, for variables defined at the interactive
300 prompt of the embedded ipython. Reported by Arnd.
307 prompt of the embedded ipython. Reported by Arnd.
301
308
302 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
309 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
303 it can be used as a (stateful) toggle, or with a direct parameter.
310 it can be used as a (stateful) toggle, or with a direct parameter.
304
311
305 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
312 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
306 could be triggered in certain cases and cause the traceback
313 could be triggered in certain cases and cause the traceback
307 printer not to work.
314 printer not to work.
308
315
309 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
316 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
310
317
311 * IPython/iplib.py (_should_recompile): Small fix, closes
318 * IPython/iplib.py (_should_recompile): Small fix, closes
312 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
319 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
313
320
314 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
321 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
315
322
316 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
323 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
317 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
324 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
318 Moad for help with tracking it down.
325 Moad for help with tracking it down.
319
326
320 * IPython/iplib.py (handle_auto): fix autocall handling for
327 * IPython/iplib.py (handle_auto): fix autocall handling for
321 objects which support BOTH __getitem__ and __call__ (so that f [x]
328 objects which support BOTH __getitem__ and __call__ (so that f [x]
322 is left alone, instead of becoming f([x]) automatically).
329 is left alone, instead of becoming f([x]) automatically).
323
330
324 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
331 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
325 Ville's patch.
332 Ville's patch.
326
333
327 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
334 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
328
335
329 * IPython/iplib.py (handle_auto): changed autocall semantics to
336 * IPython/iplib.py (handle_auto): changed autocall semantics to
330 include 'smart' mode, where the autocall transformation is NOT
337 include 'smart' mode, where the autocall transformation is NOT
331 applied if there are no arguments on the line. This allows you to
338 applied if there are no arguments on the line. This allows you to
332 just type 'foo' if foo is a callable to see its internal form,
339 just type 'foo' if foo is a callable to see its internal form,
333 instead of having it called with no arguments (typically a
340 instead of having it called with no arguments (typically a
334 mistake). The old 'full' autocall still exists: for that, you
341 mistake). The old 'full' autocall still exists: for that, you
335 need to set the 'autocall' parameter to 2 in your ipythonrc file.
342 need to set the 'autocall' parameter to 2 in your ipythonrc file.
336
343
337 * IPython/completer.py (Completer.attr_matches): add
344 * IPython/completer.py (Completer.attr_matches): add
338 tab-completion support for Enthoughts' traits. After a report by
345 tab-completion support for Enthoughts' traits. After a report by
339 Arnd and a patch by Prabhu.
346 Arnd and a patch by Prabhu.
340
347
341 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
348 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
342
349
343 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
350 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
344 Schmolck's patch to fix inspect.getinnerframes().
351 Schmolck's patch to fix inspect.getinnerframes().
345
352
346 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
353 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
347 for embedded instances, regarding handling of namespaces and items
354 for embedded instances, regarding handling of namespaces and items
348 added to the __builtin__ one. Multiple embedded instances and
355 added to the __builtin__ one. Multiple embedded instances and
349 recursive embeddings should work better now (though I'm not sure
356 recursive embeddings should work better now (though I'm not sure
350 I've got all the corner cases fixed, that code is a bit of a brain
357 I've got all the corner cases fixed, that code is a bit of a brain
351 twister).
358 twister).
352
359
353 * IPython/Magic.py (magic_edit): added support to edit in-memory
360 * IPython/Magic.py (magic_edit): added support to edit in-memory
354 macros (automatically creates the necessary temp files). %edit
361 macros (automatically creates the necessary temp files). %edit
355 also doesn't return the file contents anymore, it's just noise.
362 also doesn't return the file contents anymore, it's just noise.
356
363
357 * IPython/completer.py (Completer.attr_matches): revert change to
364 * IPython/completer.py (Completer.attr_matches): revert change to
358 complete only on attributes listed in __all__. I realized it
365 complete only on attributes listed in __all__. I realized it
359 cripples the tab-completion system as a tool for exploring the
366 cripples the tab-completion system as a tool for exploring the
360 internals of unknown libraries (it renders any non-__all__
367 internals of unknown libraries (it renders any non-__all__
361 attribute off-limits). I got bit by this when trying to see
368 attribute off-limits). I got bit by this when trying to see
362 something inside the dis module.
369 something inside the dis module.
363
370
364 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
371 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
365
372
366 * IPython/iplib.py (InteractiveShell.__init__): add .meta
373 * IPython/iplib.py (InteractiveShell.__init__): add .meta
367 namespace for users and extension writers to hold data in. This
374 namespace for users and extension writers to hold data in. This
368 follows the discussion in
375 follows the discussion in
369 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
376 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
370
377
371 * IPython/completer.py (IPCompleter.complete): small patch to help
378 * IPython/completer.py (IPCompleter.complete): small patch to help
372 tab-completion under Emacs, after a suggestion by John Barnard
379 tab-completion under Emacs, after a suggestion by John Barnard
373 <barnarj-AT-ccf.org>.
380 <barnarj-AT-ccf.org>.
374
381
375 * IPython/Magic.py (Magic.extract_input_slices): added support for
382 * IPython/Magic.py (Magic.extract_input_slices): added support for
376 the slice notation in magics to use N-M to represent numbers N...M
383 the slice notation in magics to use N-M to represent numbers N...M
377 (closed endpoints). This is used by %macro and %save.
384 (closed endpoints). This is used by %macro and %save.
378
385
379 * IPython/completer.py (Completer.attr_matches): for modules which
386 * IPython/completer.py (Completer.attr_matches): for modules which
380 define __all__, complete only on those. After a patch by Jeffrey
387 define __all__, complete only on those. After a patch by Jeffrey
381 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
388 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
382 speed up this routine.
389 speed up this routine.
383
390
384 * IPython/Logger.py (Logger.log): fix a history handling bug. I
391 * IPython/Logger.py (Logger.log): fix a history handling bug. I
385 don't know if this is the end of it, but the behavior now is
392 don't know if this is the end of it, but the behavior now is
386 certainly much more correct. Note that coupled with macros,
393 certainly much more correct. Note that coupled with macros,
387 slightly surprising (at first) behavior may occur: a macro will in
394 slightly surprising (at first) behavior may occur: a macro will in
388 general expand to multiple lines of input, so upon exiting, the
395 general expand to multiple lines of input, so upon exiting, the
389 in/out counters will both be bumped by the corresponding amount
396 in/out counters will both be bumped by the corresponding amount
390 (as if the macro's contents had been typed interactively). Typing
397 (as if the macro's contents had been typed interactively). Typing
391 %hist will reveal the intermediate (silently processed) lines.
398 %hist will reveal the intermediate (silently processed) lines.
392
399
393 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
400 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
394 pickle to fail (%run was overwriting __main__ and not restoring
401 pickle to fail (%run was overwriting __main__ and not restoring
395 it, but pickle relies on __main__ to operate).
402 it, but pickle relies on __main__ to operate).
396
403
397 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
404 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
398 using properties, but forgot to make the main InteractiveShell
405 using properties, but forgot to make the main InteractiveShell
399 class a new-style class. Properties fail silently, and
406 class a new-style class. Properties fail silently, and
400 misteriously, with old-style class (getters work, but
407 misteriously, with old-style class (getters work, but
401 setters don't do anything).
408 setters don't do anything).
402
409
403 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
410 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
404
411
405 * IPython/Magic.py (magic_history): fix history reporting bug (I
412 * IPython/Magic.py (magic_history): fix history reporting bug (I
406 know some nasties are still there, I just can't seem to find a
413 know some nasties are still there, I just can't seem to find a
407 reproducible test case to track them down; the input history is
414 reproducible test case to track them down; the input history is
408 falling out of sync...)
415 falling out of sync...)
409
416
410 * IPython/iplib.py (handle_shell_escape): fix bug where both
417 * IPython/iplib.py (handle_shell_escape): fix bug where both
411 aliases and system accesses where broken for indented code (such
418 aliases and system accesses where broken for indented code (such
412 as loops).
419 as loops).
413
420
414 * IPython/genutils.py (shell): fix small but critical bug for
421 * IPython/genutils.py (shell): fix small but critical bug for
415 win32 system access.
422 win32 system access.
416
423
417 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
424 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
418
425
419 * IPython/iplib.py (showtraceback): remove use of the
426 * IPython/iplib.py (showtraceback): remove use of the
420 sys.last_{type/value/traceback} structures, which are non
427 sys.last_{type/value/traceback} structures, which are non
421 thread-safe.
428 thread-safe.
422 (_prefilter): change control flow to ensure that we NEVER
429 (_prefilter): change control flow to ensure that we NEVER
423 introspect objects when autocall is off. This will guarantee that
430 introspect objects when autocall is off. This will guarantee that
424 having an input line of the form 'x.y', where access to attribute
431 having an input line of the form 'x.y', where access to attribute
425 'y' has side effects, doesn't trigger the side effect TWICE. It
432 'y' has side effects, doesn't trigger the side effect TWICE. It
426 is important to note that, with autocall on, these side effects
433 is important to note that, with autocall on, these side effects
427 can still happen.
434 can still happen.
428 (ipsystem): new builtin, to complete the ip{magic/alias/system}
435 (ipsystem): new builtin, to complete the ip{magic/alias/system}
429 trio. IPython offers these three kinds of special calls which are
436 trio. IPython offers these three kinds of special calls which are
430 not python code, and it's a good thing to have their call method
437 not python code, and it's a good thing to have their call method
431 be accessible as pure python functions (not just special syntax at
438 be accessible as pure python functions (not just special syntax at
432 the command line). It gives us a better internal implementation
439 the command line). It gives us a better internal implementation
433 structure, as well as exposing these for user scripting more
440 structure, as well as exposing these for user scripting more
434 cleanly.
441 cleanly.
435
442
436 * IPython/macro.py (Macro.__init__): moved macros to a standalone
443 * IPython/macro.py (Macro.__init__): moved macros to a standalone
437 file. Now that they'll be more likely to be used with the
444 file. Now that they'll be more likely to be used with the
438 persistance system (%store), I want to make sure their module path
445 persistance system (%store), I want to make sure their module path
439 doesn't change in the future, so that we don't break things for
446 doesn't change in the future, so that we don't break things for
440 users' persisted data.
447 users' persisted data.
441
448
442 * IPython/iplib.py (autoindent_update): move indentation
449 * IPython/iplib.py (autoindent_update): move indentation
443 management into the _text_ processing loop, not the keyboard
450 management into the _text_ processing loop, not the keyboard
444 interactive one. This is necessary to correctly process non-typed
451 interactive one. This is necessary to correctly process non-typed
445 multiline input (such as macros).
452 multiline input (such as macros).
446
453
447 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
454 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
448 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
455 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
449 which was producing problems in the resulting manual.
456 which was producing problems in the resulting manual.
450 (magic_whos): improve reporting of instances (show their class,
457 (magic_whos): improve reporting of instances (show their class,
451 instead of simply printing 'instance' which isn't terribly
458 instead of simply printing 'instance' which isn't terribly
452 informative).
459 informative).
453
460
454 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
461 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
455 (minor mods) to support network shares under win32.
462 (minor mods) to support network shares under win32.
456
463
457 * IPython/winconsole.py (get_console_size): add new winconsole
464 * IPython/winconsole.py (get_console_size): add new winconsole
458 module and fixes to page_dumb() to improve its behavior under
465 module and fixes to page_dumb() to improve its behavior under
459 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
466 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
460
467
461 * IPython/Magic.py (Macro): simplified Macro class to just
468 * IPython/Magic.py (Macro): simplified Macro class to just
462 subclass list. We've had only 2.2 compatibility for a very long
469 subclass list. We've had only 2.2 compatibility for a very long
463 time, yet I was still avoiding subclassing the builtin types. No
470 time, yet I was still avoiding subclassing the builtin types. No
464 more (I'm also starting to use properties, though I won't shift to
471 more (I'm also starting to use properties, though I won't shift to
465 2.3-specific features quite yet).
472 2.3-specific features quite yet).
466 (magic_store): added Ville's patch for lightweight variable
473 (magic_store): added Ville's patch for lightweight variable
467 persistence, after a request on the user list by Matt Wilkie
474 persistence, after a request on the user list by Matt Wilkie
468 <maphew-AT-gmail.com>. The new %store magic's docstring has full
475 <maphew-AT-gmail.com>. The new %store magic's docstring has full
469 details.
476 details.
470
477
471 * IPython/iplib.py (InteractiveShell.post_config_initialization):
478 * IPython/iplib.py (InteractiveShell.post_config_initialization):
472 changed the default logfile name from 'ipython.log' to
479 changed the default logfile name from 'ipython.log' to
473 'ipython_log.py'. These logs are real python files, and now that
480 'ipython_log.py'. These logs are real python files, and now that
474 we have much better multiline support, people are more likely to
481 we have much better multiline support, people are more likely to
475 want to use them as such. Might as well name them correctly.
482 want to use them as such. Might as well name them correctly.
476
483
477 * IPython/Magic.py: substantial cleanup. While we can't stop
484 * IPython/Magic.py: substantial cleanup. While we can't stop
478 using magics as mixins, due to the existing customizations 'out
485 using magics as mixins, due to the existing customizations 'out
479 there' which rely on the mixin naming conventions, at least I
486 there' which rely on the mixin naming conventions, at least I
480 cleaned out all cross-class name usage. So once we are OK with
487 cleaned out all cross-class name usage. So once we are OK with
481 breaking compatibility, the two systems can be separated.
488 breaking compatibility, the two systems can be separated.
482
489
483 * IPython/Logger.py: major cleanup. This one is NOT a mixin
490 * IPython/Logger.py: major cleanup. This one is NOT a mixin
484 anymore, and the class is a fair bit less hideous as well. New
491 anymore, and the class is a fair bit less hideous as well. New
485 features were also introduced: timestamping of input, and logging
492 features were also introduced: timestamping of input, and logging
486 of output results. These are user-visible with the -t and -o
493 of output results. These are user-visible with the -t and -o
487 options to %logstart. Closes
494 options to %logstart. Closes
488 http://www.scipy.net/roundup/ipython/issue11 and a request by
495 http://www.scipy.net/roundup/ipython/issue11 and a request by
489 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
496 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
490
497
491 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
498 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
492
499
493 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
500 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
494 better hadnle backslashes in paths. See the thread 'More Windows
501 better hadnle backslashes in paths. See the thread 'More Windows
495 questions part 2 - \/ characters revisited' on the iypthon user
502 questions part 2 - \/ characters revisited' on the iypthon user
496 list:
503 list:
497 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
504 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
498
505
499 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
506 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
500
507
501 (InteractiveShell.__init__): change threaded shells to not use the
508 (InteractiveShell.__init__): change threaded shells to not use the
502 ipython crash handler. This was causing more problems than not,
509 ipython crash handler. This was causing more problems than not,
503 as exceptions in the main thread (GUI code, typically) would
510 as exceptions in the main thread (GUI code, typically) would
504 always show up as a 'crash', when they really weren't.
511 always show up as a 'crash', when they really weren't.
505
512
506 The colors and exception mode commands (%colors/%xmode) have been
513 The colors and exception mode commands (%colors/%xmode) have been
507 synchronized to also take this into account, so users can get
514 synchronized to also take this into account, so users can get
508 verbose exceptions for their threaded code as well. I also added
515 verbose exceptions for their threaded code as well. I also added
509 support for activating pdb inside this exception handler as well,
516 support for activating pdb inside this exception handler as well,
510 so now GUI authors can use IPython's enhanced pdb at runtime.
517 so now GUI authors can use IPython's enhanced pdb at runtime.
511
518
512 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
519 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
513 true by default, and add it to the shipped ipythonrc file. Since
520 true by default, and add it to the shipped ipythonrc file. Since
514 this asks the user before proceeding, I think it's OK to make it
521 this asks the user before proceeding, I think it's OK to make it
515 true by default.
522 true by default.
516
523
517 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
524 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
518 of the previous special-casing of input in the eval loop. I think
525 of the previous special-casing of input in the eval loop. I think
519 this is cleaner, as they really are commands and shouldn't have
526 this is cleaner, as they really are commands and shouldn't have
520 a special role in the middle of the core code.
527 a special role in the middle of the core code.
521
528
522 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
529 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
523
530
524 * IPython/iplib.py (edit_syntax_error): added support for
531 * IPython/iplib.py (edit_syntax_error): added support for
525 automatically reopening the editor if the file had a syntax error
532 automatically reopening the editor if the file had a syntax error
526 in it. Thanks to scottt who provided the patch at:
533 in it. Thanks to scottt who provided the patch at:
527 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
534 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
528 version committed).
535 version committed).
529
536
530 * IPython/iplib.py (handle_normal): add suport for multi-line
537 * IPython/iplib.py (handle_normal): add suport for multi-line
531 input with emtpy lines. This fixes
538 input with emtpy lines. This fixes
532 http://www.scipy.net/roundup/ipython/issue43 and a similar
539 http://www.scipy.net/roundup/ipython/issue43 and a similar
533 discussion on the user list.
540 discussion on the user list.
534
541
535 WARNING: a behavior change is necessarily introduced to support
542 WARNING: a behavior change is necessarily introduced to support
536 blank lines: now a single blank line with whitespace does NOT
543 blank lines: now a single blank line with whitespace does NOT
537 break the input loop, which means that when autoindent is on, by
544 break the input loop, which means that when autoindent is on, by
538 default hitting return on the next (indented) line does NOT exit.
545 default hitting return on the next (indented) line does NOT exit.
539
546
540 Instead, to exit a multiline input you can either have:
547 Instead, to exit a multiline input you can either have:
541
548
542 - TWO whitespace lines (just hit return again), or
549 - TWO whitespace lines (just hit return again), or
543 - a single whitespace line of a different length than provided
550 - a single whitespace line of a different length than provided
544 by the autoindent (add or remove a space).
551 by the autoindent (add or remove a space).
545
552
546 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
553 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
547 module to better organize all readline-related functionality.
554 module to better organize all readline-related functionality.
548 I've deleted FlexCompleter and put all completion clases here.
555 I've deleted FlexCompleter and put all completion clases here.
549
556
550 * IPython/iplib.py (raw_input): improve indentation management.
557 * IPython/iplib.py (raw_input): improve indentation management.
551 It is now possible to paste indented code with autoindent on, and
558 It is now possible to paste indented code with autoindent on, and
552 the code is interpreted correctly (though it still looks bad on
559 the code is interpreted correctly (though it still looks bad on
553 screen, due to the line-oriented nature of ipython).
560 screen, due to the line-oriented nature of ipython).
554 (MagicCompleter.complete): change behavior so that a TAB key on an
561 (MagicCompleter.complete): change behavior so that a TAB key on an
555 otherwise empty line actually inserts a tab, instead of completing
562 otherwise empty line actually inserts a tab, instead of completing
556 on the entire global namespace. This makes it easier to use the
563 on the entire global namespace. This makes it easier to use the
557 TAB key for indentation. After a request by Hans Meine
564 TAB key for indentation. After a request by Hans Meine
558 <hans_meine-AT-gmx.net>
565 <hans_meine-AT-gmx.net>
559 (_prefilter): add support so that typing plain 'exit' or 'quit'
566 (_prefilter): add support so that typing plain 'exit' or 'quit'
560 does a sensible thing. Originally I tried to deviate as little as
567 does a sensible thing. Originally I tried to deviate as little as
561 possible from the default python behavior, but even that one may
568 possible from the default python behavior, but even that one may
562 change in this direction (thread on python-dev to that effect).
569 change in this direction (thread on python-dev to that effect).
563 Regardless, ipython should do the right thing even if CPython's
570 Regardless, ipython should do the right thing even if CPython's
564 '>>>' prompt doesn't.
571 '>>>' prompt doesn't.
565 (InteractiveShell): removed subclassing code.InteractiveConsole
572 (InteractiveShell): removed subclassing code.InteractiveConsole
566 class. By now we'd overridden just about all of its methods: I've
573 class. By now we'd overridden just about all of its methods: I've
567 copied the remaining two over, and now ipython is a standalone
574 copied the remaining two over, and now ipython is a standalone
568 class. This will provide a clearer picture for the chainsaw
575 class. This will provide a clearer picture for the chainsaw
569 branch refactoring.
576 branch refactoring.
570
577
571 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
578 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
572
579
573 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
580 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
574 failures for objects which break when dir() is called on them.
581 failures for objects which break when dir() is called on them.
575
582
576 * IPython/FlexCompleter.py (Completer.__init__): Added support for
583 * IPython/FlexCompleter.py (Completer.__init__): Added support for
577 distinct local and global namespaces in the completer API. This
584 distinct local and global namespaces in the completer API. This
578 change allows us top properly handle completion with distinct
585 change allows us top properly handle completion with distinct
579 scopes, including in embedded instances (this had never really
586 scopes, including in embedded instances (this had never really
580 worked correctly).
587 worked correctly).
581
588
582 Note: this introduces a change in the constructor for
589 Note: this introduces a change in the constructor for
583 MagicCompleter, as a new global_namespace parameter is now the
590 MagicCompleter, as a new global_namespace parameter is now the
584 second argument (the others were bumped one position).
591 second argument (the others were bumped one position).
585
592
586 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
593 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
587
594
588 * IPython/iplib.py (embed_mainloop): fix tab-completion in
595 * IPython/iplib.py (embed_mainloop): fix tab-completion in
589 embedded instances (which can be done now thanks to Vivian's
596 embedded instances (which can be done now thanks to Vivian's
590 frame-handling fixes for pdb).
597 frame-handling fixes for pdb).
591 (InteractiveShell.__init__): Fix namespace handling problem in
598 (InteractiveShell.__init__): Fix namespace handling problem in
592 embedded instances. We were overwriting __main__ unconditionally,
599 embedded instances. We were overwriting __main__ unconditionally,
593 and this should only be done for 'full' (non-embedded) IPython;
600 and this should only be done for 'full' (non-embedded) IPython;
594 embedded instances must respect the caller's __main__. Thanks to
601 embedded instances must respect the caller's __main__. Thanks to
595 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
602 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
596
603
597 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
604 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
598
605
599 * setup.py: added download_url to setup(). This registers the
606 * setup.py: added download_url to setup(). This registers the
600 download address at PyPI, which is not only useful to humans
607 download address at PyPI, which is not only useful to humans
601 browsing the site, but is also picked up by setuptools (the Eggs
608 browsing the site, but is also picked up by setuptools (the Eggs
602 machinery). Thanks to Ville and R. Kern for the info/discussion
609 machinery). Thanks to Ville and R. Kern for the info/discussion
603 on this.
610 on this.
604
611
605 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
612 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
606
613
607 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
614 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
608 This brings a lot of nice functionality to the pdb mode, which now
615 This brings a lot of nice functionality to the pdb mode, which now
609 has tab-completion, syntax highlighting, and better stack handling
616 has tab-completion, syntax highlighting, and better stack handling
610 than before. Many thanks to Vivian De Smedt
617 than before. Many thanks to Vivian De Smedt
611 <vivian-AT-vdesmedt.com> for the original patches.
618 <vivian-AT-vdesmedt.com> for the original patches.
612
619
613 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
620 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
614
621
615 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
622 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
616 sequence to consistently accept the banner argument. The
623 sequence to consistently accept the banner argument. The
617 inconsistency was tripping SAGE, thanks to Gary Zablackis
624 inconsistency was tripping SAGE, thanks to Gary Zablackis
618 <gzabl-AT-yahoo.com> for the report.
625 <gzabl-AT-yahoo.com> for the report.
619
626
620 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
627 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
621
628
622 * IPython/iplib.py (InteractiveShell.post_config_initialization):
629 * IPython/iplib.py (InteractiveShell.post_config_initialization):
623 Fix bug where a naked 'alias' call in the ipythonrc file would
630 Fix bug where a naked 'alias' call in the ipythonrc file would
624 cause a crash. Bug reported by Jorgen Stenarson.
631 cause a crash. Bug reported by Jorgen Stenarson.
625
632
626 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
633 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
627
634
628 * IPython/ipmaker.py (make_IPython): cleanups which should improve
635 * IPython/ipmaker.py (make_IPython): cleanups which should improve
629 startup time.
636 startup time.
630
637
631 * IPython/iplib.py (runcode): my globals 'fix' for embedded
638 * IPython/iplib.py (runcode): my globals 'fix' for embedded
632 instances had introduced a bug with globals in normal code. Now
639 instances had introduced a bug with globals in normal code. Now
633 it's working in all cases.
640 it's working in all cases.
634
641
635 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
642 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
636 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
643 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
637 has been introduced to set the default case sensitivity of the
644 has been introduced to set the default case sensitivity of the
638 searches. Users can still select either mode at runtime on a
645 searches. Users can still select either mode at runtime on a
639 per-search basis.
646 per-search basis.
640
647
641 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
648 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
642
649
643 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
650 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
644 attributes in wildcard searches for subclasses. Modified version
651 attributes in wildcard searches for subclasses. Modified version
645 of a patch by Jorgen.
652 of a patch by Jorgen.
646
653
647 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
654 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
648
655
649 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
656 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
650 embedded instances. I added a user_global_ns attribute to the
657 embedded instances. I added a user_global_ns attribute to the
651 InteractiveShell class to handle this.
658 InteractiveShell class to handle this.
652
659
653 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
660 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
654
661
655 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
662 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
656 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
663 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
657 (reported under win32, but may happen also in other platforms).
664 (reported under win32, but may happen also in other platforms).
658 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
665 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
659
666
660 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
667 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
661
668
662 * IPython/Magic.py (magic_psearch): new support for wildcard
669 * IPython/Magic.py (magic_psearch): new support for wildcard
663 patterns. Now, typing ?a*b will list all names which begin with a
670 patterns. Now, typing ?a*b will list all names which begin with a
664 and end in b, for example. The %psearch magic has full
671 and end in b, for example. The %psearch magic has full
665 docstrings. Many thanks to JΓΆrgen Stenarson
672 docstrings. Many thanks to JΓΆrgen Stenarson
666 <jorgen.stenarson-AT-bostream.nu>, author of the patches
673 <jorgen.stenarson-AT-bostream.nu>, author of the patches
667 implementing this functionality.
674 implementing this functionality.
668
675
669 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
676 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
670
677
671 * Manual: fixed long-standing annoyance of double-dashes (as in
678 * Manual: fixed long-standing annoyance of double-dashes (as in
672 --prefix=~, for example) being stripped in the HTML version. This
679 --prefix=~, for example) being stripped in the HTML version. This
673 is a latex2html bug, but a workaround was provided. Many thanks
680 is a latex2html bug, but a workaround was provided. Many thanks
674 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
681 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
675 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
682 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
676 rolling. This seemingly small issue had tripped a number of users
683 rolling. This seemingly small issue had tripped a number of users
677 when first installing, so I'm glad to see it gone.
684 when first installing, so I'm glad to see it gone.
678
685
679 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
686 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
680
687
681 * IPython/Extensions/numeric_formats.py: fix missing import,
688 * IPython/Extensions/numeric_formats.py: fix missing import,
682 reported by Stephen Walton.
689 reported by Stephen Walton.
683
690
684 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
691 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
685
692
686 * IPython/demo.py: finish demo module, fully documented now.
693 * IPython/demo.py: finish demo module, fully documented now.
687
694
688 * IPython/genutils.py (file_read): simple little utility to read a
695 * IPython/genutils.py (file_read): simple little utility to read a
689 file and ensure it's closed afterwards.
696 file and ensure it's closed afterwards.
690
697
691 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
698 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
692
699
693 * IPython/demo.py (Demo.__init__): added support for individually
700 * IPython/demo.py (Demo.__init__): added support for individually
694 tagging blocks for automatic execution.
701 tagging blocks for automatic execution.
695
702
696 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
703 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
697 syntax-highlighted python sources, requested by John.
704 syntax-highlighted python sources, requested by John.
698
705
699 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
706 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
700
707
701 * IPython/demo.py (Demo.again): fix bug where again() blocks after
708 * IPython/demo.py (Demo.again): fix bug where again() blocks after
702 finishing.
709 finishing.
703
710
704 * IPython/genutils.py (shlex_split): moved from Magic to here,
711 * IPython/genutils.py (shlex_split): moved from Magic to here,
705 where all 2.2 compatibility stuff lives. I needed it for demo.py.
712 where all 2.2 compatibility stuff lives. I needed it for demo.py.
706
713
707 * IPython/demo.py (Demo.__init__): added support for silent
714 * IPython/demo.py (Demo.__init__): added support for silent
708 blocks, improved marks as regexps, docstrings written.
715 blocks, improved marks as regexps, docstrings written.
709 (Demo.__init__): better docstring, added support for sys.argv.
716 (Demo.__init__): better docstring, added support for sys.argv.
710
717
711 * IPython/genutils.py (marquee): little utility used by the demo
718 * IPython/genutils.py (marquee): little utility used by the demo
712 code, handy in general.
719 code, handy in general.
713
720
714 * IPython/demo.py (Demo.__init__): new class for interactive
721 * IPython/demo.py (Demo.__init__): new class for interactive
715 demos. Not documented yet, I just wrote it in a hurry for
722 demos. Not documented yet, I just wrote it in a hurry for
716 scipy'05. Will docstring later.
723 scipy'05. Will docstring later.
717
724
718 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
725 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
719
726
720 * IPython/Shell.py (sigint_handler): Drastic simplification which
727 * IPython/Shell.py (sigint_handler): Drastic simplification which
721 also seems to make Ctrl-C work correctly across threads! This is
728 also seems to make Ctrl-C work correctly across threads! This is
722 so simple, that I can't beleive I'd missed it before. Needs more
729 so simple, that I can't beleive I'd missed it before. Needs more
723 testing, though.
730 testing, though.
724 (KBINT): Never mind, revert changes. I'm sure I'd tried something
731 (KBINT): Never mind, revert changes. I'm sure I'd tried something
725 like this before...
732 like this before...
726
733
727 * IPython/genutils.py (get_home_dir): add protection against
734 * IPython/genutils.py (get_home_dir): add protection against
728 non-dirs in win32 registry.
735 non-dirs in win32 registry.
729
736
730 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
737 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
731 bug where dict was mutated while iterating (pysh crash).
738 bug where dict was mutated while iterating (pysh crash).
732
739
733 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
740 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
734
741
735 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
742 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
736 spurious newlines added by this routine. After a report by
743 spurious newlines added by this routine. After a report by
737 F. Mantegazza.
744 F. Mantegazza.
738
745
739 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
746 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
740
747
741 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
748 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
742 calls. These were a leftover from the GTK 1.x days, and can cause
749 calls. These were a leftover from the GTK 1.x days, and can cause
743 problems in certain cases (after a report by John Hunter).
750 problems in certain cases (after a report by John Hunter).
744
751
745 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
752 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
746 os.getcwd() fails at init time. Thanks to patch from David Remahl
753 os.getcwd() fails at init time. Thanks to patch from David Remahl
747 <chmod007-AT-mac.com>.
754 <chmod007-AT-mac.com>.
748 (InteractiveShell.__init__): prevent certain special magics from
755 (InteractiveShell.__init__): prevent certain special magics from
749 being shadowed by aliases. Closes
756 being shadowed by aliases. Closes
750 http://www.scipy.net/roundup/ipython/issue41.
757 http://www.scipy.net/roundup/ipython/issue41.
751
758
752 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
759 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
753
760
754 * IPython/iplib.py (InteractiveShell.complete): Added new
761 * IPython/iplib.py (InteractiveShell.complete): Added new
755 top-level completion method to expose the completion mechanism
762 top-level completion method to expose the completion mechanism
756 beyond readline-based environments.
763 beyond readline-based environments.
757
764
758 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
765 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
759
766
760 * tools/ipsvnc (svnversion): fix svnversion capture.
767 * tools/ipsvnc (svnversion): fix svnversion capture.
761
768
762 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
769 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
763 attribute to self, which was missing. Before, it was set by a
770 attribute to self, which was missing. Before, it was set by a
764 routine which in certain cases wasn't being called, so the
771 routine which in certain cases wasn't being called, so the
765 instance could end up missing the attribute. This caused a crash.
772 instance could end up missing the attribute. This caused a crash.
766 Closes http://www.scipy.net/roundup/ipython/issue40.
773 Closes http://www.scipy.net/roundup/ipython/issue40.
767
774
768 2005-08-16 Fernando Perez <fperez@colorado.edu>
775 2005-08-16 Fernando Perez <fperez@colorado.edu>
769
776
770 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
777 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
771 contains non-string attribute. Closes
778 contains non-string attribute. Closes
772 http://www.scipy.net/roundup/ipython/issue38.
779 http://www.scipy.net/roundup/ipython/issue38.
773
780
774 2005-08-14 Fernando Perez <fperez@colorado.edu>
781 2005-08-14 Fernando Perez <fperez@colorado.edu>
775
782
776 * tools/ipsvnc: Minor improvements, to add changeset info.
783 * tools/ipsvnc: Minor improvements, to add changeset info.
777
784
778 2005-08-12 Fernando Perez <fperez@colorado.edu>
785 2005-08-12 Fernando Perez <fperez@colorado.edu>
779
786
780 * IPython/iplib.py (runsource): remove self.code_to_run_src
787 * IPython/iplib.py (runsource): remove self.code_to_run_src
781 attribute. I realized this is nothing more than
788 attribute. I realized this is nothing more than
782 '\n'.join(self.buffer), and having the same data in two different
789 '\n'.join(self.buffer), and having the same data in two different
783 places is just asking for synchronization bugs. This may impact
790 places is just asking for synchronization bugs. This may impact
784 people who have custom exception handlers, so I need to warn
791 people who have custom exception handlers, so I need to warn
785 ipython-dev about it (F. Mantegazza may use them).
792 ipython-dev about it (F. Mantegazza may use them).
786
793
787 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
794 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
788
795
789 * IPython/genutils.py: fix 2.2 compatibility (generators)
796 * IPython/genutils.py: fix 2.2 compatibility (generators)
790
797
791 2005-07-18 Fernando Perez <fperez@colorado.edu>
798 2005-07-18 Fernando Perez <fperez@colorado.edu>
792
799
793 * IPython/genutils.py (get_home_dir): fix to help users with
800 * IPython/genutils.py (get_home_dir): fix to help users with
794 invalid $HOME under win32.
801 invalid $HOME under win32.
795
802
796 2005-07-17 Fernando Perez <fperez@colorado.edu>
803 2005-07-17 Fernando Perez <fperez@colorado.edu>
797
804
798 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
805 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
799 some old hacks and clean up a bit other routines; code should be
806 some old hacks and clean up a bit other routines; code should be
800 simpler and a bit faster.
807 simpler and a bit faster.
801
808
802 * IPython/iplib.py (interact): removed some last-resort attempts
809 * IPython/iplib.py (interact): removed some last-resort attempts
803 to survive broken stdout/stderr. That code was only making it
810 to survive broken stdout/stderr. That code was only making it
804 harder to abstract out the i/o (necessary for gui integration),
811 harder to abstract out the i/o (necessary for gui integration),
805 and the crashes it could prevent were extremely rare in practice
812 and the crashes it could prevent were extremely rare in practice
806 (besides being fully user-induced in a pretty violent manner).
813 (besides being fully user-induced in a pretty violent manner).
807
814
808 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
815 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
809 Nothing major yet, but the code is simpler to read; this should
816 Nothing major yet, but the code is simpler to read; this should
810 make it easier to do more serious modifications in the future.
817 make it easier to do more serious modifications in the future.
811
818
812 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
819 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
813 which broke in .15 (thanks to a report by Ville).
820 which broke in .15 (thanks to a report by Ville).
814
821
815 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
822 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
816 be quite correct, I know next to nothing about unicode). This
823 be quite correct, I know next to nothing about unicode). This
817 will allow unicode strings to be used in prompts, amongst other
824 will allow unicode strings to be used in prompts, amongst other
818 cases. It also will prevent ipython from crashing when unicode
825 cases. It also will prevent ipython from crashing when unicode
819 shows up unexpectedly in many places. If ascii encoding fails, we
826 shows up unexpectedly in many places. If ascii encoding fails, we
820 assume utf_8. Currently the encoding is not a user-visible
827 assume utf_8. Currently the encoding is not a user-visible
821 setting, though it could be made so if there is demand for it.
828 setting, though it could be made so if there is demand for it.
822
829
823 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
830 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
824
831
825 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
832 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
826
833
827 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
834 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
828
835
829 * IPython/genutils.py: Add 2.2 compatibility here, so all other
836 * IPython/genutils.py: Add 2.2 compatibility here, so all other
830 code can work transparently for 2.2/2.3.
837 code can work transparently for 2.2/2.3.
831
838
832 2005-07-16 Fernando Perez <fperez@colorado.edu>
839 2005-07-16 Fernando Perez <fperez@colorado.edu>
833
840
834 * IPython/ultraTB.py (ExceptionColors): Make a global variable
841 * IPython/ultraTB.py (ExceptionColors): Make a global variable
835 out of the color scheme table used for coloring exception
842 out of the color scheme table used for coloring exception
836 tracebacks. This allows user code to add new schemes at runtime.
843 tracebacks. This allows user code to add new schemes at runtime.
837 This is a minimally modified version of the patch at
844 This is a minimally modified version of the patch at
838 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
845 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
839 for the contribution.
846 for the contribution.
840
847
841 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
848 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
842 slightly modified version of the patch in
849 slightly modified version of the patch in
843 http://www.scipy.net/roundup/ipython/issue34, which also allows me
850 http://www.scipy.net/roundup/ipython/issue34, which also allows me
844 to remove the previous try/except solution (which was costlier).
851 to remove the previous try/except solution (which was costlier).
845 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
852 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
846
853
847 2005-06-08 Fernando Perez <fperez@colorado.edu>
854 2005-06-08 Fernando Perez <fperez@colorado.edu>
848
855
849 * IPython/iplib.py (write/write_err): Add methods to abstract all
856 * IPython/iplib.py (write/write_err): Add methods to abstract all
850 I/O a bit more.
857 I/O a bit more.
851
858
852 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
859 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
853 warning, reported by Aric Hagberg, fix by JD Hunter.
860 warning, reported by Aric Hagberg, fix by JD Hunter.
854
861
855 2005-06-02 *** Released version 0.6.15
862 2005-06-02 *** Released version 0.6.15
856
863
857 2005-06-01 Fernando Perez <fperez@colorado.edu>
864 2005-06-01 Fernando Perez <fperez@colorado.edu>
858
865
859 * IPython/iplib.py (MagicCompleter.file_matches): Fix
866 * IPython/iplib.py (MagicCompleter.file_matches): Fix
860 tab-completion of filenames within open-quoted strings. Note that
867 tab-completion of filenames within open-quoted strings. Note that
861 this requires that in ~/.ipython/ipythonrc, users change the
868 this requires that in ~/.ipython/ipythonrc, users change the
862 readline delimiters configuration to read:
869 readline delimiters configuration to read:
863
870
864 readline_remove_delims -/~
871 readline_remove_delims -/~
865
872
866
873
867 2005-05-31 *** Released version 0.6.14
874 2005-05-31 *** Released version 0.6.14
868
875
869 2005-05-29 Fernando Perez <fperez@colorado.edu>
876 2005-05-29 Fernando Perez <fperez@colorado.edu>
870
877
871 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
878 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
872 with files not on the filesystem. Reported by Eliyahu Sandler
879 with files not on the filesystem. Reported by Eliyahu Sandler
873 <eli@gondolin.net>
880 <eli@gondolin.net>
874
881
875 2005-05-22 Fernando Perez <fperez@colorado.edu>
882 2005-05-22 Fernando Perez <fperez@colorado.edu>
876
883
877 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
884 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
878 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
885 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
879
886
880 2005-05-19 Fernando Perez <fperez@colorado.edu>
887 2005-05-19 Fernando Perez <fperez@colorado.edu>
881
888
882 * IPython/iplib.py (safe_execfile): close a file which could be
889 * IPython/iplib.py (safe_execfile): close a file which could be
883 left open (causing problems in win32, which locks open files).
890 left open (causing problems in win32, which locks open files).
884 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
891 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
885
892
886 2005-05-18 Fernando Perez <fperez@colorado.edu>
893 2005-05-18 Fernando Perez <fperez@colorado.edu>
887
894
888 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
895 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
889 keyword arguments correctly to safe_execfile().
896 keyword arguments correctly to safe_execfile().
890
897
891 2005-05-13 Fernando Perez <fperez@colorado.edu>
898 2005-05-13 Fernando Perez <fperez@colorado.edu>
892
899
893 * ipython.1: Added info about Qt to manpage, and threads warning
900 * ipython.1: Added info about Qt to manpage, and threads warning
894 to usage page (invoked with --help).
901 to usage page (invoked with --help).
895
902
896 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
903 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
897 new matcher (it goes at the end of the priority list) to do
904 new matcher (it goes at the end of the priority list) to do
898 tab-completion on named function arguments. Submitted by George
905 tab-completion on named function arguments. Submitted by George
899 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
906 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
900 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
907 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
901 for more details.
908 for more details.
902
909
903 * IPython/Magic.py (magic_run): Added new -e flag to ignore
910 * IPython/Magic.py (magic_run): Added new -e flag to ignore
904 SystemExit exceptions in the script being run. Thanks to a report
911 SystemExit exceptions in the script being run. Thanks to a report
905 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
912 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
906 producing very annoying behavior when running unit tests.
913 producing very annoying behavior when running unit tests.
907
914
908 2005-05-12 Fernando Perez <fperez@colorado.edu>
915 2005-05-12 Fernando Perez <fperez@colorado.edu>
909
916
910 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
917 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
911 which I'd broken (again) due to a changed regexp. In the process,
918 which I'd broken (again) due to a changed regexp. In the process,
912 added ';' as an escape to auto-quote the whole line without
919 added ';' as an escape to auto-quote the whole line without
913 splitting its arguments. Thanks to a report by Jerry McRae
920 splitting its arguments. Thanks to a report by Jerry McRae
914 <qrs0xyc02-AT-sneakemail.com>.
921 <qrs0xyc02-AT-sneakemail.com>.
915
922
916 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
923 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
917 possible crashes caused by a TokenError. Reported by Ed Schofield
924 possible crashes caused by a TokenError. Reported by Ed Schofield
918 <schofield-AT-ftw.at>.
925 <schofield-AT-ftw.at>.
919
926
920 2005-05-06 Fernando Perez <fperez@colorado.edu>
927 2005-05-06 Fernando Perez <fperez@colorado.edu>
921
928
922 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
929 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
923
930
924 2005-04-29 Fernando Perez <fperez@colorado.edu>
931 2005-04-29 Fernando Perez <fperez@colorado.edu>
925
932
926 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
933 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
927 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
934 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
928 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
935 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
929 which provides support for Qt interactive usage (similar to the
936 which provides support for Qt interactive usage (similar to the
930 existing one for WX and GTK). This had been often requested.
937 existing one for WX and GTK). This had been often requested.
931
938
932 2005-04-14 *** Released version 0.6.13
939 2005-04-14 *** Released version 0.6.13
933
940
934 2005-04-08 Fernando Perez <fperez@colorado.edu>
941 2005-04-08 Fernando Perez <fperez@colorado.edu>
935
942
936 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
943 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
937 from _ofind, which gets called on almost every input line. Now,
944 from _ofind, which gets called on almost every input line. Now,
938 we only try to get docstrings if they are actually going to be
945 we only try to get docstrings if they are actually going to be
939 used (the overhead of fetching unnecessary docstrings can be
946 used (the overhead of fetching unnecessary docstrings can be
940 noticeable for certain objects, such as Pyro proxies).
947 noticeable for certain objects, such as Pyro proxies).
941
948
942 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
949 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
943 for completers. For some reason I had been passing them the state
950 for completers. For some reason I had been passing them the state
944 variable, which completers never actually need, and was in
951 variable, which completers never actually need, and was in
945 conflict with the rlcompleter API. Custom completers ONLY need to
952 conflict with the rlcompleter API. Custom completers ONLY need to
946 take the text parameter.
953 take the text parameter.
947
954
948 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
955 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
949 work correctly in pysh. I've also moved all the logic which used
956 work correctly in pysh. I've also moved all the logic which used
950 to be in pysh.py here, which will prevent problems with future
957 to be in pysh.py here, which will prevent problems with future
951 upgrades. However, this time I must warn users to update their
958 upgrades. However, this time I must warn users to update their
952 pysh profile to include the line
959 pysh profile to include the line
953
960
954 import_all IPython.Extensions.InterpreterExec
961 import_all IPython.Extensions.InterpreterExec
955
962
956 because otherwise things won't work for them. They MUST also
963 because otherwise things won't work for them. They MUST also
957 delete pysh.py and the line
964 delete pysh.py and the line
958
965
959 execfile pysh.py
966 execfile pysh.py
960
967
961 from their ipythonrc-pysh.
968 from their ipythonrc-pysh.
962
969
963 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
970 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
964 robust in the face of objects whose dir() returns non-strings
971 robust in the face of objects whose dir() returns non-strings
965 (which it shouldn't, but some broken libs like ITK do). Thanks to
972 (which it shouldn't, but some broken libs like ITK do). Thanks to
966 a patch by John Hunter (implemented differently, though). Also
973 a patch by John Hunter (implemented differently, though). Also
967 minor improvements by using .extend instead of + on lists.
974 minor improvements by using .extend instead of + on lists.
968
975
969 * pysh.py:
976 * pysh.py:
970
977
971 2005-04-06 Fernando Perez <fperez@colorado.edu>
978 2005-04-06 Fernando Perez <fperez@colorado.edu>
972
979
973 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
980 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
974 by default, so that all users benefit from it. Those who don't
981 by default, so that all users benefit from it. Those who don't
975 want it can still turn it off.
982 want it can still turn it off.
976
983
977 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
984 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
978 config file, I'd forgotten about this, so users were getting it
985 config file, I'd forgotten about this, so users were getting it
979 off by default.
986 off by default.
980
987
981 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
988 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
982 consistency. Now magics can be called in multiline statements,
989 consistency. Now magics can be called in multiline statements,
983 and python variables can be expanded in magic calls via $var.
990 and python variables can be expanded in magic calls via $var.
984 This makes the magic system behave just like aliases or !system
991 This makes the magic system behave just like aliases or !system
985 calls.
992 calls.
986
993
987 2005-03-28 Fernando Perez <fperez@colorado.edu>
994 2005-03-28 Fernando Perez <fperez@colorado.edu>
988
995
989 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
996 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
990 expensive string additions for building command. Add support for
997 expensive string additions for building command. Add support for
991 trailing ';' when autocall is used.
998 trailing ';' when autocall is used.
992
999
993 2005-03-26 Fernando Perez <fperez@colorado.edu>
1000 2005-03-26 Fernando Perez <fperez@colorado.edu>
994
1001
995 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1002 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
996 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1003 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
997 ipython.el robust against prompts with any number of spaces
1004 ipython.el robust against prompts with any number of spaces
998 (including 0) after the ':' character.
1005 (including 0) after the ':' character.
999
1006
1000 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1007 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1001 continuation prompt, which misled users to think the line was
1008 continuation prompt, which misled users to think the line was
1002 already indented. Closes debian Bug#300847, reported to me by
1009 already indented. Closes debian Bug#300847, reported to me by
1003 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1010 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1004
1011
1005 2005-03-23 Fernando Perez <fperez@colorado.edu>
1012 2005-03-23 Fernando Perez <fperez@colorado.edu>
1006
1013
1007 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1014 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1008 properly aligned if they have embedded newlines.
1015 properly aligned if they have embedded newlines.
1009
1016
1010 * IPython/iplib.py (runlines): Add a public method to expose
1017 * IPython/iplib.py (runlines): Add a public method to expose
1011 IPython's code execution machinery, so that users can run strings
1018 IPython's code execution machinery, so that users can run strings
1012 as if they had been typed at the prompt interactively.
1019 as if they had been typed at the prompt interactively.
1013 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1020 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1014 methods which can call the system shell, but with python variable
1021 methods which can call the system shell, but with python variable
1015 expansion. The three such methods are: __IPYTHON__.system,
1022 expansion. The three such methods are: __IPYTHON__.system,
1016 .getoutput and .getoutputerror. These need to be documented in a
1023 .getoutput and .getoutputerror. These need to be documented in a
1017 'public API' section (to be written) of the manual.
1024 'public API' section (to be written) of the manual.
1018
1025
1019 2005-03-20 Fernando Perez <fperez@colorado.edu>
1026 2005-03-20 Fernando Perez <fperez@colorado.edu>
1020
1027
1021 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1028 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1022 for custom exception handling. This is quite powerful, and it
1029 for custom exception handling. This is quite powerful, and it
1023 allows for user-installable exception handlers which can trap
1030 allows for user-installable exception handlers which can trap
1024 custom exceptions at runtime and treat them separately from
1031 custom exceptions at runtime and treat them separately from
1025 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1032 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1026 Mantegazza <mantegazza-AT-ill.fr>.
1033 Mantegazza <mantegazza-AT-ill.fr>.
1027 (InteractiveShell.set_custom_completer): public API function to
1034 (InteractiveShell.set_custom_completer): public API function to
1028 add new completers at runtime.
1035 add new completers at runtime.
1029
1036
1030 2005-03-19 Fernando Perez <fperez@colorado.edu>
1037 2005-03-19 Fernando Perez <fperez@colorado.edu>
1031
1038
1032 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1039 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1033 allow objects which provide their docstrings via non-standard
1040 allow objects which provide their docstrings via non-standard
1034 mechanisms (like Pyro proxies) to still be inspected by ipython's
1041 mechanisms (like Pyro proxies) to still be inspected by ipython's
1035 ? system.
1042 ? system.
1036
1043
1037 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1044 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1038 automatic capture system. I tried quite hard to make it work
1045 automatic capture system. I tried quite hard to make it work
1039 reliably, and simply failed. I tried many combinations with the
1046 reliably, and simply failed. I tried many combinations with the
1040 subprocess module, but eventually nothing worked in all needed
1047 subprocess module, but eventually nothing worked in all needed
1041 cases (not blocking stdin for the child, duplicating stdout
1048 cases (not blocking stdin for the child, duplicating stdout
1042 without blocking, etc). The new %sc/%sx still do capture to these
1049 without blocking, etc). The new %sc/%sx still do capture to these
1043 magical list/string objects which make shell use much more
1050 magical list/string objects which make shell use much more
1044 conveninent, so not all is lost.
1051 conveninent, so not all is lost.
1045
1052
1046 XXX - FIX MANUAL for the change above!
1053 XXX - FIX MANUAL for the change above!
1047
1054
1048 (runsource): I copied code.py's runsource() into ipython to modify
1055 (runsource): I copied code.py's runsource() into ipython to modify
1049 it a bit. Now the code object and source to be executed are
1056 it a bit. Now the code object and source to be executed are
1050 stored in ipython. This makes this info accessible to third-party
1057 stored in ipython. This makes this info accessible to third-party
1051 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1058 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1052 Mantegazza <mantegazza-AT-ill.fr>.
1059 Mantegazza <mantegazza-AT-ill.fr>.
1053
1060
1054 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1061 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1055 history-search via readline (like C-p/C-n). I'd wanted this for a
1062 history-search via readline (like C-p/C-n). I'd wanted this for a
1056 long time, but only recently found out how to do it. For users
1063 long time, but only recently found out how to do it. For users
1057 who already have their ipythonrc files made and want this, just
1064 who already have their ipythonrc files made and want this, just
1058 add:
1065 add:
1059
1066
1060 readline_parse_and_bind "\e[A": history-search-backward
1067 readline_parse_and_bind "\e[A": history-search-backward
1061 readline_parse_and_bind "\e[B": history-search-forward
1068 readline_parse_and_bind "\e[B": history-search-forward
1062
1069
1063 2005-03-18 Fernando Perez <fperez@colorado.edu>
1070 2005-03-18 Fernando Perez <fperez@colorado.edu>
1064
1071
1065 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1072 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1066 LSString and SList classes which allow transparent conversions
1073 LSString and SList classes which allow transparent conversions
1067 between list mode and whitespace-separated string.
1074 between list mode and whitespace-separated string.
1068 (magic_r): Fix recursion problem in %r.
1075 (magic_r): Fix recursion problem in %r.
1069
1076
1070 * IPython/genutils.py (LSString): New class to be used for
1077 * IPython/genutils.py (LSString): New class to be used for
1071 automatic storage of the results of all alias/system calls in _o
1078 automatic storage of the results of all alias/system calls in _o
1072 and _e (stdout/err). These provide a .l/.list attribute which
1079 and _e (stdout/err). These provide a .l/.list attribute which
1073 does automatic splitting on newlines. This means that for most
1080 does automatic splitting on newlines. This means that for most
1074 uses, you'll never need to do capturing of output with %sc/%sx
1081 uses, you'll never need to do capturing of output with %sc/%sx
1075 anymore, since ipython keeps this always done for you. Note that
1082 anymore, since ipython keeps this always done for you. Note that
1076 only the LAST results are stored, the _o/e variables are
1083 only the LAST results are stored, the _o/e variables are
1077 overwritten on each call. If you need to save their contents
1084 overwritten on each call. If you need to save their contents
1078 further, simply bind them to any other name.
1085 further, simply bind them to any other name.
1079
1086
1080 2005-03-17 Fernando Perez <fperez@colorado.edu>
1087 2005-03-17 Fernando Perez <fperez@colorado.edu>
1081
1088
1082 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1089 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1083 prompt namespace handling.
1090 prompt namespace handling.
1084
1091
1085 2005-03-16 Fernando Perez <fperez@colorado.edu>
1092 2005-03-16 Fernando Perez <fperez@colorado.edu>
1086
1093
1087 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1094 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1088 classic prompts to be '>>> ' (final space was missing, and it
1095 classic prompts to be '>>> ' (final space was missing, and it
1089 trips the emacs python mode).
1096 trips the emacs python mode).
1090 (BasePrompt.__str__): Added safe support for dynamic prompt
1097 (BasePrompt.__str__): Added safe support for dynamic prompt
1091 strings. Now you can set your prompt string to be '$x', and the
1098 strings. Now you can set your prompt string to be '$x', and the
1092 value of x will be printed from your interactive namespace. The
1099 value of x will be printed from your interactive namespace. The
1093 interpolation syntax includes the full Itpl support, so
1100 interpolation syntax includes the full Itpl support, so
1094 ${foo()+x+bar()} is a valid prompt string now, and the function
1101 ${foo()+x+bar()} is a valid prompt string now, and the function
1095 calls will be made at runtime.
1102 calls will be made at runtime.
1096
1103
1097 2005-03-15 Fernando Perez <fperez@colorado.edu>
1104 2005-03-15 Fernando Perez <fperez@colorado.edu>
1098
1105
1099 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1106 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1100 avoid name clashes in pylab. %hist still works, it just forwards
1107 avoid name clashes in pylab. %hist still works, it just forwards
1101 the call to %history.
1108 the call to %history.
1102
1109
1103 2005-03-02 *** Released version 0.6.12
1110 2005-03-02 *** Released version 0.6.12
1104
1111
1105 2005-03-02 Fernando Perez <fperez@colorado.edu>
1112 2005-03-02 Fernando Perez <fperez@colorado.edu>
1106
1113
1107 * IPython/iplib.py (handle_magic): log magic calls properly as
1114 * IPython/iplib.py (handle_magic): log magic calls properly as
1108 ipmagic() function calls.
1115 ipmagic() function calls.
1109
1116
1110 * IPython/Magic.py (magic_time): Improved %time to support
1117 * IPython/Magic.py (magic_time): Improved %time to support
1111 statements and provide wall-clock as well as CPU time.
1118 statements and provide wall-clock as well as CPU time.
1112
1119
1113 2005-02-27 Fernando Perez <fperez@colorado.edu>
1120 2005-02-27 Fernando Perez <fperez@colorado.edu>
1114
1121
1115 * IPython/hooks.py: New hooks module, to expose user-modifiable
1122 * IPython/hooks.py: New hooks module, to expose user-modifiable
1116 IPython functionality in a clean manner. For now only the editor
1123 IPython functionality in a clean manner. For now only the editor
1117 hook is actually written, and other thigns which I intend to turn
1124 hook is actually written, and other thigns which I intend to turn
1118 into proper hooks aren't yet there. The display and prefilter
1125 into proper hooks aren't yet there. The display and prefilter
1119 stuff, for example, should be hooks. But at least now the
1126 stuff, for example, should be hooks. But at least now the
1120 framework is in place, and the rest can be moved here with more
1127 framework is in place, and the rest can be moved here with more
1121 time later. IPython had had a .hooks variable for a long time for
1128 time later. IPython had had a .hooks variable for a long time for
1122 this purpose, but I'd never actually used it for anything.
1129 this purpose, but I'd never actually used it for anything.
1123
1130
1124 2005-02-26 Fernando Perez <fperez@colorado.edu>
1131 2005-02-26 Fernando Perez <fperez@colorado.edu>
1125
1132
1126 * IPython/ipmaker.py (make_IPython): make the default ipython
1133 * IPython/ipmaker.py (make_IPython): make the default ipython
1127 directory be called _ipython under win32, to follow more the
1134 directory be called _ipython under win32, to follow more the
1128 naming peculiarities of that platform (where buggy software like
1135 naming peculiarities of that platform (where buggy software like
1129 Visual Sourcesafe breaks with .named directories). Reported by
1136 Visual Sourcesafe breaks with .named directories). Reported by
1130 Ville Vainio.
1137 Ville Vainio.
1131
1138
1132 2005-02-23 Fernando Perez <fperez@colorado.edu>
1139 2005-02-23 Fernando Perez <fperez@colorado.edu>
1133
1140
1134 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1141 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1135 auto_aliases for win32 which were causing problems. Users can
1142 auto_aliases for win32 which were causing problems. Users can
1136 define the ones they personally like.
1143 define the ones they personally like.
1137
1144
1138 2005-02-21 Fernando Perez <fperez@colorado.edu>
1145 2005-02-21 Fernando Perez <fperez@colorado.edu>
1139
1146
1140 * IPython/Magic.py (magic_time): new magic to time execution of
1147 * IPython/Magic.py (magic_time): new magic to time execution of
1141 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1148 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1142
1149
1143 2005-02-19 Fernando Perez <fperez@colorado.edu>
1150 2005-02-19 Fernando Perez <fperez@colorado.edu>
1144
1151
1145 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1152 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1146 into keys (for prompts, for example).
1153 into keys (for prompts, for example).
1147
1154
1148 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1155 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1149 prompts in case users want them. This introduces a small behavior
1156 prompts in case users want them. This introduces a small behavior
1150 change: ipython does not automatically add a space to all prompts
1157 change: ipython does not automatically add a space to all prompts
1151 anymore. To get the old prompts with a space, users should add it
1158 anymore. To get the old prompts with a space, users should add it
1152 manually to their ipythonrc file, so for example prompt_in1 should
1159 manually to their ipythonrc file, so for example prompt_in1 should
1153 now read 'In [\#]: ' instead of 'In [\#]:'.
1160 now read 'In [\#]: ' instead of 'In [\#]:'.
1154 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1161 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1155 file) to control left-padding of secondary prompts.
1162 file) to control left-padding of secondary prompts.
1156
1163
1157 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1164 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1158 the profiler can't be imported. Fix for Debian, which removed
1165 the profiler can't be imported. Fix for Debian, which removed
1159 profile.py because of License issues. I applied a slightly
1166 profile.py because of License issues. I applied a slightly
1160 modified version of the original Debian patch at
1167 modified version of the original Debian patch at
1161 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1168 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1162
1169
1163 2005-02-17 Fernando Perez <fperez@colorado.edu>
1170 2005-02-17 Fernando Perez <fperez@colorado.edu>
1164
1171
1165 * IPython/genutils.py (native_line_ends): Fix bug which would
1172 * IPython/genutils.py (native_line_ends): Fix bug which would
1166 cause improper line-ends under win32 b/c I was not opening files
1173 cause improper line-ends under win32 b/c I was not opening files
1167 in binary mode. Bug report and fix thanks to Ville.
1174 in binary mode. Bug report and fix thanks to Ville.
1168
1175
1169 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1176 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1170 trying to catch spurious foo[1] autocalls. My fix actually broke
1177 trying to catch spurious foo[1] autocalls. My fix actually broke
1171 ',/' autoquote/call with explicit escape (bad regexp).
1178 ',/' autoquote/call with explicit escape (bad regexp).
1172
1179
1173 2005-02-15 *** Released version 0.6.11
1180 2005-02-15 *** Released version 0.6.11
1174
1181
1175 2005-02-14 Fernando Perez <fperez@colorado.edu>
1182 2005-02-14 Fernando Perez <fperez@colorado.edu>
1176
1183
1177 * IPython/background_jobs.py: New background job management
1184 * IPython/background_jobs.py: New background job management
1178 subsystem. This is implemented via a new set of classes, and
1185 subsystem. This is implemented via a new set of classes, and
1179 IPython now provides a builtin 'jobs' object for background job
1186 IPython now provides a builtin 'jobs' object for background job
1180 execution. A convenience %bg magic serves as a lightweight
1187 execution. A convenience %bg magic serves as a lightweight
1181 frontend for starting the more common type of calls. This was
1188 frontend for starting the more common type of calls. This was
1182 inspired by discussions with B. Granger and the BackgroundCommand
1189 inspired by discussions with B. Granger and the BackgroundCommand
1183 class described in the book Python Scripting for Computational
1190 class described in the book Python Scripting for Computational
1184 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1191 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1185 (although ultimately no code from this text was used, as IPython's
1192 (although ultimately no code from this text was used, as IPython's
1186 system is a separate implementation).
1193 system is a separate implementation).
1187
1194
1188 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1195 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1189 to control the completion of single/double underscore names
1196 to control the completion of single/double underscore names
1190 separately. As documented in the example ipytonrc file, the
1197 separately. As documented in the example ipytonrc file, the
1191 readline_omit__names variable can now be set to 2, to omit even
1198 readline_omit__names variable can now be set to 2, to omit even
1192 single underscore names. Thanks to a patch by Brian Wong
1199 single underscore names. Thanks to a patch by Brian Wong
1193 <BrianWong-AT-AirgoNetworks.Com>.
1200 <BrianWong-AT-AirgoNetworks.Com>.
1194 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1201 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1195 be autocalled as foo([1]) if foo were callable. A problem for
1202 be autocalled as foo([1]) if foo were callable. A problem for
1196 things which are both callable and implement __getitem__.
1203 things which are both callable and implement __getitem__.
1197 (init_readline): Fix autoindentation for win32. Thanks to a patch
1204 (init_readline): Fix autoindentation for win32. Thanks to a patch
1198 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1205 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1199
1206
1200 2005-02-12 Fernando Perez <fperez@colorado.edu>
1207 2005-02-12 Fernando Perez <fperez@colorado.edu>
1201
1208
1202 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1209 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1203 which I had written long ago to sort out user error messages which
1210 which I had written long ago to sort out user error messages which
1204 may occur during startup. This seemed like a good idea initially,
1211 may occur during startup. This seemed like a good idea initially,
1205 but it has proven a disaster in retrospect. I don't want to
1212 but it has proven a disaster in retrospect. I don't want to
1206 change much code for now, so my fix is to set the internal 'debug'
1213 change much code for now, so my fix is to set the internal 'debug'
1207 flag to true everywhere, whose only job was precisely to control
1214 flag to true everywhere, whose only job was precisely to control
1208 this subsystem. This closes issue 28 (as well as avoiding all
1215 this subsystem. This closes issue 28 (as well as avoiding all
1209 sorts of strange hangups which occur from time to time).
1216 sorts of strange hangups which occur from time to time).
1210
1217
1211 2005-02-07 Fernando Perez <fperez@colorado.edu>
1218 2005-02-07 Fernando Perez <fperez@colorado.edu>
1212
1219
1213 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1220 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1214 previous call produced a syntax error.
1221 previous call produced a syntax error.
1215
1222
1216 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1223 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1217 classes without constructor.
1224 classes without constructor.
1218
1225
1219 2005-02-06 Fernando Perez <fperez@colorado.edu>
1226 2005-02-06 Fernando Perez <fperez@colorado.edu>
1220
1227
1221 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1228 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1222 completions with the results of each matcher, so we return results
1229 completions with the results of each matcher, so we return results
1223 to the user from all namespaces. This breaks with ipython
1230 to the user from all namespaces. This breaks with ipython
1224 tradition, but I think it's a nicer behavior. Now you get all
1231 tradition, but I think it's a nicer behavior. Now you get all
1225 possible completions listed, from all possible namespaces (python,
1232 possible completions listed, from all possible namespaces (python,
1226 filesystem, magics...) After a request by John Hunter
1233 filesystem, magics...) After a request by John Hunter
1227 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1234 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1228
1235
1229 2005-02-05 Fernando Perez <fperez@colorado.edu>
1236 2005-02-05 Fernando Perez <fperez@colorado.edu>
1230
1237
1231 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1238 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1232 the call had quote characters in it (the quotes were stripped).
1239 the call had quote characters in it (the quotes were stripped).
1233
1240
1234 2005-01-31 Fernando Perez <fperez@colorado.edu>
1241 2005-01-31 Fernando Perez <fperez@colorado.edu>
1235
1242
1236 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1243 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1237 Itpl.itpl() to make the code more robust against psyco
1244 Itpl.itpl() to make the code more robust against psyco
1238 optimizations.
1245 optimizations.
1239
1246
1240 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1247 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1241 of causing an exception. Quicker, cleaner.
1248 of causing an exception. Quicker, cleaner.
1242
1249
1243 2005-01-28 Fernando Perez <fperez@colorado.edu>
1250 2005-01-28 Fernando Perez <fperez@colorado.edu>
1244
1251
1245 * scripts/ipython_win_post_install.py (install): hardcode
1252 * scripts/ipython_win_post_install.py (install): hardcode
1246 sys.prefix+'python.exe' as the executable path. It turns out that
1253 sys.prefix+'python.exe' as the executable path. It turns out that
1247 during the post-installation run, sys.executable resolves to the
1254 during the post-installation run, sys.executable resolves to the
1248 name of the binary installer! I should report this as a distutils
1255 name of the binary installer! I should report this as a distutils
1249 bug, I think. I updated the .10 release with this tiny fix, to
1256 bug, I think. I updated the .10 release with this tiny fix, to
1250 avoid annoying the lists further.
1257 avoid annoying the lists further.
1251
1258
1252 2005-01-27 *** Released version 0.6.10
1259 2005-01-27 *** Released version 0.6.10
1253
1260
1254 2005-01-27 Fernando Perez <fperez@colorado.edu>
1261 2005-01-27 Fernando Perez <fperez@colorado.edu>
1255
1262
1256 * IPython/numutils.py (norm): Added 'inf' as optional name for
1263 * IPython/numutils.py (norm): Added 'inf' as optional name for
1257 L-infinity norm, included references to mathworld.com for vector
1264 L-infinity norm, included references to mathworld.com for vector
1258 norm definitions.
1265 norm definitions.
1259 (amin/amax): added amin/amax for array min/max. Similar to what
1266 (amin/amax): added amin/amax for array min/max. Similar to what
1260 pylab ships with after the recent reorganization of names.
1267 pylab ships with after the recent reorganization of names.
1261 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1268 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1262
1269
1263 * ipython.el: committed Alex's recent fixes and improvements.
1270 * ipython.el: committed Alex's recent fixes and improvements.
1264 Tested with python-mode from CVS, and it looks excellent. Since
1271 Tested with python-mode from CVS, and it looks excellent. Since
1265 python-mode hasn't released anything in a while, I'm temporarily
1272 python-mode hasn't released anything in a while, I'm temporarily
1266 putting a copy of today's CVS (v 4.70) of python-mode in:
1273 putting a copy of today's CVS (v 4.70) of python-mode in:
1267 http://ipython.scipy.org/tmp/python-mode.el
1274 http://ipython.scipy.org/tmp/python-mode.el
1268
1275
1269 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1276 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1270 sys.executable for the executable name, instead of assuming it's
1277 sys.executable for the executable name, instead of assuming it's
1271 called 'python.exe' (the post-installer would have produced broken
1278 called 'python.exe' (the post-installer would have produced broken
1272 setups on systems with a differently named python binary).
1279 setups on systems with a differently named python binary).
1273
1280
1274 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1281 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1275 references to os.linesep, to make the code more
1282 references to os.linesep, to make the code more
1276 platform-independent. This is also part of the win32 coloring
1283 platform-independent. This is also part of the win32 coloring
1277 fixes.
1284 fixes.
1278
1285
1279 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1286 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1280 lines, which actually cause coloring bugs because the length of
1287 lines, which actually cause coloring bugs because the length of
1281 the line is very difficult to correctly compute with embedded
1288 the line is very difficult to correctly compute with embedded
1282 escapes. This was the source of all the coloring problems under
1289 escapes. This was the source of all the coloring problems under
1283 Win32. I think that _finally_, Win32 users have a properly
1290 Win32. I think that _finally_, Win32 users have a properly
1284 working ipython in all respects. This would never have happened
1291 working ipython in all respects. This would never have happened
1285 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1292 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1286
1293
1287 2005-01-26 *** Released version 0.6.9
1294 2005-01-26 *** Released version 0.6.9
1288
1295
1289 2005-01-25 Fernando Perez <fperez@colorado.edu>
1296 2005-01-25 Fernando Perez <fperez@colorado.edu>
1290
1297
1291 * setup.py: finally, we have a true Windows installer, thanks to
1298 * setup.py: finally, we have a true Windows installer, thanks to
1292 the excellent work of Viktor Ransmayr
1299 the excellent work of Viktor Ransmayr
1293 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1300 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1294 Windows users. The setup routine is quite a bit cleaner thanks to
1301 Windows users. The setup routine is quite a bit cleaner thanks to
1295 this, and the post-install script uses the proper functions to
1302 this, and the post-install script uses the proper functions to
1296 allow a clean de-installation using the standard Windows Control
1303 allow a clean de-installation using the standard Windows Control
1297 Panel.
1304 Panel.
1298
1305
1299 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1306 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1300 environment variable under all OSes (including win32) if
1307 environment variable under all OSes (including win32) if
1301 available. This will give consistency to win32 users who have set
1308 available. This will give consistency to win32 users who have set
1302 this variable for any reason. If os.environ['HOME'] fails, the
1309 this variable for any reason. If os.environ['HOME'] fails, the
1303 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1310 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1304
1311
1305 2005-01-24 Fernando Perez <fperez@colorado.edu>
1312 2005-01-24 Fernando Perez <fperez@colorado.edu>
1306
1313
1307 * IPython/numutils.py (empty_like): add empty_like(), similar to
1314 * IPython/numutils.py (empty_like): add empty_like(), similar to
1308 zeros_like() but taking advantage of the new empty() Numeric routine.
1315 zeros_like() but taking advantage of the new empty() Numeric routine.
1309
1316
1310 2005-01-23 *** Released version 0.6.8
1317 2005-01-23 *** Released version 0.6.8
1311
1318
1312 2005-01-22 Fernando Perez <fperez@colorado.edu>
1319 2005-01-22 Fernando Perez <fperez@colorado.edu>
1313
1320
1314 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1321 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1315 automatic show() calls. After discussing things with JDH, it
1322 automatic show() calls. After discussing things with JDH, it
1316 turns out there are too many corner cases where this can go wrong.
1323 turns out there are too many corner cases where this can go wrong.
1317 It's best not to try to be 'too smart', and simply have ipython
1324 It's best not to try to be 'too smart', and simply have ipython
1318 reproduce as much as possible the default behavior of a normal
1325 reproduce as much as possible the default behavior of a normal
1319 python shell.
1326 python shell.
1320
1327
1321 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1328 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1322 line-splitting regexp and _prefilter() to avoid calling getattr()
1329 line-splitting regexp and _prefilter() to avoid calling getattr()
1323 on assignments. This closes
1330 on assignments. This closes
1324 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1331 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1325 readline uses getattr(), so a simple <TAB> keypress is still
1332 readline uses getattr(), so a simple <TAB> keypress is still
1326 enough to trigger getattr() calls on an object.
1333 enough to trigger getattr() calls on an object.
1327
1334
1328 2005-01-21 Fernando Perez <fperez@colorado.edu>
1335 2005-01-21 Fernando Perez <fperez@colorado.edu>
1329
1336
1330 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1337 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1331 docstring under pylab so it doesn't mask the original.
1338 docstring under pylab so it doesn't mask the original.
1332
1339
1333 2005-01-21 *** Released version 0.6.7
1340 2005-01-21 *** Released version 0.6.7
1334
1341
1335 2005-01-21 Fernando Perez <fperez@colorado.edu>
1342 2005-01-21 Fernando Perez <fperez@colorado.edu>
1336
1343
1337 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1344 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1338 signal handling for win32 users in multithreaded mode.
1345 signal handling for win32 users in multithreaded mode.
1339
1346
1340 2005-01-17 Fernando Perez <fperez@colorado.edu>
1347 2005-01-17 Fernando Perez <fperez@colorado.edu>
1341
1348
1342 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1349 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1343 instances with no __init__. After a crash report by Norbert Nemec
1350 instances with no __init__. After a crash report by Norbert Nemec
1344 <Norbert-AT-nemec-online.de>.
1351 <Norbert-AT-nemec-online.de>.
1345
1352
1346 2005-01-14 Fernando Perez <fperez@colorado.edu>
1353 2005-01-14 Fernando Perez <fperez@colorado.edu>
1347
1354
1348 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1355 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1349 names for verbose exceptions, when multiple dotted names and the
1356 names for verbose exceptions, when multiple dotted names and the
1350 'parent' object were present on the same line.
1357 'parent' object were present on the same line.
1351
1358
1352 2005-01-11 Fernando Perez <fperez@colorado.edu>
1359 2005-01-11 Fernando Perez <fperez@colorado.edu>
1353
1360
1354 * IPython/genutils.py (flag_calls): new utility to trap and flag
1361 * IPython/genutils.py (flag_calls): new utility to trap and flag
1355 calls in functions. I need it to clean up matplotlib support.
1362 calls in functions. I need it to clean up matplotlib support.
1356 Also removed some deprecated code in genutils.
1363 Also removed some deprecated code in genutils.
1357
1364
1358 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1365 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1359 that matplotlib scripts called with %run, which don't call show()
1366 that matplotlib scripts called with %run, which don't call show()
1360 themselves, still have their plotting windows open.
1367 themselves, still have their plotting windows open.
1361
1368
1362 2005-01-05 Fernando Perez <fperez@colorado.edu>
1369 2005-01-05 Fernando Perez <fperez@colorado.edu>
1363
1370
1364 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1371 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1365 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1372 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1366
1373
1367 2004-12-19 Fernando Perez <fperez@colorado.edu>
1374 2004-12-19 Fernando Perez <fperez@colorado.edu>
1368
1375
1369 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1376 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1370 parent_runcode, which was an eyesore. The same result can be
1377 parent_runcode, which was an eyesore. The same result can be
1371 obtained with Python's regular superclass mechanisms.
1378 obtained with Python's regular superclass mechanisms.
1372
1379
1373 2004-12-17 Fernando Perez <fperez@colorado.edu>
1380 2004-12-17 Fernando Perez <fperez@colorado.edu>
1374
1381
1375 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1382 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1376 reported by Prabhu.
1383 reported by Prabhu.
1377 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1384 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1378 sys.stderr) instead of explicitly calling sys.stderr. This helps
1385 sys.stderr) instead of explicitly calling sys.stderr. This helps
1379 maintain our I/O abstractions clean, for future GUI embeddings.
1386 maintain our I/O abstractions clean, for future GUI embeddings.
1380
1387
1381 * IPython/genutils.py (info): added new utility for sys.stderr
1388 * IPython/genutils.py (info): added new utility for sys.stderr
1382 unified info message handling (thin wrapper around warn()).
1389 unified info message handling (thin wrapper around warn()).
1383
1390
1384 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1391 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1385 composite (dotted) names on verbose exceptions.
1392 composite (dotted) names on verbose exceptions.
1386 (VerboseTB.nullrepr): harden against another kind of errors which
1393 (VerboseTB.nullrepr): harden against another kind of errors which
1387 Python's inspect module can trigger, and which were crashing
1394 Python's inspect module can trigger, and which were crashing
1388 IPython. Thanks to a report by Marco Lombardi
1395 IPython. Thanks to a report by Marco Lombardi
1389 <mlombard-AT-ma010192.hq.eso.org>.
1396 <mlombard-AT-ma010192.hq.eso.org>.
1390
1397
1391 2004-12-13 *** Released version 0.6.6
1398 2004-12-13 *** Released version 0.6.6
1392
1399
1393 2004-12-12 Fernando Perez <fperez@colorado.edu>
1400 2004-12-12 Fernando Perez <fperez@colorado.edu>
1394
1401
1395 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1402 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1396 generated by pygtk upon initialization if it was built without
1403 generated by pygtk upon initialization if it was built without
1397 threads (for matplotlib users). After a crash reported by
1404 threads (for matplotlib users). After a crash reported by
1398 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1405 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1399
1406
1400 * IPython/ipmaker.py (make_IPython): fix small bug in the
1407 * IPython/ipmaker.py (make_IPython): fix small bug in the
1401 import_some parameter for multiple imports.
1408 import_some parameter for multiple imports.
1402
1409
1403 * IPython/iplib.py (ipmagic): simplified the interface of
1410 * IPython/iplib.py (ipmagic): simplified the interface of
1404 ipmagic() to take a single string argument, just as it would be
1411 ipmagic() to take a single string argument, just as it would be
1405 typed at the IPython cmd line.
1412 typed at the IPython cmd line.
1406 (ipalias): Added new ipalias() with an interface identical to
1413 (ipalias): Added new ipalias() with an interface identical to
1407 ipmagic(). This completes exposing a pure python interface to the
1414 ipmagic(). This completes exposing a pure python interface to the
1408 alias and magic system, which can be used in loops or more complex
1415 alias and magic system, which can be used in loops or more complex
1409 code where IPython's automatic line mangling is not active.
1416 code where IPython's automatic line mangling is not active.
1410
1417
1411 * IPython/genutils.py (timing): changed interface of timing to
1418 * IPython/genutils.py (timing): changed interface of timing to
1412 simply run code once, which is the most common case. timings()
1419 simply run code once, which is the most common case. timings()
1413 remains unchanged, for the cases where you want multiple runs.
1420 remains unchanged, for the cases where you want multiple runs.
1414
1421
1415 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1422 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1416 bug where Python2.2 crashes with exec'ing code which does not end
1423 bug where Python2.2 crashes with exec'ing code which does not end
1417 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1424 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1418 before.
1425 before.
1419
1426
1420 2004-12-10 Fernando Perez <fperez@colorado.edu>
1427 2004-12-10 Fernando Perez <fperez@colorado.edu>
1421
1428
1422 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1429 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1423 -t to -T, to accomodate the new -t flag in %run (the %run and
1430 -t to -T, to accomodate the new -t flag in %run (the %run and
1424 %prun options are kind of intermixed, and it's not easy to change
1431 %prun options are kind of intermixed, and it's not easy to change
1425 this with the limitations of python's getopt).
1432 this with the limitations of python's getopt).
1426
1433
1427 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1434 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1428 the execution of scripts. It's not as fine-tuned as timeit.py,
1435 the execution of scripts. It's not as fine-tuned as timeit.py,
1429 but it works from inside ipython (and under 2.2, which lacks
1436 but it works from inside ipython (and under 2.2, which lacks
1430 timeit.py). Optionally a number of runs > 1 can be given for
1437 timeit.py). Optionally a number of runs > 1 can be given for
1431 timing very short-running code.
1438 timing very short-running code.
1432
1439
1433 * IPython/genutils.py (uniq_stable): new routine which returns a
1440 * IPython/genutils.py (uniq_stable): new routine which returns a
1434 list of unique elements in any iterable, but in stable order of
1441 list of unique elements in any iterable, but in stable order of
1435 appearance. I needed this for the ultraTB fixes, and it's a handy
1442 appearance. I needed this for the ultraTB fixes, and it's a handy
1436 utility.
1443 utility.
1437
1444
1438 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1445 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1439 dotted names in Verbose exceptions. This had been broken since
1446 dotted names in Verbose exceptions. This had been broken since
1440 the very start, now x.y will properly be printed in a Verbose
1447 the very start, now x.y will properly be printed in a Verbose
1441 traceback, instead of x being shown and y appearing always as an
1448 traceback, instead of x being shown and y appearing always as an
1442 'undefined global'. Getting this to work was a bit tricky,
1449 'undefined global'. Getting this to work was a bit tricky,
1443 because by default python tokenizers are stateless. Saved by
1450 because by default python tokenizers are stateless. Saved by
1444 python's ability to easily add a bit of state to an arbitrary
1451 python's ability to easily add a bit of state to an arbitrary
1445 function (without needing to build a full-blown callable object).
1452 function (without needing to build a full-blown callable object).
1446
1453
1447 Also big cleanup of this code, which had horrendous runtime
1454 Also big cleanup of this code, which had horrendous runtime
1448 lookups of zillions of attributes for colorization. Moved all
1455 lookups of zillions of attributes for colorization. Moved all
1449 this code into a few templates, which make it cleaner and quicker.
1456 this code into a few templates, which make it cleaner and quicker.
1450
1457
1451 Printout quality was also improved for Verbose exceptions: one
1458 Printout quality was also improved for Verbose exceptions: one
1452 variable per line, and memory addresses are printed (this can be
1459 variable per line, and memory addresses are printed (this can be
1453 quite handy in nasty debugging situations, which is what Verbose
1460 quite handy in nasty debugging situations, which is what Verbose
1454 is for).
1461 is for).
1455
1462
1456 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1463 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1457 the command line as scripts to be loaded by embedded instances.
1464 the command line as scripts to be loaded by embedded instances.
1458 Doing so has the potential for an infinite recursion if there are
1465 Doing so has the potential for an infinite recursion if there are
1459 exceptions thrown in the process. This fixes a strange crash
1466 exceptions thrown in the process. This fixes a strange crash
1460 reported by Philippe MULLER <muller-AT-irit.fr>.
1467 reported by Philippe MULLER <muller-AT-irit.fr>.
1461
1468
1462 2004-12-09 Fernando Perez <fperez@colorado.edu>
1469 2004-12-09 Fernando Perez <fperez@colorado.edu>
1463
1470
1464 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1471 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1465 to reflect new names in matplotlib, which now expose the
1472 to reflect new names in matplotlib, which now expose the
1466 matlab-compatible interface via a pylab module instead of the
1473 matlab-compatible interface via a pylab module instead of the
1467 'matlab' name. The new code is backwards compatible, so users of
1474 'matlab' name. The new code is backwards compatible, so users of
1468 all matplotlib versions are OK. Patch by J. Hunter.
1475 all matplotlib versions are OK. Patch by J. Hunter.
1469
1476
1470 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1477 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1471 of __init__ docstrings for instances (class docstrings are already
1478 of __init__ docstrings for instances (class docstrings are already
1472 automatically printed). Instances with customized docstrings
1479 automatically printed). Instances with customized docstrings
1473 (indep. of the class) are also recognized and all 3 separate
1480 (indep. of the class) are also recognized and all 3 separate
1474 docstrings are printed (instance, class, constructor). After some
1481 docstrings are printed (instance, class, constructor). After some
1475 comments/suggestions by J. Hunter.
1482 comments/suggestions by J. Hunter.
1476
1483
1477 2004-12-05 Fernando Perez <fperez@colorado.edu>
1484 2004-12-05 Fernando Perez <fperez@colorado.edu>
1478
1485
1479 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1486 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1480 warnings when tab-completion fails and triggers an exception.
1487 warnings when tab-completion fails and triggers an exception.
1481
1488
1482 2004-12-03 Fernando Perez <fperez@colorado.edu>
1489 2004-12-03 Fernando Perez <fperez@colorado.edu>
1483
1490
1484 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1491 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1485 be triggered when using 'run -p'. An incorrect option flag was
1492 be triggered when using 'run -p'. An incorrect option flag was
1486 being set ('d' instead of 'D').
1493 being set ('d' instead of 'D').
1487 (manpage): fix missing escaped \- sign.
1494 (manpage): fix missing escaped \- sign.
1488
1495
1489 2004-11-30 *** Released version 0.6.5
1496 2004-11-30 *** Released version 0.6.5
1490
1497
1491 2004-11-30 Fernando Perez <fperez@colorado.edu>
1498 2004-11-30 Fernando Perez <fperez@colorado.edu>
1492
1499
1493 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1500 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1494 setting with -d option.
1501 setting with -d option.
1495
1502
1496 * setup.py (docfiles): Fix problem where the doc glob I was using
1503 * setup.py (docfiles): Fix problem where the doc glob I was using
1497 was COMPLETELY BROKEN. It was giving the right files by pure
1504 was COMPLETELY BROKEN. It was giving the right files by pure
1498 accident, but failed once I tried to include ipython.el. Note:
1505 accident, but failed once I tried to include ipython.el. Note:
1499 glob() does NOT allow you to do exclusion on multiple endings!
1506 glob() does NOT allow you to do exclusion on multiple endings!
1500
1507
1501 2004-11-29 Fernando Perez <fperez@colorado.edu>
1508 2004-11-29 Fernando Perez <fperez@colorado.edu>
1502
1509
1503 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1510 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1504 the manpage as the source. Better formatting & consistency.
1511 the manpage as the source. Better formatting & consistency.
1505
1512
1506 * IPython/Magic.py (magic_run): Added new -d option, to run
1513 * IPython/Magic.py (magic_run): Added new -d option, to run
1507 scripts under the control of the python pdb debugger. Note that
1514 scripts under the control of the python pdb debugger. Note that
1508 this required changing the %prun option -d to -D, to avoid a clash
1515 this required changing the %prun option -d to -D, to avoid a clash
1509 (since %run must pass options to %prun, and getopt is too dumb to
1516 (since %run must pass options to %prun, and getopt is too dumb to
1510 handle options with string values with embedded spaces). Thanks
1517 handle options with string values with embedded spaces). Thanks
1511 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1518 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1512 (magic_who_ls): added type matching to %who and %whos, so that one
1519 (magic_who_ls): added type matching to %who and %whos, so that one
1513 can filter their output to only include variables of certain
1520 can filter their output to only include variables of certain
1514 types. Another suggestion by Matthew.
1521 types. Another suggestion by Matthew.
1515 (magic_whos): Added memory summaries in kb and Mb for arrays.
1522 (magic_whos): Added memory summaries in kb and Mb for arrays.
1516 (magic_who): Improve formatting (break lines every 9 vars).
1523 (magic_who): Improve formatting (break lines every 9 vars).
1517
1524
1518 2004-11-28 Fernando Perez <fperez@colorado.edu>
1525 2004-11-28 Fernando Perez <fperez@colorado.edu>
1519
1526
1520 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1527 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1521 cache when empty lines were present.
1528 cache when empty lines were present.
1522
1529
1523 2004-11-24 Fernando Perez <fperez@colorado.edu>
1530 2004-11-24 Fernando Perez <fperez@colorado.edu>
1524
1531
1525 * IPython/usage.py (__doc__): document the re-activated threading
1532 * IPython/usage.py (__doc__): document the re-activated threading
1526 options for WX and GTK.
1533 options for WX and GTK.
1527
1534
1528 2004-11-23 Fernando Perez <fperez@colorado.edu>
1535 2004-11-23 Fernando Perez <fperez@colorado.edu>
1529
1536
1530 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1537 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1531 the -wthread and -gthread options, along with a new -tk one to try
1538 the -wthread and -gthread options, along with a new -tk one to try
1532 and coordinate Tk threading with wx/gtk. The tk support is very
1539 and coordinate Tk threading with wx/gtk. The tk support is very
1533 platform dependent, since it seems to require Tcl and Tk to be
1540 platform dependent, since it seems to require Tcl and Tk to be
1534 built with threads (Fedora1/2 appears NOT to have it, but in
1541 built with threads (Fedora1/2 appears NOT to have it, but in
1535 Prabhu's Debian boxes it works OK). But even with some Tk
1542 Prabhu's Debian boxes it works OK). But even with some Tk
1536 limitations, this is a great improvement.
1543 limitations, this is a great improvement.
1537
1544
1538 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1545 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1539 info in user prompts. Patch by Prabhu.
1546 info in user prompts. Patch by Prabhu.
1540
1547
1541 2004-11-18 Fernando Perez <fperez@colorado.edu>
1548 2004-11-18 Fernando Perez <fperez@colorado.edu>
1542
1549
1543 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1550 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1544 EOFErrors and bail, to avoid infinite loops if a non-terminating
1551 EOFErrors and bail, to avoid infinite loops if a non-terminating
1545 file is fed into ipython. Patch submitted in issue 19 by user,
1552 file is fed into ipython. Patch submitted in issue 19 by user,
1546 many thanks.
1553 many thanks.
1547
1554
1548 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1555 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1549 autoquote/parens in continuation prompts, which can cause lots of
1556 autoquote/parens in continuation prompts, which can cause lots of
1550 problems. Closes roundup issue 20.
1557 problems. Closes roundup issue 20.
1551
1558
1552 2004-11-17 Fernando Perez <fperez@colorado.edu>
1559 2004-11-17 Fernando Perez <fperez@colorado.edu>
1553
1560
1554 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1561 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1555 reported as debian bug #280505. I'm not sure my local changelog
1562 reported as debian bug #280505. I'm not sure my local changelog
1556 entry has the proper debian format (Jack?).
1563 entry has the proper debian format (Jack?).
1557
1564
1558 2004-11-08 *** Released version 0.6.4
1565 2004-11-08 *** Released version 0.6.4
1559
1566
1560 2004-11-08 Fernando Perez <fperez@colorado.edu>
1567 2004-11-08 Fernando Perez <fperez@colorado.edu>
1561
1568
1562 * IPython/iplib.py (init_readline): Fix exit message for Windows
1569 * IPython/iplib.py (init_readline): Fix exit message for Windows
1563 when readline is active. Thanks to a report by Eric Jones
1570 when readline is active. Thanks to a report by Eric Jones
1564 <eric-AT-enthought.com>.
1571 <eric-AT-enthought.com>.
1565
1572
1566 2004-11-07 Fernando Perez <fperez@colorado.edu>
1573 2004-11-07 Fernando Perez <fperez@colorado.edu>
1567
1574
1568 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1575 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1569 sometimes seen by win2k/cygwin users.
1576 sometimes seen by win2k/cygwin users.
1570
1577
1571 2004-11-06 Fernando Perez <fperez@colorado.edu>
1578 2004-11-06 Fernando Perez <fperez@colorado.edu>
1572
1579
1573 * IPython/iplib.py (interact): Change the handling of %Exit from
1580 * IPython/iplib.py (interact): Change the handling of %Exit from
1574 trying to propagate a SystemExit to an internal ipython flag.
1581 trying to propagate a SystemExit to an internal ipython flag.
1575 This is less elegant than using Python's exception mechanism, but
1582 This is less elegant than using Python's exception mechanism, but
1576 I can't get that to work reliably with threads, so under -pylab
1583 I can't get that to work reliably with threads, so under -pylab
1577 %Exit was hanging IPython. Cross-thread exception handling is
1584 %Exit was hanging IPython. Cross-thread exception handling is
1578 really a bitch. Thaks to a bug report by Stephen Walton
1585 really a bitch. Thaks to a bug report by Stephen Walton
1579 <stephen.walton-AT-csun.edu>.
1586 <stephen.walton-AT-csun.edu>.
1580
1587
1581 2004-11-04 Fernando Perez <fperez@colorado.edu>
1588 2004-11-04 Fernando Perez <fperez@colorado.edu>
1582
1589
1583 * IPython/iplib.py (raw_input_original): store a pointer to the
1590 * IPython/iplib.py (raw_input_original): store a pointer to the
1584 true raw_input to harden against code which can modify it
1591 true raw_input to harden against code which can modify it
1585 (wx.py.PyShell does this and would otherwise crash ipython).
1592 (wx.py.PyShell does this and would otherwise crash ipython).
1586 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1593 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1587
1594
1588 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1595 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1589 Ctrl-C problem, which does not mess up the input line.
1596 Ctrl-C problem, which does not mess up the input line.
1590
1597
1591 2004-11-03 Fernando Perez <fperez@colorado.edu>
1598 2004-11-03 Fernando Perez <fperez@colorado.edu>
1592
1599
1593 * IPython/Release.py: Changed licensing to BSD, in all files.
1600 * IPython/Release.py: Changed licensing to BSD, in all files.
1594 (name): lowercase name for tarball/RPM release.
1601 (name): lowercase name for tarball/RPM release.
1595
1602
1596 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1603 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1597 use throughout ipython.
1604 use throughout ipython.
1598
1605
1599 * IPython/Magic.py (Magic._ofind): Switch to using the new
1606 * IPython/Magic.py (Magic._ofind): Switch to using the new
1600 OInspect.getdoc() function.
1607 OInspect.getdoc() function.
1601
1608
1602 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1609 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1603 of the line currently being canceled via Ctrl-C. It's extremely
1610 of the line currently being canceled via Ctrl-C. It's extremely
1604 ugly, but I don't know how to do it better (the problem is one of
1611 ugly, but I don't know how to do it better (the problem is one of
1605 handling cross-thread exceptions).
1612 handling cross-thread exceptions).
1606
1613
1607 2004-10-28 Fernando Perez <fperez@colorado.edu>
1614 2004-10-28 Fernando Perez <fperez@colorado.edu>
1608
1615
1609 * IPython/Shell.py (signal_handler): add signal handlers to trap
1616 * IPython/Shell.py (signal_handler): add signal handlers to trap
1610 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1617 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1611 report by Francesc Alted.
1618 report by Francesc Alted.
1612
1619
1613 2004-10-21 Fernando Perez <fperez@colorado.edu>
1620 2004-10-21 Fernando Perez <fperez@colorado.edu>
1614
1621
1615 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1622 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1616 to % for pysh syntax extensions.
1623 to % for pysh syntax extensions.
1617
1624
1618 2004-10-09 Fernando Perez <fperez@colorado.edu>
1625 2004-10-09 Fernando Perez <fperez@colorado.edu>
1619
1626
1620 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1627 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1621 arrays to print a more useful summary, without calling str(arr).
1628 arrays to print a more useful summary, without calling str(arr).
1622 This avoids the problem of extremely lengthy computations which
1629 This avoids the problem of extremely lengthy computations which
1623 occur if arr is large, and appear to the user as a system lockup
1630 occur if arr is large, and appear to the user as a system lockup
1624 with 100% cpu activity. After a suggestion by Kristian Sandberg
1631 with 100% cpu activity. After a suggestion by Kristian Sandberg
1625 <Kristian.Sandberg@colorado.edu>.
1632 <Kristian.Sandberg@colorado.edu>.
1626 (Magic.__init__): fix bug in global magic escapes not being
1633 (Magic.__init__): fix bug in global magic escapes not being
1627 correctly set.
1634 correctly set.
1628
1635
1629 2004-10-08 Fernando Perez <fperez@colorado.edu>
1636 2004-10-08 Fernando Perez <fperez@colorado.edu>
1630
1637
1631 * IPython/Magic.py (__license__): change to absolute imports of
1638 * IPython/Magic.py (__license__): change to absolute imports of
1632 ipython's own internal packages, to start adapting to the absolute
1639 ipython's own internal packages, to start adapting to the absolute
1633 import requirement of PEP-328.
1640 import requirement of PEP-328.
1634
1641
1635 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1642 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1636 files, and standardize author/license marks through the Release
1643 files, and standardize author/license marks through the Release
1637 module instead of having per/file stuff (except for files with
1644 module instead of having per/file stuff (except for files with
1638 particular licenses, like the MIT/PSF-licensed codes).
1645 particular licenses, like the MIT/PSF-licensed codes).
1639
1646
1640 * IPython/Debugger.py: remove dead code for python 2.1
1647 * IPython/Debugger.py: remove dead code for python 2.1
1641
1648
1642 2004-10-04 Fernando Perez <fperez@colorado.edu>
1649 2004-10-04 Fernando Perez <fperez@colorado.edu>
1643
1650
1644 * IPython/iplib.py (ipmagic): New function for accessing magics
1651 * IPython/iplib.py (ipmagic): New function for accessing magics
1645 via a normal python function call.
1652 via a normal python function call.
1646
1653
1647 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1654 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1648 from '@' to '%', to accomodate the new @decorator syntax of python
1655 from '@' to '%', to accomodate the new @decorator syntax of python
1649 2.4.
1656 2.4.
1650
1657
1651 2004-09-29 Fernando Perez <fperez@colorado.edu>
1658 2004-09-29 Fernando Perez <fperez@colorado.edu>
1652
1659
1653 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1660 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1654 matplotlib.use to prevent running scripts which try to switch
1661 matplotlib.use to prevent running scripts which try to switch
1655 interactive backends from within ipython. This will just crash
1662 interactive backends from within ipython. This will just crash
1656 the python interpreter, so we can't allow it (but a detailed error
1663 the python interpreter, so we can't allow it (but a detailed error
1657 is given to the user).
1664 is given to the user).
1658
1665
1659 2004-09-28 Fernando Perez <fperez@colorado.edu>
1666 2004-09-28 Fernando Perez <fperez@colorado.edu>
1660
1667
1661 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1668 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1662 matplotlib-related fixes so that using @run with non-matplotlib
1669 matplotlib-related fixes so that using @run with non-matplotlib
1663 scripts doesn't pop up spurious plot windows. This requires
1670 scripts doesn't pop up spurious plot windows. This requires
1664 matplotlib >= 0.63, where I had to make some changes as well.
1671 matplotlib >= 0.63, where I had to make some changes as well.
1665
1672
1666 * IPython/ipmaker.py (make_IPython): update version requirement to
1673 * IPython/ipmaker.py (make_IPython): update version requirement to
1667 python 2.2.
1674 python 2.2.
1668
1675
1669 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1676 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1670 banner arg for embedded customization.
1677 banner arg for embedded customization.
1671
1678
1672 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1679 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1673 explicit uses of __IP as the IPython's instance name. Now things
1680 explicit uses of __IP as the IPython's instance name. Now things
1674 are properly handled via the shell.name value. The actual code
1681 are properly handled via the shell.name value. The actual code
1675 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1682 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1676 is much better than before. I'll clean things completely when the
1683 is much better than before. I'll clean things completely when the
1677 magic stuff gets a real overhaul.
1684 magic stuff gets a real overhaul.
1678
1685
1679 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1686 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1680 minor changes to debian dir.
1687 minor changes to debian dir.
1681
1688
1682 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1689 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1683 pointer to the shell itself in the interactive namespace even when
1690 pointer to the shell itself in the interactive namespace even when
1684 a user-supplied dict is provided. This is needed for embedding
1691 a user-supplied dict is provided. This is needed for embedding
1685 purposes (found by tests with Michel Sanner).
1692 purposes (found by tests with Michel Sanner).
1686
1693
1687 2004-09-27 Fernando Perez <fperez@colorado.edu>
1694 2004-09-27 Fernando Perez <fperez@colorado.edu>
1688
1695
1689 * IPython/UserConfig/ipythonrc: remove []{} from
1696 * IPython/UserConfig/ipythonrc: remove []{} from
1690 readline_remove_delims, so that things like [modname.<TAB> do
1697 readline_remove_delims, so that things like [modname.<TAB> do
1691 proper completion. This disables [].TAB, but that's a less common
1698 proper completion. This disables [].TAB, but that's a less common
1692 case than module names in list comprehensions, for example.
1699 case than module names in list comprehensions, for example.
1693 Thanks to a report by Andrea Riciputi.
1700 Thanks to a report by Andrea Riciputi.
1694
1701
1695 2004-09-09 Fernando Perez <fperez@colorado.edu>
1702 2004-09-09 Fernando Perez <fperez@colorado.edu>
1696
1703
1697 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1704 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1698 blocking problems in win32 and osx. Fix by John.
1705 blocking problems in win32 and osx. Fix by John.
1699
1706
1700 2004-09-08 Fernando Perez <fperez@colorado.edu>
1707 2004-09-08 Fernando Perez <fperez@colorado.edu>
1701
1708
1702 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1709 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1703 for Win32 and OSX. Fix by John Hunter.
1710 for Win32 and OSX. Fix by John Hunter.
1704
1711
1705 2004-08-30 *** Released version 0.6.3
1712 2004-08-30 *** Released version 0.6.3
1706
1713
1707 2004-08-30 Fernando Perez <fperez@colorado.edu>
1714 2004-08-30 Fernando Perez <fperez@colorado.edu>
1708
1715
1709 * setup.py (isfile): Add manpages to list of dependent files to be
1716 * setup.py (isfile): Add manpages to list of dependent files to be
1710 updated.
1717 updated.
1711
1718
1712 2004-08-27 Fernando Perez <fperez@colorado.edu>
1719 2004-08-27 Fernando Perez <fperez@colorado.edu>
1713
1720
1714 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1721 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1715 for now. They don't really work with standalone WX/GTK code
1722 for now. They don't really work with standalone WX/GTK code
1716 (though matplotlib IS working fine with both of those backends).
1723 (though matplotlib IS working fine with both of those backends).
1717 This will neeed much more testing. I disabled most things with
1724 This will neeed much more testing. I disabled most things with
1718 comments, so turning it back on later should be pretty easy.
1725 comments, so turning it back on later should be pretty easy.
1719
1726
1720 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1727 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1721 autocalling of expressions like r'foo', by modifying the line
1728 autocalling of expressions like r'foo', by modifying the line
1722 split regexp. Closes
1729 split regexp. Closes
1723 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1730 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1724 Riley <ipythonbugs-AT-sabi.net>.
1731 Riley <ipythonbugs-AT-sabi.net>.
1725 (InteractiveShell.mainloop): honor --nobanner with banner
1732 (InteractiveShell.mainloop): honor --nobanner with banner
1726 extensions.
1733 extensions.
1727
1734
1728 * IPython/Shell.py: Significant refactoring of all classes, so
1735 * IPython/Shell.py: Significant refactoring of all classes, so
1729 that we can really support ALL matplotlib backends and threading
1736 that we can really support ALL matplotlib backends and threading
1730 models (John spotted a bug with Tk which required this). Now we
1737 models (John spotted a bug with Tk which required this). Now we
1731 should support single-threaded, WX-threads and GTK-threads, both
1738 should support single-threaded, WX-threads and GTK-threads, both
1732 for generic code and for matplotlib.
1739 for generic code and for matplotlib.
1733
1740
1734 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1741 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1735 -pylab, to simplify things for users. Will also remove the pylab
1742 -pylab, to simplify things for users. Will also remove the pylab
1736 profile, since now all of matplotlib configuration is directly
1743 profile, since now all of matplotlib configuration is directly
1737 handled here. This also reduces startup time.
1744 handled here. This also reduces startup time.
1738
1745
1739 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1746 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1740 shell wasn't being correctly called. Also in IPShellWX.
1747 shell wasn't being correctly called. Also in IPShellWX.
1741
1748
1742 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1749 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1743 fine-tune banner.
1750 fine-tune banner.
1744
1751
1745 * IPython/numutils.py (spike): Deprecate these spike functions,
1752 * IPython/numutils.py (spike): Deprecate these spike functions,
1746 delete (long deprecated) gnuplot_exec handler.
1753 delete (long deprecated) gnuplot_exec handler.
1747
1754
1748 2004-08-26 Fernando Perez <fperez@colorado.edu>
1755 2004-08-26 Fernando Perez <fperez@colorado.edu>
1749
1756
1750 * ipython.1: Update for threading options, plus some others which
1757 * ipython.1: Update for threading options, plus some others which
1751 were missing.
1758 were missing.
1752
1759
1753 * IPython/ipmaker.py (__call__): Added -wthread option for
1760 * IPython/ipmaker.py (__call__): Added -wthread option for
1754 wxpython thread handling. Make sure threading options are only
1761 wxpython thread handling. Make sure threading options are only
1755 valid at the command line.
1762 valid at the command line.
1756
1763
1757 * scripts/ipython: moved shell selection into a factory function
1764 * scripts/ipython: moved shell selection into a factory function
1758 in Shell.py, to keep the starter script to a minimum.
1765 in Shell.py, to keep the starter script to a minimum.
1759
1766
1760 2004-08-25 Fernando Perez <fperez@colorado.edu>
1767 2004-08-25 Fernando Perez <fperez@colorado.edu>
1761
1768
1762 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1769 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1763 John. Along with some recent changes he made to matplotlib, the
1770 John. Along with some recent changes he made to matplotlib, the
1764 next versions of both systems should work very well together.
1771 next versions of both systems should work very well together.
1765
1772
1766 2004-08-24 Fernando Perez <fperez@colorado.edu>
1773 2004-08-24 Fernando Perez <fperez@colorado.edu>
1767
1774
1768 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1775 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1769 tried to switch the profiling to using hotshot, but I'm getting
1776 tried to switch the profiling to using hotshot, but I'm getting
1770 strange errors from prof.runctx() there. I may be misreading the
1777 strange errors from prof.runctx() there. I may be misreading the
1771 docs, but it looks weird. For now the profiling code will
1778 docs, but it looks weird. For now the profiling code will
1772 continue to use the standard profiler.
1779 continue to use the standard profiler.
1773
1780
1774 2004-08-23 Fernando Perez <fperez@colorado.edu>
1781 2004-08-23 Fernando Perez <fperez@colorado.edu>
1775
1782
1776 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1783 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1777 threaded shell, by John Hunter. It's not quite ready yet, but
1784 threaded shell, by John Hunter. It's not quite ready yet, but
1778 close.
1785 close.
1779
1786
1780 2004-08-22 Fernando Perez <fperez@colorado.edu>
1787 2004-08-22 Fernando Perez <fperez@colorado.edu>
1781
1788
1782 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1789 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1783 in Magic and ultraTB.
1790 in Magic and ultraTB.
1784
1791
1785 * ipython.1: document threading options in manpage.
1792 * ipython.1: document threading options in manpage.
1786
1793
1787 * scripts/ipython: Changed name of -thread option to -gthread,
1794 * scripts/ipython: Changed name of -thread option to -gthread,
1788 since this is GTK specific. I want to leave the door open for a
1795 since this is GTK specific. I want to leave the door open for a
1789 -wthread option for WX, which will most likely be necessary. This
1796 -wthread option for WX, which will most likely be necessary. This
1790 change affects usage and ipmaker as well.
1797 change affects usage and ipmaker as well.
1791
1798
1792 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1799 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1793 handle the matplotlib shell issues. Code by John Hunter
1800 handle the matplotlib shell issues. Code by John Hunter
1794 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1801 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1795 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1802 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1796 broken (and disabled for end users) for now, but it puts the
1803 broken (and disabled for end users) for now, but it puts the
1797 infrastructure in place.
1804 infrastructure in place.
1798
1805
1799 2004-08-21 Fernando Perez <fperez@colorado.edu>
1806 2004-08-21 Fernando Perez <fperez@colorado.edu>
1800
1807
1801 * ipythonrc-pylab: Add matplotlib support.
1808 * ipythonrc-pylab: Add matplotlib support.
1802
1809
1803 * matplotlib_config.py: new files for matplotlib support, part of
1810 * matplotlib_config.py: new files for matplotlib support, part of
1804 the pylab profile.
1811 the pylab profile.
1805
1812
1806 * IPython/usage.py (__doc__): documented the threading options.
1813 * IPython/usage.py (__doc__): documented the threading options.
1807
1814
1808 2004-08-20 Fernando Perez <fperez@colorado.edu>
1815 2004-08-20 Fernando Perez <fperez@colorado.edu>
1809
1816
1810 * ipython: Modified the main calling routine to handle the -thread
1817 * ipython: Modified the main calling routine to handle the -thread
1811 and -mpthread options. This needs to be done as a top-level hack,
1818 and -mpthread options. This needs to be done as a top-level hack,
1812 because it determines which class to instantiate for IPython
1819 because it determines which class to instantiate for IPython
1813 itself.
1820 itself.
1814
1821
1815 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1822 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1816 classes to support multithreaded GTK operation without blocking,
1823 classes to support multithreaded GTK operation without blocking,
1817 and matplotlib with all backends. This is a lot of still very
1824 and matplotlib with all backends. This is a lot of still very
1818 experimental code, and threads are tricky. So it may still have a
1825 experimental code, and threads are tricky. So it may still have a
1819 few rough edges... This code owes a lot to
1826 few rough edges... This code owes a lot to
1820 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1827 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1821 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1828 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1822 to John Hunter for all the matplotlib work.
1829 to John Hunter for all the matplotlib work.
1823
1830
1824 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1831 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1825 options for gtk thread and matplotlib support.
1832 options for gtk thread and matplotlib support.
1826
1833
1827 2004-08-16 Fernando Perez <fperez@colorado.edu>
1834 2004-08-16 Fernando Perez <fperez@colorado.edu>
1828
1835
1829 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1836 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1830 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1837 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1831 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1838 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1832
1839
1833 2004-08-11 Fernando Perez <fperez@colorado.edu>
1840 2004-08-11 Fernando Perez <fperez@colorado.edu>
1834
1841
1835 * setup.py (isfile): Fix build so documentation gets updated for
1842 * setup.py (isfile): Fix build so documentation gets updated for
1836 rpms (it was only done for .tgz builds).
1843 rpms (it was only done for .tgz builds).
1837
1844
1838 2004-08-10 Fernando Perez <fperez@colorado.edu>
1845 2004-08-10 Fernando Perez <fperez@colorado.edu>
1839
1846
1840 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1847 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1841
1848
1842 * iplib.py : Silence syntax error exceptions in tab-completion.
1849 * iplib.py : Silence syntax error exceptions in tab-completion.
1843
1850
1844 2004-08-05 Fernando Perez <fperez@colorado.edu>
1851 2004-08-05 Fernando Perez <fperez@colorado.edu>
1845
1852
1846 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1853 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1847 'color off' mark for continuation prompts. This was causing long
1854 'color off' mark for continuation prompts. This was causing long
1848 continuation lines to mis-wrap.
1855 continuation lines to mis-wrap.
1849
1856
1850 2004-08-01 Fernando Perez <fperez@colorado.edu>
1857 2004-08-01 Fernando Perez <fperez@colorado.edu>
1851
1858
1852 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1859 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1853 for building ipython to be a parameter. All this is necessary
1860 for building ipython to be a parameter. All this is necessary
1854 right now to have a multithreaded version, but this insane
1861 right now to have a multithreaded version, but this insane
1855 non-design will be cleaned up soon. For now, it's a hack that
1862 non-design will be cleaned up soon. For now, it's a hack that
1856 works.
1863 works.
1857
1864
1858 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1865 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1859 args in various places. No bugs so far, but it's a dangerous
1866 args in various places. No bugs so far, but it's a dangerous
1860 practice.
1867 practice.
1861
1868
1862 2004-07-31 Fernando Perez <fperez@colorado.edu>
1869 2004-07-31 Fernando Perez <fperez@colorado.edu>
1863
1870
1864 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1871 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1865 fix completion of files with dots in their names under most
1872 fix completion of files with dots in their names under most
1866 profiles (pysh was OK because the completion order is different).
1873 profiles (pysh was OK because the completion order is different).
1867
1874
1868 2004-07-27 Fernando Perez <fperez@colorado.edu>
1875 2004-07-27 Fernando Perez <fperez@colorado.edu>
1869
1876
1870 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1877 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1871 keywords manually, b/c the one in keyword.py was removed in python
1878 keywords manually, b/c the one in keyword.py was removed in python
1872 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1879 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1873 This is NOT a bug under python 2.3 and earlier.
1880 This is NOT a bug under python 2.3 and earlier.
1874
1881
1875 2004-07-26 Fernando Perez <fperez@colorado.edu>
1882 2004-07-26 Fernando Perez <fperez@colorado.edu>
1876
1883
1877 * IPython/ultraTB.py (VerboseTB.text): Add another
1884 * IPython/ultraTB.py (VerboseTB.text): Add another
1878 linecache.checkcache() call to try to prevent inspect.py from
1885 linecache.checkcache() call to try to prevent inspect.py from
1879 crashing under python 2.3. I think this fixes
1886 crashing under python 2.3. I think this fixes
1880 http://www.scipy.net/roundup/ipython/issue17.
1887 http://www.scipy.net/roundup/ipython/issue17.
1881
1888
1882 2004-07-26 *** Released version 0.6.2
1889 2004-07-26 *** Released version 0.6.2
1883
1890
1884 2004-07-26 Fernando Perez <fperez@colorado.edu>
1891 2004-07-26 Fernando Perez <fperez@colorado.edu>
1885
1892
1886 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1893 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1887 fail for any number.
1894 fail for any number.
1888 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1895 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1889 empty bookmarks.
1896 empty bookmarks.
1890
1897
1891 2004-07-26 *** Released version 0.6.1
1898 2004-07-26 *** Released version 0.6.1
1892
1899
1893 2004-07-26 Fernando Perez <fperez@colorado.edu>
1900 2004-07-26 Fernando Perez <fperez@colorado.edu>
1894
1901
1895 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1902 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1896
1903
1897 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1904 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1898 escaping '()[]{}' in filenames.
1905 escaping '()[]{}' in filenames.
1899
1906
1900 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1907 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1901 Python 2.2 users who lack a proper shlex.split.
1908 Python 2.2 users who lack a proper shlex.split.
1902
1909
1903 2004-07-19 Fernando Perez <fperez@colorado.edu>
1910 2004-07-19 Fernando Perez <fperez@colorado.edu>
1904
1911
1905 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1912 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1906 for reading readline's init file. I follow the normal chain:
1913 for reading readline's init file. I follow the normal chain:
1907 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1914 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1908 report by Mike Heeter. This closes
1915 report by Mike Heeter. This closes
1909 http://www.scipy.net/roundup/ipython/issue16.
1916 http://www.scipy.net/roundup/ipython/issue16.
1910
1917
1911 2004-07-18 Fernando Perez <fperez@colorado.edu>
1918 2004-07-18 Fernando Perez <fperez@colorado.edu>
1912
1919
1913 * IPython/iplib.py (__init__): Add better handling of '\' under
1920 * IPython/iplib.py (__init__): Add better handling of '\' under
1914 Win32 for filenames. After a patch by Ville.
1921 Win32 for filenames. After a patch by Ville.
1915
1922
1916 2004-07-17 Fernando Perez <fperez@colorado.edu>
1923 2004-07-17 Fernando Perez <fperez@colorado.edu>
1917
1924
1918 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1925 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1919 autocalling would be triggered for 'foo is bar' if foo is
1926 autocalling would be triggered for 'foo is bar' if foo is
1920 callable. I also cleaned up the autocall detection code to use a
1927 callable. I also cleaned up the autocall detection code to use a
1921 regexp, which is faster. Bug reported by Alexander Schmolck.
1928 regexp, which is faster. Bug reported by Alexander Schmolck.
1922
1929
1923 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1930 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1924 '?' in them would confuse the help system. Reported by Alex
1931 '?' in them would confuse the help system. Reported by Alex
1925 Schmolck.
1932 Schmolck.
1926
1933
1927 2004-07-16 Fernando Perez <fperez@colorado.edu>
1934 2004-07-16 Fernando Perez <fperez@colorado.edu>
1928
1935
1929 * IPython/GnuplotInteractive.py (__all__): added plot2.
1936 * IPython/GnuplotInteractive.py (__all__): added plot2.
1930
1937
1931 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1938 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1932 plotting dictionaries, lists or tuples of 1d arrays.
1939 plotting dictionaries, lists or tuples of 1d arrays.
1933
1940
1934 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1941 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1935 optimizations.
1942 optimizations.
1936
1943
1937 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1944 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1938 the information which was there from Janko's original IPP code:
1945 the information which was there from Janko's original IPP code:
1939
1946
1940 03.05.99 20:53 porto.ifm.uni-kiel.de
1947 03.05.99 20:53 porto.ifm.uni-kiel.de
1941 --Started changelog.
1948 --Started changelog.
1942 --make clear do what it say it does
1949 --make clear do what it say it does
1943 --added pretty output of lines from inputcache
1950 --added pretty output of lines from inputcache
1944 --Made Logger a mixin class, simplifies handling of switches
1951 --Made Logger a mixin class, simplifies handling of switches
1945 --Added own completer class. .string<TAB> expands to last history
1952 --Added own completer class. .string<TAB> expands to last history
1946 line which starts with string. The new expansion is also present
1953 line which starts with string. The new expansion is also present
1947 with Ctrl-r from the readline library. But this shows, who this
1954 with Ctrl-r from the readline library. But this shows, who this
1948 can be done for other cases.
1955 can be done for other cases.
1949 --Added convention that all shell functions should accept a
1956 --Added convention that all shell functions should accept a
1950 parameter_string This opens the door for different behaviour for
1957 parameter_string This opens the door for different behaviour for
1951 each function. @cd is a good example of this.
1958 each function. @cd is a good example of this.
1952
1959
1953 04.05.99 12:12 porto.ifm.uni-kiel.de
1960 04.05.99 12:12 porto.ifm.uni-kiel.de
1954 --added logfile rotation
1961 --added logfile rotation
1955 --added new mainloop method which freezes first the namespace
1962 --added new mainloop method which freezes first the namespace
1956
1963
1957 07.05.99 21:24 porto.ifm.uni-kiel.de
1964 07.05.99 21:24 porto.ifm.uni-kiel.de
1958 --added the docreader classes. Now there is a help system.
1965 --added the docreader classes. Now there is a help system.
1959 -This is only a first try. Currently it's not easy to put new
1966 -This is only a first try. Currently it's not easy to put new
1960 stuff in the indices. But this is the way to go. Info would be
1967 stuff in the indices. But this is the way to go. Info would be
1961 better, but HTML is every where and not everybody has an info
1968 better, but HTML is every where and not everybody has an info
1962 system installed and it's not so easy to change html-docs to info.
1969 system installed and it's not so easy to change html-docs to info.
1963 --added global logfile option
1970 --added global logfile option
1964 --there is now a hook for object inspection method pinfo needs to
1971 --there is now a hook for object inspection method pinfo needs to
1965 be provided for this. Can be reached by two '??'.
1972 be provided for this. Can be reached by two '??'.
1966
1973
1967 08.05.99 20:51 porto.ifm.uni-kiel.de
1974 08.05.99 20:51 porto.ifm.uni-kiel.de
1968 --added a README
1975 --added a README
1969 --bug in rc file. Something has changed so functions in the rc
1976 --bug in rc file. Something has changed so functions in the rc
1970 file need to reference the shell and not self. Not clear if it's a
1977 file need to reference the shell and not self. Not clear if it's a
1971 bug or feature.
1978 bug or feature.
1972 --changed rc file for new behavior
1979 --changed rc file for new behavior
1973
1980
1974 2004-07-15 Fernando Perez <fperez@colorado.edu>
1981 2004-07-15 Fernando Perez <fperez@colorado.edu>
1975
1982
1976 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1983 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1977 cache was falling out of sync in bizarre manners when multi-line
1984 cache was falling out of sync in bizarre manners when multi-line
1978 input was present. Minor optimizations and cleanup.
1985 input was present. Minor optimizations and cleanup.
1979
1986
1980 (Logger): Remove old Changelog info for cleanup. This is the
1987 (Logger): Remove old Changelog info for cleanup. This is the
1981 information which was there from Janko's original code:
1988 information which was there from Janko's original code:
1982
1989
1983 Changes to Logger: - made the default log filename a parameter
1990 Changes to Logger: - made the default log filename a parameter
1984
1991
1985 - put a check for lines beginning with !@? in log(). Needed
1992 - put a check for lines beginning with !@? in log(). Needed
1986 (even if the handlers properly log their lines) for mid-session
1993 (even if the handlers properly log their lines) for mid-session
1987 logging activation to work properly. Without this, lines logged
1994 logging activation to work properly. Without this, lines logged
1988 in mid session, which get read from the cache, would end up
1995 in mid session, which get read from the cache, would end up
1989 'bare' (with !@? in the open) in the log. Now they are caught
1996 'bare' (with !@? in the open) in the log. Now they are caught
1990 and prepended with a #.
1997 and prepended with a #.
1991
1998
1992 * IPython/iplib.py (InteractiveShell.init_readline): added check
1999 * IPython/iplib.py (InteractiveShell.init_readline): added check
1993 in case MagicCompleter fails to be defined, so we don't crash.
2000 in case MagicCompleter fails to be defined, so we don't crash.
1994
2001
1995 2004-07-13 Fernando Perez <fperez@colorado.edu>
2002 2004-07-13 Fernando Perez <fperez@colorado.edu>
1996
2003
1997 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2004 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1998 of EPS if the requested filename ends in '.eps'.
2005 of EPS if the requested filename ends in '.eps'.
1999
2006
2000 2004-07-04 Fernando Perez <fperez@colorado.edu>
2007 2004-07-04 Fernando Perez <fperez@colorado.edu>
2001
2008
2002 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2009 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2003 escaping of quotes when calling the shell.
2010 escaping of quotes when calling the shell.
2004
2011
2005 2004-07-02 Fernando Perez <fperez@colorado.edu>
2012 2004-07-02 Fernando Perez <fperez@colorado.edu>
2006
2013
2007 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2014 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2008 gettext not working because we were clobbering '_'. Fixes
2015 gettext not working because we were clobbering '_'. Fixes
2009 http://www.scipy.net/roundup/ipython/issue6.
2016 http://www.scipy.net/roundup/ipython/issue6.
2010
2017
2011 2004-07-01 Fernando Perez <fperez@colorado.edu>
2018 2004-07-01 Fernando Perez <fperez@colorado.edu>
2012
2019
2013 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2020 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2014 into @cd. Patch by Ville.
2021 into @cd. Patch by Ville.
2015
2022
2016 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2023 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2017 new function to store things after ipmaker runs. Patch by Ville.
2024 new function to store things after ipmaker runs. Patch by Ville.
2018 Eventually this will go away once ipmaker is removed and the class
2025 Eventually this will go away once ipmaker is removed and the class
2019 gets cleaned up, but for now it's ok. Key functionality here is
2026 gets cleaned up, but for now it's ok. Key functionality here is
2020 the addition of the persistent storage mechanism, a dict for
2027 the addition of the persistent storage mechanism, a dict for
2021 keeping data across sessions (for now just bookmarks, but more can
2028 keeping data across sessions (for now just bookmarks, but more can
2022 be implemented later).
2029 be implemented later).
2023
2030
2024 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2031 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2025 persistent across sections. Patch by Ville, I modified it
2032 persistent across sections. Patch by Ville, I modified it
2026 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2033 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2027 added a '-l' option to list all bookmarks.
2034 added a '-l' option to list all bookmarks.
2028
2035
2029 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2036 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2030 center for cleanup. Registered with atexit.register(). I moved
2037 center for cleanup. Registered with atexit.register(). I moved
2031 here the old exit_cleanup(). After a patch by Ville.
2038 here the old exit_cleanup(). After a patch by Ville.
2032
2039
2033 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2040 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2034 characters in the hacked shlex_split for python 2.2.
2041 characters in the hacked shlex_split for python 2.2.
2035
2042
2036 * IPython/iplib.py (file_matches): more fixes to filenames with
2043 * IPython/iplib.py (file_matches): more fixes to filenames with
2037 whitespace in them. It's not perfect, but limitations in python's
2044 whitespace in them. It's not perfect, but limitations in python's
2038 readline make it impossible to go further.
2045 readline make it impossible to go further.
2039
2046
2040 2004-06-29 Fernando Perez <fperez@colorado.edu>
2047 2004-06-29 Fernando Perez <fperez@colorado.edu>
2041
2048
2042 * IPython/iplib.py (file_matches): escape whitespace correctly in
2049 * IPython/iplib.py (file_matches): escape whitespace correctly in
2043 filename completions. Bug reported by Ville.
2050 filename completions. Bug reported by Ville.
2044
2051
2045 2004-06-28 Fernando Perez <fperez@colorado.edu>
2052 2004-06-28 Fernando Perez <fperez@colorado.edu>
2046
2053
2047 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2054 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2048 the history file will be called 'history-PROFNAME' (or just
2055 the history file will be called 'history-PROFNAME' (or just
2049 'history' if no profile is loaded). I was getting annoyed at
2056 'history' if no profile is loaded). I was getting annoyed at
2050 getting my Numerical work history clobbered by pysh sessions.
2057 getting my Numerical work history clobbered by pysh sessions.
2051
2058
2052 * IPython/iplib.py (InteractiveShell.__init__): Internal
2059 * IPython/iplib.py (InteractiveShell.__init__): Internal
2053 getoutputerror() function so that we can honor the system_verbose
2060 getoutputerror() function so that we can honor the system_verbose
2054 flag for _all_ system calls. I also added escaping of #
2061 flag for _all_ system calls. I also added escaping of #
2055 characters here to avoid confusing Itpl.
2062 characters here to avoid confusing Itpl.
2056
2063
2057 * IPython/Magic.py (shlex_split): removed call to shell in
2064 * IPython/Magic.py (shlex_split): removed call to shell in
2058 parse_options and replaced it with shlex.split(). The annoying
2065 parse_options and replaced it with shlex.split(). The annoying
2059 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2066 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2060 to backport it from 2.3, with several frail hacks (the shlex
2067 to backport it from 2.3, with several frail hacks (the shlex
2061 module is rather limited in 2.2). Thanks to a suggestion by Ville
2068 module is rather limited in 2.2). Thanks to a suggestion by Ville
2062 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2069 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2063 problem.
2070 problem.
2064
2071
2065 (Magic.magic_system_verbose): new toggle to print the actual
2072 (Magic.magic_system_verbose): new toggle to print the actual
2066 system calls made by ipython. Mainly for debugging purposes.
2073 system calls made by ipython. Mainly for debugging purposes.
2067
2074
2068 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2075 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2069 doesn't support persistence. Reported (and fix suggested) by
2076 doesn't support persistence. Reported (and fix suggested) by
2070 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2077 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2071
2078
2072 2004-06-26 Fernando Perez <fperez@colorado.edu>
2079 2004-06-26 Fernando Perez <fperez@colorado.edu>
2073
2080
2074 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2081 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2075 continue prompts.
2082 continue prompts.
2076
2083
2077 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2084 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2078 function (basically a big docstring) and a few more things here to
2085 function (basically a big docstring) and a few more things here to
2079 speedup startup. pysh.py is now very lightweight. We want because
2086 speedup startup. pysh.py is now very lightweight. We want because
2080 it gets execfile'd, while InterpreterExec gets imported, so
2087 it gets execfile'd, while InterpreterExec gets imported, so
2081 byte-compilation saves time.
2088 byte-compilation saves time.
2082
2089
2083 2004-06-25 Fernando Perez <fperez@colorado.edu>
2090 2004-06-25 Fernando Perez <fperez@colorado.edu>
2084
2091
2085 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2092 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2086 -NUM', which was recently broken.
2093 -NUM', which was recently broken.
2087
2094
2088 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2095 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2089 in multi-line input (but not !!, which doesn't make sense there).
2096 in multi-line input (but not !!, which doesn't make sense there).
2090
2097
2091 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2098 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2092 It's just too useful, and people can turn it off in the less
2099 It's just too useful, and people can turn it off in the less
2093 common cases where it's a problem.
2100 common cases where it's a problem.
2094
2101
2095 2004-06-24 Fernando Perez <fperez@colorado.edu>
2102 2004-06-24 Fernando Perez <fperez@colorado.edu>
2096
2103
2097 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2104 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2098 special syntaxes (like alias calling) is now allied in multi-line
2105 special syntaxes (like alias calling) is now allied in multi-line
2099 input. This is still _very_ experimental, but it's necessary for
2106 input. This is still _very_ experimental, but it's necessary for
2100 efficient shell usage combining python looping syntax with system
2107 efficient shell usage combining python looping syntax with system
2101 calls. For now it's restricted to aliases, I don't think it
2108 calls. For now it's restricted to aliases, I don't think it
2102 really even makes sense to have this for magics.
2109 really even makes sense to have this for magics.
2103
2110
2104 2004-06-23 Fernando Perez <fperez@colorado.edu>
2111 2004-06-23 Fernando Perez <fperez@colorado.edu>
2105
2112
2106 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2113 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2107 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2114 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2108
2115
2109 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2116 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2110 extensions under Windows (after code sent by Gary Bishop). The
2117 extensions under Windows (after code sent by Gary Bishop). The
2111 extensions considered 'executable' are stored in IPython's rc
2118 extensions considered 'executable' are stored in IPython's rc
2112 structure as win_exec_ext.
2119 structure as win_exec_ext.
2113
2120
2114 * IPython/genutils.py (shell): new function, like system() but
2121 * IPython/genutils.py (shell): new function, like system() but
2115 without return value. Very useful for interactive shell work.
2122 without return value. Very useful for interactive shell work.
2116
2123
2117 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2124 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2118 delete aliases.
2125 delete aliases.
2119
2126
2120 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2127 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2121 sure that the alias table doesn't contain python keywords.
2128 sure that the alias table doesn't contain python keywords.
2122
2129
2123 2004-06-21 Fernando Perez <fperez@colorado.edu>
2130 2004-06-21 Fernando Perez <fperez@colorado.edu>
2124
2131
2125 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2132 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2126 non-existent items are found in $PATH. Reported by Thorsten.
2133 non-existent items are found in $PATH. Reported by Thorsten.
2127
2134
2128 2004-06-20 Fernando Perez <fperez@colorado.edu>
2135 2004-06-20 Fernando Perez <fperez@colorado.edu>
2129
2136
2130 * IPython/iplib.py (complete): modified the completer so that the
2137 * IPython/iplib.py (complete): modified the completer so that the
2131 order of priorities can be easily changed at runtime.
2138 order of priorities can be easily changed at runtime.
2132
2139
2133 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2140 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2134 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2141 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2135
2142
2136 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2143 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2137 expand Python variables prepended with $ in all system calls. The
2144 expand Python variables prepended with $ in all system calls. The
2138 same was done to InteractiveShell.handle_shell_escape. Now all
2145 same was done to InteractiveShell.handle_shell_escape. Now all
2139 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2146 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2140 expansion of python variables and expressions according to the
2147 expansion of python variables and expressions according to the
2141 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2148 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2142
2149
2143 Though PEP-215 has been rejected, a similar (but simpler) one
2150 Though PEP-215 has been rejected, a similar (but simpler) one
2144 seems like it will go into Python 2.4, PEP-292 -
2151 seems like it will go into Python 2.4, PEP-292 -
2145 http://www.python.org/peps/pep-0292.html.
2152 http://www.python.org/peps/pep-0292.html.
2146
2153
2147 I'll keep the full syntax of PEP-215, since IPython has since the
2154 I'll keep the full syntax of PEP-215, since IPython has since the
2148 start used Ka-Ping Yee's reference implementation discussed there
2155 start used Ka-Ping Yee's reference implementation discussed there
2149 (Itpl), and I actually like the powerful semantics it offers.
2156 (Itpl), and I actually like the powerful semantics it offers.
2150
2157
2151 In order to access normal shell variables, the $ has to be escaped
2158 In order to access normal shell variables, the $ has to be escaped
2152 via an extra $. For example:
2159 via an extra $. For example:
2153
2160
2154 In [7]: PATH='a python variable'
2161 In [7]: PATH='a python variable'
2155
2162
2156 In [8]: !echo $PATH
2163 In [8]: !echo $PATH
2157 a python variable
2164 a python variable
2158
2165
2159 In [9]: !echo $$PATH
2166 In [9]: !echo $$PATH
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2167 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2161
2168
2162 (Magic.parse_options): escape $ so the shell doesn't evaluate
2169 (Magic.parse_options): escape $ so the shell doesn't evaluate
2163 things prematurely.
2170 things prematurely.
2164
2171
2165 * IPython/iplib.py (InteractiveShell.call_alias): added the
2172 * IPython/iplib.py (InteractiveShell.call_alias): added the
2166 ability for aliases to expand python variables via $.
2173 ability for aliases to expand python variables via $.
2167
2174
2168 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2175 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2169 system, now there's a @rehash/@rehashx pair of magics. These work
2176 system, now there's a @rehash/@rehashx pair of magics. These work
2170 like the csh rehash command, and can be invoked at any time. They
2177 like the csh rehash command, and can be invoked at any time. They
2171 build a table of aliases to everything in the user's $PATH
2178 build a table of aliases to everything in the user's $PATH
2172 (@rehash uses everything, @rehashx is slower but only adds
2179 (@rehash uses everything, @rehashx is slower but only adds
2173 executable files). With this, the pysh.py-based shell profile can
2180 executable files). With this, the pysh.py-based shell profile can
2174 now simply call rehash upon startup, and full access to all
2181 now simply call rehash upon startup, and full access to all
2175 programs in the user's path is obtained.
2182 programs in the user's path is obtained.
2176
2183
2177 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2184 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2178 functionality is now fully in place. I removed the old dynamic
2185 functionality is now fully in place. I removed the old dynamic
2179 code generation based approach, in favor of a much lighter one
2186 code generation based approach, in favor of a much lighter one
2180 based on a simple dict. The advantage is that this allows me to
2187 based on a simple dict. The advantage is that this allows me to
2181 now have thousands of aliases with negligible cost (unthinkable
2188 now have thousands of aliases with negligible cost (unthinkable
2182 with the old system).
2189 with the old system).
2183
2190
2184 2004-06-19 Fernando Perez <fperez@colorado.edu>
2191 2004-06-19 Fernando Perez <fperez@colorado.edu>
2185
2192
2186 * IPython/iplib.py (__init__): extended MagicCompleter class to
2193 * IPython/iplib.py (__init__): extended MagicCompleter class to
2187 also complete (last in priority) on user aliases.
2194 also complete (last in priority) on user aliases.
2188
2195
2189 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2196 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2190 call to eval.
2197 call to eval.
2191 (ItplNS.__init__): Added a new class which functions like Itpl,
2198 (ItplNS.__init__): Added a new class which functions like Itpl,
2192 but allows configuring the namespace for the evaluation to occur
2199 but allows configuring the namespace for the evaluation to occur
2193 in.
2200 in.
2194
2201
2195 2004-06-18 Fernando Perez <fperez@colorado.edu>
2202 2004-06-18 Fernando Perez <fperez@colorado.edu>
2196
2203
2197 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2204 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2198 better message when 'exit' or 'quit' are typed (a common newbie
2205 better message when 'exit' or 'quit' are typed (a common newbie
2199 confusion).
2206 confusion).
2200
2207
2201 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2208 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2202 check for Windows users.
2209 check for Windows users.
2203
2210
2204 * IPython/iplib.py (InteractiveShell.user_setup): removed
2211 * IPython/iplib.py (InteractiveShell.user_setup): removed
2205 disabling of colors for Windows. I'll test at runtime and issue a
2212 disabling of colors for Windows. I'll test at runtime and issue a
2206 warning if Gary's readline isn't found, as to nudge users to
2213 warning if Gary's readline isn't found, as to nudge users to
2207 download it.
2214 download it.
2208
2215
2209 2004-06-16 Fernando Perez <fperez@colorado.edu>
2216 2004-06-16 Fernando Perez <fperez@colorado.edu>
2210
2217
2211 * IPython/genutils.py (Stream.__init__): changed to print errors
2218 * IPython/genutils.py (Stream.__init__): changed to print errors
2212 to sys.stderr. I had a circular dependency here. Now it's
2219 to sys.stderr. I had a circular dependency here. Now it's
2213 possible to run ipython as IDLE's shell (consider this pre-alpha,
2220 possible to run ipython as IDLE's shell (consider this pre-alpha,
2214 since true stdout things end up in the starting terminal instead
2221 since true stdout things end up in the starting terminal instead
2215 of IDLE's out).
2222 of IDLE's out).
2216
2223
2217 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2224 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2218 users who haven't # updated their prompt_in2 definitions. Remove
2225 users who haven't # updated their prompt_in2 definitions. Remove
2219 eventually.
2226 eventually.
2220 (multiple_replace): added credit to original ASPN recipe.
2227 (multiple_replace): added credit to original ASPN recipe.
2221
2228
2222 2004-06-15 Fernando Perez <fperez@colorado.edu>
2229 2004-06-15 Fernando Perez <fperez@colorado.edu>
2223
2230
2224 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2231 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2225 list of auto-defined aliases.
2232 list of auto-defined aliases.
2226
2233
2227 2004-06-13 Fernando Perez <fperez@colorado.edu>
2234 2004-06-13 Fernando Perez <fperez@colorado.edu>
2228
2235
2229 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2236 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2230 install was really requested (so setup.py can be used for other
2237 install was really requested (so setup.py can be used for other
2231 things under Windows).
2238 things under Windows).
2232
2239
2233 2004-06-10 Fernando Perez <fperez@colorado.edu>
2240 2004-06-10 Fernando Perez <fperez@colorado.edu>
2234
2241
2235 * IPython/Logger.py (Logger.create_log): Manually remove any old
2242 * IPython/Logger.py (Logger.create_log): Manually remove any old
2236 backup, since os.remove may fail under Windows. Fixes bug
2243 backup, since os.remove may fail under Windows. Fixes bug
2237 reported by Thorsten.
2244 reported by Thorsten.
2238
2245
2239 2004-06-09 Fernando Perez <fperez@colorado.edu>
2246 2004-06-09 Fernando Perez <fperez@colorado.edu>
2240
2247
2241 * examples/example-embed.py: fixed all references to %n (replaced
2248 * examples/example-embed.py: fixed all references to %n (replaced
2242 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2249 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2243 for all examples and the manual as well.
2250 for all examples and the manual as well.
2244
2251
2245 2004-06-08 Fernando Perez <fperez@colorado.edu>
2252 2004-06-08 Fernando Perez <fperez@colorado.edu>
2246
2253
2247 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2254 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2248 alignment and color management. All 3 prompt subsystems now
2255 alignment and color management. All 3 prompt subsystems now
2249 inherit from BasePrompt.
2256 inherit from BasePrompt.
2250
2257
2251 * tools/release: updates for windows installer build and tag rpms
2258 * tools/release: updates for windows installer build and tag rpms
2252 with python version (since paths are fixed).
2259 with python version (since paths are fixed).
2253
2260
2254 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2261 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2255 which will become eventually obsolete. Also fixed the default
2262 which will become eventually obsolete. Also fixed the default
2256 prompt_in2 to use \D, so at least new users start with the correct
2263 prompt_in2 to use \D, so at least new users start with the correct
2257 defaults.
2264 defaults.
2258 WARNING: Users with existing ipythonrc files will need to apply
2265 WARNING: Users with existing ipythonrc files will need to apply
2259 this fix manually!
2266 this fix manually!
2260
2267
2261 * setup.py: make windows installer (.exe). This is finally the
2268 * setup.py: make windows installer (.exe). This is finally the
2262 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2269 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2263 which I hadn't included because it required Python 2.3 (or recent
2270 which I hadn't included because it required Python 2.3 (or recent
2264 distutils).
2271 distutils).
2265
2272
2266 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2273 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2267 usage of new '\D' escape.
2274 usage of new '\D' escape.
2268
2275
2269 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2276 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2270 lacks os.getuid())
2277 lacks os.getuid())
2271 (CachedOutput.set_colors): Added the ability to turn coloring
2278 (CachedOutput.set_colors): Added the ability to turn coloring
2272 on/off with @colors even for manually defined prompt colors. It
2279 on/off with @colors even for manually defined prompt colors. It
2273 uses a nasty global, but it works safely and via the generic color
2280 uses a nasty global, but it works safely and via the generic color
2274 handling mechanism.
2281 handling mechanism.
2275 (Prompt2.__init__): Introduced new escape '\D' for continuation
2282 (Prompt2.__init__): Introduced new escape '\D' for continuation
2276 prompts. It represents the counter ('\#') as dots.
2283 prompts. It represents the counter ('\#') as dots.
2277 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2284 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2278 need to update their ipythonrc files and replace '%n' with '\D' in
2285 need to update their ipythonrc files and replace '%n' with '\D' in
2279 their prompt_in2 settings everywhere. Sorry, but there's
2286 their prompt_in2 settings everywhere. Sorry, but there's
2280 otherwise no clean way to get all prompts to properly align. The
2287 otherwise no clean way to get all prompts to properly align. The
2281 ipythonrc shipped with IPython has been updated.
2288 ipythonrc shipped with IPython has been updated.
2282
2289
2283 2004-06-07 Fernando Perez <fperez@colorado.edu>
2290 2004-06-07 Fernando Perez <fperez@colorado.edu>
2284
2291
2285 * setup.py (isfile): Pass local_icons option to latex2html, so the
2292 * setup.py (isfile): Pass local_icons option to latex2html, so the
2286 resulting HTML file is self-contained. Thanks to
2293 resulting HTML file is self-contained. Thanks to
2287 dryice-AT-liu.com.cn for the tip.
2294 dryice-AT-liu.com.cn for the tip.
2288
2295
2289 * pysh.py: I created a new profile 'shell', which implements a
2296 * pysh.py: I created a new profile 'shell', which implements a
2290 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2297 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2291 system shell, nor will it become one anytime soon. It's mainly
2298 system shell, nor will it become one anytime soon. It's mainly
2292 meant to illustrate the use of the new flexible bash-like prompts.
2299 meant to illustrate the use of the new flexible bash-like prompts.
2293 I guess it could be used by hardy souls for true shell management,
2300 I guess it could be used by hardy souls for true shell management,
2294 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2301 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2295 profile. This uses the InterpreterExec extension provided by
2302 profile. This uses the InterpreterExec extension provided by
2296 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2303 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2297
2304
2298 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2305 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2299 auto-align itself with the length of the previous input prompt
2306 auto-align itself with the length of the previous input prompt
2300 (taking into account the invisible color escapes).
2307 (taking into account the invisible color escapes).
2301 (CachedOutput.__init__): Large restructuring of this class. Now
2308 (CachedOutput.__init__): Large restructuring of this class. Now
2302 all three prompts (primary1, primary2, output) are proper objects,
2309 all three prompts (primary1, primary2, output) are proper objects,
2303 managed by the 'parent' CachedOutput class. The code is still a
2310 managed by the 'parent' CachedOutput class. The code is still a
2304 bit hackish (all prompts share state via a pointer to the cache),
2311 bit hackish (all prompts share state via a pointer to the cache),
2305 but it's overall far cleaner than before.
2312 but it's overall far cleaner than before.
2306
2313
2307 * IPython/genutils.py (getoutputerror): modified to add verbose,
2314 * IPython/genutils.py (getoutputerror): modified to add verbose,
2308 debug and header options. This makes the interface of all getout*
2315 debug and header options. This makes the interface of all getout*
2309 functions uniform.
2316 functions uniform.
2310 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2317 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2311
2318
2312 * IPython/Magic.py (Magic.default_option): added a function to
2319 * IPython/Magic.py (Magic.default_option): added a function to
2313 allow registering default options for any magic command. This
2320 allow registering default options for any magic command. This
2314 makes it easy to have profiles which customize the magics globally
2321 makes it easy to have profiles which customize the magics globally
2315 for a certain use. The values set through this function are
2322 for a certain use. The values set through this function are
2316 picked up by the parse_options() method, which all magics should
2323 picked up by the parse_options() method, which all magics should
2317 use to parse their options.
2324 use to parse their options.
2318
2325
2319 * IPython/genutils.py (warn): modified the warnings framework to
2326 * IPython/genutils.py (warn): modified the warnings framework to
2320 use the Term I/O class. I'm trying to slowly unify all of
2327 use the Term I/O class. I'm trying to slowly unify all of
2321 IPython's I/O operations to pass through Term.
2328 IPython's I/O operations to pass through Term.
2322
2329
2323 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2330 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2324 the secondary prompt to correctly match the length of the primary
2331 the secondary prompt to correctly match the length of the primary
2325 one for any prompt. Now multi-line code will properly line up
2332 one for any prompt. Now multi-line code will properly line up
2326 even for path dependent prompts, such as the new ones available
2333 even for path dependent prompts, such as the new ones available
2327 via the prompt_specials.
2334 via the prompt_specials.
2328
2335
2329 2004-06-06 Fernando Perez <fperez@colorado.edu>
2336 2004-06-06 Fernando Perez <fperez@colorado.edu>
2330
2337
2331 * IPython/Prompts.py (prompt_specials): Added the ability to have
2338 * IPython/Prompts.py (prompt_specials): Added the ability to have
2332 bash-like special sequences in the prompts, which get
2339 bash-like special sequences in the prompts, which get
2333 automatically expanded. Things like hostname, current working
2340 automatically expanded. Things like hostname, current working
2334 directory and username are implemented already, but it's easy to
2341 directory and username are implemented already, but it's easy to
2335 add more in the future. Thanks to a patch by W.J. van der Laan
2342 add more in the future. Thanks to a patch by W.J. van der Laan
2336 <gnufnork-AT-hetdigitalegat.nl>
2343 <gnufnork-AT-hetdigitalegat.nl>
2337 (prompt_specials): Added color support for prompt strings, so
2344 (prompt_specials): Added color support for prompt strings, so
2338 users can define arbitrary color setups for their prompts.
2345 users can define arbitrary color setups for their prompts.
2339
2346
2340 2004-06-05 Fernando Perez <fperez@colorado.edu>
2347 2004-06-05 Fernando Perez <fperez@colorado.edu>
2341
2348
2342 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2349 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2343 code to load Gary Bishop's readline and configure it
2350 code to load Gary Bishop's readline and configure it
2344 automatically. Thanks to Gary for help on this.
2351 automatically. Thanks to Gary for help on this.
2345
2352
2346 2004-06-01 Fernando Perez <fperez@colorado.edu>
2353 2004-06-01 Fernando Perez <fperez@colorado.edu>
2347
2354
2348 * IPython/Logger.py (Logger.create_log): fix bug for logging
2355 * IPython/Logger.py (Logger.create_log): fix bug for logging
2349 with no filename (previous fix was incomplete).
2356 with no filename (previous fix was incomplete).
2350
2357
2351 2004-05-25 Fernando Perez <fperez@colorado.edu>
2358 2004-05-25 Fernando Perez <fperez@colorado.edu>
2352
2359
2353 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2360 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2354 parens would get passed to the shell.
2361 parens would get passed to the shell.
2355
2362
2356 2004-05-20 Fernando Perez <fperez@colorado.edu>
2363 2004-05-20 Fernando Perez <fperez@colorado.edu>
2357
2364
2358 * IPython/Magic.py (Magic.magic_prun): changed default profile
2365 * IPython/Magic.py (Magic.magic_prun): changed default profile
2359 sort order to 'time' (the more common profiling need).
2366 sort order to 'time' (the more common profiling need).
2360
2367
2361 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2368 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2362 so that source code shown is guaranteed in sync with the file on
2369 so that source code shown is guaranteed in sync with the file on
2363 disk (also changed in psource). Similar fix to the one for
2370 disk (also changed in psource). Similar fix to the one for
2364 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2371 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2365 <yann.ledu-AT-noos.fr>.
2372 <yann.ledu-AT-noos.fr>.
2366
2373
2367 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2374 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2368 with a single option would not be correctly parsed. Closes
2375 with a single option would not be correctly parsed. Closes
2369 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2376 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2370 introduced in 0.6.0 (on 2004-05-06).
2377 introduced in 0.6.0 (on 2004-05-06).
2371
2378
2372 2004-05-13 *** Released version 0.6.0
2379 2004-05-13 *** Released version 0.6.0
2373
2380
2374 2004-05-13 Fernando Perez <fperez@colorado.edu>
2381 2004-05-13 Fernando Perez <fperez@colorado.edu>
2375
2382
2376 * debian/: Added debian/ directory to CVS, so that debian support
2383 * debian/: Added debian/ directory to CVS, so that debian support
2377 is publicly accessible. The debian package is maintained by Jack
2384 is publicly accessible. The debian package is maintained by Jack
2378 Moffit <jack-AT-xiph.org>.
2385 Moffit <jack-AT-xiph.org>.
2379
2386
2380 * Documentation: included the notes about an ipython-based system
2387 * Documentation: included the notes about an ipython-based system
2381 shell (the hypothetical 'pysh') into the new_design.pdf document,
2388 shell (the hypothetical 'pysh') into the new_design.pdf document,
2382 so that these ideas get distributed to users along with the
2389 so that these ideas get distributed to users along with the
2383 official documentation.
2390 official documentation.
2384
2391
2385 2004-05-10 Fernando Perez <fperez@colorado.edu>
2392 2004-05-10 Fernando Perez <fperez@colorado.edu>
2386
2393
2387 * IPython/Logger.py (Logger.create_log): fix recently introduced
2394 * IPython/Logger.py (Logger.create_log): fix recently introduced
2388 bug (misindented line) where logstart would fail when not given an
2395 bug (misindented line) where logstart would fail when not given an
2389 explicit filename.
2396 explicit filename.
2390
2397
2391 2004-05-09 Fernando Perez <fperez@colorado.edu>
2398 2004-05-09 Fernando Perez <fperez@colorado.edu>
2392
2399
2393 * IPython/Magic.py (Magic.parse_options): skip system call when
2400 * IPython/Magic.py (Magic.parse_options): skip system call when
2394 there are no options to look for. Faster, cleaner for the common
2401 there are no options to look for. Faster, cleaner for the common
2395 case.
2402 case.
2396
2403
2397 * Documentation: many updates to the manual: describing Windows
2404 * Documentation: many updates to the manual: describing Windows
2398 support better, Gnuplot updates, credits, misc small stuff. Also
2405 support better, Gnuplot updates, credits, misc small stuff. Also
2399 updated the new_design doc a bit.
2406 updated the new_design doc a bit.
2400
2407
2401 2004-05-06 *** Released version 0.6.0.rc1
2408 2004-05-06 *** Released version 0.6.0.rc1
2402
2409
2403 2004-05-06 Fernando Perez <fperez@colorado.edu>
2410 2004-05-06 Fernando Perez <fperez@colorado.edu>
2404
2411
2405 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2412 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2406 operations to use the vastly more efficient list/''.join() method.
2413 operations to use the vastly more efficient list/''.join() method.
2407 (FormattedTB.text): Fix
2414 (FormattedTB.text): Fix
2408 http://www.scipy.net/roundup/ipython/issue12 - exception source
2415 http://www.scipy.net/roundup/ipython/issue12 - exception source
2409 extract not updated after reload. Thanks to Mike Salib
2416 extract not updated after reload. Thanks to Mike Salib
2410 <msalib-AT-mit.edu> for pinning the source of the problem.
2417 <msalib-AT-mit.edu> for pinning the source of the problem.
2411 Fortunately, the solution works inside ipython and doesn't require
2418 Fortunately, the solution works inside ipython and doesn't require
2412 any changes to python proper.
2419 any changes to python proper.
2413
2420
2414 * IPython/Magic.py (Magic.parse_options): Improved to process the
2421 * IPython/Magic.py (Magic.parse_options): Improved to process the
2415 argument list as a true shell would (by actually using the
2422 argument list as a true shell would (by actually using the
2416 underlying system shell). This way, all @magics automatically get
2423 underlying system shell). This way, all @magics automatically get
2417 shell expansion for variables. Thanks to a comment by Alex
2424 shell expansion for variables. Thanks to a comment by Alex
2418 Schmolck.
2425 Schmolck.
2419
2426
2420 2004-04-04 Fernando Perez <fperez@colorado.edu>
2427 2004-04-04 Fernando Perez <fperez@colorado.edu>
2421
2428
2422 * IPython/iplib.py (InteractiveShell.interact): Added a special
2429 * IPython/iplib.py (InteractiveShell.interact): Added a special
2423 trap for a debugger quit exception, which is basically impossible
2430 trap for a debugger quit exception, which is basically impossible
2424 to handle by normal mechanisms, given what pdb does to the stack.
2431 to handle by normal mechanisms, given what pdb does to the stack.
2425 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2432 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2426
2433
2427 2004-04-03 Fernando Perez <fperez@colorado.edu>
2434 2004-04-03 Fernando Perez <fperez@colorado.edu>
2428
2435
2429 * IPython/genutils.py (Term): Standardized the names of the Term
2436 * IPython/genutils.py (Term): Standardized the names of the Term
2430 class streams to cin/cout/cerr, following C++ naming conventions
2437 class streams to cin/cout/cerr, following C++ naming conventions
2431 (I can't use in/out/err because 'in' is not a valid attribute
2438 (I can't use in/out/err because 'in' is not a valid attribute
2432 name).
2439 name).
2433
2440
2434 * IPython/iplib.py (InteractiveShell.interact): don't increment
2441 * IPython/iplib.py (InteractiveShell.interact): don't increment
2435 the prompt if there's no user input. By Daniel 'Dang' Griffith
2442 the prompt if there's no user input. By Daniel 'Dang' Griffith
2436 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2443 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2437 Francois Pinard.
2444 Francois Pinard.
2438
2445
2439 2004-04-02 Fernando Perez <fperez@colorado.edu>
2446 2004-04-02 Fernando Perez <fperez@colorado.edu>
2440
2447
2441 * IPython/genutils.py (Stream.__init__): Modified to survive at
2448 * IPython/genutils.py (Stream.__init__): Modified to survive at
2442 least importing in contexts where stdin/out/err aren't true file
2449 least importing in contexts where stdin/out/err aren't true file
2443 objects, such as PyCrust (they lack fileno() and mode). However,
2450 objects, such as PyCrust (they lack fileno() and mode). However,
2444 the recovery facilities which rely on these things existing will
2451 the recovery facilities which rely on these things existing will
2445 not work.
2452 not work.
2446
2453
2447 2004-04-01 Fernando Perez <fperez@colorado.edu>
2454 2004-04-01 Fernando Perez <fperez@colorado.edu>
2448
2455
2449 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2456 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2450 use the new getoutputerror() function, so it properly
2457 use the new getoutputerror() function, so it properly
2451 distinguishes stdout/err.
2458 distinguishes stdout/err.
2452
2459
2453 * IPython/genutils.py (getoutputerror): added a function to
2460 * IPython/genutils.py (getoutputerror): added a function to
2454 capture separately the standard output and error of a command.
2461 capture separately the standard output and error of a command.
2455 After a comment from dang on the mailing lists. This code is
2462 After a comment from dang on the mailing lists. This code is
2456 basically a modified version of commands.getstatusoutput(), from
2463 basically a modified version of commands.getstatusoutput(), from
2457 the standard library.
2464 the standard library.
2458
2465
2459 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2466 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2460 '!!' as a special syntax (shorthand) to access @sx.
2467 '!!' as a special syntax (shorthand) to access @sx.
2461
2468
2462 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2469 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2463 command and return its output as a list split on '\n'.
2470 command and return its output as a list split on '\n'.
2464
2471
2465 2004-03-31 Fernando Perez <fperez@colorado.edu>
2472 2004-03-31 Fernando Perez <fperez@colorado.edu>
2466
2473
2467 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2474 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2468 method to dictionaries used as FakeModule instances if they lack
2475 method to dictionaries used as FakeModule instances if they lack
2469 it. At least pydoc in python2.3 breaks for runtime-defined
2476 it. At least pydoc in python2.3 breaks for runtime-defined
2470 functions without this hack. At some point I need to _really_
2477 functions without this hack. At some point I need to _really_
2471 understand what FakeModule is doing, because it's a gross hack.
2478 understand what FakeModule is doing, because it's a gross hack.
2472 But it solves Arnd's problem for now...
2479 But it solves Arnd's problem for now...
2473
2480
2474 2004-02-27 Fernando Perez <fperez@colorado.edu>
2481 2004-02-27 Fernando Perez <fperez@colorado.edu>
2475
2482
2476 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2483 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2477 mode would behave erratically. Also increased the number of
2484 mode would behave erratically. Also increased the number of
2478 possible logs in rotate mod to 999. Thanks to Rod Holland
2485 possible logs in rotate mod to 999. Thanks to Rod Holland
2479 <rhh@StructureLABS.com> for the report and fixes.
2486 <rhh@StructureLABS.com> for the report and fixes.
2480
2487
2481 2004-02-26 Fernando Perez <fperez@colorado.edu>
2488 2004-02-26 Fernando Perez <fperez@colorado.edu>
2482
2489
2483 * IPython/genutils.py (page): Check that the curses module really
2490 * IPython/genutils.py (page): Check that the curses module really
2484 has the initscr attribute before trying to use it. For some
2491 has the initscr attribute before trying to use it. For some
2485 reason, the Solaris curses module is missing this. I think this
2492 reason, the Solaris curses module is missing this. I think this
2486 should be considered a Solaris python bug, but I'm not sure.
2493 should be considered a Solaris python bug, but I'm not sure.
2487
2494
2488 2004-01-17 Fernando Perez <fperez@colorado.edu>
2495 2004-01-17 Fernando Perez <fperez@colorado.edu>
2489
2496
2490 * IPython/genutils.py (Stream.__init__): Changes to try to make
2497 * IPython/genutils.py (Stream.__init__): Changes to try to make
2491 ipython robust against stdin/out/err being closed by the user.
2498 ipython robust against stdin/out/err being closed by the user.
2492 This is 'user error' (and blocks a normal python session, at least
2499 This is 'user error' (and blocks a normal python session, at least
2493 the stdout case). However, Ipython should be able to survive such
2500 the stdout case). However, Ipython should be able to survive such
2494 instances of abuse as gracefully as possible. To simplify the
2501 instances of abuse as gracefully as possible. To simplify the
2495 coding and maintain compatibility with Gary Bishop's Term
2502 coding and maintain compatibility with Gary Bishop's Term
2496 contributions, I've made use of classmethods for this. I think
2503 contributions, I've made use of classmethods for this. I think
2497 this introduces a dependency on python 2.2.
2504 this introduces a dependency on python 2.2.
2498
2505
2499 2004-01-13 Fernando Perez <fperez@colorado.edu>
2506 2004-01-13 Fernando Perez <fperez@colorado.edu>
2500
2507
2501 * IPython/numutils.py (exp_safe): simplified the code a bit and
2508 * IPython/numutils.py (exp_safe): simplified the code a bit and
2502 removed the need for importing the kinds module altogether.
2509 removed the need for importing the kinds module altogether.
2503
2510
2504 2004-01-06 Fernando Perez <fperez@colorado.edu>
2511 2004-01-06 Fernando Perez <fperez@colorado.edu>
2505
2512
2506 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2513 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2507 a magic function instead, after some community feedback. No
2514 a magic function instead, after some community feedback. No
2508 special syntax will exist for it, but its name is deliberately
2515 special syntax will exist for it, but its name is deliberately
2509 very short.
2516 very short.
2510
2517
2511 2003-12-20 Fernando Perez <fperez@colorado.edu>
2518 2003-12-20 Fernando Perez <fperez@colorado.edu>
2512
2519
2513 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2520 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2514 new functionality, to automagically assign the result of a shell
2521 new functionality, to automagically assign the result of a shell
2515 command to a variable. I'll solicit some community feedback on
2522 command to a variable. I'll solicit some community feedback on
2516 this before making it permanent.
2523 this before making it permanent.
2517
2524
2518 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2525 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2519 requested about callables for which inspect couldn't obtain a
2526 requested about callables for which inspect couldn't obtain a
2520 proper argspec. Thanks to a crash report sent by Etienne
2527 proper argspec. Thanks to a crash report sent by Etienne
2521 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2528 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2522
2529
2523 2003-12-09 Fernando Perez <fperez@colorado.edu>
2530 2003-12-09 Fernando Perez <fperez@colorado.edu>
2524
2531
2525 * IPython/genutils.py (page): patch for the pager to work across
2532 * IPython/genutils.py (page): patch for the pager to work across
2526 various versions of Windows. By Gary Bishop.
2533 various versions of Windows. By Gary Bishop.
2527
2534
2528 2003-12-04 Fernando Perez <fperez@colorado.edu>
2535 2003-12-04 Fernando Perez <fperez@colorado.edu>
2529
2536
2530 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2537 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2531 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2538 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2532 While I tested this and it looks ok, there may still be corner
2539 While I tested this and it looks ok, there may still be corner
2533 cases I've missed.
2540 cases I've missed.
2534
2541
2535 2003-12-01 Fernando Perez <fperez@colorado.edu>
2542 2003-12-01 Fernando Perez <fperez@colorado.edu>
2536
2543
2537 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2544 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2538 where a line like 'p,q=1,2' would fail because the automagic
2545 where a line like 'p,q=1,2' would fail because the automagic
2539 system would be triggered for @p.
2546 system would be triggered for @p.
2540
2547
2541 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2548 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2542 cleanups, code unmodified.
2549 cleanups, code unmodified.
2543
2550
2544 * IPython/genutils.py (Term): added a class for IPython to handle
2551 * IPython/genutils.py (Term): added a class for IPython to handle
2545 output. In most cases it will just be a proxy for stdout/err, but
2552 output. In most cases it will just be a proxy for stdout/err, but
2546 having this allows modifications to be made for some platforms,
2553 having this allows modifications to be made for some platforms,
2547 such as handling color escapes under Windows. All of this code
2554 such as handling color escapes under Windows. All of this code
2548 was contributed by Gary Bishop, with minor modifications by me.
2555 was contributed by Gary Bishop, with minor modifications by me.
2549 The actual changes affect many files.
2556 The actual changes affect many files.
2550
2557
2551 2003-11-30 Fernando Perez <fperez@colorado.edu>
2558 2003-11-30 Fernando Perez <fperez@colorado.edu>
2552
2559
2553 * IPython/iplib.py (file_matches): new completion code, courtesy
2560 * IPython/iplib.py (file_matches): new completion code, courtesy
2554 of Jeff Collins. This enables filename completion again under
2561 of Jeff Collins. This enables filename completion again under
2555 python 2.3, which disabled it at the C level.
2562 python 2.3, which disabled it at the C level.
2556
2563
2557 2003-11-11 Fernando Perez <fperez@colorado.edu>
2564 2003-11-11 Fernando Perez <fperez@colorado.edu>
2558
2565
2559 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2566 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2560 for Numeric.array(map(...)), but often convenient.
2567 for Numeric.array(map(...)), but often convenient.
2561
2568
2562 2003-11-05 Fernando Perez <fperez@colorado.edu>
2569 2003-11-05 Fernando Perez <fperez@colorado.edu>
2563
2570
2564 * IPython/numutils.py (frange): Changed a call from int() to
2571 * IPython/numutils.py (frange): Changed a call from int() to
2565 int(round()) to prevent a problem reported with arange() in the
2572 int(round()) to prevent a problem reported with arange() in the
2566 numpy list.
2573 numpy list.
2567
2574
2568 2003-10-06 Fernando Perez <fperez@colorado.edu>
2575 2003-10-06 Fernando Perez <fperez@colorado.edu>
2569
2576
2570 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2577 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2571 prevent crashes if sys lacks an argv attribute (it happens with
2578 prevent crashes if sys lacks an argv attribute (it happens with
2572 embedded interpreters which build a bare-bones sys module).
2579 embedded interpreters which build a bare-bones sys module).
2573 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2580 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2574
2581
2575 2003-09-24 Fernando Perez <fperez@colorado.edu>
2582 2003-09-24 Fernando Perez <fperez@colorado.edu>
2576
2583
2577 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2584 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2578 to protect against poorly written user objects where __getattr__
2585 to protect against poorly written user objects where __getattr__
2579 raises exceptions other than AttributeError. Thanks to a bug
2586 raises exceptions other than AttributeError. Thanks to a bug
2580 report by Oliver Sander <osander-AT-gmx.de>.
2587 report by Oliver Sander <osander-AT-gmx.de>.
2581
2588
2582 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2589 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2583 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2590 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2584
2591
2585 2003-09-09 Fernando Perez <fperez@colorado.edu>
2592 2003-09-09 Fernando Perez <fperez@colorado.edu>
2586
2593
2587 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2594 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2588 unpacking a list whith a callable as first element would
2595 unpacking a list whith a callable as first element would
2589 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2596 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2590 Collins.
2597 Collins.
2591
2598
2592 2003-08-25 *** Released version 0.5.0
2599 2003-08-25 *** Released version 0.5.0
2593
2600
2594 2003-08-22 Fernando Perez <fperez@colorado.edu>
2601 2003-08-22 Fernando Perez <fperez@colorado.edu>
2595
2602
2596 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2603 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2597 improperly defined user exceptions. Thanks to feedback from Mark
2604 improperly defined user exceptions. Thanks to feedback from Mark
2598 Russell <mrussell-AT-verio.net>.
2605 Russell <mrussell-AT-verio.net>.
2599
2606
2600 2003-08-20 Fernando Perez <fperez@colorado.edu>
2607 2003-08-20 Fernando Perez <fperez@colorado.edu>
2601
2608
2602 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2609 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2603 printing so that it would print multi-line string forms starting
2610 printing so that it would print multi-line string forms starting
2604 with a new line. This way the formatting is better respected for
2611 with a new line. This way the formatting is better respected for
2605 objects which work hard to make nice string forms.
2612 objects which work hard to make nice string forms.
2606
2613
2607 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2614 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2608 autocall would overtake data access for objects with both
2615 autocall would overtake data access for objects with both
2609 __getitem__ and __call__.
2616 __getitem__ and __call__.
2610
2617
2611 2003-08-19 *** Released version 0.5.0-rc1
2618 2003-08-19 *** Released version 0.5.0-rc1
2612
2619
2613 2003-08-19 Fernando Perez <fperez@colorado.edu>
2620 2003-08-19 Fernando Perez <fperez@colorado.edu>
2614
2621
2615 * IPython/deep_reload.py (load_tail): single tiny change here
2622 * IPython/deep_reload.py (load_tail): single tiny change here
2616 seems to fix the long-standing bug of dreload() failing to work
2623 seems to fix the long-standing bug of dreload() failing to work
2617 for dotted names. But this module is pretty tricky, so I may have
2624 for dotted names. But this module is pretty tricky, so I may have
2618 missed some subtlety. Needs more testing!.
2625 missed some subtlety. Needs more testing!.
2619
2626
2620 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2627 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2621 exceptions which have badly implemented __str__ methods.
2628 exceptions which have badly implemented __str__ methods.
2622 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2629 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2623 which I've been getting reports about from Python 2.3 users. I
2630 which I've been getting reports about from Python 2.3 users. I
2624 wish I had a simple test case to reproduce the problem, so I could
2631 wish I had a simple test case to reproduce the problem, so I could
2625 either write a cleaner workaround or file a bug report if
2632 either write a cleaner workaround or file a bug report if
2626 necessary.
2633 necessary.
2627
2634
2628 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2635 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2629 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2636 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2630 a bug report by Tjabo Kloppenburg.
2637 a bug report by Tjabo Kloppenburg.
2631
2638
2632 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2639 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2633 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2640 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2634 seems rather unstable. Thanks to a bug report by Tjabo
2641 seems rather unstable. Thanks to a bug report by Tjabo
2635 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2642 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2636
2643
2637 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2644 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2638 this out soon because of the critical fixes in the inner loop for
2645 this out soon because of the critical fixes in the inner loop for
2639 generators.
2646 generators.
2640
2647
2641 * IPython/Magic.py (Magic.getargspec): removed. This (and
2648 * IPython/Magic.py (Magic.getargspec): removed. This (and
2642 _get_def) have been obsoleted by OInspect for a long time, I
2649 _get_def) have been obsoleted by OInspect for a long time, I
2643 hadn't noticed that they were dead code.
2650 hadn't noticed that they were dead code.
2644 (Magic._ofind): restored _ofind functionality for a few literals
2651 (Magic._ofind): restored _ofind functionality for a few literals
2645 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2652 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2646 for things like "hello".capitalize?, since that would require a
2653 for things like "hello".capitalize?, since that would require a
2647 potentially dangerous eval() again.
2654 potentially dangerous eval() again.
2648
2655
2649 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2656 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2650 logic a bit more to clean up the escapes handling and minimize the
2657 logic a bit more to clean up the escapes handling and minimize the
2651 use of _ofind to only necessary cases. The interactive 'feel' of
2658 use of _ofind to only necessary cases. The interactive 'feel' of
2652 IPython should have improved quite a bit with the changes in
2659 IPython should have improved quite a bit with the changes in
2653 _prefilter and _ofind (besides being far safer than before).
2660 _prefilter and _ofind (besides being far safer than before).
2654
2661
2655 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2662 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2656 obscure, never reported). Edit would fail to find the object to
2663 obscure, never reported). Edit would fail to find the object to
2657 edit under some circumstances.
2664 edit under some circumstances.
2658 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2665 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2659 which were causing double-calling of generators. Those eval calls
2666 which were causing double-calling of generators. Those eval calls
2660 were _very_ dangerous, since code with side effects could be
2667 were _very_ dangerous, since code with side effects could be
2661 triggered. As they say, 'eval is evil'... These were the
2668 triggered. As they say, 'eval is evil'... These were the
2662 nastiest evals in IPython. Besides, _ofind is now far simpler,
2669 nastiest evals in IPython. Besides, _ofind is now far simpler,
2663 and it should also be quite a bit faster. Its use of inspect is
2670 and it should also be quite a bit faster. Its use of inspect is
2664 also safer, so perhaps some of the inspect-related crashes I've
2671 also safer, so perhaps some of the inspect-related crashes I've
2665 seen lately with Python 2.3 might be taken care of. That will
2672 seen lately with Python 2.3 might be taken care of. That will
2666 need more testing.
2673 need more testing.
2667
2674
2668 2003-08-17 Fernando Perez <fperez@colorado.edu>
2675 2003-08-17 Fernando Perez <fperez@colorado.edu>
2669
2676
2670 * IPython/iplib.py (InteractiveShell._prefilter): significant
2677 * IPython/iplib.py (InteractiveShell._prefilter): significant
2671 simplifications to the logic for handling user escapes. Faster
2678 simplifications to the logic for handling user escapes. Faster
2672 and simpler code.
2679 and simpler code.
2673
2680
2674 2003-08-14 Fernando Perez <fperez@colorado.edu>
2681 2003-08-14 Fernando Perez <fperez@colorado.edu>
2675
2682
2676 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2683 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2677 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2684 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2678 but it should be quite a bit faster. And the recursive version
2685 but it should be quite a bit faster. And the recursive version
2679 generated O(log N) intermediate storage for all rank>1 arrays,
2686 generated O(log N) intermediate storage for all rank>1 arrays,
2680 even if they were contiguous.
2687 even if they were contiguous.
2681 (l1norm): Added this function.
2688 (l1norm): Added this function.
2682 (norm): Added this function for arbitrary norms (including
2689 (norm): Added this function for arbitrary norms (including
2683 l-infinity). l1 and l2 are still special cases for convenience
2690 l-infinity). l1 and l2 are still special cases for convenience
2684 and speed.
2691 and speed.
2685
2692
2686 2003-08-03 Fernando Perez <fperez@colorado.edu>
2693 2003-08-03 Fernando Perez <fperez@colorado.edu>
2687
2694
2688 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2695 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2689 exceptions, which now raise PendingDeprecationWarnings in Python
2696 exceptions, which now raise PendingDeprecationWarnings in Python
2690 2.3. There were some in Magic and some in Gnuplot2.
2697 2.3. There were some in Magic and some in Gnuplot2.
2691
2698
2692 2003-06-30 Fernando Perez <fperez@colorado.edu>
2699 2003-06-30 Fernando Perez <fperez@colorado.edu>
2693
2700
2694 * IPython/genutils.py (page): modified to call curses only for
2701 * IPython/genutils.py (page): modified to call curses only for
2695 terminals where TERM=='xterm'. After problems under many other
2702 terminals where TERM=='xterm'. After problems under many other
2696 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2703 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2697
2704
2698 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2705 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2699 would be triggered when readline was absent. This was just an old
2706 would be triggered when readline was absent. This was just an old
2700 debugging statement I'd forgotten to take out.
2707 debugging statement I'd forgotten to take out.
2701
2708
2702 2003-06-20 Fernando Perez <fperez@colorado.edu>
2709 2003-06-20 Fernando Perez <fperez@colorado.edu>
2703
2710
2704 * IPython/genutils.py (clock): modified to return only user time
2711 * IPython/genutils.py (clock): modified to return only user time
2705 (not counting system time), after a discussion on scipy. While
2712 (not counting system time), after a discussion on scipy. While
2706 system time may be a useful quantity occasionally, it may much
2713 system time may be a useful quantity occasionally, it may much
2707 more easily be skewed by occasional swapping or other similar
2714 more easily be skewed by occasional swapping or other similar
2708 activity.
2715 activity.
2709
2716
2710 2003-06-05 Fernando Perez <fperez@colorado.edu>
2717 2003-06-05 Fernando Perez <fperez@colorado.edu>
2711
2718
2712 * IPython/numutils.py (identity): new function, for building
2719 * IPython/numutils.py (identity): new function, for building
2713 arbitrary rank Kronecker deltas (mostly backwards compatible with
2720 arbitrary rank Kronecker deltas (mostly backwards compatible with
2714 Numeric.identity)
2721 Numeric.identity)
2715
2722
2716 2003-06-03 Fernando Perez <fperez@colorado.edu>
2723 2003-06-03 Fernando Perez <fperez@colorado.edu>
2717
2724
2718 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2725 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2719 arguments passed to magics with spaces, to allow trailing '\' to
2726 arguments passed to magics with spaces, to allow trailing '\' to
2720 work normally (mainly for Windows users).
2727 work normally (mainly for Windows users).
2721
2728
2722 2003-05-29 Fernando Perez <fperez@colorado.edu>
2729 2003-05-29 Fernando Perez <fperez@colorado.edu>
2723
2730
2724 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2731 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2725 instead of pydoc.help. This fixes a bizarre behavior where
2732 instead of pydoc.help. This fixes a bizarre behavior where
2726 printing '%s' % locals() would trigger the help system. Now
2733 printing '%s' % locals() would trigger the help system. Now
2727 ipython behaves like normal python does.
2734 ipython behaves like normal python does.
2728
2735
2729 Note that if one does 'from pydoc import help', the bizarre
2736 Note that if one does 'from pydoc import help', the bizarre
2730 behavior returns, but this will also happen in normal python, so
2737 behavior returns, but this will also happen in normal python, so
2731 it's not an ipython bug anymore (it has to do with how pydoc.help
2738 it's not an ipython bug anymore (it has to do with how pydoc.help
2732 is implemented).
2739 is implemented).
2733
2740
2734 2003-05-22 Fernando Perez <fperez@colorado.edu>
2741 2003-05-22 Fernando Perez <fperez@colorado.edu>
2735
2742
2736 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2743 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2737 return [] instead of None when nothing matches, also match to end
2744 return [] instead of None when nothing matches, also match to end
2738 of line. Patch by Gary Bishop.
2745 of line. Patch by Gary Bishop.
2739
2746
2740 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2747 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2741 protection as before, for files passed on the command line. This
2748 protection as before, for files passed on the command line. This
2742 prevents the CrashHandler from kicking in if user files call into
2749 prevents the CrashHandler from kicking in if user files call into
2743 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2750 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2744 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2751 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2745
2752
2746 2003-05-20 *** Released version 0.4.0
2753 2003-05-20 *** Released version 0.4.0
2747
2754
2748 2003-05-20 Fernando Perez <fperez@colorado.edu>
2755 2003-05-20 Fernando Perez <fperez@colorado.edu>
2749
2756
2750 * setup.py: added support for manpages. It's a bit hackish b/c of
2757 * setup.py: added support for manpages. It's a bit hackish b/c of
2751 a bug in the way the bdist_rpm distutils target handles gzipped
2758 a bug in the way the bdist_rpm distutils target handles gzipped
2752 manpages, but it works. After a patch by Jack.
2759 manpages, but it works. After a patch by Jack.
2753
2760
2754 2003-05-19 Fernando Perez <fperez@colorado.edu>
2761 2003-05-19 Fernando Perez <fperez@colorado.edu>
2755
2762
2756 * IPython/numutils.py: added a mockup of the kinds module, since
2763 * IPython/numutils.py: added a mockup of the kinds module, since
2757 it was recently removed from Numeric. This way, numutils will
2764 it was recently removed from Numeric. This way, numutils will
2758 work for all users even if they are missing kinds.
2765 work for all users even if they are missing kinds.
2759
2766
2760 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2767 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2761 failure, which can occur with SWIG-wrapped extensions. After a
2768 failure, which can occur with SWIG-wrapped extensions. After a
2762 crash report from Prabhu.
2769 crash report from Prabhu.
2763
2770
2764 2003-05-16 Fernando Perez <fperez@colorado.edu>
2771 2003-05-16 Fernando Perez <fperez@colorado.edu>
2765
2772
2766 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2773 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2767 protect ipython from user code which may call directly
2774 protect ipython from user code which may call directly
2768 sys.excepthook (this looks like an ipython crash to the user, even
2775 sys.excepthook (this looks like an ipython crash to the user, even
2769 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2776 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2770 This is especially important to help users of WxWindows, but may
2777 This is especially important to help users of WxWindows, but may
2771 also be useful in other cases.
2778 also be useful in other cases.
2772
2779
2773 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2780 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2774 an optional tb_offset to be specified, and to preserve exception
2781 an optional tb_offset to be specified, and to preserve exception
2775 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2782 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2776
2783
2777 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2784 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2778
2785
2779 2003-05-15 Fernando Perez <fperez@colorado.edu>
2786 2003-05-15 Fernando Perez <fperez@colorado.edu>
2780
2787
2781 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2788 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2782 installing for a new user under Windows.
2789 installing for a new user under Windows.
2783
2790
2784 2003-05-12 Fernando Perez <fperez@colorado.edu>
2791 2003-05-12 Fernando Perez <fperez@colorado.edu>
2785
2792
2786 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2793 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2787 handler for Emacs comint-based lines. Currently it doesn't do
2794 handler for Emacs comint-based lines. Currently it doesn't do
2788 much (but importantly, it doesn't update the history cache). In
2795 much (but importantly, it doesn't update the history cache). In
2789 the future it may be expanded if Alex needs more functionality
2796 the future it may be expanded if Alex needs more functionality
2790 there.
2797 there.
2791
2798
2792 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2799 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2793 info to crash reports.
2800 info to crash reports.
2794
2801
2795 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2802 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2796 just like Python's -c. Also fixed crash with invalid -color
2803 just like Python's -c. Also fixed crash with invalid -color
2797 option value at startup. Thanks to Will French
2804 option value at startup. Thanks to Will French
2798 <wfrench-AT-bestweb.net> for the bug report.
2805 <wfrench-AT-bestweb.net> for the bug report.
2799
2806
2800 2003-05-09 Fernando Perez <fperez@colorado.edu>
2807 2003-05-09 Fernando Perez <fperez@colorado.edu>
2801
2808
2802 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2809 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2803 to EvalDict (it's a mapping, after all) and simplified its code
2810 to EvalDict (it's a mapping, after all) and simplified its code
2804 quite a bit, after a nice discussion on c.l.py where Gustavo
2811 quite a bit, after a nice discussion on c.l.py where Gustavo
2805 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2812 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2806
2813
2807 2003-04-30 Fernando Perez <fperez@colorado.edu>
2814 2003-04-30 Fernando Perez <fperez@colorado.edu>
2808
2815
2809 * IPython/genutils.py (timings_out): modified it to reduce its
2816 * IPython/genutils.py (timings_out): modified it to reduce its
2810 overhead in the common reps==1 case.
2817 overhead in the common reps==1 case.
2811
2818
2812 2003-04-29 Fernando Perez <fperez@colorado.edu>
2819 2003-04-29 Fernando Perez <fperez@colorado.edu>
2813
2820
2814 * IPython/genutils.py (timings_out): Modified to use the resource
2821 * IPython/genutils.py (timings_out): Modified to use the resource
2815 module, which avoids the wraparound problems of time.clock().
2822 module, which avoids the wraparound problems of time.clock().
2816
2823
2817 2003-04-17 *** Released version 0.2.15pre4
2824 2003-04-17 *** Released version 0.2.15pre4
2818
2825
2819 2003-04-17 Fernando Perez <fperez@colorado.edu>
2826 2003-04-17 Fernando Perez <fperez@colorado.edu>
2820
2827
2821 * setup.py (scriptfiles): Split windows-specific stuff over to a
2828 * setup.py (scriptfiles): Split windows-specific stuff over to a
2822 separate file, in an attempt to have a Windows GUI installer.
2829 separate file, in an attempt to have a Windows GUI installer.
2823 That didn't work, but part of the groundwork is done.
2830 That didn't work, but part of the groundwork is done.
2824
2831
2825 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2832 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2826 indent/unindent with 4 spaces. Particularly useful in combination
2833 indent/unindent with 4 spaces. Particularly useful in combination
2827 with the new auto-indent option.
2834 with the new auto-indent option.
2828
2835
2829 2003-04-16 Fernando Perez <fperez@colorado.edu>
2836 2003-04-16 Fernando Perez <fperez@colorado.edu>
2830
2837
2831 * IPython/Magic.py: various replacements of self.rc for
2838 * IPython/Magic.py: various replacements of self.rc for
2832 self.shell.rc. A lot more remains to be done to fully disentangle
2839 self.shell.rc. A lot more remains to be done to fully disentangle
2833 this class from the main Shell class.
2840 this class from the main Shell class.
2834
2841
2835 * IPython/GnuplotRuntime.py: added checks for mouse support so
2842 * IPython/GnuplotRuntime.py: added checks for mouse support so
2836 that we don't try to enable it if the current gnuplot doesn't
2843 that we don't try to enable it if the current gnuplot doesn't
2837 really support it. Also added checks so that we don't try to
2844 really support it. Also added checks so that we don't try to
2838 enable persist under Windows (where Gnuplot doesn't recognize the
2845 enable persist under Windows (where Gnuplot doesn't recognize the
2839 option).
2846 option).
2840
2847
2841 * IPython/iplib.py (InteractiveShell.interact): Added optional
2848 * IPython/iplib.py (InteractiveShell.interact): Added optional
2842 auto-indenting code, after a patch by King C. Shu
2849 auto-indenting code, after a patch by King C. Shu
2843 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2850 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2844 get along well with pasting indented code. If I ever figure out
2851 get along well with pasting indented code. If I ever figure out
2845 how to make that part go well, it will become on by default.
2852 how to make that part go well, it will become on by default.
2846
2853
2847 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2854 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2848 crash ipython if there was an unmatched '%' in the user's prompt
2855 crash ipython if there was an unmatched '%' in the user's prompt
2849 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2856 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2850
2857
2851 * IPython/iplib.py (InteractiveShell.interact): removed the
2858 * IPython/iplib.py (InteractiveShell.interact): removed the
2852 ability to ask the user whether he wants to crash or not at the
2859 ability to ask the user whether he wants to crash or not at the
2853 'last line' exception handler. Calling functions at that point
2860 'last line' exception handler. Calling functions at that point
2854 changes the stack, and the error reports would have incorrect
2861 changes the stack, and the error reports would have incorrect
2855 tracebacks.
2862 tracebacks.
2856
2863
2857 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2864 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2858 pass through a peger a pretty-printed form of any object. After a
2865 pass through a peger a pretty-printed form of any object. After a
2859 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2866 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2860
2867
2861 2003-04-14 Fernando Perez <fperez@colorado.edu>
2868 2003-04-14 Fernando Perez <fperez@colorado.edu>
2862
2869
2863 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2870 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2864 all files in ~ would be modified at first install (instead of
2871 all files in ~ would be modified at first install (instead of
2865 ~/.ipython). This could be potentially disastrous, as the
2872 ~/.ipython). This could be potentially disastrous, as the
2866 modification (make line-endings native) could damage binary files.
2873 modification (make line-endings native) could damage binary files.
2867
2874
2868 2003-04-10 Fernando Perez <fperez@colorado.edu>
2875 2003-04-10 Fernando Perez <fperez@colorado.edu>
2869
2876
2870 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2877 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2871 handle only lines which are invalid python. This now means that
2878 handle only lines which are invalid python. This now means that
2872 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2879 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2873 for the bug report.
2880 for the bug report.
2874
2881
2875 2003-04-01 Fernando Perez <fperez@colorado.edu>
2882 2003-04-01 Fernando Perez <fperez@colorado.edu>
2876
2883
2877 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2884 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2878 where failing to set sys.last_traceback would crash pdb.pm().
2885 where failing to set sys.last_traceback would crash pdb.pm().
2879 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2886 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2880 report.
2887 report.
2881
2888
2882 2003-03-25 Fernando Perez <fperez@colorado.edu>
2889 2003-03-25 Fernando Perez <fperez@colorado.edu>
2883
2890
2884 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2891 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2885 before printing it (it had a lot of spurious blank lines at the
2892 before printing it (it had a lot of spurious blank lines at the
2886 end).
2893 end).
2887
2894
2888 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2895 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2889 output would be sent 21 times! Obviously people don't use this
2896 output would be sent 21 times! Obviously people don't use this
2890 too often, or I would have heard about it.
2897 too often, or I would have heard about it.
2891
2898
2892 2003-03-24 Fernando Perez <fperez@colorado.edu>
2899 2003-03-24 Fernando Perez <fperez@colorado.edu>
2893
2900
2894 * setup.py (scriptfiles): renamed the data_files parameter from
2901 * setup.py (scriptfiles): renamed the data_files parameter from
2895 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2902 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2896 for the patch.
2903 for the patch.
2897
2904
2898 2003-03-20 Fernando Perez <fperez@colorado.edu>
2905 2003-03-20 Fernando Perez <fperez@colorado.edu>
2899
2906
2900 * IPython/genutils.py (error): added error() and fatal()
2907 * IPython/genutils.py (error): added error() and fatal()
2901 functions.
2908 functions.
2902
2909
2903 2003-03-18 *** Released version 0.2.15pre3
2910 2003-03-18 *** Released version 0.2.15pre3
2904
2911
2905 2003-03-18 Fernando Perez <fperez@colorado.edu>
2912 2003-03-18 Fernando Perez <fperez@colorado.edu>
2906
2913
2907 * setupext/install_data_ext.py
2914 * setupext/install_data_ext.py
2908 (install_data_ext.initialize_options): Class contributed by Jack
2915 (install_data_ext.initialize_options): Class contributed by Jack
2909 Moffit for fixing the old distutils hack. He is sending this to
2916 Moffit for fixing the old distutils hack. He is sending this to
2910 the distutils folks so in the future we may not need it as a
2917 the distutils folks so in the future we may not need it as a
2911 private fix.
2918 private fix.
2912
2919
2913 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2920 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2914 changes for Debian packaging. See his patch for full details.
2921 changes for Debian packaging. See his patch for full details.
2915 The old distutils hack of making the ipythonrc* files carry a
2922 The old distutils hack of making the ipythonrc* files carry a
2916 bogus .py extension is gone, at last. Examples were moved to a
2923 bogus .py extension is gone, at last. Examples were moved to a
2917 separate subdir under doc/, and the separate executable scripts
2924 separate subdir under doc/, and the separate executable scripts
2918 now live in their own directory. Overall a great cleanup. The
2925 now live in their own directory. Overall a great cleanup. The
2919 manual was updated to use the new files, and setup.py has been
2926 manual was updated to use the new files, and setup.py has been
2920 fixed for this setup.
2927 fixed for this setup.
2921
2928
2922 * IPython/PyColorize.py (Parser.usage): made non-executable and
2929 * IPython/PyColorize.py (Parser.usage): made non-executable and
2923 created a pycolor wrapper around it to be included as a script.
2930 created a pycolor wrapper around it to be included as a script.
2924
2931
2925 2003-03-12 *** Released version 0.2.15pre2
2932 2003-03-12 *** Released version 0.2.15pre2
2926
2933
2927 2003-03-12 Fernando Perez <fperez@colorado.edu>
2934 2003-03-12 Fernando Perez <fperez@colorado.edu>
2928
2935
2929 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2936 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2930 long-standing problem with garbage characters in some terminals.
2937 long-standing problem with garbage characters in some terminals.
2931 The issue was really that the \001 and \002 escapes must _only_ be
2938 The issue was really that the \001 and \002 escapes must _only_ be
2932 passed to input prompts (which call readline), but _never_ to
2939 passed to input prompts (which call readline), but _never_ to
2933 normal text to be printed on screen. I changed ColorANSI to have
2940 normal text to be printed on screen. I changed ColorANSI to have
2934 two classes: TermColors and InputTermColors, each with the
2941 two classes: TermColors and InputTermColors, each with the
2935 appropriate escapes for input prompts or normal text. The code in
2942 appropriate escapes for input prompts or normal text. The code in
2936 Prompts.py got slightly more complicated, but this very old and
2943 Prompts.py got slightly more complicated, but this very old and
2937 annoying bug is finally fixed.
2944 annoying bug is finally fixed.
2938
2945
2939 All the credit for nailing down the real origin of this problem
2946 All the credit for nailing down the real origin of this problem
2940 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2947 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2941 *Many* thanks to him for spending quite a bit of effort on this.
2948 *Many* thanks to him for spending quite a bit of effort on this.
2942
2949
2943 2003-03-05 *** Released version 0.2.15pre1
2950 2003-03-05 *** Released version 0.2.15pre1
2944
2951
2945 2003-03-03 Fernando Perez <fperez@colorado.edu>
2952 2003-03-03 Fernando Perez <fperez@colorado.edu>
2946
2953
2947 * IPython/FakeModule.py: Moved the former _FakeModule to a
2954 * IPython/FakeModule.py: Moved the former _FakeModule to a
2948 separate file, because it's also needed by Magic (to fix a similar
2955 separate file, because it's also needed by Magic (to fix a similar
2949 pickle-related issue in @run).
2956 pickle-related issue in @run).
2950
2957
2951 2003-03-02 Fernando Perez <fperez@colorado.edu>
2958 2003-03-02 Fernando Perez <fperez@colorado.edu>
2952
2959
2953 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2960 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2954 the autocall option at runtime.
2961 the autocall option at runtime.
2955 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2962 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2956 across Magic.py to start separating Magic from InteractiveShell.
2963 across Magic.py to start separating Magic from InteractiveShell.
2957 (Magic._ofind): Fixed to return proper namespace for dotted
2964 (Magic._ofind): Fixed to return proper namespace for dotted
2958 names. Before, a dotted name would always return 'not currently
2965 names. Before, a dotted name would always return 'not currently
2959 defined', because it would find the 'parent'. s.x would be found,
2966 defined', because it would find the 'parent'. s.x would be found,
2960 but since 'x' isn't defined by itself, it would get confused.
2967 but since 'x' isn't defined by itself, it would get confused.
2961 (Magic.magic_run): Fixed pickling problems reported by Ralf
2968 (Magic.magic_run): Fixed pickling problems reported by Ralf
2962 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2969 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2963 that I'd used when Mike Heeter reported similar issues at the
2970 that I'd used when Mike Heeter reported similar issues at the
2964 top-level, but now for @run. It boils down to injecting the
2971 top-level, but now for @run. It boils down to injecting the
2965 namespace where code is being executed with something that looks
2972 namespace where code is being executed with something that looks
2966 enough like a module to fool pickle.dump(). Since a pickle stores
2973 enough like a module to fool pickle.dump(). Since a pickle stores
2967 a named reference to the importing module, we need this for
2974 a named reference to the importing module, we need this for
2968 pickles to save something sensible.
2975 pickles to save something sensible.
2969
2976
2970 * IPython/ipmaker.py (make_IPython): added an autocall option.
2977 * IPython/ipmaker.py (make_IPython): added an autocall option.
2971
2978
2972 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2979 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2973 the auto-eval code. Now autocalling is an option, and the code is
2980 the auto-eval code. Now autocalling is an option, and the code is
2974 also vastly safer. There is no more eval() involved at all.
2981 also vastly safer. There is no more eval() involved at all.
2975
2982
2976 2003-03-01 Fernando Perez <fperez@colorado.edu>
2983 2003-03-01 Fernando Perez <fperez@colorado.edu>
2977
2984
2978 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2985 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2979 dict with named keys instead of a tuple.
2986 dict with named keys instead of a tuple.
2980
2987
2981 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2988 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2982
2989
2983 * setup.py (make_shortcut): Fixed message about directories
2990 * setup.py (make_shortcut): Fixed message about directories
2984 created during Windows installation (the directories were ok, just
2991 created during Windows installation (the directories were ok, just
2985 the printed message was misleading). Thanks to Chris Liechti
2992 the printed message was misleading). Thanks to Chris Liechti
2986 <cliechti-AT-gmx.net> for the heads up.
2993 <cliechti-AT-gmx.net> for the heads up.
2987
2994
2988 2003-02-21 Fernando Perez <fperez@colorado.edu>
2995 2003-02-21 Fernando Perez <fperez@colorado.edu>
2989
2996
2990 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2997 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2991 of ValueError exception when checking for auto-execution. This
2998 of ValueError exception when checking for auto-execution. This
2992 one is raised by things like Numeric arrays arr.flat when the
2999 one is raised by things like Numeric arrays arr.flat when the
2993 array is non-contiguous.
3000 array is non-contiguous.
2994
3001
2995 2003-01-31 Fernando Perez <fperez@colorado.edu>
3002 2003-01-31 Fernando Perez <fperez@colorado.edu>
2996
3003
2997 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3004 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2998 not return any value at all (even though the command would get
3005 not return any value at all (even though the command would get
2999 executed).
3006 executed).
3000 (xsys): Flush stdout right after printing the command to ensure
3007 (xsys): Flush stdout right after printing the command to ensure
3001 proper ordering of commands and command output in the total
3008 proper ordering of commands and command output in the total
3002 output.
3009 output.
3003 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3010 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3004 system/getoutput as defaults. The old ones are kept for
3011 system/getoutput as defaults. The old ones are kept for
3005 compatibility reasons, so no code which uses this library needs
3012 compatibility reasons, so no code which uses this library needs
3006 changing.
3013 changing.
3007
3014
3008 2003-01-27 *** Released version 0.2.14
3015 2003-01-27 *** Released version 0.2.14
3009
3016
3010 2003-01-25 Fernando Perez <fperez@colorado.edu>
3017 2003-01-25 Fernando Perez <fperez@colorado.edu>
3011
3018
3012 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3019 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3013 functions defined in previous edit sessions could not be re-edited
3020 functions defined in previous edit sessions could not be re-edited
3014 (because the temp files were immediately removed). Now temp files
3021 (because the temp files were immediately removed). Now temp files
3015 are removed only at IPython's exit.
3022 are removed only at IPython's exit.
3016 (Magic.magic_run): Improved @run to perform shell-like expansions
3023 (Magic.magic_run): Improved @run to perform shell-like expansions
3017 on its arguments (~users and $VARS). With this, @run becomes more
3024 on its arguments (~users and $VARS). With this, @run becomes more
3018 like a normal command-line.
3025 like a normal command-line.
3019
3026
3020 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3027 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3021 bugs related to embedding and cleaned up that code. A fairly
3028 bugs related to embedding and cleaned up that code. A fairly
3022 important one was the impossibility to access the global namespace
3029 important one was the impossibility to access the global namespace
3023 through the embedded IPython (only local variables were visible).
3030 through the embedded IPython (only local variables were visible).
3024
3031
3025 2003-01-14 Fernando Perez <fperez@colorado.edu>
3032 2003-01-14 Fernando Perez <fperez@colorado.edu>
3026
3033
3027 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3034 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3028 auto-calling to be a bit more conservative. Now it doesn't get
3035 auto-calling to be a bit more conservative. Now it doesn't get
3029 triggered if any of '!=()<>' are in the rest of the input line, to
3036 triggered if any of '!=()<>' are in the rest of the input line, to
3030 allow comparing callables. Thanks to Alex for the heads up.
3037 allow comparing callables. Thanks to Alex for the heads up.
3031
3038
3032 2003-01-07 Fernando Perez <fperez@colorado.edu>
3039 2003-01-07 Fernando Perez <fperez@colorado.edu>
3033
3040
3034 * IPython/genutils.py (page): fixed estimation of the number of
3041 * IPython/genutils.py (page): fixed estimation of the number of
3035 lines in a string to be paged to simply count newlines. This
3042 lines in a string to be paged to simply count newlines. This
3036 prevents over-guessing due to embedded escape sequences. A better
3043 prevents over-guessing due to embedded escape sequences. A better
3037 long-term solution would involve stripping out the control chars
3044 long-term solution would involve stripping out the control chars
3038 for the count, but it's potentially so expensive I just don't
3045 for the count, but it's potentially so expensive I just don't
3039 think it's worth doing.
3046 think it's worth doing.
3040
3047
3041 2002-12-19 *** Released version 0.2.14pre50
3048 2002-12-19 *** Released version 0.2.14pre50
3042
3049
3043 2002-12-19 Fernando Perez <fperez@colorado.edu>
3050 2002-12-19 Fernando Perez <fperez@colorado.edu>
3044
3051
3045 * tools/release (version): Changed release scripts to inform
3052 * tools/release (version): Changed release scripts to inform
3046 Andrea and build a NEWS file with a list of recent changes.
3053 Andrea and build a NEWS file with a list of recent changes.
3047
3054
3048 * IPython/ColorANSI.py (__all__): changed terminal detection
3055 * IPython/ColorANSI.py (__all__): changed terminal detection
3049 code. Seems to work better for xterms without breaking
3056 code. Seems to work better for xterms without breaking
3050 konsole. Will need more testing to determine if WinXP and Mac OSX
3057 konsole. Will need more testing to determine if WinXP and Mac OSX
3051 also work ok.
3058 also work ok.
3052
3059
3053 2002-12-18 *** Released version 0.2.14pre49
3060 2002-12-18 *** Released version 0.2.14pre49
3054
3061
3055 2002-12-18 Fernando Perez <fperez@colorado.edu>
3062 2002-12-18 Fernando Perez <fperez@colorado.edu>
3056
3063
3057 * Docs: added new info about Mac OSX, from Andrea.
3064 * Docs: added new info about Mac OSX, from Andrea.
3058
3065
3059 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3066 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3060 allow direct plotting of python strings whose format is the same
3067 allow direct plotting of python strings whose format is the same
3061 of gnuplot data files.
3068 of gnuplot data files.
3062
3069
3063 2002-12-16 Fernando Perez <fperez@colorado.edu>
3070 2002-12-16 Fernando Perez <fperez@colorado.edu>
3064
3071
3065 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3072 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3066 value of exit question to be acknowledged.
3073 value of exit question to be acknowledged.
3067
3074
3068 2002-12-03 Fernando Perez <fperez@colorado.edu>
3075 2002-12-03 Fernando Perez <fperez@colorado.edu>
3069
3076
3070 * IPython/ipmaker.py: removed generators, which had been added
3077 * IPython/ipmaker.py: removed generators, which had been added
3071 by mistake in an earlier debugging run. This was causing trouble
3078 by mistake in an earlier debugging run. This was causing trouble
3072 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3079 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3073 for pointing this out.
3080 for pointing this out.
3074
3081
3075 2002-11-17 Fernando Perez <fperez@colorado.edu>
3082 2002-11-17 Fernando Perez <fperez@colorado.edu>
3076
3083
3077 * Manual: updated the Gnuplot section.
3084 * Manual: updated the Gnuplot section.
3078
3085
3079 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3086 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3080 a much better split of what goes in Runtime and what goes in
3087 a much better split of what goes in Runtime and what goes in
3081 Interactive.
3088 Interactive.
3082
3089
3083 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3090 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3084 being imported from iplib.
3091 being imported from iplib.
3085
3092
3086 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3093 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3087 for command-passing. Now the global Gnuplot instance is called
3094 for command-passing. Now the global Gnuplot instance is called
3088 'gp' instead of 'g', which was really a far too fragile and
3095 'gp' instead of 'g', which was really a far too fragile and
3089 common name.
3096 common name.
3090
3097
3091 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3098 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3092 bounding boxes generated by Gnuplot for square plots.
3099 bounding boxes generated by Gnuplot for square plots.
3093
3100
3094 * IPython/genutils.py (popkey): new function added. I should
3101 * IPython/genutils.py (popkey): new function added. I should
3095 suggest this on c.l.py as a dict method, it seems useful.
3102 suggest this on c.l.py as a dict method, it seems useful.
3096
3103
3097 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3104 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3098 to transparently handle PostScript generation. MUCH better than
3105 to transparently handle PostScript generation. MUCH better than
3099 the previous plot_eps/replot_eps (which I removed now). The code
3106 the previous plot_eps/replot_eps (which I removed now). The code
3100 is also fairly clean and well documented now (including
3107 is also fairly clean and well documented now (including
3101 docstrings).
3108 docstrings).
3102
3109
3103 2002-11-13 Fernando Perez <fperez@colorado.edu>
3110 2002-11-13 Fernando Perez <fperez@colorado.edu>
3104
3111
3105 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3112 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3106 (inconsistent with options).
3113 (inconsistent with options).
3107
3114
3108 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3115 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3109 manually disabled, I don't know why. Fixed it.
3116 manually disabled, I don't know why. Fixed it.
3110 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3117 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3111 eps output.
3118 eps output.
3112
3119
3113 2002-11-12 Fernando Perez <fperez@colorado.edu>
3120 2002-11-12 Fernando Perez <fperez@colorado.edu>
3114
3121
3115 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3122 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3116 don't propagate up to caller. Fixes crash reported by François
3123 don't propagate up to caller. Fixes crash reported by François
3117 Pinard.
3124 Pinard.
3118
3125
3119 2002-11-09 Fernando Perez <fperez@colorado.edu>
3126 2002-11-09 Fernando Perez <fperez@colorado.edu>
3120
3127
3121 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3128 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3122 history file for new users.
3129 history file for new users.
3123 (make_IPython): fixed bug where initial install would leave the
3130 (make_IPython): fixed bug where initial install would leave the
3124 user running in the .ipython dir.
3131 user running in the .ipython dir.
3125 (make_IPython): fixed bug where config dir .ipython would be
3132 (make_IPython): fixed bug where config dir .ipython would be
3126 created regardless of the given -ipythondir option. Thanks to Cory
3133 created regardless of the given -ipythondir option. Thanks to Cory
3127 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3134 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3128
3135
3129 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3136 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3130 type confirmations. Will need to use it in all of IPython's code
3137 type confirmations. Will need to use it in all of IPython's code
3131 consistently.
3138 consistently.
3132
3139
3133 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3140 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3134 context to print 31 lines instead of the default 5. This will make
3141 context to print 31 lines instead of the default 5. This will make
3135 the crash reports extremely detailed in case the problem is in
3142 the crash reports extremely detailed in case the problem is in
3136 libraries I don't have access to.
3143 libraries I don't have access to.
3137
3144
3138 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3145 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3139 line of defense' code to still crash, but giving users fair
3146 line of defense' code to still crash, but giving users fair
3140 warning. I don't want internal errors to go unreported: if there's
3147 warning. I don't want internal errors to go unreported: if there's
3141 an internal problem, IPython should crash and generate a full
3148 an internal problem, IPython should crash and generate a full
3142 report.
3149 report.
3143
3150
3144 2002-11-08 Fernando Perez <fperez@colorado.edu>
3151 2002-11-08 Fernando Perez <fperez@colorado.edu>
3145
3152
3146 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3153 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3147 otherwise uncaught exceptions which can appear if people set
3154 otherwise uncaught exceptions which can appear if people set
3148 sys.stdout to something badly broken. Thanks to a crash report
3155 sys.stdout to something badly broken. Thanks to a crash report
3149 from henni-AT-mail.brainbot.com.
3156 from henni-AT-mail.brainbot.com.
3150
3157
3151 2002-11-04 Fernando Perez <fperez@colorado.edu>
3158 2002-11-04 Fernando Perez <fperez@colorado.edu>
3152
3159
3153 * IPython/iplib.py (InteractiveShell.interact): added
3160 * IPython/iplib.py (InteractiveShell.interact): added
3154 __IPYTHON__active to the builtins. It's a flag which goes on when
3161 __IPYTHON__active to the builtins. It's a flag which goes on when
3155 the interaction starts and goes off again when it stops. This
3162 the interaction starts and goes off again when it stops. This
3156 allows embedding code to detect being inside IPython. Before this
3163 allows embedding code to detect being inside IPython. Before this
3157 was done via __IPYTHON__, but that only shows that an IPython
3164 was done via __IPYTHON__, but that only shows that an IPython
3158 instance has been created.
3165 instance has been created.
3159
3166
3160 * IPython/Magic.py (Magic.magic_env): I realized that in a
3167 * IPython/Magic.py (Magic.magic_env): I realized that in a
3161 UserDict, instance.data holds the data as a normal dict. So I
3168 UserDict, instance.data holds the data as a normal dict. So I
3162 modified @env to return os.environ.data instead of rebuilding a
3169 modified @env to return os.environ.data instead of rebuilding a
3163 dict by hand.
3170 dict by hand.
3164
3171
3165 2002-11-02 Fernando Perez <fperez@colorado.edu>
3172 2002-11-02 Fernando Perez <fperez@colorado.edu>
3166
3173
3167 * IPython/genutils.py (warn): changed so that level 1 prints no
3174 * IPython/genutils.py (warn): changed so that level 1 prints no
3168 header. Level 2 is now the default (with 'WARNING' header, as
3175 header. Level 2 is now the default (with 'WARNING' header, as
3169 before). I think I tracked all places where changes were needed in
3176 before). I think I tracked all places where changes were needed in
3170 IPython, but outside code using the old level numbering may have
3177 IPython, but outside code using the old level numbering may have
3171 broken.
3178 broken.
3172
3179
3173 * IPython/iplib.py (InteractiveShell.runcode): added this to
3180 * IPython/iplib.py (InteractiveShell.runcode): added this to
3174 handle the tracebacks in SystemExit traps correctly. The previous
3181 handle the tracebacks in SystemExit traps correctly. The previous
3175 code (through interact) was printing more of the stack than
3182 code (through interact) was printing more of the stack than
3176 necessary, showing IPython internal code to the user.
3183 necessary, showing IPython internal code to the user.
3177
3184
3178 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3185 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3179 default. Now that the default at the confirmation prompt is yes,
3186 default. Now that the default at the confirmation prompt is yes,
3180 it's not so intrusive. François' argument that ipython sessions
3187 it's not so intrusive. François' argument that ipython sessions
3181 tend to be complex enough not to lose them from an accidental C-d,
3188 tend to be complex enough not to lose them from an accidental C-d,
3182 is a valid one.
3189 is a valid one.
3183
3190
3184 * IPython/iplib.py (InteractiveShell.interact): added a
3191 * IPython/iplib.py (InteractiveShell.interact): added a
3185 showtraceback() call to the SystemExit trap, and modified the exit
3192 showtraceback() call to the SystemExit trap, and modified the exit
3186 confirmation to have yes as the default.
3193 confirmation to have yes as the default.
3187
3194
3188 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3195 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3189 this file. It's been gone from the code for a long time, this was
3196 this file. It's been gone from the code for a long time, this was
3190 simply leftover junk.
3197 simply leftover junk.
3191
3198
3192 2002-11-01 Fernando Perez <fperez@colorado.edu>
3199 2002-11-01 Fernando Perez <fperez@colorado.edu>
3193
3200
3194 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3201 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3195 added. If set, IPython now traps EOF and asks for
3202 added. If set, IPython now traps EOF and asks for
3196 confirmation. After a request by François Pinard.
3203 confirmation. After a request by François Pinard.
3197
3204
3198 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3205 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3199 of @abort, and with a new (better) mechanism for handling the
3206 of @abort, and with a new (better) mechanism for handling the
3200 exceptions.
3207 exceptions.
3201
3208
3202 2002-10-27 Fernando Perez <fperez@colorado.edu>
3209 2002-10-27 Fernando Perez <fperez@colorado.edu>
3203
3210
3204 * IPython/usage.py (__doc__): updated the --help information and
3211 * IPython/usage.py (__doc__): updated the --help information and
3205 the ipythonrc file to indicate that -log generates
3212 the ipythonrc file to indicate that -log generates
3206 ./ipython.log. Also fixed the corresponding info in @logstart.
3213 ./ipython.log. Also fixed the corresponding info in @logstart.
3207 This and several other fixes in the manuals thanks to reports by
3214 This and several other fixes in the manuals thanks to reports by
3208 François Pinard <pinard-AT-iro.umontreal.ca>.
3215 François Pinard <pinard-AT-iro.umontreal.ca>.
3209
3216
3210 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3217 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3211 refer to @logstart (instead of @log, which doesn't exist).
3218 refer to @logstart (instead of @log, which doesn't exist).
3212
3219
3213 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3220 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3214 AttributeError crash. Thanks to Christopher Armstrong
3221 AttributeError crash. Thanks to Christopher Armstrong
3215 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3222 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3216 introduced recently (in 0.2.14pre37) with the fix to the eval
3223 introduced recently (in 0.2.14pre37) with the fix to the eval
3217 problem mentioned below.
3224 problem mentioned below.
3218
3225
3219 2002-10-17 Fernando Perez <fperez@colorado.edu>
3226 2002-10-17 Fernando Perez <fperez@colorado.edu>
3220
3227
3221 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3228 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3222 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3229 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3223
3230
3224 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3231 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3225 this function to fix a problem reported by Alex Schmolck. He saw
3232 this function to fix a problem reported by Alex Schmolck. He saw
3226 it with list comprehensions and generators, which were getting
3233 it with list comprehensions and generators, which were getting
3227 called twice. The real problem was an 'eval' call in testing for
3234 called twice. The real problem was an 'eval' call in testing for
3228 automagic which was evaluating the input line silently.
3235 automagic which was evaluating the input line silently.
3229
3236
3230 This is a potentially very nasty bug, if the input has side
3237 This is a potentially very nasty bug, if the input has side
3231 effects which must not be repeated. The code is much cleaner now,
3238 effects which must not be repeated. The code is much cleaner now,
3232 without any blanket 'except' left and with a regexp test for
3239 without any blanket 'except' left and with a regexp test for
3233 actual function names.
3240 actual function names.
3234
3241
3235 But an eval remains, which I'm not fully comfortable with. I just
3242 But an eval remains, which I'm not fully comfortable with. I just
3236 don't know how to find out if an expression could be a callable in
3243 don't know how to find out if an expression could be a callable in
3237 the user's namespace without doing an eval on the string. However
3244 the user's namespace without doing an eval on the string. However
3238 that string is now much more strictly checked so that no code
3245 that string is now much more strictly checked so that no code
3239 slips by, so the eval should only happen for things that can
3246 slips by, so the eval should only happen for things that can
3240 really be only function/method names.
3247 really be only function/method names.
3241
3248
3242 2002-10-15 Fernando Perez <fperez@colorado.edu>
3249 2002-10-15 Fernando Perez <fperez@colorado.edu>
3243
3250
3244 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3251 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3245 OSX information to main manual, removed README_Mac_OSX file from
3252 OSX information to main manual, removed README_Mac_OSX file from
3246 distribution. Also updated credits for recent additions.
3253 distribution. Also updated credits for recent additions.
3247
3254
3248 2002-10-10 Fernando Perez <fperez@colorado.edu>
3255 2002-10-10 Fernando Perez <fperez@colorado.edu>
3249
3256
3250 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3257 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3251 terminal-related issues. Many thanks to Andrea Riciputi
3258 terminal-related issues. Many thanks to Andrea Riciputi
3252 <andrea.riciputi-AT-libero.it> for writing it.
3259 <andrea.riciputi-AT-libero.it> for writing it.
3253
3260
3254 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3261 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3255 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3262 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3256
3263
3257 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3264 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3258 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3265 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3259 <syver-en-AT-online.no> who both submitted patches for this problem.
3266 <syver-en-AT-online.no> who both submitted patches for this problem.
3260
3267
3261 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3268 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3262 global embedding to make sure that things don't overwrite user
3269 global embedding to make sure that things don't overwrite user
3263 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3270 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3264
3271
3265 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3272 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3266 compatibility. Thanks to Hayden Callow
3273 compatibility. Thanks to Hayden Callow
3267 <h.callow-AT-elec.canterbury.ac.nz>
3274 <h.callow-AT-elec.canterbury.ac.nz>
3268
3275
3269 2002-10-04 Fernando Perez <fperez@colorado.edu>
3276 2002-10-04 Fernando Perez <fperez@colorado.edu>
3270
3277
3271 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3278 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3272 Gnuplot.File objects.
3279 Gnuplot.File objects.
3273
3280
3274 2002-07-23 Fernando Perez <fperez@colorado.edu>
3281 2002-07-23 Fernando Perez <fperez@colorado.edu>
3275
3282
3276 * IPython/genutils.py (timing): Added timings() and timing() for
3283 * IPython/genutils.py (timing): Added timings() and timing() for
3277 quick access to the most commonly needed data, the execution
3284 quick access to the most commonly needed data, the execution
3278 times. Old timing() renamed to timings_out().
3285 times. Old timing() renamed to timings_out().
3279
3286
3280 2002-07-18 Fernando Perez <fperez@colorado.edu>
3287 2002-07-18 Fernando Perez <fperez@colorado.edu>
3281
3288
3282 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3289 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3283 bug with nested instances disrupting the parent's tab completion.
3290 bug with nested instances disrupting the parent's tab completion.
3284
3291
3285 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3292 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3286 all_completions code to begin the emacs integration.
3293 all_completions code to begin the emacs integration.
3287
3294
3288 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3295 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3289 argument to allow titling individual arrays when plotting.
3296 argument to allow titling individual arrays when plotting.
3290
3297
3291 2002-07-15 Fernando Perez <fperez@colorado.edu>
3298 2002-07-15 Fernando Perez <fperez@colorado.edu>
3292
3299
3293 * setup.py (make_shortcut): changed to retrieve the value of
3300 * setup.py (make_shortcut): changed to retrieve the value of
3294 'Program Files' directory from the registry (this value changes in
3301 'Program Files' directory from the registry (this value changes in
3295 non-english versions of Windows). Thanks to Thomas Fanslau
3302 non-english versions of Windows). Thanks to Thomas Fanslau
3296 <tfanslau-AT-gmx.de> for the report.
3303 <tfanslau-AT-gmx.de> for the report.
3297
3304
3298 2002-07-10 Fernando Perez <fperez@colorado.edu>
3305 2002-07-10 Fernando Perez <fperez@colorado.edu>
3299
3306
3300 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3307 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3301 a bug in pdb, which crashes if a line with only whitespace is
3308 a bug in pdb, which crashes if a line with only whitespace is
3302 entered. Bug report submitted to sourceforge.
3309 entered. Bug report submitted to sourceforge.
3303
3310
3304 2002-07-09 Fernando Perez <fperez@colorado.edu>
3311 2002-07-09 Fernando Perez <fperez@colorado.edu>
3305
3312
3306 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3313 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3307 reporting exceptions (it's a bug in inspect.py, I just set a
3314 reporting exceptions (it's a bug in inspect.py, I just set a
3308 workaround).
3315 workaround).
3309
3316
3310 2002-07-08 Fernando Perez <fperez@colorado.edu>
3317 2002-07-08 Fernando Perez <fperez@colorado.edu>
3311
3318
3312 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3319 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3313 __IPYTHON__ in __builtins__ to show up in user_ns.
3320 __IPYTHON__ in __builtins__ to show up in user_ns.
3314
3321
3315 2002-07-03 Fernando Perez <fperez@colorado.edu>
3322 2002-07-03 Fernando Perez <fperez@colorado.edu>
3316
3323
3317 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3324 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3318 name from @gp_set_instance to @gp_set_default.
3325 name from @gp_set_instance to @gp_set_default.
3319
3326
3320 * IPython/ipmaker.py (make_IPython): default editor value set to
3327 * IPython/ipmaker.py (make_IPython): default editor value set to
3321 '0' (a string), to match the rc file. Otherwise will crash when
3328 '0' (a string), to match the rc file. Otherwise will crash when
3322 .strip() is called on it.
3329 .strip() is called on it.
3323
3330
3324
3331
3325 2002-06-28 Fernando Perez <fperez@colorado.edu>
3332 2002-06-28 Fernando Perez <fperez@colorado.edu>
3326
3333
3327 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3334 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3328 of files in current directory when a file is executed via
3335 of files in current directory when a file is executed via
3329 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3336 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3330
3337
3331 * setup.py (manfiles): fix for rpm builds, submitted by RA
3338 * setup.py (manfiles): fix for rpm builds, submitted by RA
3332 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3339 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3333
3340
3334 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3341 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3335 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3342 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3336 string!). A. Schmolck caught this one.
3343 string!). A. Schmolck caught this one.
3337
3344
3338 2002-06-27 Fernando Perez <fperez@colorado.edu>
3345 2002-06-27 Fernando Perez <fperez@colorado.edu>
3339
3346
3340 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3347 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3341 defined files at the cmd line. __name__ wasn't being set to
3348 defined files at the cmd line. __name__ wasn't being set to
3342 __main__.
3349 __main__.
3343
3350
3344 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3351 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3345 regular lists and tuples besides Numeric arrays.
3352 regular lists and tuples besides Numeric arrays.
3346
3353
3347 * IPython/Prompts.py (CachedOutput.__call__): Added output
3354 * IPython/Prompts.py (CachedOutput.__call__): Added output
3348 supression for input ending with ';'. Similar to Mathematica and
3355 supression for input ending with ';'. Similar to Mathematica and
3349 Matlab. The _* vars and Out[] list are still updated, just like
3356 Matlab. The _* vars and Out[] list are still updated, just like
3350 Mathematica behaves.
3357 Mathematica behaves.
3351
3358
3352 2002-06-25 Fernando Perez <fperez@colorado.edu>
3359 2002-06-25 Fernando Perez <fperez@colorado.edu>
3353
3360
3354 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3361 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3355 .ini extensions for profiels under Windows.
3362 .ini extensions for profiels under Windows.
3356
3363
3357 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3364 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3358 string form. Fix contributed by Alexander Schmolck
3365 string form. Fix contributed by Alexander Schmolck
3359 <a.schmolck-AT-gmx.net>
3366 <a.schmolck-AT-gmx.net>
3360
3367
3361 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3368 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3362 pre-configured Gnuplot instance.
3369 pre-configured Gnuplot instance.
3363
3370
3364 2002-06-21 Fernando Perez <fperez@colorado.edu>
3371 2002-06-21 Fernando Perez <fperez@colorado.edu>
3365
3372
3366 * IPython/numutils.py (exp_safe): new function, works around the
3373 * IPython/numutils.py (exp_safe): new function, works around the
3367 underflow problems in Numeric.
3374 underflow problems in Numeric.
3368 (log2): New fn. Safe log in base 2: returns exact integer answer
3375 (log2): New fn. Safe log in base 2: returns exact integer answer
3369 for exact integer powers of 2.
3376 for exact integer powers of 2.
3370
3377
3371 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3378 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3372 properly.
3379 properly.
3373
3380
3374 2002-06-20 Fernando Perez <fperez@colorado.edu>
3381 2002-06-20 Fernando Perez <fperez@colorado.edu>
3375
3382
3376 * IPython/genutils.py (timing): new function like
3383 * IPython/genutils.py (timing): new function like
3377 Mathematica's. Similar to time_test, but returns more info.
3384 Mathematica's. Similar to time_test, but returns more info.
3378
3385
3379 2002-06-18 Fernando Perez <fperez@colorado.edu>
3386 2002-06-18 Fernando Perez <fperez@colorado.edu>
3380
3387
3381 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3388 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3382 according to Mike Heeter's suggestions.
3389 according to Mike Heeter's suggestions.
3383
3390
3384 2002-06-16 Fernando Perez <fperez@colorado.edu>
3391 2002-06-16 Fernando Perez <fperez@colorado.edu>
3385
3392
3386 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3393 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3387 system. GnuplotMagic is gone as a user-directory option. New files
3394 system. GnuplotMagic is gone as a user-directory option. New files
3388 make it easier to use all the gnuplot stuff both from external
3395 make it easier to use all the gnuplot stuff both from external
3389 programs as well as from IPython. Had to rewrite part of
3396 programs as well as from IPython. Had to rewrite part of
3390 hardcopy() b/c of a strange bug: often the ps files simply don't
3397 hardcopy() b/c of a strange bug: often the ps files simply don't
3391 get created, and require a repeat of the command (often several
3398 get created, and require a repeat of the command (often several
3392 times).
3399 times).
3393
3400
3394 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3401 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3395 resolve output channel at call time, so that if sys.stderr has
3402 resolve output channel at call time, so that if sys.stderr has
3396 been redirected by user this gets honored.
3403 been redirected by user this gets honored.
3397
3404
3398 2002-06-13 Fernando Perez <fperez@colorado.edu>
3405 2002-06-13 Fernando Perez <fperez@colorado.edu>
3399
3406
3400 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3407 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3401 IPShell. Kept a copy with the old names to avoid breaking people's
3408 IPShell. Kept a copy with the old names to avoid breaking people's
3402 embedded code.
3409 embedded code.
3403
3410
3404 * IPython/ipython: simplified it to the bare minimum after
3411 * IPython/ipython: simplified it to the bare minimum after
3405 Holger's suggestions. Added info about how to use it in
3412 Holger's suggestions. Added info about how to use it in
3406 PYTHONSTARTUP.
3413 PYTHONSTARTUP.
3407
3414
3408 * IPython/Shell.py (IPythonShell): changed the options passing
3415 * IPython/Shell.py (IPythonShell): changed the options passing
3409 from a string with funky %s replacements to a straight list. Maybe
3416 from a string with funky %s replacements to a straight list. Maybe
3410 a bit more typing, but it follows sys.argv conventions, so there's
3417 a bit more typing, but it follows sys.argv conventions, so there's
3411 less special-casing to remember.
3418 less special-casing to remember.
3412
3419
3413 2002-06-12 Fernando Perez <fperez@colorado.edu>
3420 2002-06-12 Fernando Perez <fperez@colorado.edu>
3414
3421
3415 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3422 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3416 command. Thanks to a suggestion by Mike Heeter.
3423 command. Thanks to a suggestion by Mike Heeter.
3417 (Magic.magic_pfile): added behavior to look at filenames if given
3424 (Magic.magic_pfile): added behavior to look at filenames if given
3418 arg is not a defined object.
3425 arg is not a defined object.
3419 (Magic.magic_save): New @save function to save code snippets. Also
3426 (Magic.magic_save): New @save function to save code snippets. Also
3420 a Mike Heeter idea.
3427 a Mike Heeter idea.
3421
3428
3422 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3429 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3423 plot() and replot(). Much more convenient now, especially for
3430 plot() and replot(). Much more convenient now, especially for
3424 interactive use.
3431 interactive use.
3425
3432
3426 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3433 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3427 filenames.
3434 filenames.
3428
3435
3429 2002-06-02 Fernando Perez <fperez@colorado.edu>
3436 2002-06-02 Fernando Perez <fperez@colorado.edu>
3430
3437
3431 * IPython/Struct.py (Struct.__init__): modified to admit
3438 * IPython/Struct.py (Struct.__init__): modified to admit
3432 initialization via another struct.
3439 initialization via another struct.
3433
3440
3434 * IPython/genutils.py (SystemExec.__init__): New stateful
3441 * IPython/genutils.py (SystemExec.__init__): New stateful
3435 interface to xsys and bq. Useful for writing system scripts.
3442 interface to xsys and bq. Useful for writing system scripts.
3436
3443
3437 2002-05-30 Fernando Perez <fperez@colorado.edu>
3444 2002-05-30 Fernando Perez <fperez@colorado.edu>
3438
3445
3439 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3446 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3440 documents. This will make the user download smaller (it's getting
3447 documents. This will make the user download smaller (it's getting
3441 too big).
3448 too big).
3442
3449
3443 2002-05-29 Fernando Perez <fperez@colorado.edu>
3450 2002-05-29 Fernando Perez <fperez@colorado.edu>
3444
3451
3445 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3452 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3446 fix problems with shelve and pickle. Seems to work, but I don't
3453 fix problems with shelve and pickle. Seems to work, but I don't
3447 know if corner cases break it. Thanks to Mike Heeter
3454 know if corner cases break it. Thanks to Mike Heeter
3448 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3455 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3449
3456
3450 2002-05-24 Fernando Perez <fperez@colorado.edu>
3457 2002-05-24 Fernando Perez <fperez@colorado.edu>
3451
3458
3452 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3459 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3453 macros having broken.
3460 macros having broken.
3454
3461
3455 2002-05-21 Fernando Perez <fperez@colorado.edu>
3462 2002-05-21 Fernando Perez <fperez@colorado.edu>
3456
3463
3457 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3464 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3458 introduced logging bug: all history before logging started was
3465 introduced logging bug: all history before logging started was
3459 being written one character per line! This came from the redesign
3466 being written one character per line! This came from the redesign
3460 of the input history as a special list which slices to strings,
3467 of the input history as a special list which slices to strings,
3461 not to lists.
3468 not to lists.
3462
3469
3463 2002-05-20 Fernando Perez <fperez@colorado.edu>
3470 2002-05-20 Fernando Perez <fperez@colorado.edu>
3464
3471
3465 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3472 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3466 be an attribute of all classes in this module. The design of these
3473 be an attribute of all classes in this module. The design of these
3467 classes needs some serious overhauling.
3474 classes needs some serious overhauling.
3468
3475
3469 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3476 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3470 which was ignoring '_' in option names.
3477 which was ignoring '_' in option names.
3471
3478
3472 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3479 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3473 'Verbose_novars' to 'Context' and made it the new default. It's a
3480 'Verbose_novars' to 'Context' and made it the new default. It's a
3474 bit more readable and also safer than verbose.
3481 bit more readable and also safer than verbose.
3475
3482
3476 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3483 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3477 triple-quoted strings.
3484 triple-quoted strings.
3478
3485
3479 * IPython/OInspect.py (__all__): new module exposing the object
3486 * IPython/OInspect.py (__all__): new module exposing the object
3480 introspection facilities. Now the corresponding magics are dummy
3487 introspection facilities. Now the corresponding magics are dummy
3481 wrappers around this. Having this module will make it much easier
3488 wrappers around this. Having this module will make it much easier
3482 to put these functions into our modified pdb.
3489 to put these functions into our modified pdb.
3483 This new object inspector system uses the new colorizing module,
3490 This new object inspector system uses the new colorizing module,
3484 so source code and other things are nicely syntax highlighted.
3491 so source code and other things are nicely syntax highlighted.
3485
3492
3486 2002-05-18 Fernando Perez <fperez@colorado.edu>
3493 2002-05-18 Fernando Perez <fperez@colorado.edu>
3487
3494
3488 * IPython/ColorANSI.py: Split the coloring tools into a separate
3495 * IPython/ColorANSI.py: Split the coloring tools into a separate
3489 module so I can use them in other code easier (they were part of
3496 module so I can use them in other code easier (they were part of
3490 ultraTB).
3497 ultraTB).
3491
3498
3492 2002-05-17 Fernando Perez <fperez@colorado.edu>
3499 2002-05-17 Fernando Perez <fperez@colorado.edu>
3493
3500
3494 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3501 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3495 fixed it to set the global 'g' also to the called instance, as
3502 fixed it to set the global 'g' also to the called instance, as
3496 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3503 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3497 user's 'g' variables).
3504 user's 'g' variables).
3498
3505
3499 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3506 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3500 global variables (aliases to _ih,_oh) so that users which expect
3507 global variables (aliases to _ih,_oh) so that users which expect
3501 In[5] or Out[7] to work aren't unpleasantly surprised.
3508 In[5] or Out[7] to work aren't unpleasantly surprised.
3502 (InputList.__getslice__): new class to allow executing slices of
3509 (InputList.__getslice__): new class to allow executing slices of
3503 input history directly. Very simple class, complements the use of
3510 input history directly. Very simple class, complements the use of
3504 macros.
3511 macros.
3505
3512
3506 2002-05-16 Fernando Perez <fperez@colorado.edu>
3513 2002-05-16 Fernando Perez <fperez@colorado.edu>
3507
3514
3508 * setup.py (docdirbase): make doc directory be just doc/IPython
3515 * setup.py (docdirbase): make doc directory be just doc/IPython
3509 without version numbers, it will reduce clutter for users.
3516 without version numbers, it will reduce clutter for users.
3510
3517
3511 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3518 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3512 execfile call to prevent possible memory leak. See for details:
3519 execfile call to prevent possible memory leak. See for details:
3513 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3520 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3514
3521
3515 2002-05-15 Fernando Perez <fperez@colorado.edu>
3522 2002-05-15 Fernando Perez <fperez@colorado.edu>
3516
3523
3517 * IPython/Magic.py (Magic.magic_psource): made the object
3524 * IPython/Magic.py (Magic.magic_psource): made the object
3518 introspection names be more standard: pdoc, pdef, pfile and
3525 introspection names be more standard: pdoc, pdef, pfile and
3519 psource. They all print/page their output, and it makes
3526 psource. They all print/page their output, and it makes
3520 remembering them easier. Kept old names for compatibility as
3527 remembering them easier. Kept old names for compatibility as
3521 aliases.
3528 aliases.
3522
3529
3523 2002-05-14 Fernando Perez <fperez@colorado.edu>
3530 2002-05-14 Fernando Perez <fperez@colorado.edu>
3524
3531
3525 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3532 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3526 what the mouse problem was. The trick is to use gnuplot with temp
3533 what the mouse problem was. The trick is to use gnuplot with temp
3527 files and NOT with pipes (for data communication), because having
3534 files and NOT with pipes (for data communication), because having
3528 both pipes and the mouse on is bad news.
3535 both pipes and the mouse on is bad news.
3529
3536
3530 2002-05-13 Fernando Perez <fperez@colorado.edu>
3537 2002-05-13 Fernando Perez <fperez@colorado.edu>
3531
3538
3532 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3539 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3533 bug. Information would be reported about builtins even when
3540 bug. Information would be reported about builtins even when
3534 user-defined functions overrode them.
3541 user-defined functions overrode them.
3535
3542
3536 2002-05-11 Fernando Perez <fperez@colorado.edu>
3543 2002-05-11 Fernando Perez <fperez@colorado.edu>
3537
3544
3538 * IPython/__init__.py (__all__): removed FlexCompleter from
3545 * IPython/__init__.py (__all__): removed FlexCompleter from
3539 __all__ so that things don't fail in platforms without readline.
3546 __all__ so that things don't fail in platforms without readline.
3540
3547
3541 2002-05-10 Fernando Perez <fperez@colorado.edu>
3548 2002-05-10 Fernando Perez <fperez@colorado.edu>
3542
3549
3543 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3550 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3544 it requires Numeric, effectively making Numeric a dependency for
3551 it requires Numeric, effectively making Numeric a dependency for
3545 IPython.
3552 IPython.
3546
3553
3547 * Released 0.2.13
3554 * Released 0.2.13
3548
3555
3549 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3556 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3550 profiler interface. Now all the major options from the profiler
3557 profiler interface. Now all the major options from the profiler
3551 module are directly supported in IPython, both for single
3558 module are directly supported in IPython, both for single
3552 expressions (@prun) and for full programs (@run -p).
3559 expressions (@prun) and for full programs (@run -p).
3553
3560
3554 2002-05-09 Fernando Perez <fperez@colorado.edu>
3561 2002-05-09 Fernando Perez <fperez@colorado.edu>
3555
3562
3556 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3563 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3557 magic properly formatted for screen.
3564 magic properly formatted for screen.
3558
3565
3559 * setup.py (make_shortcut): Changed things to put pdf version in
3566 * setup.py (make_shortcut): Changed things to put pdf version in
3560 doc/ instead of doc/manual (had to change lyxport a bit).
3567 doc/ instead of doc/manual (had to change lyxport a bit).
3561
3568
3562 * IPython/Magic.py (Profile.string_stats): made profile runs go
3569 * IPython/Magic.py (Profile.string_stats): made profile runs go
3563 through pager (they are long and a pager allows searching, saving,
3570 through pager (they are long and a pager allows searching, saving,
3564 etc.)
3571 etc.)
3565
3572
3566 2002-05-08 Fernando Perez <fperez@colorado.edu>
3573 2002-05-08 Fernando Perez <fperez@colorado.edu>
3567
3574
3568 * Released 0.2.12
3575 * Released 0.2.12
3569
3576
3570 2002-05-06 Fernando Perez <fperez@colorado.edu>
3577 2002-05-06 Fernando Perez <fperez@colorado.edu>
3571
3578
3572 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3579 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3573 introduced); 'hist n1 n2' was broken.
3580 introduced); 'hist n1 n2' was broken.
3574 (Magic.magic_pdb): added optional on/off arguments to @pdb
3581 (Magic.magic_pdb): added optional on/off arguments to @pdb
3575 (Magic.magic_run): added option -i to @run, which executes code in
3582 (Magic.magic_run): added option -i to @run, which executes code in
3576 the IPython namespace instead of a clean one. Also added @irun as
3583 the IPython namespace instead of a clean one. Also added @irun as
3577 an alias to @run -i.
3584 an alias to @run -i.
3578
3585
3579 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3586 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3580 fixed (it didn't really do anything, the namespaces were wrong).
3587 fixed (it didn't really do anything, the namespaces were wrong).
3581
3588
3582 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3589 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3583
3590
3584 * IPython/__init__.py (__all__): Fixed package namespace, now
3591 * IPython/__init__.py (__all__): Fixed package namespace, now
3585 'import IPython' does give access to IPython.<all> as
3592 'import IPython' does give access to IPython.<all> as
3586 expected. Also renamed __release__ to Release.
3593 expected. Also renamed __release__ to Release.
3587
3594
3588 * IPython/Debugger.py (__license__): created new Pdb class which
3595 * IPython/Debugger.py (__license__): created new Pdb class which
3589 functions like a drop-in for the normal pdb.Pdb but does NOT
3596 functions like a drop-in for the normal pdb.Pdb but does NOT
3590 import readline by default. This way it doesn't muck up IPython's
3597 import readline by default. This way it doesn't muck up IPython's
3591 readline handling, and now tab-completion finally works in the
3598 readline handling, and now tab-completion finally works in the
3592 debugger -- sort of. It completes things globally visible, but the
3599 debugger -- sort of. It completes things globally visible, but the
3593 completer doesn't track the stack as pdb walks it. That's a bit
3600 completer doesn't track the stack as pdb walks it. That's a bit
3594 tricky, and I'll have to implement it later.
3601 tricky, and I'll have to implement it later.
3595
3602
3596 2002-05-05 Fernando Perez <fperez@colorado.edu>
3603 2002-05-05 Fernando Perez <fperez@colorado.edu>
3597
3604
3598 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3605 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3599 magic docstrings when printed via ? (explicit \'s were being
3606 magic docstrings when printed via ? (explicit \'s were being
3600 printed).
3607 printed).
3601
3608
3602 * IPython/ipmaker.py (make_IPython): fixed namespace
3609 * IPython/ipmaker.py (make_IPython): fixed namespace
3603 identification bug. Now variables loaded via logs or command-line
3610 identification bug. Now variables loaded via logs or command-line
3604 files are recognized in the interactive namespace by @who.
3611 files are recognized in the interactive namespace by @who.
3605
3612
3606 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3613 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3607 log replay system stemming from the string form of Structs.
3614 log replay system stemming from the string form of Structs.
3608
3615
3609 * IPython/Magic.py (Macro.__init__): improved macros to properly
3616 * IPython/Magic.py (Macro.__init__): improved macros to properly
3610 handle magic commands in them.
3617 handle magic commands in them.
3611 (Magic.magic_logstart): usernames are now expanded so 'logstart
3618 (Magic.magic_logstart): usernames are now expanded so 'logstart
3612 ~/mylog' now works.
3619 ~/mylog' now works.
3613
3620
3614 * IPython/iplib.py (complete): fixed bug where paths starting with
3621 * IPython/iplib.py (complete): fixed bug where paths starting with
3615 '/' would be completed as magic names.
3622 '/' would be completed as magic names.
3616
3623
3617 2002-05-04 Fernando Perez <fperez@colorado.edu>
3624 2002-05-04 Fernando Perez <fperez@colorado.edu>
3618
3625
3619 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3626 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3620 allow running full programs under the profiler's control.
3627 allow running full programs under the profiler's control.
3621
3628
3622 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3629 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3623 mode to report exceptions verbosely but without formatting
3630 mode to report exceptions verbosely but without formatting
3624 variables. This addresses the issue of ipython 'freezing' (it's
3631 variables. This addresses the issue of ipython 'freezing' (it's
3625 not frozen, but caught in an expensive formatting loop) when huge
3632 not frozen, but caught in an expensive formatting loop) when huge
3626 variables are in the context of an exception.
3633 variables are in the context of an exception.
3627 (VerboseTB.text): Added '--->' markers at line where exception was
3634 (VerboseTB.text): Added '--->' markers at line where exception was
3628 triggered. Much clearer to read, especially in NoColor modes.
3635 triggered. Much clearer to read, especially in NoColor modes.
3629
3636
3630 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3637 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3631 implemented in reverse when changing to the new parse_options().
3638 implemented in reverse when changing to the new parse_options().
3632
3639
3633 2002-05-03 Fernando Perez <fperez@colorado.edu>
3640 2002-05-03 Fernando Perez <fperez@colorado.edu>
3634
3641
3635 * IPython/Magic.py (Magic.parse_options): new function so that
3642 * IPython/Magic.py (Magic.parse_options): new function so that
3636 magics can parse options easier.
3643 magics can parse options easier.
3637 (Magic.magic_prun): new function similar to profile.run(),
3644 (Magic.magic_prun): new function similar to profile.run(),
3638 suggested by Chris Hart.
3645 suggested by Chris Hart.
3639 (Magic.magic_cd): fixed behavior so that it only changes if
3646 (Magic.magic_cd): fixed behavior so that it only changes if
3640 directory actually is in history.
3647 directory actually is in history.
3641
3648
3642 * IPython/usage.py (__doc__): added information about potential
3649 * IPython/usage.py (__doc__): added information about potential
3643 slowness of Verbose exception mode when there are huge data
3650 slowness of Verbose exception mode when there are huge data
3644 structures to be formatted (thanks to Archie Paulson).
3651 structures to be formatted (thanks to Archie Paulson).
3645
3652
3646 * IPython/ipmaker.py (make_IPython): Changed default logging
3653 * IPython/ipmaker.py (make_IPython): Changed default logging
3647 (when simply called with -log) to use curr_dir/ipython.log in
3654 (when simply called with -log) to use curr_dir/ipython.log in
3648 rotate mode. Fixed crash which was occuring with -log before
3655 rotate mode. Fixed crash which was occuring with -log before
3649 (thanks to Jim Boyle).
3656 (thanks to Jim Boyle).
3650
3657
3651 2002-05-01 Fernando Perez <fperez@colorado.edu>
3658 2002-05-01 Fernando Perez <fperez@colorado.edu>
3652
3659
3653 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3660 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3654 was nasty -- though somewhat of a corner case).
3661 was nasty -- though somewhat of a corner case).
3655
3662
3656 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3663 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3657 text (was a bug).
3664 text (was a bug).
3658
3665
3659 2002-04-30 Fernando Perez <fperez@colorado.edu>
3666 2002-04-30 Fernando Perez <fperez@colorado.edu>
3660
3667
3661 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3668 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3662 a print after ^D or ^C from the user so that the In[] prompt
3669 a print after ^D or ^C from the user so that the In[] prompt
3663 doesn't over-run the gnuplot one.
3670 doesn't over-run the gnuplot one.
3664
3671
3665 2002-04-29 Fernando Perez <fperez@colorado.edu>
3672 2002-04-29 Fernando Perez <fperez@colorado.edu>
3666
3673
3667 * Released 0.2.10
3674 * Released 0.2.10
3668
3675
3669 * IPython/__release__.py (version): get date dynamically.
3676 * IPython/__release__.py (version): get date dynamically.
3670
3677
3671 * Misc. documentation updates thanks to Arnd's comments. Also ran
3678 * Misc. documentation updates thanks to Arnd's comments. Also ran
3672 a full spellcheck on the manual (hadn't been done in a while).
3679 a full spellcheck on the manual (hadn't been done in a while).
3673
3680
3674 2002-04-27 Fernando Perez <fperez@colorado.edu>
3681 2002-04-27 Fernando Perez <fperez@colorado.edu>
3675
3682
3676 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3683 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3677 starting a log in mid-session would reset the input history list.
3684 starting a log in mid-session would reset the input history list.
3678
3685
3679 2002-04-26 Fernando Perez <fperez@colorado.edu>
3686 2002-04-26 Fernando Perez <fperez@colorado.edu>
3680
3687
3681 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3688 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3682 all files were being included in an update. Now anything in
3689 all files were being included in an update. Now anything in
3683 UserConfig that matches [A-Za-z]*.py will go (this excludes
3690 UserConfig that matches [A-Za-z]*.py will go (this excludes
3684 __init__.py)
3691 __init__.py)
3685
3692
3686 2002-04-25 Fernando Perez <fperez@colorado.edu>
3693 2002-04-25 Fernando Perez <fperez@colorado.edu>
3687
3694
3688 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3695 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3689 to __builtins__ so that any form of embedded or imported code can
3696 to __builtins__ so that any form of embedded or imported code can
3690 test for being inside IPython.
3697 test for being inside IPython.
3691
3698
3692 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3699 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3693 changed to GnuplotMagic because it's now an importable module,
3700 changed to GnuplotMagic because it's now an importable module,
3694 this makes the name follow that of the standard Gnuplot module.
3701 this makes the name follow that of the standard Gnuplot module.
3695 GnuplotMagic can now be loaded at any time in mid-session.
3702 GnuplotMagic can now be loaded at any time in mid-session.
3696
3703
3697 2002-04-24 Fernando Perez <fperez@colorado.edu>
3704 2002-04-24 Fernando Perez <fperez@colorado.edu>
3698
3705
3699 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3706 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3700 the globals (IPython has its own namespace) and the
3707 the globals (IPython has its own namespace) and the
3701 PhysicalQuantity stuff is much better anyway.
3708 PhysicalQuantity stuff is much better anyway.
3702
3709
3703 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3710 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3704 embedding example to standard user directory for
3711 embedding example to standard user directory for
3705 distribution. Also put it in the manual.
3712 distribution. Also put it in the manual.
3706
3713
3707 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3714 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3708 instance as first argument (so it doesn't rely on some obscure
3715 instance as first argument (so it doesn't rely on some obscure
3709 hidden global).
3716 hidden global).
3710
3717
3711 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3718 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3712 delimiters. While it prevents ().TAB from working, it allows
3719 delimiters. While it prevents ().TAB from working, it allows
3713 completions in open (... expressions. This is by far a more common
3720 completions in open (... expressions. This is by far a more common
3714 case.
3721 case.
3715
3722
3716 2002-04-23 Fernando Perez <fperez@colorado.edu>
3723 2002-04-23 Fernando Perez <fperez@colorado.edu>
3717
3724
3718 * IPython/Extensions/InterpreterPasteInput.py: new
3725 * IPython/Extensions/InterpreterPasteInput.py: new
3719 syntax-processing module for pasting lines with >>> or ... at the
3726 syntax-processing module for pasting lines with >>> or ... at the
3720 start.
3727 start.
3721
3728
3722 * IPython/Extensions/PhysicalQ_Interactive.py
3729 * IPython/Extensions/PhysicalQ_Interactive.py
3723 (PhysicalQuantityInteractive.__int__): fixed to work with either
3730 (PhysicalQuantityInteractive.__int__): fixed to work with either
3724 Numeric or math.
3731 Numeric or math.
3725
3732
3726 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3733 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3727 provided profiles. Now we have:
3734 provided profiles. Now we have:
3728 -math -> math module as * and cmath with its own namespace.
3735 -math -> math module as * and cmath with its own namespace.
3729 -numeric -> Numeric as *, plus gnuplot & grace
3736 -numeric -> Numeric as *, plus gnuplot & grace
3730 -physics -> same as before
3737 -physics -> same as before
3731
3738
3732 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3739 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3733 user-defined magics wouldn't be found by @magic if they were
3740 user-defined magics wouldn't be found by @magic if they were
3734 defined as class methods. Also cleaned up the namespace search
3741 defined as class methods. Also cleaned up the namespace search
3735 logic and the string building (to use %s instead of many repeated
3742 logic and the string building (to use %s instead of many repeated
3736 string adds).
3743 string adds).
3737
3744
3738 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3745 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3739 of user-defined magics to operate with class methods (cleaner, in
3746 of user-defined magics to operate with class methods (cleaner, in
3740 line with the gnuplot code).
3747 line with the gnuplot code).
3741
3748
3742 2002-04-22 Fernando Perez <fperez@colorado.edu>
3749 2002-04-22 Fernando Perez <fperez@colorado.edu>
3743
3750
3744 * setup.py: updated dependency list so that manual is updated when
3751 * setup.py: updated dependency list so that manual is updated when
3745 all included files change.
3752 all included files change.
3746
3753
3747 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3754 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3748 the delimiter removal option (the fix is ugly right now).
3755 the delimiter removal option (the fix is ugly right now).
3749
3756
3750 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3757 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3751 all of the math profile (quicker loading, no conflict between
3758 all of the math profile (quicker loading, no conflict between
3752 g-9.8 and g-gnuplot).
3759 g-9.8 and g-gnuplot).
3753
3760
3754 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3761 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3755 name of post-mortem files to IPython_crash_report.txt.
3762 name of post-mortem files to IPython_crash_report.txt.
3756
3763
3757 * Cleanup/update of the docs. Added all the new readline info and
3764 * Cleanup/update of the docs. Added all the new readline info and
3758 formatted all lists as 'real lists'.
3765 formatted all lists as 'real lists'.
3759
3766
3760 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3767 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3761 tab-completion options, since the full readline parse_and_bind is
3768 tab-completion options, since the full readline parse_and_bind is
3762 now accessible.
3769 now accessible.
3763
3770
3764 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3771 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3765 handling of readline options. Now users can specify any string to
3772 handling of readline options. Now users can specify any string to
3766 be passed to parse_and_bind(), as well as the delimiters to be
3773 be passed to parse_and_bind(), as well as the delimiters to be
3767 removed.
3774 removed.
3768 (InteractiveShell.__init__): Added __name__ to the global
3775 (InteractiveShell.__init__): Added __name__ to the global
3769 namespace so that things like Itpl which rely on its existence
3776 namespace so that things like Itpl which rely on its existence
3770 don't crash.
3777 don't crash.
3771 (InteractiveShell._prefilter): Defined the default with a _ so
3778 (InteractiveShell._prefilter): Defined the default with a _ so
3772 that prefilter() is easier to override, while the default one
3779 that prefilter() is easier to override, while the default one
3773 remains available.
3780 remains available.
3774
3781
3775 2002-04-18 Fernando Perez <fperez@colorado.edu>
3782 2002-04-18 Fernando Perez <fperez@colorado.edu>
3776
3783
3777 * Added information about pdb in the docs.
3784 * Added information about pdb in the docs.
3778
3785
3779 2002-04-17 Fernando Perez <fperez@colorado.edu>
3786 2002-04-17 Fernando Perez <fperez@colorado.edu>
3780
3787
3781 * IPython/ipmaker.py (make_IPython): added rc_override option to
3788 * IPython/ipmaker.py (make_IPython): added rc_override option to
3782 allow passing config options at creation time which may override
3789 allow passing config options at creation time which may override
3783 anything set in the config files or command line. This is
3790 anything set in the config files or command line. This is
3784 particularly useful for configuring embedded instances.
3791 particularly useful for configuring embedded instances.
3785
3792
3786 2002-04-15 Fernando Perez <fperez@colorado.edu>
3793 2002-04-15 Fernando Perez <fperez@colorado.edu>
3787
3794
3788 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3795 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3789 crash embedded instances because of the input cache falling out of
3796 crash embedded instances because of the input cache falling out of
3790 sync with the output counter.
3797 sync with the output counter.
3791
3798
3792 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3799 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3793 mode which calls pdb after an uncaught exception in IPython itself.
3800 mode which calls pdb after an uncaught exception in IPython itself.
3794
3801
3795 2002-04-14 Fernando Perez <fperez@colorado.edu>
3802 2002-04-14 Fernando Perez <fperez@colorado.edu>
3796
3803
3797 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3804 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3798 readline, fix it back after each call.
3805 readline, fix it back after each call.
3799
3806
3800 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3807 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3801 method to force all access via __call__(), which guarantees that
3808 method to force all access via __call__(), which guarantees that
3802 traceback references are properly deleted.
3809 traceback references are properly deleted.
3803
3810
3804 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3811 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3805 improve printing when pprint is in use.
3812 improve printing when pprint is in use.
3806
3813
3807 2002-04-13 Fernando Perez <fperez@colorado.edu>
3814 2002-04-13 Fernando Perez <fperez@colorado.edu>
3808
3815
3809 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3816 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3810 exceptions aren't caught anymore. If the user triggers one, he
3817 exceptions aren't caught anymore. If the user triggers one, he
3811 should know why he's doing it and it should go all the way up,
3818 should know why he's doing it and it should go all the way up,
3812 just like any other exception. So now @abort will fully kill the
3819 just like any other exception. So now @abort will fully kill the
3813 embedded interpreter and the embedding code (unless that happens
3820 embedded interpreter and the embedding code (unless that happens
3814 to catch SystemExit).
3821 to catch SystemExit).
3815
3822
3816 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3823 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3817 and a debugger() method to invoke the interactive pdb debugger
3824 and a debugger() method to invoke the interactive pdb debugger
3818 after printing exception information. Also added the corresponding
3825 after printing exception information. Also added the corresponding
3819 -pdb option and @pdb magic to control this feature, and updated
3826 -pdb option and @pdb magic to control this feature, and updated
3820 the docs. After a suggestion from Christopher Hart
3827 the docs. After a suggestion from Christopher Hart
3821 (hart-AT-caltech.edu).
3828 (hart-AT-caltech.edu).
3822
3829
3823 2002-04-12 Fernando Perez <fperez@colorado.edu>
3830 2002-04-12 Fernando Perez <fperez@colorado.edu>
3824
3831
3825 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3832 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3826 the exception handlers defined by the user (not the CrashHandler)
3833 the exception handlers defined by the user (not the CrashHandler)
3827 so that user exceptions don't trigger an ipython bug report.
3834 so that user exceptions don't trigger an ipython bug report.
3828
3835
3829 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3836 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3830 configurable (it should have always been so).
3837 configurable (it should have always been so).
3831
3838
3832 2002-03-26 Fernando Perez <fperez@colorado.edu>
3839 2002-03-26 Fernando Perez <fperez@colorado.edu>
3833
3840
3834 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3841 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3835 and there to fix embedding namespace issues. This should all be
3842 and there to fix embedding namespace issues. This should all be
3836 done in a more elegant way.
3843 done in a more elegant way.
3837
3844
3838 2002-03-25 Fernando Perez <fperez@colorado.edu>
3845 2002-03-25 Fernando Perez <fperez@colorado.edu>
3839
3846
3840 * IPython/genutils.py (get_home_dir): Try to make it work under
3847 * IPython/genutils.py (get_home_dir): Try to make it work under
3841 win9x also.
3848 win9x also.
3842
3849
3843 2002-03-20 Fernando Perez <fperez@colorado.edu>
3850 2002-03-20 Fernando Perez <fperez@colorado.edu>
3844
3851
3845 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3852 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3846 sys.displayhook untouched upon __init__.
3853 sys.displayhook untouched upon __init__.
3847
3854
3848 2002-03-19 Fernando Perez <fperez@colorado.edu>
3855 2002-03-19 Fernando Perez <fperez@colorado.edu>
3849
3856
3850 * Released 0.2.9 (for embedding bug, basically).
3857 * Released 0.2.9 (for embedding bug, basically).
3851
3858
3852 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3859 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3853 exceptions so that enclosing shell's state can be restored.
3860 exceptions so that enclosing shell's state can be restored.
3854
3861
3855 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3862 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3856 naming conventions in the .ipython/ dir.
3863 naming conventions in the .ipython/ dir.
3857
3864
3858 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3865 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3859 from delimiters list so filenames with - in them get expanded.
3866 from delimiters list so filenames with - in them get expanded.
3860
3867
3861 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3868 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3862 sys.displayhook not being properly restored after an embedded call.
3869 sys.displayhook not being properly restored after an embedded call.
3863
3870
3864 2002-03-18 Fernando Perez <fperez@colorado.edu>
3871 2002-03-18 Fernando Perez <fperez@colorado.edu>
3865
3872
3866 * Released 0.2.8
3873 * Released 0.2.8
3867
3874
3868 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3875 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3869 some files weren't being included in a -upgrade.
3876 some files weren't being included in a -upgrade.
3870 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3877 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3871 on' so that the first tab completes.
3878 on' so that the first tab completes.
3872 (InteractiveShell.handle_magic): fixed bug with spaces around
3879 (InteractiveShell.handle_magic): fixed bug with spaces around
3873 quotes breaking many magic commands.
3880 quotes breaking many magic commands.
3874
3881
3875 * setup.py: added note about ignoring the syntax error messages at
3882 * setup.py: added note about ignoring the syntax error messages at
3876 installation.
3883 installation.
3877
3884
3878 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3885 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3879 streamlining the gnuplot interface, now there's only one magic @gp.
3886 streamlining the gnuplot interface, now there's only one magic @gp.
3880
3887
3881 2002-03-17 Fernando Perez <fperez@colorado.edu>
3888 2002-03-17 Fernando Perez <fperez@colorado.edu>
3882
3889
3883 * IPython/UserConfig/magic_gnuplot.py: new name for the
3890 * IPython/UserConfig/magic_gnuplot.py: new name for the
3884 example-magic_pm.py file. Much enhanced system, now with a shell
3891 example-magic_pm.py file. Much enhanced system, now with a shell
3885 for communicating directly with gnuplot, one command at a time.
3892 for communicating directly with gnuplot, one command at a time.
3886
3893
3887 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3894 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3888 setting __name__=='__main__'.
3895 setting __name__=='__main__'.
3889
3896
3890 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3897 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3891 mini-shell for accessing gnuplot from inside ipython. Should
3898 mini-shell for accessing gnuplot from inside ipython. Should
3892 extend it later for grace access too. Inspired by Arnd's
3899 extend it later for grace access too. Inspired by Arnd's
3893 suggestion.
3900 suggestion.
3894
3901
3895 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3902 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3896 calling magic functions with () in their arguments. Thanks to Arnd
3903 calling magic functions with () in their arguments. Thanks to Arnd
3897 Baecker for pointing this to me.
3904 Baecker for pointing this to me.
3898
3905
3899 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3906 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3900 infinitely for integer or complex arrays (only worked with floats).
3907 infinitely for integer or complex arrays (only worked with floats).
3901
3908
3902 2002-03-16 Fernando Perez <fperez@colorado.edu>
3909 2002-03-16 Fernando Perez <fperez@colorado.edu>
3903
3910
3904 * setup.py: Merged setup and setup_windows into a single script
3911 * setup.py: Merged setup and setup_windows into a single script
3905 which properly handles things for windows users.
3912 which properly handles things for windows users.
3906
3913
3907 2002-03-15 Fernando Perez <fperez@colorado.edu>
3914 2002-03-15 Fernando Perez <fperez@colorado.edu>
3908
3915
3909 * Big change to the manual: now the magics are all automatically
3916 * Big change to the manual: now the magics are all automatically
3910 documented. This information is generated from their docstrings
3917 documented. This information is generated from their docstrings
3911 and put in a latex file included by the manual lyx file. This way
3918 and put in a latex file included by the manual lyx file. This way
3912 we get always up to date information for the magics. The manual
3919 we get always up to date information for the magics. The manual
3913 now also has proper version information, also auto-synced.
3920 now also has proper version information, also auto-synced.
3914
3921
3915 For this to work, an undocumented --magic_docstrings option was added.
3922 For this to work, an undocumented --magic_docstrings option was added.
3916
3923
3917 2002-03-13 Fernando Perez <fperez@colorado.edu>
3924 2002-03-13 Fernando Perez <fperez@colorado.edu>
3918
3925
3919 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3926 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3920 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3927 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3921
3928
3922 2002-03-12 Fernando Perez <fperez@colorado.edu>
3929 2002-03-12 Fernando Perez <fperez@colorado.edu>
3923
3930
3924 * IPython/ultraTB.py (TermColors): changed color escapes again to
3931 * IPython/ultraTB.py (TermColors): changed color escapes again to
3925 fix the (old, reintroduced) line-wrapping bug. Basically, if
3932 fix the (old, reintroduced) line-wrapping bug. Basically, if
3926 \001..\002 aren't given in the color escapes, lines get wrapped
3933 \001..\002 aren't given in the color escapes, lines get wrapped
3927 weirdly. But giving those screws up old xterms and emacs terms. So
3934 weirdly. But giving those screws up old xterms and emacs terms. So
3928 I added some logic for emacs terms to be ok, but I can't identify old
3935 I added some logic for emacs terms to be ok, but I can't identify old
3929 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3936 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3930
3937
3931 2002-03-10 Fernando Perez <fperez@colorado.edu>
3938 2002-03-10 Fernando Perez <fperez@colorado.edu>
3932
3939
3933 * IPython/usage.py (__doc__): Various documentation cleanups and
3940 * IPython/usage.py (__doc__): Various documentation cleanups and
3934 updates, both in usage docstrings and in the manual.
3941 updates, both in usage docstrings and in the manual.
3935
3942
3936 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3943 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3937 handling of caching. Set minimum acceptabe value for having a
3944 handling of caching. Set minimum acceptabe value for having a
3938 cache at 20 values.
3945 cache at 20 values.
3939
3946
3940 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3947 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3941 install_first_time function to a method, renamed it and added an
3948 install_first_time function to a method, renamed it and added an
3942 'upgrade' mode. Now people can update their config directory with
3949 'upgrade' mode. Now people can update their config directory with
3943 a simple command line switch (-upgrade, also new).
3950 a simple command line switch (-upgrade, also new).
3944
3951
3945 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3952 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3946 @file (convenient for automagic users under Python >= 2.2).
3953 @file (convenient for automagic users under Python >= 2.2).
3947 Removed @files (it seemed more like a plural than an abbrev. of
3954 Removed @files (it seemed more like a plural than an abbrev. of
3948 'file show').
3955 'file show').
3949
3956
3950 * IPython/iplib.py (install_first_time): Fixed crash if there were
3957 * IPython/iplib.py (install_first_time): Fixed crash if there were
3951 backup files ('~') in .ipython/ install directory.
3958 backup files ('~') in .ipython/ install directory.
3952
3959
3953 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3960 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3954 system. Things look fine, but these changes are fairly
3961 system. Things look fine, but these changes are fairly
3955 intrusive. Test them for a few days.
3962 intrusive. Test them for a few days.
3956
3963
3957 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3964 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3958 the prompts system. Now all in/out prompt strings are user
3965 the prompts system. Now all in/out prompt strings are user
3959 controllable. This is particularly useful for embedding, as one
3966 controllable. This is particularly useful for embedding, as one
3960 can tag embedded instances with particular prompts.
3967 can tag embedded instances with particular prompts.
3961
3968
3962 Also removed global use of sys.ps1/2, which now allows nested
3969 Also removed global use of sys.ps1/2, which now allows nested
3963 embeddings without any problems. Added command-line options for
3970 embeddings without any problems. Added command-line options for
3964 the prompt strings.
3971 the prompt strings.
3965
3972
3966 2002-03-08 Fernando Perez <fperez@colorado.edu>
3973 2002-03-08 Fernando Perez <fperez@colorado.edu>
3967
3974
3968 * IPython/UserConfig/example-embed-short.py (ipshell): added
3975 * IPython/UserConfig/example-embed-short.py (ipshell): added
3969 example file with the bare minimum code for embedding.
3976 example file with the bare minimum code for embedding.
3970
3977
3971 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3978 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3972 functionality for the embeddable shell to be activated/deactivated
3979 functionality for the embeddable shell to be activated/deactivated
3973 either globally or at each call.
3980 either globally or at each call.
3974
3981
3975 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3982 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3976 rewriting the prompt with '--->' for auto-inputs with proper
3983 rewriting the prompt with '--->' for auto-inputs with proper
3977 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3984 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3978 this is handled by the prompts class itself, as it should.
3985 this is handled by the prompts class itself, as it should.
3979
3986
3980 2002-03-05 Fernando Perez <fperez@colorado.edu>
3987 2002-03-05 Fernando Perez <fperez@colorado.edu>
3981
3988
3982 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3989 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3983 @logstart to avoid name clashes with the math log function.
3990 @logstart to avoid name clashes with the math log function.
3984
3991
3985 * Big updates to X/Emacs section of the manual.
3992 * Big updates to X/Emacs section of the manual.
3986
3993
3987 * Removed ipython_emacs. Milan explained to me how to pass
3994 * Removed ipython_emacs. Milan explained to me how to pass
3988 arguments to ipython through Emacs. Some day I'm going to end up
3995 arguments to ipython through Emacs. Some day I'm going to end up
3989 learning some lisp...
3996 learning some lisp...
3990
3997
3991 2002-03-04 Fernando Perez <fperez@colorado.edu>
3998 2002-03-04 Fernando Perez <fperez@colorado.edu>
3992
3999
3993 * IPython/ipython_emacs: Created script to be used as the
4000 * IPython/ipython_emacs: Created script to be used as the
3994 py-python-command Emacs variable so we can pass IPython
4001 py-python-command Emacs variable so we can pass IPython
3995 parameters. I can't figure out how to tell Emacs directly to pass
4002 parameters. I can't figure out how to tell Emacs directly to pass
3996 parameters to IPython, so a dummy shell script will do it.
4003 parameters to IPython, so a dummy shell script will do it.
3997
4004
3998 Other enhancements made for things to work better under Emacs'
4005 Other enhancements made for things to work better under Emacs'
3999 various types of terminals. Many thanks to Milan Zamazal
4006 various types of terminals. Many thanks to Milan Zamazal
4000 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4007 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4001
4008
4002 2002-03-01 Fernando Perez <fperez@colorado.edu>
4009 2002-03-01 Fernando Perez <fperez@colorado.edu>
4003
4010
4004 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4011 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4005 that loading of readline is now optional. This gives better
4012 that loading of readline is now optional. This gives better
4006 control to emacs users.
4013 control to emacs users.
4007
4014
4008 * IPython/ultraTB.py (__date__): Modified color escape sequences
4015 * IPython/ultraTB.py (__date__): Modified color escape sequences
4009 and now things work fine under xterm and in Emacs' term buffers
4016 and now things work fine under xterm and in Emacs' term buffers
4010 (though not shell ones). Well, in emacs you get colors, but all
4017 (though not shell ones). Well, in emacs you get colors, but all
4011 seem to be 'light' colors (no difference between dark and light
4018 seem to be 'light' colors (no difference between dark and light
4012 ones). But the garbage chars are gone, and also in xterms. It
4019 ones). But the garbage chars are gone, and also in xterms. It
4013 seems that now I'm using 'cleaner' ansi sequences.
4020 seems that now I'm using 'cleaner' ansi sequences.
4014
4021
4015 2002-02-21 Fernando Perez <fperez@colorado.edu>
4022 2002-02-21 Fernando Perez <fperez@colorado.edu>
4016
4023
4017 * Released 0.2.7 (mainly to publish the scoping fix).
4024 * Released 0.2.7 (mainly to publish the scoping fix).
4018
4025
4019 * IPython/Logger.py (Logger.logstate): added. A corresponding
4026 * IPython/Logger.py (Logger.logstate): added. A corresponding
4020 @logstate magic was created.
4027 @logstate magic was created.
4021
4028
4022 * IPython/Magic.py: fixed nested scoping problem under Python
4029 * IPython/Magic.py: fixed nested scoping problem under Python
4023 2.1.x (automagic wasn't working).
4030 2.1.x (automagic wasn't working).
4024
4031
4025 2002-02-20 Fernando Perez <fperez@colorado.edu>
4032 2002-02-20 Fernando Perez <fperez@colorado.edu>
4026
4033
4027 * Released 0.2.6.
4034 * Released 0.2.6.
4028
4035
4029 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4036 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4030 option so that logs can come out without any headers at all.
4037 option so that logs can come out without any headers at all.
4031
4038
4032 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4039 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4033 SciPy.
4040 SciPy.
4034
4041
4035 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4042 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4036 that embedded IPython calls don't require vars() to be explicitly
4043 that embedded IPython calls don't require vars() to be explicitly
4037 passed. Now they are extracted from the caller's frame (code
4044 passed. Now they are extracted from the caller's frame (code
4038 snatched from Eric Jones' weave). Added better documentation to
4045 snatched from Eric Jones' weave). Added better documentation to
4039 the section on embedding and the example file.
4046 the section on embedding and the example file.
4040
4047
4041 * IPython/genutils.py (page): Changed so that under emacs, it just
4048 * IPython/genutils.py (page): Changed so that under emacs, it just
4042 prints the string. You can then page up and down in the emacs
4049 prints the string. You can then page up and down in the emacs
4043 buffer itself. This is how the builtin help() works.
4050 buffer itself. This is how the builtin help() works.
4044
4051
4045 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4052 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4046 macro scoping: macros need to be executed in the user's namespace
4053 macro scoping: macros need to be executed in the user's namespace
4047 to work as if they had been typed by the user.
4054 to work as if they had been typed by the user.
4048
4055
4049 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4056 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4050 execute automatically (no need to type 'exec...'). They then
4057 execute automatically (no need to type 'exec...'). They then
4051 behave like 'true macros'. The printing system was also modified
4058 behave like 'true macros'. The printing system was also modified
4052 for this to work.
4059 for this to work.
4053
4060
4054 2002-02-19 Fernando Perez <fperez@colorado.edu>
4061 2002-02-19 Fernando Perez <fperez@colorado.edu>
4055
4062
4056 * IPython/genutils.py (page_file): new function for paging files
4063 * IPython/genutils.py (page_file): new function for paging files
4057 in an OS-independent way. Also necessary for file viewing to work
4064 in an OS-independent way. Also necessary for file viewing to work
4058 well inside Emacs buffers.
4065 well inside Emacs buffers.
4059 (page): Added checks for being in an emacs buffer.
4066 (page): Added checks for being in an emacs buffer.
4060 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4067 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4061 same bug in iplib.
4068 same bug in iplib.
4062
4069
4063 2002-02-18 Fernando Perez <fperez@colorado.edu>
4070 2002-02-18 Fernando Perez <fperez@colorado.edu>
4064
4071
4065 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4072 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4066 of readline so that IPython can work inside an Emacs buffer.
4073 of readline so that IPython can work inside an Emacs buffer.
4067
4074
4068 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4075 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4069 method signatures (they weren't really bugs, but it looks cleaner
4076 method signatures (they weren't really bugs, but it looks cleaner
4070 and keeps PyChecker happy).
4077 and keeps PyChecker happy).
4071
4078
4072 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4079 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4073 for implementing various user-defined hooks. Currently only
4080 for implementing various user-defined hooks. Currently only
4074 display is done.
4081 display is done.
4075
4082
4076 * IPython/Prompts.py (CachedOutput._display): changed display
4083 * IPython/Prompts.py (CachedOutput._display): changed display
4077 functions so that they can be dynamically changed by users easily.
4084 functions so that they can be dynamically changed by users easily.
4078
4085
4079 * IPython/Extensions/numeric_formats.py (num_display): added an
4086 * IPython/Extensions/numeric_formats.py (num_display): added an
4080 extension for printing NumPy arrays in flexible manners. It
4087 extension for printing NumPy arrays in flexible manners. It
4081 doesn't do anything yet, but all the structure is in
4088 doesn't do anything yet, but all the structure is in
4082 place. Ultimately the plan is to implement output format control
4089 place. Ultimately the plan is to implement output format control
4083 like in Octave.
4090 like in Octave.
4084
4091
4085 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4092 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4086 methods are found at run-time by all the automatic machinery.
4093 methods are found at run-time by all the automatic machinery.
4087
4094
4088 2002-02-17 Fernando Perez <fperez@colorado.edu>
4095 2002-02-17 Fernando Perez <fperez@colorado.edu>
4089
4096
4090 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4097 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4091 whole file a little.
4098 whole file a little.
4092
4099
4093 * ToDo: closed this document. Now there's a new_design.lyx
4100 * ToDo: closed this document. Now there's a new_design.lyx
4094 document for all new ideas. Added making a pdf of it for the
4101 document for all new ideas. Added making a pdf of it for the
4095 end-user distro.
4102 end-user distro.
4096
4103
4097 * IPython/Logger.py (Logger.switch_log): Created this to replace
4104 * IPython/Logger.py (Logger.switch_log): Created this to replace
4098 logon() and logoff(). It also fixes a nasty crash reported by
4105 logon() and logoff(). It also fixes a nasty crash reported by
4099 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4106 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4100
4107
4101 * IPython/iplib.py (complete): got auto-completion to work with
4108 * IPython/iplib.py (complete): got auto-completion to work with
4102 automagic (I had wanted this for a long time).
4109 automagic (I had wanted this for a long time).
4103
4110
4104 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4111 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4105 to @file, since file() is now a builtin and clashes with automagic
4112 to @file, since file() is now a builtin and clashes with automagic
4106 for @file.
4113 for @file.
4107
4114
4108 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4115 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4109 of this was previously in iplib, which had grown to more than 2000
4116 of this was previously in iplib, which had grown to more than 2000
4110 lines, way too long. No new functionality, but it makes managing
4117 lines, way too long. No new functionality, but it makes managing
4111 the code a bit easier.
4118 the code a bit easier.
4112
4119
4113 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4120 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4114 information to crash reports.
4121 information to crash reports.
4115
4122
4116 2002-02-12 Fernando Perez <fperez@colorado.edu>
4123 2002-02-12 Fernando Perez <fperez@colorado.edu>
4117
4124
4118 * Released 0.2.5.
4125 * Released 0.2.5.
4119
4126
4120 2002-02-11 Fernando Perez <fperez@colorado.edu>
4127 2002-02-11 Fernando Perez <fperez@colorado.edu>
4121
4128
4122 * Wrote a relatively complete Windows installer. It puts
4129 * Wrote a relatively complete Windows installer. It puts
4123 everything in place, creates Start Menu entries and fixes the
4130 everything in place, creates Start Menu entries and fixes the
4124 color issues. Nothing fancy, but it works.
4131 color issues. Nothing fancy, but it works.
4125
4132
4126 2002-02-10 Fernando Perez <fperez@colorado.edu>
4133 2002-02-10 Fernando Perez <fperez@colorado.edu>
4127
4134
4128 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4135 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4129 os.path.expanduser() call so that we can type @run ~/myfile.py and
4136 os.path.expanduser() call so that we can type @run ~/myfile.py and
4130 have thigs work as expected.
4137 have thigs work as expected.
4131
4138
4132 * IPython/genutils.py (page): fixed exception handling so things
4139 * IPython/genutils.py (page): fixed exception handling so things
4133 work both in Unix and Windows correctly. Quitting a pager triggers
4140 work both in Unix and Windows correctly. Quitting a pager triggers
4134 an IOError/broken pipe in Unix, and in windows not finding a pager
4141 an IOError/broken pipe in Unix, and in windows not finding a pager
4135 is also an IOError, so I had to actually look at the return value
4142 is also an IOError, so I had to actually look at the return value
4136 of the exception, not just the exception itself. Should be ok now.
4143 of the exception, not just the exception itself. Should be ok now.
4137
4144
4138 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4145 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4139 modified to allow case-insensitive color scheme changes.
4146 modified to allow case-insensitive color scheme changes.
4140
4147
4141 2002-02-09 Fernando Perez <fperez@colorado.edu>
4148 2002-02-09 Fernando Perez <fperez@colorado.edu>
4142
4149
4143 * IPython/genutils.py (native_line_ends): new function to leave
4150 * IPython/genutils.py (native_line_ends): new function to leave
4144 user config files with os-native line-endings.
4151 user config files with os-native line-endings.
4145
4152
4146 * README and manual updates.
4153 * README and manual updates.
4147
4154
4148 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4155 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4149 instead of StringType to catch Unicode strings.
4156 instead of StringType to catch Unicode strings.
4150
4157
4151 * IPython/genutils.py (filefind): fixed bug for paths with
4158 * IPython/genutils.py (filefind): fixed bug for paths with
4152 embedded spaces (very common in Windows).
4159 embedded spaces (very common in Windows).
4153
4160
4154 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4161 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4155 files under Windows, so that they get automatically associated
4162 files under Windows, so that they get automatically associated
4156 with a text editor. Windows makes it a pain to handle
4163 with a text editor. Windows makes it a pain to handle
4157 extension-less files.
4164 extension-less files.
4158
4165
4159 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4166 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4160 warning about readline only occur for Posix. In Windows there's no
4167 warning about readline only occur for Posix. In Windows there's no
4161 way to get readline, so why bother with the warning.
4168 way to get readline, so why bother with the warning.
4162
4169
4163 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4170 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4164 for __str__ instead of dir(self), since dir() changed in 2.2.
4171 for __str__ instead of dir(self), since dir() changed in 2.2.
4165
4172
4166 * Ported to Windows! Tested on XP, I suspect it should work fine
4173 * Ported to Windows! Tested on XP, I suspect it should work fine
4167 on NT/2000, but I don't think it will work on 98 et al. That
4174 on NT/2000, but I don't think it will work on 98 et al. That
4168 series of Windows is such a piece of junk anyway that I won't try
4175 series of Windows is such a piece of junk anyway that I won't try
4169 porting it there. The XP port was straightforward, showed a few
4176 porting it there. The XP port was straightforward, showed a few
4170 bugs here and there (fixed all), in particular some string
4177 bugs here and there (fixed all), in particular some string
4171 handling stuff which required considering Unicode strings (which
4178 handling stuff which required considering Unicode strings (which
4172 Windows uses). This is good, but hasn't been too tested :) No
4179 Windows uses). This is good, but hasn't been too tested :) No
4173 fancy installer yet, I'll put a note in the manual so people at
4180 fancy installer yet, I'll put a note in the manual so people at
4174 least make manually a shortcut.
4181 least make manually a shortcut.
4175
4182
4176 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4183 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4177 into a single one, "colors". This now controls both prompt and
4184 into a single one, "colors". This now controls both prompt and
4178 exception color schemes, and can be changed both at startup
4185 exception color schemes, and can be changed both at startup
4179 (either via command-line switches or via ipythonrc files) and at
4186 (either via command-line switches or via ipythonrc files) and at
4180 runtime, with @colors.
4187 runtime, with @colors.
4181 (Magic.magic_run): renamed @prun to @run and removed the old
4188 (Magic.magic_run): renamed @prun to @run and removed the old
4182 @run. The two were too similar to warrant keeping both.
4189 @run. The two were too similar to warrant keeping both.
4183
4190
4184 2002-02-03 Fernando Perez <fperez@colorado.edu>
4191 2002-02-03 Fernando Perez <fperez@colorado.edu>
4185
4192
4186 * IPython/iplib.py (install_first_time): Added comment on how to
4193 * IPython/iplib.py (install_first_time): Added comment on how to
4187 configure the color options for first-time users. Put a <return>
4194 configure the color options for first-time users. Put a <return>
4188 request at the end so that small-terminal users get a chance to
4195 request at the end so that small-terminal users get a chance to
4189 read the startup info.
4196 read the startup info.
4190
4197
4191 2002-01-23 Fernando Perez <fperez@colorado.edu>
4198 2002-01-23 Fernando Perez <fperez@colorado.edu>
4192
4199
4193 * IPython/iplib.py (CachedOutput.update): Changed output memory
4200 * IPython/iplib.py (CachedOutput.update): Changed output memory
4194 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4201 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4195 input history we still use _i. Did this b/c these variable are
4202 input history we still use _i. Did this b/c these variable are
4196 very commonly used in interactive work, so the less we need to
4203 very commonly used in interactive work, so the less we need to
4197 type the better off we are.
4204 type the better off we are.
4198 (Magic.magic_prun): updated @prun to better handle the namespaces
4205 (Magic.magic_prun): updated @prun to better handle the namespaces
4199 the file will run in, including a fix for __name__ not being set
4206 the file will run in, including a fix for __name__ not being set
4200 before.
4207 before.
4201
4208
4202 2002-01-20 Fernando Perez <fperez@colorado.edu>
4209 2002-01-20 Fernando Perez <fperez@colorado.edu>
4203
4210
4204 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4211 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4205 extra garbage for Python 2.2. Need to look more carefully into
4212 extra garbage for Python 2.2. Need to look more carefully into
4206 this later.
4213 this later.
4207
4214
4208 2002-01-19 Fernando Perez <fperez@colorado.edu>
4215 2002-01-19 Fernando Perez <fperez@colorado.edu>
4209
4216
4210 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4217 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4211 display SyntaxError exceptions properly formatted when they occur
4218 display SyntaxError exceptions properly formatted when they occur
4212 (they can be triggered by imported code).
4219 (they can be triggered by imported code).
4213
4220
4214 2002-01-18 Fernando Perez <fperez@colorado.edu>
4221 2002-01-18 Fernando Perez <fperez@colorado.edu>
4215
4222
4216 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4223 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4217 SyntaxError exceptions are reported nicely formatted, instead of
4224 SyntaxError exceptions are reported nicely formatted, instead of
4218 spitting out only offset information as before.
4225 spitting out only offset information as before.
4219 (Magic.magic_prun): Added the @prun function for executing
4226 (Magic.magic_prun): Added the @prun function for executing
4220 programs with command line args inside IPython.
4227 programs with command line args inside IPython.
4221
4228
4222 2002-01-16 Fernando Perez <fperez@colorado.edu>
4229 2002-01-16 Fernando Perez <fperez@colorado.edu>
4223
4230
4224 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4231 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4225 to *not* include the last item given in a range. This brings their
4232 to *not* include the last item given in a range. This brings their
4226 behavior in line with Python's slicing:
4233 behavior in line with Python's slicing:
4227 a[n1:n2] -> a[n1]...a[n2-1]
4234 a[n1:n2] -> a[n1]...a[n2-1]
4228 It may be a bit less convenient, but I prefer to stick to Python's
4235 It may be a bit less convenient, but I prefer to stick to Python's
4229 conventions *everywhere*, so users never have to wonder.
4236 conventions *everywhere*, so users never have to wonder.
4230 (Magic.magic_macro): Added @macro function to ease the creation of
4237 (Magic.magic_macro): Added @macro function to ease the creation of
4231 macros.
4238 macros.
4232
4239
4233 2002-01-05 Fernando Perez <fperez@colorado.edu>
4240 2002-01-05 Fernando Perez <fperez@colorado.edu>
4234
4241
4235 * Released 0.2.4.
4242 * Released 0.2.4.
4236
4243
4237 * IPython/iplib.py (Magic.magic_pdef):
4244 * IPython/iplib.py (Magic.magic_pdef):
4238 (InteractiveShell.safe_execfile): report magic lines and error
4245 (InteractiveShell.safe_execfile): report magic lines and error
4239 lines without line numbers so one can easily copy/paste them for
4246 lines without line numbers so one can easily copy/paste them for
4240 re-execution.
4247 re-execution.
4241
4248
4242 * Updated manual with recent changes.
4249 * Updated manual with recent changes.
4243
4250
4244 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4251 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4245 docstring printing when class? is called. Very handy for knowing
4252 docstring printing when class? is called. Very handy for knowing
4246 how to create class instances (as long as __init__ is well
4253 how to create class instances (as long as __init__ is well
4247 documented, of course :)
4254 documented, of course :)
4248 (Magic.magic_doc): print both class and constructor docstrings.
4255 (Magic.magic_doc): print both class and constructor docstrings.
4249 (Magic.magic_pdef): give constructor info if passed a class and
4256 (Magic.magic_pdef): give constructor info if passed a class and
4250 __call__ info for callable object instances.
4257 __call__ info for callable object instances.
4251
4258
4252 2002-01-04 Fernando Perez <fperez@colorado.edu>
4259 2002-01-04 Fernando Perez <fperez@colorado.edu>
4253
4260
4254 * Made deep_reload() off by default. It doesn't always work
4261 * Made deep_reload() off by default. It doesn't always work
4255 exactly as intended, so it's probably safer to have it off. It's
4262 exactly as intended, so it's probably safer to have it off. It's
4256 still available as dreload() anyway, so nothing is lost.
4263 still available as dreload() anyway, so nothing is lost.
4257
4264
4258 2002-01-02 Fernando Perez <fperez@colorado.edu>
4265 2002-01-02 Fernando Perez <fperez@colorado.edu>
4259
4266
4260 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4267 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4261 so I wanted an updated release).
4268 so I wanted an updated release).
4262
4269
4263 2001-12-27 Fernando Perez <fperez@colorado.edu>
4270 2001-12-27 Fernando Perez <fperez@colorado.edu>
4264
4271
4265 * IPython/iplib.py (InteractiveShell.interact): Added the original
4272 * IPython/iplib.py (InteractiveShell.interact): Added the original
4266 code from 'code.py' for this module in order to change the
4273 code from 'code.py' for this module in order to change the
4267 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4274 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4268 the history cache would break when the user hit Ctrl-C, and
4275 the history cache would break when the user hit Ctrl-C, and
4269 interact() offers no way to add any hooks to it.
4276 interact() offers no way to add any hooks to it.
4270
4277
4271 2001-12-23 Fernando Perez <fperez@colorado.edu>
4278 2001-12-23 Fernando Perez <fperez@colorado.edu>
4272
4279
4273 * setup.py: added check for 'MANIFEST' before trying to remove
4280 * setup.py: added check for 'MANIFEST' before trying to remove
4274 it. Thanks to Sean Reifschneider.
4281 it. Thanks to Sean Reifschneider.
4275
4282
4276 2001-12-22 Fernando Perez <fperez@colorado.edu>
4283 2001-12-22 Fernando Perez <fperez@colorado.edu>
4277
4284
4278 * Released 0.2.2.
4285 * Released 0.2.2.
4279
4286
4280 * Finished (reasonably) writing the manual. Later will add the
4287 * Finished (reasonably) writing the manual. Later will add the
4281 python-standard navigation stylesheets, but for the time being
4288 python-standard navigation stylesheets, but for the time being
4282 it's fairly complete. Distribution will include html and pdf
4289 it's fairly complete. Distribution will include html and pdf
4283 versions.
4290 versions.
4284
4291
4285 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4292 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4286 (MayaVi author).
4293 (MayaVi author).
4287
4294
4288 2001-12-21 Fernando Perez <fperez@colorado.edu>
4295 2001-12-21 Fernando Perez <fperez@colorado.edu>
4289
4296
4290 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4297 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4291 good public release, I think (with the manual and the distutils
4298 good public release, I think (with the manual and the distutils
4292 installer). The manual can use some work, but that can go
4299 installer). The manual can use some work, but that can go
4293 slowly. Otherwise I think it's quite nice for end users. Next
4300 slowly. Otherwise I think it's quite nice for end users. Next
4294 summer, rewrite the guts of it...
4301 summer, rewrite the guts of it...
4295
4302
4296 * Changed format of ipythonrc files to use whitespace as the
4303 * Changed format of ipythonrc files to use whitespace as the
4297 separator instead of an explicit '='. Cleaner.
4304 separator instead of an explicit '='. Cleaner.
4298
4305
4299 2001-12-20 Fernando Perez <fperez@colorado.edu>
4306 2001-12-20 Fernando Perez <fperez@colorado.edu>
4300
4307
4301 * Started a manual in LyX. For now it's just a quick merge of the
4308 * Started a manual in LyX. For now it's just a quick merge of the
4302 various internal docstrings and READMEs. Later it may grow into a
4309 various internal docstrings and READMEs. Later it may grow into a
4303 nice, full-blown manual.
4310 nice, full-blown manual.
4304
4311
4305 * Set up a distutils based installer. Installation should now be
4312 * Set up a distutils based installer. Installation should now be
4306 trivially simple for end-users.
4313 trivially simple for end-users.
4307
4314
4308 2001-12-11 Fernando Perez <fperez@colorado.edu>
4315 2001-12-11 Fernando Perez <fperez@colorado.edu>
4309
4316
4310 * Released 0.2.0. First public release, announced it at
4317 * Released 0.2.0. First public release, announced it at
4311 comp.lang.python. From now on, just bugfixes...
4318 comp.lang.python. From now on, just bugfixes...
4312
4319
4313 * Went through all the files, set copyright/license notices and
4320 * Went through all the files, set copyright/license notices and
4314 cleaned up things. Ready for release.
4321 cleaned up things. Ready for release.
4315
4322
4316 2001-12-10 Fernando Perez <fperez@colorado.edu>
4323 2001-12-10 Fernando Perez <fperez@colorado.edu>
4317
4324
4318 * Changed the first-time installer not to use tarfiles. It's more
4325 * Changed the first-time installer not to use tarfiles. It's more
4319 robust now and less unix-dependent. Also makes it easier for
4326 robust now and less unix-dependent. Also makes it easier for
4320 people to later upgrade versions.
4327 people to later upgrade versions.
4321
4328
4322 * Changed @exit to @abort to reflect the fact that it's pretty
4329 * Changed @exit to @abort to reflect the fact that it's pretty
4323 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4330 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4324 becomes significant only when IPyhton is embedded: in that case,
4331 becomes significant only when IPyhton is embedded: in that case,
4325 C-D closes IPython only, but @abort kills the enclosing program
4332 C-D closes IPython only, but @abort kills the enclosing program
4326 too (unless it had called IPython inside a try catching
4333 too (unless it had called IPython inside a try catching
4327 SystemExit).
4334 SystemExit).
4328
4335
4329 * Created Shell module which exposes the actuall IPython Shell
4336 * Created Shell module which exposes the actuall IPython Shell
4330 classes, currently the normal and the embeddable one. This at
4337 classes, currently the normal and the embeddable one. This at
4331 least offers a stable interface we won't need to change when
4338 least offers a stable interface we won't need to change when
4332 (later) the internals are rewritten. That rewrite will be confined
4339 (later) the internals are rewritten. That rewrite will be confined
4333 to iplib and ipmaker, but the Shell interface should remain as is.
4340 to iplib and ipmaker, but the Shell interface should remain as is.
4334
4341
4335 * Added embed module which offers an embeddable IPShell object,
4342 * Added embed module which offers an embeddable IPShell object,
4336 useful to fire up IPython *inside* a running program. Great for
4343 useful to fire up IPython *inside* a running program. Great for
4337 debugging or dynamical data analysis.
4344 debugging or dynamical data analysis.
4338
4345
4339 2001-12-08 Fernando Perez <fperez@colorado.edu>
4346 2001-12-08 Fernando Perez <fperez@colorado.edu>
4340
4347
4341 * Fixed small bug preventing seeing info from methods of defined
4348 * Fixed small bug preventing seeing info from methods of defined
4342 objects (incorrect namespace in _ofind()).
4349 objects (incorrect namespace in _ofind()).
4343
4350
4344 * Documentation cleanup. Moved the main usage docstrings to a
4351 * Documentation cleanup. Moved the main usage docstrings to a
4345 separate file, usage.py (cleaner to maintain, and hopefully in the
4352 separate file, usage.py (cleaner to maintain, and hopefully in the
4346 future some perlpod-like way of producing interactive, man and
4353 future some perlpod-like way of producing interactive, man and
4347 html docs out of it will be found).
4354 html docs out of it will be found).
4348
4355
4349 * Added @profile to see your profile at any time.
4356 * Added @profile to see your profile at any time.
4350
4357
4351 * Added @p as an alias for 'print'. It's especially convenient if
4358 * Added @p as an alias for 'print'. It's especially convenient if
4352 using automagic ('p x' prints x).
4359 using automagic ('p x' prints x).
4353
4360
4354 * Small cleanups and fixes after a pychecker run.
4361 * Small cleanups and fixes after a pychecker run.
4355
4362
4356 * Changed the @cd command to handle @cd - and @cd -<n> for
4363 * Changed the @cd command to handle @cd - and @cd -<n> for
4357 visiting any directory in _dh.
4364 visiting any directory in _dh.
4358
4365
4359 * Introduced _dh, a history of visited directories. @dhist prints
4366 * Introduced _dh, a history of visited directories. @dhist prints
4360 it out with numbers.
4367 it out with numbers.
4361
4368
4362 2001-12-07 Fernando Perez <fperez@colorado.edu>
4369 2001-12-07 Fernando Perez <fperez@colorado.edu>
4363
4370
4364 * Released 0.1.22
4371 * Released 0.1.22
4365
4372
4366 * Made initialization a bit more robust against invalid color
4373 * Made initialization a bit more robust against invalid color
4367 options in user input (exit, not traceback-crash).
4374 options in user input (exit, not traceback-crash).
4368
4375
4369 * Changed the bug crash reporter to write the report only in the
4376 * Changed the bug crash reporter to write the report only in the
4370 user's .ipython directory. That way IPython won't litter people's
4377 user's .ipython directory. That way IPython won't litter people's
4371 hard disks with crash files all over the place. Also print on
4378 hard disks with crash files all over the place. Also print on
4372 screen the necessary mail command.
4379 screen the necessary mail command.
4373
4380
4374 * With the new ultraTB, implemented LightBG color scheme for light
4381 * With the new ultraTB, implemented LightBG color scheme for light
4375 background terminals. A lot of people like white backgrounds, so I
4382 background terminals. A lot of people like white backgrounds, so I
4376 guess we should at least give them something readable.
4383 guess we should at least give them something readable.
4377
4384
4378 2001-12-06 Fernando Perez <fperez@colorado.edu>
4385 2001-12-06 Fernando Perez <fperez@colorado.edu>
4379
4386
4380 * Modified the structure of ultraTB. Now there's a proper class
4387 * Modified the structure of ultraTB. Now there's a proper class
4381 for tables of color schemes which allow adding schemes easily and
4388 for tables of color schemes which allow adding schemes easily and
4382 switching the active scheme without creating a new instance every
4389 switching the active scheme without creating a new instance every
4383 time (which was ridiculous). The syntax for creating new schemes
4390 time (which was ridiculous). The syntax for creating new schemes
4384 is also cleaner. I think ultraTB is finally done, with a clean
4391 is also cleaner. I think ultraTB is finally done, with a clean
4385 class structure. Names are also much cleaner (now there's proper
4392 class structure. Names are also much cleaner (now there's proper
4386 color tables, no need for every variable to also have 'color' in
4393 color tables, no need for every variable to also have 'color' in
4387 its name).
4394 its name).
4388
4395
4389 * Broke down genutils into separate files. Now genutils only
4396 * Broke down genutils into separate files. Now genutils only
4390 contains utility functions, and classes have been moved to their
4397 contains utility functions, and classes have been moved to their
4391 own files (they had enough independent functionality to warrant
4398 own files (they had enough independent functionality to warrant
4392 it): ConfigLoader, OutputTrap, Struct.
4399 it): ConfigLoader, OutputTrap, Struct.
4393
4400
4394 2001-12-05 Fernando Perez <fperez@colorado.edu>
4401 2001-12-05 Fernando Perez <fperez@colorado.edu>
4395
4402
4396 * IPython turns 21! Released version 0.1.21, as a candidate for
4403 * IPython turns 21! Released version 0.1.21, as a candidate for
4397 public consumption. If all goes well, release in a few days.
4404 public consumption. If all goes well, release in a few days.
4398
4405
4399 * Fixed path bug (files in Extensions/ directory wouldn't be found
4406 * Fixed path bug (files in Extensions/ directory wouldn't be found
4400 unless IPython/ was explicitly in sys.path).
4407 unless IPython/ was explicitly in sys.path).
4401
4408
4402 * Extended the FlexCompleter class as MagicCompleter to allow
4409 * Extended the FlexCompleter class as MagicCompleter to allow
4403 completion of @-starting lines.
4410 completion of @-starting lines.
4404
4411
4405 * Created __release__.py file as a central repository for release
4412 * Created __release__.py file as a central repository for release
4406 info that other files can read from.
4413 info that other files can read from.
4407
4414
4408 * Fixed small bug in logging: when logging was turned on in
4415 * Fixed small bug in logging: when logging was turned on in
4409 mid-session, old lines with special meanings (!@?) were being
4416 mid-session, old lines with special meanings (!@?) were being
4410 logged without the prepended comment, which is necessary since
4417 logged without the prepended comment, which is necessary since
4411 they are not truly valid python syntax. This should make session
4418 they are not truly valid python syntax. This should make session
4412 restores produce less errors.
4419 restores produce less errors.
4413
4420
4414 * The namespace cleanup forced me to make a FlexCompleter class
4421 * The namespace cleanup forced me to make a FlexCompleter class
4415 which is nothing but a ripoff of rlcompleter, but with selectable
4422 which is nothing but a ripoff of rlcompleter, but with selectable
4416 namespace (rlcompleter only works in __main__.__dict__). I'll try
4423 namespace (rlcompleter only works in __main__.__dict__). I'll try
4417 to submit a note to the authors to see if this change can be
4424 to submit a note to the authors to see if this change can be
4418 incorporated in future rlcompleter releases (Dec.6: done)
4425 incorporated in future rlcompleter releases (Dec.6: done)
4419
4426
4420 * More fixes to namespace handling. It was a mess! Now all
4427 * More fixes to namespace handling. It was a mess! Now all
4421 explicit references to __main__.__dict__ are gone (except when
4428 explicit references to __main__.__dict__ are gone (except when
4422 really needed) and everything is handled through the namespace
4429 really needed) and everything is handled through the namespace
4423 dicts in the IPython instance. We seem to be getting somewhere
4430 dicts in the IPython instance. We seem to be getting somewhere
4424 with this, finally...
4431 with this, finally...
4425
4432
4426 * Small documentation updates.
4433 * Small documentation updates.
4427
4434
4428 * Created the Extensions directory under IPython (with an
4435 * Created the Extensions directory under IPython (with an
4429 __init__.py). Put the PhysicalQ stuff there. This directory should
4436 __init__.py). Put the PhysicalQ stuff there. This directory should
4430 be used for all special-purpose extensions.
4437 be used for all special-purpose extensions.
4431
4438
4432 * File renaming:
4439 * File renaming:
4433 ipythonlib --> ipmaker
4440 ipythonlib --> ipmaker
4434 ipplib --> iplib
4441 ipplib --> iplib
4435 This makes a bit more sense in terms of what these files actually do.
4442 This makes a bit more sense in terms of what these files actually do.
4436
4443
4437 * Moved all the classes and functions in ipythonlib to ipplib, so
4444 * Moved all the classes and functions in ipythonlib to ipplib, so
4438 now ipythonlib only has make_IPython(). This will ease up its
4445 now ipythonlib only has make_IPython(). This will ease up its
4439 splitting in smaller functional chunks later.
4446 splitting in smaller functional chunks later.
4440
4447
4441 * Cleaned up (done, I think) output of @whos. Better column
4448 * Cleaned up (done, I think) output of @whos. Better column
4442 formatting, and now shows str(var) for as much as it can, which is
4449 formatting, and now shows str(var) for as much as it can, which is
4443 typically what one gets with a 'print var'.
4450 typically what one gets with a 'print var'.
4444
4451
4445 2001-12-04 Fernando Perez <fperez@colorado.edu>
4452 2001-12-04 Fernando Perez <fperez@colorado.edu>
4446
4453
4447 * Fixed namespace problems. Now builtin/IPyhton/user names get
4454 * Fixed namespace problems. Now builtin/IPyhton/user names get
4448 properly reported in their namespace. Internal namespace handling
4455 properly reported in their namespace. Internal namespace handling
4449 is finally getting decent (not perfect yet, but much better than
4456 is finally getting decent (not perfect yet, but much better than
4450 the ad-hoc mess we had).
4457 the ad-hoc mess we had).
4451
4458
4452 * Removed -exit option. If people just want to run a python
4459 * Removed -exit option. If people just want to run a python
4453 script, that's what the normal interpreter is for. Less
4460 script, that's what the normal interpreter is for. Less
4454 unnecessary options, less chances for bugs.
4461 unnecessary options, less chances for bugs.
4455
4462
4456 * Added a crash handler which generates a complete post-mortem if
4463 * Added a crash handler which generates a complete post-mortem if
4457 IPython crashes. This will help a lot in tracking bugs down the
4464 IPython crashes. This will help a lot in tracking bugs down the
4458 road.
4465 road.
4459
4466
4460 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4467 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4461 which were boud to functions being reassigned would bypass the
4468 which were boud to functions being reassigned would bypass the
4462 logger, breaking the sync of _il with the prompt counter. This
4469 logger, breaking the sync of _il with the prompt counter. This
4463 would then crash IPython later when a new line was logged.
4470 would then crash IPython later when a new line was logged.
4464
4471
4465 2001-12-02 Fernando Perez <fperez@colorado.edu>
4472 2001-12-02 Fernando Perez <fperez@colorado.edu>
4466
4473
4467 * Made IPython a package. This means people don't have to clutter
4474 * Made IPython a package. This means people don't have to clutter
4468 their sys.path with yet another directory. Changed the INSTALL
4475 their sys.path with yet another directory. Changed the INSTALL
4469 file accordingly.
4476 file accordingly.
4470
4477
4471 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4478 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4472 sorts its output (so @who shows it sorted) and @whos formats the
4479 sorts its output (so @who shows it sorted) and @whos formats the
4473 table according to the width of the first column. Nicer, easier to
4480 table according to the width of the first column. Nicer, easier to
4474 read. Todo: write a generic table_format() which takes a list of
4481 read. Todo: write a generic table_format() which takes a list of
4475 lists and prints it nicely formatted, with optional row/column
4482 lists and prints it nicely formatted, with optional row/column
4476 separators and proper padding and justification.
4483 separators and proper padding and justification.
4477
4484
4478 * Released 0.1.20
4485 * Released 0.1.20
4479
4486
4480 * Fixed bug in @log which would reverse the inputcache list (a
4487 * Fixed bug in @log which would reverse the inputcache list (a
4481 copy operation was missing).
4488 copy operation was missing).
4482
4489
4483 * Code cleanup. @config was changed to use page(). Better, since
4490 * Code cleanup. @config was changed to use page(). Better, since
4484 its output is always quite long.
4491 its output is always quite long.
4485
4492
4486 * Itpl is back as a dependency. I was having too many problems
4493 * Itpl is back as a dependency. I was having too many problems
4487 getting the parametric aliases to work reliably, and it's just
4494 getting the parametric aliases to work reliably, and it's just
4488 easier to code weird string operations with it than playing %()s
4495 easier to code weird string operations with it than playing %()s
4489 games. It's only ~6k, so I don't think it's too big a deal.
4496 games. It's only ~6k, so I don't think it's too big a deal.
4490
4497
4491 * Found (and fixed) a very nasty bug with history. !lines weren't
4498 * Found (and fixed) a very nasty bug with history. !lines weren't
4492 getting cached, and the out of sync caches would crash
4499 getting cached, and the out of sync caches would crash
4493 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4500 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4494 division of labor a bit better. Bug fixed, cleaner structure.
4501 division of labor a bit better. Bug fixed, cleaner structure.
4495
4502
4496 2001-12-01 Fernando Perez <fperez@colorado.edu>
4503 2001-12-01 Fernando Perez <fperez@colorado.edu>
4497
4504
4498 * Released 0.1.19
4505 * Released 0.1.19
4499
4506
4500 * Added option -n to @hist to prevent line number printing. Much
4507 * Added option -n to @hist to prevent line number printing. Much
4501 easier to copy/paste code this way.
4508 easier to copy/paste code this way.
4502
4509
4503 * Created global _il to hold the input list. Allows easy
4510 * Created global _il to hold the input list. Allows easy
4504 re-execution of blocks of code by slicing it (inspired by Janko's
4511 re-execution of blocks of code by slicing it (inspired by Janko's
4505 comment on 'macros').
4512 comment on 'macros').
4506
4513
4507 * Small fixes and doc updates.
4514 * Small fixes and doc updates.
4508
4515
4509 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4516 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4510 much too fragile with automagic. Handles properly multi-line
4517 much too fragile with automagic. Handles properly multi-line
4511 statements and takes parameters.
4518 statements and takes parameters.
4512
4519
4513 2001-11-30 Fernando Perez <fperez@colorado.edu>
4520 2001-11-30 Fernando Perez <fperez@colorado.edu>
4514
4521
4515 * Version 0.1.18 released.
4522 * Version 0.1.18 released.
4516
4523
4517 * Fixed nasty namespace bug in initial module imports.
4524 * Fixed nasty namespace bug in initial module imports.
4518
4525
4519 * Added copyright/license notes to all code files (except
4526 * Added copyright/license notes to all code files (except
4520 DPyGetOpt). For the time being, LGPL. That could change.
4527 DPyGetOpt). For the time being, LGPL. That could change.
4521
4528
4522 * Rewrote a much nicer README, updated INSTALL, cleaned up
4529 * Rewrote a much nicer README, updated INSTALL, cleaned up
4523 ipythonrc-* samples.
4530 ipythonrc-* samples.
4524
4531
4525 * Overall code/documentation cleanup. Basically ready for
4532 * Overall code/documentation cleanup. Basically ready for
4526 release. Only remaining thing: licence decision (LGPL?).
4533 release. Only remaining thing: licence decision (LGPL?).
4527
4534
4528 * Converted load_config to a class, ConfigLoader. Now recursion
4535 * Converted load_config to a class, ConfigLoader. Now recursion
4529 control is better organized. Doesn't include the same file twice.
4536 control is better organized. Doesn't include the same file twice.
4530
4537
4531 2001-11-29 Fernando Perez <fperez@colorado.edu>
4538 2001-11-29 Fernando Perez <fperez@colorado.edu>
4532
4539
4533 * Got input history working. Changed output history variables from
4540 * Got input history working. Changed output history variables from
4534 _p to _o so that _i is for input and _o for output. Just cleaner
4541 _p to _o so that _i is for input and _o for output. Just cleaner
4535 convention.
4542 convention.
4536
4543
4537 * Implemented parametric aliases. This pretty much allows the
4544 * Implemented parametric aliases. This pretty much allows the
4538 alias system to offer full-blown shell convenience, I think.
4545 alias system to offer full-blown shell convenience, I think.
4539
4546
4540 * Version 0.1.17 released, 0.1.18 opened.
4547 * Version 0.1.17 released, 0.1.18 opened.
4541
4548
4542 * dot_ipython/ipythonrc (alias): added documentation.
4549 * dot_ipython/ipythonrc (alias): added documentation.
4543 (xcolor): Fixed small bug (xcolors -> xcolor)
4550 (xcolor): Fixed small bug (xcolors -> xcolor)
4544
4551
4545 * Changed the alias system. Now alias is a magic command to define
4552 * Changed the alias system. Now alias is a magic command to define
4546 aliases just like the shell. Rationale: the builtin magics should
4553 aliases just like the shell. Rationale: the builtin magics should
4547 be there for things deeply connected to IPython's
4554 be there for things deeply connected to IPython's
4548 architecture. And this is a much lighter system for what I think
4555 architecture. And this is a much lighter system for what I think
4549 is the really important feature: allowing users to define quickly
4556 is the really important feature: allowing users to define quickly
4550 magics that will do shell things for them, so they can customize
4557 magics that will do shell things for them, so they can customize
4551 IPython easily to match their work habits. If someone is really
4558 IPython easily to match their work habits. If someone is really
4552 desperate to have another name for a builtin alias, they can
4559 desperate to have another name for a builtin alias, they can
4553 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4560 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4554 works.
4561 works.
4555
4562
4556 2001-11-28 Fernando Perez <fperez@colorado.edu>
4563 2001-11-28 Fernando Perez <fperez@colorado.edu>
4557
4564
4558 * Changed @file so that it opens the source file at the proper
4565 * Changed @file so that it opens the source file at the proper
4559 line. Since it uses less, if your EDITOR environment is
4566 line. Since it uses less, if your EDITOR environment is
4560 configured, typing v will immediately open your editor of choice
4567 configured, typing v will immediately open your editor of choice
4561 right at the line where the object is defined. Not as quick as
4568 right at the line where the object is defined. Not as quick as
4562 having a direct @edit command, but for all intents and purposes it
4569 having a direct @edit command, but for all intents and purposes it
4563 works. And I don't have to worry about writing @edit to deal with
4570 works. And I don't have to worry about writing @edit to deal with
4564 all the editors, less does that.
4571 all the editors, less does that.
4565
4572
4566 * Version 0.1.16 released, 0.1.17 opened.
4573 * Version 0.1.16 released, 0.1.17 opened.
4567
4574
4568 * Fixed some nasty bugs in the page/page_dumb combo that could
4575 * Fixed some nasty bugs in the page/page_dumb combo that could
4569 crash IPython.
4576 crash IPython.
4570
4577
4571 2001-11-27 Fernando Perez <fperez@colorado.edu>
4578 2001-11-27 Fernando Perez <fperez@colorado.edu>
4572
4579
4573 * Version 0.1.15 released, 0.1.16 opened.
4580 * Version 0.1.15 released, 0.1.16 opened.
4574
4581
4575 * Finally got ? and ?? to work for undefined things: now it's
4582 * Finally got ? and ?? to work for undefined things: now it's
4576 possible to type {}.get? and get information about the get method
4583 possible to type {}.get? and get information about the get method
4577 of dicts, or os.path? even if only os is defined (so technically
4584 of dicts, or os.path? even if only os is defined (so technically
4578 os.path isn't). Works at any level. For example, after import os,
4585 os.path isn't). Works at any level. For example, after import os,
4579 os?, os.path?, os.path.abspath? all work. This is great, took some
4586 os?, os.path?, os.path.abspath? all work. This is great, took some
4580 work in _ofind.
4587 work in _ofind.
4581
4588
4582 * Fixed more bugs with logging. The sanest way to do it was to add
4589 * Fixed more bugs with logging. The sanest way to do it was to add
4583 to @log a 'mode' parameter. Killed two in one shot (this mode
4590 to @log a 'mode' parameter. Killed two in one shot (this mode
4584 option was a request of Janko's). I think it's finally clean
4591 option was a request of Janko's). I think it's finally clean
4585 (famous last words).
4592 (famous last words).
4586
4593
4587 * Added a page_dumb() pager which does a decent job of paging on
4594 * Added a page_dumb() pager which does a decent job of paging on
4588 screen, if better things (like less) aren't available. One less
4595 screen, if better things (like less) aren't available. One less
4589 unix dependency (someday maybe somebody will port this to
4596 unix dependency (someday maybe somebody will port this to
4590 windows).
4597 windows).
4591
4598
4592 * Fixed problem in magic_log: would lock of logging out if log
4599 * Fixed problem in magic_log: would lock of logging out if log
4593 creation failed (because it would still think it had succeeded).
4600 creation failed (because it would still think it had succeeded).
4594
4601
4595 * Improved the page() function using curses to auto-detect screen
4602 * Improved the page() function using curses to auto-detect screen
4596 size. Now it can make a much better decision on whether to print
4603 size. Now it can make a much better decision on whether to print
4597 or page a string. Option screen_length was modified: a value 0
4604 or page a string. Option screen_length was modified: a value 0
4598 means auto-detect, and that's the default now.
4605 means auto-detect, and that's the default now.
4599
4606
4600 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4607 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4601 go out. I'll test it for a few days, then talk to Janko about
4608 go out. I'll test it for a few days, then talk to Janko about
4602 licences and announce it.
4609 licences and announce it.
4603
4610
4604 * Fixed the length of the auto-generated ---> prompt which appears
4611 * Fixed the length of the auto-generated ---> prompt which appears
4605 for auto-parens and auto-quotes. Getting this right isn't trivial,
4612 for auto-parens and auto-quotes. Getting this right isn't trivial,
4606 with all the color escapes, different prompt types and optional
4613 with all the color escapes, different prompt types and optional
4607 separators. But it seems to be working in all the combinations.
4614 separators. But it seems to be working in all the combinations.
4608
4615
4609 2001-11-26 Fernando Perez <fperez@colorado.edu>
4616 2001-11-26 Fernando Perez <fperez@colorado.edu>
4610
4617
4611 * Wrote a regexp filter to get option types from the option names
4618 * Wrote a regexp filter to get option types from the option names
4612 string. This eliminates the need to manually keep two duplicate
4619 string. This eliminates the need to manually keep two duplicate
4613 lists.
4620 lists.
4614
4621
4615 * Removed the unneeded check_option_names. Now options are handled
4622 * Removed the unneeded check_option_names. Now options are handled
4616 in a much saner manner and it's easy to visually check that things
4623 in a much saner manner and it's easy to visually check that things
4617 are ok.
4624 are ok.
4618
4625
4619 * Updated version numbers on all files I modified to carry a
4626 * Updated version numbers on all files I modified to carry a
4620 notice so Janko and Nathan have clear version markers.
4627 notice so Janko and Nathan have clear version markers.
4621
4628
4622 * Updated docstring for ultraTB with my changes. I should send
4629 * Updated docstring for ultraTB with my changes. I should send
4623 this to Nathan.
4630 this to Nathan.
4624
4631
4625 * Lots of small fixes. Ran everything through pychecker again.
4632 * Lots of small fixes. Ran everything through pychecker again.
4626
4633
4627 * Made loading of deep_reload an cmd line option. If it's not too
4634 * Made loading of deep_reload an cmd line option. If it's not too
4628 kosher, now people can just disable it. With -nodeep_reload it's
4635 kosher, now people can just disable it. With -nodeep_reload it's
4629 still available as dreload(), it just won't overwrite reload().
4636 still available as dreload(), it just won't overwrite reload().
4630
4637
4631 * Moved many options to the no| form (-opt and -noopt
4638 * Moved many options to the no| form (-opt and -noopt
4632 accepted). Cleaner.
4639 accepted). Cleaner.
4633
4640
4634 * Changed magic_log so that if called with no parameters, it uses
4641 * Changed magic_log so that if called with no parameters, it uses
4635 'rotate' mode. That way auto-generated logs aren't automatically
4642 'rotate' mode. That way auto-generated logs aren't automatically
4636 over-written. For normal logs, now a backup is made if it exists
4643 over-written. For normal logs, now a backup is made if it exists
4637 (only 1 level of backups). A new 'backup' mode was added to the
4644 (only 1 level of backups). A new 'backup' mode was added to the
4638 Logger class to support this. This was a request by Janko.
4645 Logger class to support this. This was a request by Janko.
4639
4646
4640 * Added @logoff/@logon to stop/restart an active log.
4647 * Added @logoff/@logon to stop/restart an active log.
4641
4648
4642 * Fixed a lot of bugs in log saving/replay. It was pretty
4649 * Fixed a lot of bugs in log saving/replay. It was pretty
4643 broken. Now special lines (!@,/) appear properly in the command
4650 broken. Now special lines (!@,/) appear properly in the command
4644 history after a log replay.
4651 history after a log replay.
4645
4652
4646 * Tried and failed to implement full session saving via pickle. My
4653 * Tried and failed to implement full session saving via pickle. My
4647 idea was to pickle __main__.__dict__, but modules can't be
4654 idea was to pickle __main__.__dict__, but modules can't be
4648 pickled. This would be a better alternative to replaying logs, but
4655 pickled. This would be a better alternative to replaying logs, but
4649 seems quite tricky to get to work. Changed -session to be called
4656 seems quite tricky to get to work. Changed -session to be called
4650 -logplay, which more accurately reflects what it does. And if we
4657 -logplay, which more accurately reflects what it does. And if we
4651 ever get real session saving working, -session is now available.
4658 ever get real session saving working, -session is now available.
4652
4659
4653 * Implemented color schemes for prompts also. As for tracebacks,
4660 * Implemented color schemes for prompts also. As for tracebacks,
4654 currently only NoColor and Linux are supported. But now the
4661 currently only NoColor and Linux are supported. But now the
4655 infrastructure is in place, based on a generic ColorScheme
4662 infrastructure is in place, based on a generic ColorScheme
4656 class. So writing and activating new schemes both for the prompts
4663 class. So writing and activating new schemes both for the prompts
4657 and the tracebacks should be straightforward.
4664 and the tracebacks should be straightforward.
4658
4665
4659 * Version 0.1.13 released, 0.1.14 opened.
4666 * Version 0.1.13 released, 0.1.14 opened.
4660
4667
4661 * Changed handling of options for output cache. Now counter is
4668 * Changed handling of options for output cache. Now counter is
4662 hardwired starting at 1 and one specifies the maximum number of
4669 hardwired starting at 1 and one specifies the maximum number of
4663 entries *in the outcache* (not the max prompt counter). This is
4670 entries *in the outcache* (not the max prompt counter). This is
4664 much better, since many statements won't increase the cache
4671 much better, since many statements won't increase the cache
4665 count. It also eliminated some confusing options, now there's only
4672 count. It also eliminated some confusing options, now there's only
4666 one: cache_size.
4673 one: cache_size.
4667
4674
4668 * Added 'alias' magic function and magic_alias option in the
4675 * Added 'alias' magic function and magic_alias option in the
4669 ipythonrc file. Now the user can easily define whatever names he
4676 ipythonrc file. Now the user can easily define whatever names he
4670 wants for the magic functions without having to play weird
4677 wants for the magic functions without having to play weird
4671 namespace games. This gives IPython a real shell-like feel.
4678 namespace games. This gives IPython a real shell-like feel.
4672
4679
4673 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4680 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4674 @ or not).
4681 @ or not).
4675
4682
4676 This was one of the last remaining 'visible' bugs (that I know
4683 This was one of the last remaining 'visible' bugs (that I know
4677 of). I think if I can clean up the session loading so it works
4684 of). I think if I can clean up the session loading so it works
4678 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4685 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4679 about licensing).
4686 about licensing).
4680
4687
4681 2001-11-25 Fernando Perez <fperez@colorado.edu>
4688 2001-11-25 Fernando Perez <fperez@colorado.edu>
4682
4689
4683 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4690 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4684 there's a cleaner distinction between what ? and ?? show.
4691 there's a cleaner distinction between what ? and ?? show.
4685
4692
4686 * Added screen_length option. Now the user can define his own
4693 * Added screen_length option. Now the user can define his own
4687 screen size for page() operations.
4694 screen size for page() operations.
4688
4695
4689 * Implemented magic shell-like functions with automatic code
4696 * Implemented magic shell-like functions with automatic code
4690 generation. Now adding another function is just a matter of adding
4697 generation. Now adding another function is just a matter of adding
4691 an entry to a dict, and the function is dynamically generated at
4698 an entry to a dict, and the function is dynamically generated at
4692 run-time. Python has some really cool features!
4699 run-time. Python has some really cool features!
4693
4700
4694 * Renamed many options to cleanup conventions a little. Now all
4701 * Renamed many options to cleanup conventions a little. Now all
4695 are lowercase, and only underscores where needed. Also in the code
4702 are lowercase, and only underscores where needed. Also in the code
4696 option name tables are clearer.
4703 option name tables are clearer.
4697
4704
4698 * Changed prompts a little. Now input is 'In [n]:' instead of
4705 * Changed prompts a little. Now input is 'In [n]:' instead of
4699 'In[n]:='. This allows it the numbers to be aligned with the
4706 'In[n]:='. This allows it the numbers to be aligned with the
4700 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4707 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4701 Python (it was a Mathematica thing). The '...' continuation prompt
4708 Python (it was a Mathematica thing). The '...' continuation prompt
4702 was also changed a little to align better.
4709 was also changed a little to align better.
4703
4710
4704 * Fixed bug when flushing output cache. Not all _p<n> variables
4711 * Fixed bug when flushing output cache. Not all _p<n> variables
4705 exist, so their deletion needs to be wrapped in a try:
4712 exist, so their deletion needs to be wrapped in a try:
4706
4713
4707 * Figured out how to properly use inspect.formatargspec() (it
4714 * Figured out how to properly use inspect.formatargspec() (it
4708 requires the args preceded by *). So I removed all the code from
4715 requires the args preceded by *). So I removed all the code from
4709 _get_pdef in Magic, which was just replicating that.
4716 _get_pdef in Magic, which was just replicating that.
4710
4717
4711 * Added test to prefilter to allow redefining magic function names
4718 * Added test to prefilter to allow redefining magic function names
4712 as variables. This is ok, since the @ form is always available,
4719 as variables. This is ok, since the @ form is always available,
4713 but whe should allow the user to define a variable called 'ls' if
4720 but whe should allow the user to define a variable called 'ls' if
4714 he needs it.
4721 he needs it.
4715
4722
4716 * Moved the ToDo information from README into a separate ToDo.
4723 * Moved the ToDo information from README into a separate ToDo.
4717
4724
4718 * General code cleanup and small bugfixes. I think it's close to a
4725 * General code cleanup and small bugfixes. I think it's close to a
4719 state where it can be released, obviously with a big 'beta'
4726 state where it can be released, obviously with a big 'beta'
4720 warning on it.
4727 warning on it.
4721
4728
4722 * Got the magic function split to work. Now all magics are defined
4729 * Got the magic function split to work. Now all magics are defined
4723 in a separate class. It just organizes things a bit, and now
4730 in a separate class. It just organizes things a bit, and now
4724 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4731 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4725 was too long).
4732 was too long).
4726
4733
4727 * Changed @clear to @reset to avoid potential confusions with
4734 * Changed @clear to @reset to avoid potential confusions with
4728 the shell command clear. Also renamed @cl to @clear, which does
4735 the shell command clear. Also renamed @cl to @clear, which does
4729 exactly what people expect it to from their shell experience.
4736 exactly what people expect it to from their shell experience.
4730
4737
4731 Added a check to the @reset command (since it's so
4738 Added a check to the @reset command (since it's so
4732 destructive, it's probably a good idea to ask for confirmation).
4739 destructive, it's probably a good idea to ask for confirmation).
4733 But now reset only works for full namespace resetting. Since the
4740 But now reset only works for full namespace resetting. Since the
4734 del keyword is already there for deleting a few specific
4741 del keyword is already there for deleting a few specific
4735 variables, I don't see the point of having a redundant magic
4742 variables, I don't see the point of having a redundant magic
4736 function for the same task.
4743 function for the same task.
4737
4744
4738 2001-11-24 Fernando Perez <fperez@colorado.edu>
4745 2001-11-24 Fernando Perez <fperez@colorado.edu>
4739
4746
4740 * Updated the builtin docs (esp. the ? ones).
4747 * Updated the builtin docs (esp. the ? ones).
4741
4748
4742 * Ran all the code through pychecker. Not terribly impressed with
4749 * Ran all the code through pychecker. Not terribly impressed with
4743 it: lots of spurious warnings and didn't really find anything of
4750 it: lots of spurious warnings and didn't really find anything of
4744 substance (just a few modules being imported and not used).
4751 substance (just a few modules being imported and not used).
4745
4752
4746 * Implemented the new ultraTB functionality into IPython. New
4753 * Implemented the new ultraTB functionality into IPython. New
4747 option: xcolors. This chooses color scheme. xmode now only selects
4754 option: xcolors. This chooses color scheme. xmode now only selects
4748 between Plain and Verbose. Better orthogonality.
4755 between Plain and Verbose. Better orthogonality.
4749
4756
4750 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4757 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4751 mode and color scheme for the exception handlers. Now it's
4758 mode and color scheme for the exception handlers. Now it's
4752 possible to have the verbose traceback with no coloring.
4759 possible to have the verbose traceback with no coloring.
4753
4760
4754 2001-11-23 Fernando Perez <fperez@colorado.edu>
4761 2001-11-23 Fernando Perez <fperez@colorado.edu>
4755
4762
4756 * Version 0.1.12 released, 0.1.13 opened.
4763 * Version 0.1.12 released, 0.1.13 opened.
4757
4764
4758 * Removed option to set auto-quote and auto-paren escapes by
4765 * Removed option to set auto-quote and auto-paren escapes by
4759 user. The chances of breaking valid syntax are just too high. If
4766 user. The chances of breaking valid syntax are just too high. If
4760 someone *really* wants, they can always dig into the code.
4767 someone *really* wants, they can always dig into the code.
4761
4768
4762 * Made prompt separators configurable.
4769 * Made prompt separators configurable.
4763
4770
4764 2001-11-22 Fernando Perez <fperez@colorado.edu>
4771 2001-11-22 Fernando Perez <fperez@colorado.edu>
4765
4772
4766 * Small bugfixes in many places.
4773 * Small bugfixes in many places.
4767
4774
4768 * Removed the MyCompleter class from ipplib. It seemed redundant
4775 * Removed the MyCompleter class from ipplib. It seemed redundant
4769 with the C-p,C-n history search functionality. Less code to
4776 with the C-p,C-n history search functionality. Less code to
4770 maintain.
4777 maintain.
4771
4778
4772 * Moved all the original ipython.py code into ipythonlib.py. Right
4779 * Moved all the original ipython.py code into ipythonlib.py. Right
4773 now it's just one big dump into a function called make_IPython, so
4780 now it's just one big dump into a function called make_IPython, so
4774 no real modularity has been gained. But at least it makes the
4781 no real modularity has been gained. But at least it makes the
4775 wrapper script tiny, and since ipythonlib is a module, it gets
4782 wrapper script tiny, and since ipythonlib is a module, it gets
4776 compiled and startup is much faster.
4783 compiled and startup is much faster.
4777
4784
4778 This is a reasobably 'deep' change, so we should test it for a
4785 This is a reasobably 'deep' change, so we should test it for a
4779 while without messing too much more with the code.
4786 while without messing too much more with the code.
4780
4787
4781 2001-11-21 Fernando Perez <fperez@colorado.edu>
4788 2001-11-21 Fernando Perez <fperez@colorado.edu>
4782
4789
4783 * Version 0.1.11 released, 0.1.12 opened for further work.
4790 * Version 0.1.11 released, 0.1.12 opened for further work.
4784
4791
4785 * Removed dependency on Itpl. It was only needed in one place. It
4792 * Removed dependency on Itpl. It was only needed in one place. It
4786 would be nice if this became part of python, though. It makes life
4793 would be nice if this became part of python, though. It makes life
4787 *a lot* easier in some cases.
4794 *a lot* easier in some cases.
4788
4795
4789 * Simplified the prefilter code a bit. Now all handlers are
4796 * Simplified the prefilter code a bit. Now all handlers are
4790 expected to explicitly return a value (at least a blank string).
4797 expected to explicitly return a value (at least a blank string).
4791
4798
4792 * Heavy edits in ipplib. Removed the help system altogether. Now
4799 * Heavy edits in ipplib. Removed the help system altogether. Now
4793 obj?/?? is used for inspecting objects, a magic @doc prints
4800 obj?/?? is used for inspecting objects, a magic @doc prints
4794 docstrings, and full-blown Python help is accessed via the 'help'
4801 docstrings, and full-blown Python help is accessed via the 'help'
4795 keyword. This cleans up a lot of code (less to maintain) and does
4802 keyword. This cleans up a lot of code (less to maintain) and does
4796 the job. Since 'help' is now a standard Python component, might as
4803 the job. Since 'help' is now a standard Python component, might as
4797 well use it and remove duplicate functionality.
4804 well use it and remove duplicate functionality.
4798
4805
4799 Also removed the option to use ipplib as a standalone program. By
4806 Also removed the option to use ipplib as a standalone program. By
4800 now it's too dependent on other parts of IPython to function alone.
4807 now it's too dependent on other parts of IPython to function alone.
4801
4808
4802 * Fixed bug in genutils.pager. It would crash if the pager was
4809 * Fixed bug in genutils.pager. It would crash if the pager was
4803 exited immediately after opening (broken pipe).
4810 exited immediately after opening (broken pipe).
4804
4811
4805 * Trimmed down the VerboseTB reporting a little. The header is
4812 * Trimmed down the VerboseTB reporting a little. The header is
4806 much shorter now and the repeated exception arguments at the end
4813 much shorter now and the repeated exception arguments at the end
4807 have been removed. For interactive use the old header seemed a bit
4814 have been removed. For interactive use the old header seemed a bit
4808 excessive.
4815 excessive.
4809
4816
4810 * Fixed small bug in output of @whos for variables with multi-word
4817 * Fixed small bug in output of @whos for variables with multi-word
4811 types (only first word was displayed).
4818 types (only first word was displayed).
4812
4819
4813 2001-11-17 Fernando Perez <fperez@colorado.edu>
4820 2001-11-17 Fernando Perez <fperez@colorado.edu>
4814
4821
4815 * Version 0.1.10 released, 0.1.11 opened for further work.
4822 * Version 0.1.10 released, 0.1.11 opened for further work.
4816
4823
4817 * Modified dirs and friends. dirs now *returns* the stack (not
4824 * Modified dirs and friends. dirs now *returns* the stack (not
4818 prints), so one can manipulate it as a variable. Convenient to
4825 prints), so one can manipulate it as a variable. Convenient to
4819 travel along many directories.
4826 travel along many directories.
4820
4827
4821 * Fixed bug in magic_pdef: would only work with functions with
4828 * Fixed bug in magic_pdef: would only work with functions with
4822 arguments with default values.
4829 arguments with default values.
4823
4830
4824 2001-11-14 Fernando Perez <fperez@colorado.edu>
4831 2001-11-14 Fernando Perez <fperez@colorado.edu>
4825
4832
4826 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4833 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4827 example with IPython. Various other minor fixes and cleanups.
4834 example with IPython. Various other minor fixes and cleanups.
4828
4835
4829 * Version 0.1.9 released, 0.1.10 opened for further work.
4836 * Version 0.1.9 released, 0.1.10 opened for further work.
4830
4837
4831 * Added sys.path to the list of directories searched in the
4838 * Added sys.path to the list of directories searched in the
4832 execfile= option. It used to be the current directory and the
4839 execfile= option. It used to be the current directory and the
4833 user's IPYTHONDIR only.
4840 user's IPYTHONDIR only.
4834
4841
4835 2001-11-13 Fernando Perez <fperez@colorado.edu>
4842 2001-11-13 Fernando Perez <fperez@colorado.edu>
4836
4843
4837 * Reinstated the raw_input/prefilter separation that Janko had
4844 * Reinstated the raw_input/prefilter separation that Janko had
4838 initially. This gives a more convenient setup for extending the
4845 initially. This gives a more convenient setup for extending the
4839 pre-processor from the outside: raw_input always gets a string,
4846 pre-processor from the outside: raw_input always gets a string,
4840 and prefilter has to process it. We can then redefine prefilter
4847 and prefilter has to process it. We can then redefine prefilter
4841 from the outside and implement extensions for special
4848 from the outside and implement extensions for special
4842 purposes.
4849 purposes.
4843
4850
4844 Today I got one for inputting PhysicalQuantity objects
4851 Today I got one for inputting PhysicalQuantity objects
4845 (from Scientific) without needing any function calls at
4852 (from Scientific) without needing any function calls at
4846 all. Extremely convenient, and it's all done as a user-level
4853 all. Extremely convenient, and it's all done as a user-level
4847 extension (no IPython code was touched). Now instead of:
4854 extension (no IPython code was touched). Now instead of:
4848 a = PhysicalQuantity(4.2,'m/s**2')
4855 a = PhysicalQuantity(4.2,'m/s**2')
4849 one can simply say
4856 one can simply say
4850 a = 4.2 m/s**2
4857 a = 4.2 m/s**2
4851 or even
4858 or even
4852 a = 4.2 m/s^2
4859 a = 4.2 m/s^2
4853
4860
4854 I use this, but it's also a proof of concept: IPython really is
4861 I use this, but it's also a proof of concept: IPython really is
4855 fully user-extensible, even at the level of the parsing of the
4862 fully user-extensible, even at the level of the parsing of the
4856 command line. It's not trivial, but it's perfectly doable.
4863 command line. It's not trivial, but it's perfectly doable.
4857
4864
4858 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4865 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4859 the problem of modules being loaded in the inverse order in which
4866 the problem of modules being loaded in the inverse order in which
4860 they were defined in
4867 they were defined in
4861
4868
4862 * Version 0.1.8 released, 0.1.9 opened for further work.
4869 * Version 0.1.8 released, 0.1.9 opened for further work.
4863
4870
4864 * Added magics pdef, source and file. They respectively show the
4871 * Added magics pdef, source and file. They respectively show the
4865 definition line ('prototype' in C), source code and full python
4872 definition line ('prototype' in C), source code and full python
4866 file for any callable object. The object inspector oinfo uses
4873 file for any callable object. The object inspector oinfo uses
4867 these to show the same information.
4874 these to show the same information.
4868
4875
4869 * Version 0.1.7 released, 0.1.8 opened for further work.
4876 * Version 0.1.7 released, 0.1.8 opened for further work.
4870
4877
4871 * Separated all the magic functions into a class called Magic. The
4878 * Separated all the magic functions into a class called Magic. The
4872 InteractiveShell class was becoming too big for Xemacs to handle
4879 InteractiveShell class was becoming too big for Xemacs to handle
4873 (de-indenting a line would lock it up for 10 seconds while it
4880 (de-indenting a line would lock it up for 10 seconds while it
4874 backtracked on the whole class!)
4881 backtracked on the whole class!)
4875
4882
4876 FIXME: didn't work. It can be done, but right now namespaces are
4883 FIXME: didn't work. It can be done, but right now namespaces are
4877 all messed up. Do it later (reverted it for now, so at least
4884 all messed up. Do it later (reverted it for now, so at least
4878 everything works as before).
4885 everything works as before).
4879
4886
4880 * Got the object introspection system (magic_oinfo) working! I
4887 * Got the object introspection system (magic_oinfo) working! I
4881 think this is pretty much ready for release to Janko, so he can
4888 think this is pretty much ready for release to Janko, so he can
4882 test it for a while and then announce it. Pretty much 100% of what
4889 test it for a while and then announce it. Pretty much 100% of what
4883 I wanted for the 'phase 1' release is ready. Happy, tired.
4890 I wanted for the 'phase 1' release is ready. Happy, tired.
4884
4891
4885 2001-11-12 Fernando Perez <fperez@colorado.edu>
4892 2001-11-12 Fernando Perez <fperez@colorado.edu>
4886
4893
4887 * Version 0.1.6 released, 0.1.7 opened for further work.
4894 * Version 0.1.6 released, 0.1.7 opened for further work.
4888
4895
4889 * Fixed bug in printing: it used to test for truth before
4896 * Fixed bug in printing: it used to test for truth before
4890 printing, so 0 wouldn't print. Now checks for None.
4897 printing, so 0 wouldn't print. Now checks for None.
4891
4898
4892 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4899 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4893 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4900 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4894 reaches by hand into the outputcache. Think of a better way to do
4901 reaches by hand into the outputcache. Think of a better way to do
4895 this later.
4902 this later.
4896
4903
4897 * Various small fixes thanks to Nathan's comments.
4904 * Various small fixes thanks to Nathan's comments.
4898
4905
4899 * Changed magic_pprint to magic_Pprint. This way it doesn't
4906 * Changed magic_pprint to magic_Pprint. This way it doesn't
4900 collide with pprint() and the name is consistent with the command
4907 collide with pprint() and the name is consistent with the command
4901 line option.
4908 line option.
4902
4909
4903 * Changed prompt counter behavior to be fully like
4910 * Changed prompt counter behavior to be fully like
4904 Mathematica's. That is, even input that doesn't return a result
4911 Mathematica's. That is, even input that doesn't return a result
4905 raises the prompt counter. The old behavior was kind of confusing
4912 raises the prompt counter. The old behavior was kind of confusing
4906 (getting the same prompt number several times if the operation
4913 (getting the same prompt number several times if the operation
4907 didn't return a result).
4914 didn't return a result).
4908
4915
4909 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4916 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4910
4917
4911 * Fixed -Classic mode (wasn't working anymore).
4918 * Fixed -Classic mode (wasn't working anymore).
4912
4919
4913 * Added colored prompts using Nathan's new code. Colors are
4920 * Added colored prompts using Nathan's new code. Colors are
4914 currently hardwired, they can be user-configurable. For
4921 currently hardwired, they can be user-configurable. For
4915 developers, they can be chosen in file ipythonlib.py, at the
4922 developers, they can be chosen in file ipythonlib.py, at the
4916 beginning of the CachedOutput class def.
4923 beginning of the CachedOutput class def.
4917
4924
4918 2001-11-11 Fernando Perez <fperez@colorado.edu>
4925 2001-11-11 Fernando Perez <fperez@colorado.edu>
4919
4926
4920 * Version 0.1.5 released, 0.1.6 opened for further work.
4927 * Version 0.1.5 released, 0.1.6 opened for further work.
4921
4928
4922 * Changed magic_env to *return* the environment as a dict (not to
4929 * Changed magic_env to *return* the environment as a dict (not to
4923 print it). This way it prints, but it can also be processed.
4930 print it). This way it prints, but it can also be processed.
4924
4931
4925 * Added Verbose exception reporting to interactive
4932 * Added Verbose exception reporting to interactive
4926 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4933 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4927 traceback. Had to make some changes to the ultraTB file. This is
4934 traceback. Had to make some changes to the ultraTB file. This is
4928 probably the last 'big' thing in my mental todo list. This ties
4935 probably the last 'big' thing in my mental todo list. This ties
4929 in with the next entry:
4936 in with the next entry:
4930
4937
4931 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4938 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4932 has to specify is Plain, Color or Verbose for all exception
4939 has to specify is Plain, Color or Verbose for all exception
4933 handling.
4940 handling.
4934
4941
4935 * Removed ShellServices option. All this can really be done via
4942 * Removed ShellServices option. All this can really be done via
4936 the magic system. It's easier to extend, cleaner and has automatic
4943 the magic system. It's easier to extend, cleaner and has automatic
4937 namespace protection and documentation.
4944 namespace protection and documentation.
4938
4945
4939 2001-11-09 Fernando Perez <fperez@colorado.edu>
4946 2001-11-09 Fernando Perez <fperez@colorado.edu>
4940
4947
4941 * Fixed bug in output cache flushing (missing parameter to
4948 * Fixed bug in output cache flushing (missing parameter to
4942 __init__). Other small bugs fixed (found using pychecker).
4949 __init__). Other small bugs fixed (found using pychecker).
4943
4950
4944 * Version 0.1.4 opened for bugfixing.
4951 * Version 0.1.4 opened for bugfixing.
4945
4952
4946 2001-11-07 Fernando Perez <fperez@colorado.edu>
4953 2001-11-07 Fernando Perez <fperez@colorado.edu>
4947
4954
4948 * Version 0.1.3 released, mainly because of the raw_input bug.
4955 * Version 0.1.3 released, mainly because of the raw_input bug.
4949
4956
4950 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4957 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4951 and when testing for whether things were callable, a call could
4958 and when testing for whether things were callable, a call could
4952 actually be made to certain functions. They would get called again
4959 actually be made to certain functions. They would get called again
4953 once 'really' executed, with a resulting double call. A disaster
4960 once 'really' executed, with a resulting double call. A disaster
4954 in many cases (list.reverse() would never work!).
4961 in many cases (list.reverse() would never work!).
4955
4962
4956 * Removed prefilter() function, moved its code to raw_input (which
4963 * Removed prefilter() function, moved its code to raw_input (which
4957 after all was just a near-empty caller for prefilter). This saves
4964 after all was just a near-empty caller for prefilter). This saves
4958 a function call on every prompt, and simplifies the class a tiny bit.
4965 a function call on every prompt, and simplifies the class a tiny bit.
4959
4966
4960 * Fix _ip to __ip name in magic example file.
4967 * Fix _ip to __ip name in magic example file.
4961
4968
4962 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4969 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4963 work with non-gnu versions of tar.
4970 work with non-gnu versions of tar.
4964
4971
4965 2001-11-06 Fernando Perez <fperez@colorado.edu>
4972 2001-11-06 Fernando Perez <fperez@colorado.edu>
4966
4973
4967 * Version 0.1.2. Just to keep track of the recent changes.
4974 * Version 0.1.2. Just to keep track of the recent changes.
4968
4975
4969 * Fixed nasty bug in output prompt routine. It used to check 'if
4976 * Fixed nasty bug in output prompt routine. It used to check 'if
4970 arg != None...'. Problem is, this fails if arg implements a
4977 arg != None...'. Problem is, this fails if arg implements a
4971 special comparison (__cmp__) which disallows comparing to
4978 special comparison (__cmp__) which disallows comparing to
4972 None. Found it when trying to use the PhysicalQuantity module from
4979 None. Found it when trying to use the PhysicalQuantity module from
4973 ScientificPython.
4980 ScientificPython.
4974
4981
4975 2001-11-05 Fernando Perez <fperez@colorado.edu>
4982 2001-11-05 Fernando Perez <fperez@colorado.edu>
4976
4983
4977 * Also added dirs. Now the pushd/popd/dirs family functions
4984 * Also added dirs. Now the pushd/popd/dirs family functions
4978 basically like the shell, with the added convenience of going home
4985 basically like the shell, with the added convenience of going home
4979 when called with no args.
4986 when called with no args.
4980
4987
4981 * pushd/popd slightly modified to mimic shell behavior more
4988 * pushd/popd slightly modified to mimic shell behavior more
4982 closely.
4989 closely.
4983
4990
4984 * Added env,pushd,popd from ShellServices as magic functions. I
4991 * Added env,pushd,popd from ShellServices as magic functions. I
4985 think the cleanest will be to port all desired functions from
4992 think the cleanest will be to port all desired functions from
4986 ShellServices as magics and remove ShellServices altogether. This
4993 ShellServices as magics and remove ShellServices altogether. This
4987 will provide a single, clean way of adding functionality
4994 will provide a single, clean way of adding functionality
4988 (shell-type or otherwise) to IP.
4995 (shell-type or otherwise) to IP.
4989
4996
4990 2001-11-04 Fernando Perez <fperez@colorado.edu>
4997 2001-11-04 Fernando Perez <fperez@colorado.edu>
4991
4998
4992 * Added .ipython/ directory to sys.path. This way users can keep
4999 * Added .ipython/ directory to sys.path. This way users can keep
4993 customizations there and access them via import.
5000 customizations there and access them via import.
4994
5001
4995 2001-11-03 Fernando Perez <fperez@colorado.edu>
5002 2001-11-03 Fernando Perez <fperez@colorado.edu>
4996
5003
4997 * Opened version 0.1.1 for new changes.
5004 * Opened version 0.1.1 for new changes.
4998
5005
4999 * Changed version number to 0.1.0: first 'public' release, sent to
5006 * Changed version number to 0.1.0: first 'public' release, sent to
5000 Nathan and Janko.
5007 Nathan and Janko.
5001
5008
5002 * Lots of small fixes and tweaks.
5009 * Lots of small fixes and tweaks.
5003
5010
5004 * Minor changes to whos format. Now strings are shown, snipped if
5011 * Minor changes to whos format. Now strings are shown, snipped if
5005 too long.
5012 too long.
5006
5013
5007 * Changed ShellServices to work on __main__ so they show up in @who
5014 * Changed ShellServices to work on __main__ so they show up in @who
5008
5015
5009 * Help also works with ? at the end of a line:
5016 * Help also works with ? at the end of a line:
5010 ?sin and sin?
5017 ?sin and sin?
5011 both produce the same effect. This is nice, as often I use the
5018 both produce the same effect. This is nice, as often I use the
5012 tab-complete to find the name of a method, but I used to then have
5019 tab-complete to find the name of a method, but I used to then have
5013 to go to the beginning of the line to put a ? if I wanted more
5020 to go to the beginning of the line to put a ? if I wanted more
5014 info. Now I can just add the ? and hit return. Convenient.
5021 info. Now I can just add the ? and hit return. Convenient.
5015
5022
5016 2001-11-02 Fernando Perez <fperez@colorado.edu>
5023 2001-11-02 Fernando Perez <fperez@colorado.edu>
5017
5024
5018 * Python version check (>=2.1) added.
5025 * Python version check (>=2.1) added.
5019
5026
5020 * Added LazyPython documentation. At this point the docs are quite
5027 * Added LazyPython documentation. At this point the docs are quite
5021 a mess. A cleanup is in order.
5028 a mess. A cleanup is in order.
5022
5029
5023 * Auto-installer created. For some bizarre reason, the zipfiles
5030 * Auto-installer created. For some bizarre reason, the zipfiles
5024 module isn't working on my system. So I made a tar version
5031 module isn't working on my system. So I made a tar version
5025 (hopefully the command line options in various systems won't kill
5032 (hopefully the command line options in various systems won't kill
5026 me).
5033 me).
5027
5034
5028 * Fixes to Struct in genutils. Now all dictionary-like methods are
5035 * Fixes to Struct in genutils. Now all dictionary-like methods are
5029 protected (reasonably).
5036 protected (reasonably).
5030
5037
5031 * Added pager function to genutils and changed ? to print usage
5038 * Added pager function to genutils and changed ? to print usage
5032 note through it (it was too long).
5039 note through it (it was too long).
5033
5040
5034 * Added the LazyPython functionality. Works great! I changed the
5041 * Added the LazyPython functionality. Works great! I changed the
5035 auto-quote escape to ';', it's on home row and next to '. But
5042 auto-quote escape to ';', it's on home row and next to '. But
5036 both auto-quote and auto-paren (still /) escapes are command-line
5043 both auto-quote and auto-paren (still /) escapes are command-line
5037 parameters.
5044 parameters.
5038
5045
5039
5046
5040 2001-11-01 Fernando Perez <fperez@colorado.edu>
5047 2001-11-01 Fernando Perez <fperez@colorado.edu>
5041
5048
5042 * Version changed to 0.0.7. Fairly large change: configuration now
5049 * Version changed to 0.0.7. Fairly large change: configuration now
5043 is all stored in a directory, by default .ipython. There, all
5050 is all stored in a directory, by default .ipython. There, all
5044 config files have normal looking names (not .names)
5051 config files have normal looking names (not .names)
5045
5052
5046 * Version 0.0.6 Released first to Lucas and Archie as a test
5053 * Version 0.0.6 Released first to Lucas and Archie as a test
5047 run. Since it's the first 'semi-public' release, change version to
5054 run. Since it's the first 'semi-public' release, change version to
5048 > 0.0.6 for any changes now.
5055 > 0.0.6 for any changes now.
5049
5056
5050 * Stuff I had put in the ipplib.py changelog:
5057 * Stuff I had put in the ipplib.py changelog:
5051
5058
5052 Changes to InteractiveShell:
5059 Changes to InteractiveShell:
5053
5060
5054 - Made the usage message a parameter.
5061 - Made the usage message a parameter.
5055
5062
5056 - Require the name of the shell variable to be given. It's a bit
5063 - Require the name of the shell variable to be given. It's a bit
5057 of a hack, but allows the name 'shell' not to be hardwire in the
5064 of a hack, but allows the name 'shell' not to be hardwire in the
5058 magic (@) handler, which is problematic b/c it requires
5065 magic (@) handler, which is problematic b/c it requires
5059 polluting the global namespace with 'shell'. This in turn is
5066 polluting the global namespace with 'shell'. This in turn is
5060 fragile: if a user redefines a variable called shell, things
5067 fragile: if a user redefines a variable called shell, things
5061 break.
5068 break.
5062
5069
5063 - magic @: all functions available through @ need to be defined
5070 - magic @: all functions available through @ need to be defined
5064 as magic_<name>, even though they can be called simply as
5071 as magic_<name>, even though they can be called simply as
5065 @<name>. This allows the special command @magic to gather
5072 @<name>. This allows the special command @magic to gather
5066 information automatically about all existing magic functions,
5073 information automatically about all existing magic functions,
5067 even if they are run-time user extensions, by parsing the shell
5074 even if they are run-time user extensions, by parsing the shell
5068 instance __dict__ looking for special magic_ names.
5075 instance __dict__ looking for special magic_ names.
5069
5076
5070 - mainloop: added *two* local namespace parameters. This allows
5077 - mainloop: added *two* local namespace parameters. This allows
5071 the class to differentiate between parameters which were there
5078 the class to differentiate between parameters which were there
5072 before and after command line initialization was processed. This
5079 before and after command line initialization was processed. This
5073 way, later @who can show things loaded at startup by the
5080 way, later @who can show things loaded at startup by the
5074 user. This trick was necessary to make session saving/reloading
5081 user. This trick was necessary to make session saving/reloading
5075 really work: ideally after saving/exiting/reloading a session,
5082 really work: ideally after saving/exiting/reloading a session,
5076 *everythin* should look the same, including the output of @who. I
5083 *everythin* should look the same, including the output of @who. I
5077 was only able to make this work with this double namespace
5084 was only able to make this work with this double namespace
5078 trick.
5085 trick.
5079
5086
5080 - added a header to the logfile which allows (almost) full
5087 - added a header to the logfile which allows (almost) full
5081 session restoring.
5088 session restoring.
5082
5089
5083 - prepend lines beginning with @ or !, with a and log
5090 - prepend lines beginning with @ or !, with a and log
5084 them. Why? !lines: may be useful to know what you did @lines:
5091 them. Why? !lines: may be useful to know what you did @lines:
5085 they may affect session state. So when restoring a session, at
5092 they may affect session state. So when restoring a session, at
5086 least inform the user of their presence. I couldn't quite get
5093 least inform the user of their presence. I couldn't quite get
5087 them to properly re-execute, but at least the user is warned.
5094 them to properly re-execute, but at least the user is warned.
5088
5095
5089 * Started ChangeLog.
5096 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now