##// END OF EJS Templates
result_display can return value. ipapi.is_ipython_session(). %paste -> %cpaste.
vivainio -
Show More
@@ -1,2809 +1,2809 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 1071 2006-01-23 21:30:41Z vivainio $"""
4 $Id: Magic.py 1076 2006-01-24 17:27: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 [-n] -> print at most 40 inputs (some may be multi-line)\\
483 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
484 %history [-n] n -> print at most n inputs\\
484 %history [-n] n -> print at most n inputs\\
485 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
485 %history [-n] 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 If option -n is used, input numbers are not printed. This is useful if
491 If option -n is used, input numbers are not printed. This is useful if
492 you want to get a printout of many lines which can be directly pasted
492 you want to get a printout of many lines which can be directly pasted
493 into a text editor.
493 into a text editor.
494
494
495 This feature is only available if numbered prompts are in use."""
495 This feature is only available if numbered prompts are in use."""
496
496
497 shell = self.shell
497 shell = self.shell
498 if not shell.outputcache.do_full_cache:
498 if not shell.outputcache.do_full_cache:
499 print 'This feature is only available if numbered prompts are in use.'
499 print 'This feature is only available if numbered prompts are in use.'
500 return
500 return
501 opts,args = self.parse_options(parameter_s,'n',mode='list')
501 opts,args = self.parse_options(parameter_s,'n',mode='list')
502
502
503 input_hist = shell.input_hist
503 input_hist = shell.input_hist
504 default_length = 40
504 default_length = 40
505 if len(args) == 0:
505 if len(args) == 0:
506 final = len(input_hist)
506 final = len(input_hist)
507 init = max(1,final-default_length)
507 init = max(1,final-default_length)
508 elif len(args) == 1:
508 elif len(args) == 1:
509 final = len(input_hist)
509 final = len(input_hist)
510 init = max(1,final-int(args[0]))
510 init = max(1,final-int(args[0]))
511 elif len(args) == 2:
511 elif len(args) == 2:
512 init,final = map(int,args)
512 init,final = map(int,args)
513 else:
513 else:
514 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
514 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
515 print self.magic_hist.__doc__
515 print self.magic_hist.__doc__
516 return
516 return
517 width = len(str(final))
517 width = len(str(final))
518 line_sep = ['','\n']
518 line_sep = ['','\n']
519 print_nums = not opts.has_key('n')
519 print_nums = not opts.has_key('n')
520 for in_num in range(init,final):
520 for in_num in range(init,final):
521 inline = input_hist[in_num]
521 inline = input_hist[in_num]
522 multiline = int(inline.count('\n') > 1)
522 multiline = int(inline.count('\n') > 1)
523 if print_nums:
523 if print_nums:
524 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
524 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
525 print inline,
525 print inline,
526
526
527 def magic_hist(self, parameter_s=''):
527 def magic_hist(self, parameter_s=''):
528 """Alternate name for %history."""
528 """Alternate name for %history."""
529 return self.magic_history(parameter_s)
529 return self.magic_history(parameter_s)
530
530
531 def magic_p(self, parameter_s=''):
531 def magic_p(self, parameter_s=''):
532 """Just a short alias for Python's 'print'."""
532 """Just a short alias for Python's 'print'."""
533 exec 'print ' + parameter_s in self.shell.user_ns
533 exec 'print ' + parameter_s in self.shell.user_ns
534
534
535 def magic_r(self, parameter_s=''):
535 def magic_r(self, parameter_s=''):
536 """Repeat previous input.
536 """Repeat previous input.
537
537
538 If given an argument, repeats the previous command which starts with
538 If given an argument, repeats the previous command which starts with
539 the same string, otherwise it just repeats the previous input.
539 the same string, otherwise it just repeats the previous input.
540
540
541 Shell escaped commands (with ! as first character) are not recognized
541 Shell escaped commands (with ! as first character) are not recognized
542 by this system, only pure python code and magic commands.
542 by this system, only pure python code and magic commands.
543 """
543 """
544
544
545 start = parameter_s.strip()
545 start = parameter_s.strip()
546 esc_magic = self.shell.ESC_MAGIC
546 esc_magic = self.shell.ESC_MAGIC
547 # Identify magic commands even if automagic is on (which means
547 # Identify magic commands even if automagic is on (which means
548 # the in-memory version is different from that typed by the user).
548 # the in-memory version is different from that typed by the user).
549 if self.shell.rc.automagic:
549 if self.shell.rc.automagic:
550 start_magic = esc_magic+start
550 start_magic = esc_magic+start
551 else:
551 else:
552 start_magic = start
552 start_magic = start
553 # Look through the input history in reverse
553 # Look through the input history in reverse
554 for n in range(len(self.shell.input_hist)-2,0,-1):
554 for n in range(len(self.shell.input_hist)-2,0,-1):
555 input = self.shell.input_hist[n]
555 input = self.shell.input_hist[n]
556 # skip plain 'r' lines so we don't recurse to infinity
556 # skip plain 'r' lines so we don't recurse to infinity
557 if input != 'ipmagic("r")\n' and \
557 if input != 'ipmagic("r")\n' and \
558 (input.startswith(start) or input.startswith(start_magic)):
558 (input.startswith(start) or input.startswith(start_magic)):
559 #print 'match',`input` # dbg
559 #print 'match',`input` # dbg
560 print 'Executing:',input,
560 print 'Executing:',input,
561 self.shell.runlines(input)
561 self.shell.runlines(input)
562 return
562 return
563 print 'No previous input matching `%s` found.' % start
563 print 'No previous input matching `%s` found.' % start
564
564
565 def magic_page(self, parameter_s=''):
565 def magic_page(self, parameter_s=''):
566 """Pretty print the object and display it through a pager.
566 """Pretty print the object and display it through a pager.
567
567
568 If no parameter is given, use _ (last output)."""
568 If no parameter is given, use _ (last output)."""
569 # After a function contributed by Olivier Aubert, slightly modified.
569 # After a function contributed by Olivier Aubert, slightly modified.
570
570
571 oname = parameter_s and parameter_s or '_'
571 oname = parameter_s and parameter_s or '_'
572 info = self._ofind(oname)
572 info = self._ofind(oname)
573 if info['found']:
573 if info['found']:
574 page(pformat(info['obj']))
574 page(pformat(info['obj']))
575 else:
575 else:
576 print 'Object `%s` not found' % oname
576 print 'Object `%s` not found' % oname
577
577
578 def magic_profile(self, parameter_s=''):
578 def magic_profile(self, parameter_s=''):
579 """Print your currently active IPyhton profile."""
579 """Print your currently active IPyhton profile."""
580 if self.shell.rc.profile:
580 if self.shell.rc.profile:
581 printpl('Current IPython profile: $self.shell.rc.profile.')
581 printpl('Current IPython profile: $self.shell.rc.profile.')
582 else:
582 else:
583 print 'No profile active.'
583 print 'No profile active.'
584
584
585 def _inspect(self,meth,oname,**kw):
585 def _inspect(self,meth,oname,**kw):
586 """Generic interface to the inspector system.
586 """Generic interface to the inspector system.
587
587
588 This function is meant to be called by pdef, pdoc & friends."""
588 This function is meant to be called by pdef, pdoc & friends."""
589
589
590 oname = oname.strip()
590 oname = oname.strip()
591 info = Struct(self._ofind(oname))
591 info = Struct(self._ofind(oname))
592 if info.found:
592 if info.found:
593 pmethod = getattr(self.shell.inspector,meth)
593 pmethod = getattr(self.shell.inspector,meth)
594 formatter = info.ismagic and self.format_screen or None
594 formatter = info.ismagic and self.format_screen or None
595 if meth == 'pdoc':
595 if meth == 'pdoc':
596 pmethod(info.obj,oname,formatter)
596 pmethod(info.obj,oname,formatter)
597 elif meth == 'pinfo':
597 elif meth == 'pinfo':
598 pmethod(info.obj,oname,formatter,info,**kw)
598 pmethod(info.obj,oname,formatter,info,**kw)
599 else:
599 else:
600 pmethod(info.obj,oname)
600 pmethod(info.obj,oname)
601 else:
601 else:
602 print 'Object `%s` not found.' % oname
602 print 'Object `%s` not found.' % oname
603 return 'not found' # so callers can take other action
603 return 'not found' # so callers can take other action
604
604
605 def magic_pdef(self, parameter_s=''):
605 def magic_pdef(self, parameter_s=''):
606 """Print the definition header for any callable object.
606 """Print the definition header for any callable object.
607
607
608 If the object is a class, print the constructor information."""
608 If the object is a class, print the constructor information."""
609 self._inspect('pdef',parameter_s)
609 self._inspect('pdef',parameter_s)
610
610
611 def magic_pdoc(self, parameter_s=''):
611 def magic_pdoc(self, parameter_s=''):
612 """Print the docstring for an object.
612 """Print the docstring for an object.
613
613
614 If the given object is a class, it will print both the class and the
614 If the given object is a class, it will print both the class and the
615 constructor docstrings."""
615 constructor docstrings."""
616 self._inspect('pdoc',parameter_s)
616 self._inspect('pdoc',parameter_s)
617
617
618 def magic_psource(self, parameter_s=''):
618 def magic_psource(self, parameter_s=''):
619 """Print (or run through pager) the source code for an object."""
619 """Print (or run through pager) the source code for an object."""
620 self._inspect('psource',parameter_s)
620 self._inspect('psource',parameter_s)
621
621
622 def magic_pfile(self, parameter_s=''):
622 def magic_pfile(self, parameter_s=''):
623 """Print (or run through pager) the file where an object is defined.
623 """Print (or run through pager) the file where an object is defined.
624
624
625 The file opens at the line where the object definition begins. IPython
625 The file opens at the line where the object definition begins. IPython
626 will honor the environment variable PAGER if set, and otherwise will
626 will honor the environment variable PAGER if set, and otherwise will
627 do its best to print the file in a convenient form.
627 do its best to print the file in a convenient form.
628
628
629 If the given argument is not an object currently defined, IPython will
629 If the given argument is not an object currently defined, IPython will
630 try to interpret it as a filename (automatically adding a .py extension
630 try to interpret it as a filename (automatically adding a .py extension
631 if needed). You can thus use %pfile as a syntax highlighting code
631 if needed). You can thus use %pfile as a syntax highlighting code
632 viewer."""
632 viewer."""
633
633
634 # first interpret argument as an object name
634 # first interpret argument as an object name
635 out = self._inspect('pfile',parameter_s)
635 out = self._inspect('pfile',parameter_s)
636 # if not, try the input as a filename
636 # if not, try the input as a filename
637 if out == 'not found':
637 if out == 'not found':
638 try:
638 try:
639 filename = get_py_filename(parameter_s)
639 filename = get_py_filename(parameter_s)
640 except IOError,msg:
640 except IOError,msg:
641 print msg
641 print msg
642 return
642 return
643 page(self.shell.inspector.format(file(filename).read()))
643 page(self.shell.inspector.format(file(filename).read()))
644
644
645 def magic_pinfo(self, parameter_s=''):
645 def magic_pinfo(self, parameter_s=''):
646 """Provide detailed information about an object.
646 """Provide detailed information about an object.
647
647
648 '%pinfo object' is just a synonym for object? or ?object."""
648 '%pinfo object' is just a synonym for object? or ?object."""
649
649
650 #print 'pinfo par: <%s>' % parameter_s # dbg
650 #print 'pinfo par: <%s>' % parameter_s # dbg
651
651
652 # detail_level: 0 -> obj? , 1 -> obj??
652 # detail_level: 0 -> obj? , 1 -> obj??
653 detail_level = 0
653 detail_level = 0
654 # We need to detect if we got called as 'pinfo pinfo foo', which can
654 # We need to detect if we got called as 'pinfo pinfo foo', which can
655 # happen if the user types 'pinfo foo?' at the cmd line.
655 # happen if the user types 'pinfo foo?' at the cmd line.
656 pinfo,qmark1,oname,qmark2 = \
656 pinfo,qmark1,oname,qmark2 = \
657 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
657 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
658 if pinfo or qmark1 or qmark2:
658 if pinfo or qmark1 or qmark2:
659 detail_level = 1
659 detail_level = 1
660 if "*" in oname:
660 if "*" in oname:
661 self.magic_psearch(oname)
661 self.magic_psearch(oname)
662 else:
662 else:
663 self._inspect('pinfo',oname,detail_level=detail_level)
663 self._inspect('pinfo',oname,detail_level=detail_level)
664
664
665 def magic_psearch(self, parameter_s=''):
665 def magic_psearch(self, parameter_s=''):
666 """Search for object in namespaces by wildcard.
666 """Search for object in namespaces by wildcard.
667
667
668 %psearch [options] PATTERN [OBJECT TYPE]
668 %psearch [options] PATTERN [OBJECT TYPE]
669
669
670 Note: ? can be used as a synonym for %psearch, at the beginning or at
670 Note: ? can be used as a synonym for %psearch, at the beginning or at
671 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
671 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
672 rest of the command line must be unchanged (options come first), so
672 rest of the command line must be unchanged (options come first), so
673 for example the following forms are equivalent
673 for example the following forms are equivalent
674
674
675 %psearch -i a* function
675 %psearch -i a* function
676 -i a* function?
676 -i a* function?
677 ?-i a* function
677 ?-i a* function
678
678
679 Arguments:
679 Arguments:
680
680
681 PATTERN
681 PATTERN
682
682
683 where PATTERN is a string containing * as a wildcard similar to its
683 where PATTERN is a string containing * as a wildcard similar to its
684 use in a shell. The pattern is matched in all namespaces on the
684 use in a shell. The pattern is matched in all namespaces on the
685 search path. By default objects starting with a single _ are not
685 search path. By default objects starting with a single _ are not
686 matched, many IPython generated objects have a single
686 matched, many IPython generated objects have a single
687 underscore. The default is case insensitive matching. Matching is
687 underscore. The default is case insensitive matching. Matching is
688 also done on the attributes of objects and not only on the objects
688 also done on the attributes of objects and not only on the objects
689 in a module.
689 in a module.
690
690
691 [OBJECT TYPE]
691 [OBJECT TYPE]
692
692
693 Is the name of a python type from the types module. The name is
693 Is the name of a python type from the types module. The name is
694 given in lowercase without the ending type, ex. StringType is
694 given in lowercase without the ending type, ex. StringType is
695 written string. By adding a type here only objects matching the
695 written string. By adding a type here only objects matching the
696 given type are matched. Using all here makes the pattern match all
696 given type are matched. Using all here makes the pattern match all
697 types (this is the default).
697 types (this is the default).
698
698
699 Options:
699 Options:
700
700
701 -a: makes the pattern match even objects whose names start with a
701 -a: makes the pattern match even objects whose names start with a
702 single underscore. These names are normally ommitted from the
702 single underscore. These names are normally ommitted from the
703 search.
703 search.
704
704
705 -i/-c: make the pattern case insensitive/sensitive. If neither of
705 -i/-c: make the pattern case insensitive/sensitive. If neither of
706 these options is given, the default is read from your ipythonrc
706 these options is given, the default is read from your ipythonrc
707 file. The option name which sets this value is
707 file. The option name which sets this value is
708 'wildcards_case_sensitive'. If this option is not specified in your
708 'wildcards_case_sensitive'. If this option is not specified in your
709 ipythonrc file, IPython's internal default is to do a case sensitive
709 ipythonrc file, IPython's internal default is to do a case sensitive
710 search.
710 search.
711
711
712 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
712 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
713 specifiy can be searched in any of the following namespaces:
713 specifiy can be searched in any of the following namespaces:
714 'builtin', 'user', 'user_global','internal', 'alias', where
714 'builtin', 'user', 'user_global','internal', 'alias', where
715 'builtin' and 'user' are the search defaults. Note that you should
715 'builtin' and 'user' are the search defaults. Note that you should
716 not use quotes when specifying namespaces.
716 not use quotes when specifying namespaces.
717
717
718 'Builtin' contains the python module builtin, 'user' contains all
718 'Builtin' contains the python module builtin, 'user' contains all
719 user data, 'alias' only contain the shell aliases and no python
719 user data, 'alias' only contain the shell aliases and no python
720 objects, 'internal' contains objects used by IPython. The
720 objects, 'internal' contains objects used by IPython. The
721 'user_global' namespace is only used by embedded IPython instances,
721 'user_global' namespace is only used by embedded IPython instances,
722 and it contains module-level globals. You can add namespaces to the
722 and it contains module-level globals. You can add namespaces to the
723 search with -s or exclude them with -e (these options can be given
723 search with -s or exclude them with -e (these options can be given
724 more than once).
724 more than once).
725
725
726 Examples:
726 Examples:
727
727
728 %psearch a* -> objects beginning with an a
728 %psearch a* -> objects beginning with an a
729 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
729 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
730 %psearch a* function -> all functions beginning with an a
730 %psearch a* function -> all functions beginning with an a
731 %psearch re.e* -> objects beginning with an e in module re
731 %psearch re.e* -> objects beginning with an e in module re
732 %psearch r*.e* -> objects that start with e in modules starting in r
732 %psearch r*.e* -> objects that start with e in modules starting in r
733 %psearch r*.* string -> all strings in modules beginning with r
733 %psearch r*.* string -> all strings in modules beginning with r
734
734
735 Case sensitve search:
735 Case sensitve search:
736
736
737 %psearch -c a* list all object beginning with lower case a
737 %psearch -c a* list all object beginning with lower case a
738
738
739 Show objects beginning with a single _:
739 Show objects beginning with a single _:
740
740
741 %psearch -a _* list objects beginning with a single underscore"""
741 %psearch -a _* list objects beginning with a single underscore"""
742
742
743 # default namespaces to be searched
743 # default namespaces to be searched
744 def_search = ['user','builtin']
744 def_search = ['user','builtin']
745
745
746 # Process options/args
746 # Process options/args
747 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
747 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
748 opt = opts.get
748 opt = opts.get
749 shell = self.shell
749 shell = self.shell
750 psearch = shell.inspector.psearch
750 psearch = shell.inspector.psearch
751
751
752 # select case options
752 # select case options
753 if opts.has_key('i'):
753 if opts.has_key('i'):
754 ignore_case = True
754 ignore_case = True
755 elif opts.has_key('c'):
755 elif opts.has_key('c'):
756 ignore_case = False
756 ignore_case = False
757 else:
757 else:
758 ignore_case = not shell.rc.wildcards_case_sensitive
758 ignore_case = not shell.rc.wildcards_case_sensitive
759
759
760 # Build list of namespaces to search from user options
760 # Build list of namespaces to search from user options
761 def_search.extend(opt('s',[]))
761 def_search.extend(opt('s',[]))
762 ns_exclude = ns_exclude=opt('e',[])
762 ns_exclude = ns_exclude=opt('e',[])
763 ns_search = [nm for nm in def_search if nm not in ns_exclude]
763 ns_search = [nm for nm in def_search if nm not in ns_exclude]
764
764
765 # Call the actual search
765 # Call the actual search
766 try:
766 try:
767 psearch(args,shell.ns_table,ns_search,
767 psearch(args,shell.ns_table,ns_search,
768 show_all=opt('a'),ignore_case=ignore_case)
768 show_all=opt('a'),ignore_case=ignore_case)
769 except:
769 except:
770 shell.showtraceback()
770 shell.showtraceback()
771
771
772 def magic_who_ls(self, parameter_s=''):
772 def magic_who_ls(self, parameter_s=''):
773 """Return a sorted list of all interactive variables.
773 """Return a sorted list of all interactive variables.
774
774
775 If arguments are given, only variables of types matching these
775 If arguments are given, only variables of types matching these
776 arguments are returned."""
776 arguments are returned."""
777
777
778 user_ns = self.shell.user_ns
778 user_ns = self.shell.user_ns
779 internal_ns = self.shell.internal_ns
779 internal_ns = self.shell.internal_ns
780 user_config_ns = self.shell.user_config_ns
780 user_config_ns = self.shell.user_config_ns
781 out = []
781 out = []
782 typelist = parameter_s.split()
782 typelist = parameter_s.split()
783
783
784 for i in user_ns:
784 for i in user_ns:
785 if not (i.startswith('_') or i.startswith('_i')) \
785 if not (i.startswith('_') or i.startswith('_i')) \
786 and not (i in internal_ns or i in user_config_ns):
786 and not (i in internal_ns or i in user_config_ns):
787 if typelist:
787 if typelist:
788 if type(user_ns[i]).__name__ in typelist:
788 if type(user_ns[i]).__name__ in typelist:
789 out.append(i)
789 out.append(i)
790 else:
790 else:
791 out.append(i)
791 out.append(i)
792 out.sort()
792 out.sort()
793 return out
793 return out
794
794
795 def magic_who(self, parameter_s=''):
795 def magic_who(self, parameter_s=''):
796 """Print all interactive variables, with some minimal formatting.
796 """Print all interactive variables, with some minimal formatting.
797
797
798 If any arguments are given, only variables whose type matches one of
798 If any arguments are given, only variables whose type matches one of
799 these are printed. For example:
799 these are printed. For example:
800
800
801 %who function str
801 %who function str
802
802
803 will only list functions and strings, excluding all other types of
803 will only list functions and strings, excluding all other types of
804 variables. To find the proper type names, simply use type(var) at a
804 variables. To find the proper type names, simply use type(var) at a
805 command line to see how python prints type names. For example:
805 command line to see how python prints type names. For example:
806
806
807 In [1]: type('hello')\\
807 In [1]: type('hello')\\
808 Out[1]: <type 'str'>
808 Out[1]: <type 'str'>
809
809
810 indicates that the type name for strings is 'str'.
810 indicates that the type name for strings is 'str'.
811
811
812 %who always excludes executed names loaded through your configuration
812 %who always excludes executed names loaded through your configuration
813 file and things which are internal to IPython.
813 file and things which are internal to IPython.
814
814
815 This is deliberate, as typically you may load many modules and the
815 This is deliberate, as typically you may load many modules and the
816 purpose of %who is to show you only what you've manually defined."""
816 purpose of %who is to show you only what you've manually defined."""
817
817
818 varlist = self.magic_who_ls(parameter_s)
818 varlist = self.magic_who_ls(parameter_s)
819 if not varlist:
819 if not varlist:
820 print 'Interactive namespace is empty.'
820 print 'Interactive namespace is empty.'
821 return
821 return
822
822
823 # if we have variables, move on...
823 # if we have variables, move on...
824
824
825 # stupid flushing problem: when prompts have no separators, stdout is
825 # stupid flushing problem: when prompts have no separators, stdout is
826 # getting lost. I'm starting to think this is a python bug. I'm having
826 # getting lost. I'm starting to think this is a python bug. I'm having
827 # to force a flush with a print because even a sys.stdout.flush
827 # to force a flush with a print because even a sys.stdout.flush
828 # doesn't seem to do anything!
828 # doesn't seem to do anything!
829
829
830 count = 0
830 count = 0
831 for i in varlist:
831 for i in varlist:
832 print i+'\t',
832 print i+'\t',
833 count += 1
833 count += 1
834 if count > 8:
834 if count > 8:
835 count = 0
835 count = 0
836 print
836 print
837 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
837 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
838
838
839 print # well, this does force a flush at the expense of an extra \n
839 print # well, this does force a flush at the expense of an extra \n
840
840
841 def magic_whos(self, parameter_s=''):
841 def magic_whos(self, parameter_s=''):
842 """Like %who, but gives some extra information about each variable.
842 """Like %who, but gives some extra information about each variable.
843
843
844 The same type filtering of %who can be applied here.
844 The same type filtering of %who can be applied here.
845
845
846 For all variables, the type is printed. Additionally it prints:
846 For all variables, the type is printed. Additionally it prints:
847
847
848 - For {},[],(): their length.
848 - For {},[],(): their length.
849
849
850 - For Numeric arrays, a summary with shape, number of elements,
850 - For Numeric arrays, a summary with shape, number of elements,
851 typecode and size in memory.
851 typecode and size in memory.
852
852
853 - Everything else: a string representation, snipping their middle if
853 - Everything else: a string representation, snipping their middle if
854 too long."""
854 too long."""
855
855
856 varnames = self.magic_who_ls(parameter_s)
856 varnames = self.magic_who_ls(parameter_s)
857 if not varnames:
857 if not varnames:
858 print 'Interactive namespace is empty.'
858 print 'Interactive namespace is empty.'
859 return
859 return
860
860
861 # if we have variables, move on...
861 # if we have variables, move on...
862
862
863 # for these types, show len() instead of data:
863 # for these types, show len() instead of data:
864 seq_types = [types.DictType,types.ListType,types.TupleType]
864 seq_types = [types.DictType,types.ListType,types.TupleType]
865
865
866 # for Numeric arrays, display summary info
866 # for Numeric arrays, display summary info
867 try:
867 try:
868 import Numeric
868 import Numeric
869 except ImportError:
869 except ImportError:
870 array_type = None
870 array_type = None
871 else:
871 else:
872 array_type = Numeric.ArrayType.__name__
872 array_type = Numeric.ArrayType.__name__
873
873
874 # Find all variable names and types so we can figure out column sizes
874 # Find all variable names and types so we can figure out column sizes
875 get_vars = lambda i: self.shell.user_ns[i]
875 get_vars = lambda i: self.shell.user_ns[i]
876 type_name = lambda v: type(v).__name__
876 type_name = lambda v: type(v).__name__
877 varlist = map(get_vars,varnames)
877 varlist = map(get_vars,varnames)
878
878
879 typelist = []
879 typelist = []
880 for vv in varlist:
880 for vv in varlist:
881 tt = type_name(vv)
881 tt = type_name(vv)
882 if tt=='instance':
882 if tt=='instance':
883 typelist.append(str(vv.__class__))
883 typelist.append(str(vv.__class__))
884 else:
884 else:
885 typelist.append(tt)
885 typelist.append(tt)
886
886
887 # column labels and # of spaces as separator
887 # column labels and # of spaces as separator
888 varlabel = 'Variable'
888 varlabel = 'Variable'
889 typelabel = 'Type'
889 typelabel = 'Type'
890 datalabel = 'Data/Info'
890 datalabel = 'Data/Info'
891 colsep = 3
891 colsep = 3
892 # variable format strings
892 # variable format strings
893 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
893 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
894 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
894 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
895 aformat = "%s: %s elems, type `%s`, %s bytes"
895 aformat = "%s: %s elems, type `%s`, %s bytes"
896 # find the size of the columns to format the output nicely
896 # find the size of the columns to format the output nicely
897 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
897 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
898 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
898 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
899 # table header
899 # table header
900 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
900 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
901 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
901 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
902 # and the table itself
902 # and the table itself
903 kb = 1024
903 kb = 1024
904 Mb = 1048576 # kb**2
904 Mb = 1048576 # kb**2
905 for vname,var,vtype in zip(varnames,varlist,typelist):
905 for vname,var,vtype in zip(varnames,varlist,typelist):
906 print itpl(vformat),
906 print itpl(vformat),
907 if vtype in seq_types:
907 if vtype in seq_types:
908 print len(var)
908 print len(var)
909 elif vtype==array_type:
909 elif vtype==array_type:
910 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
910 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
911 vsize = Numeric.size(var)
911 vsize = Numeric.size(var)
912 vbytes = vsize*var.itemsize()
912 vbytes = vsize*var.itemsize()
913 if vbytes < 100000:
913 if vbytes < 100000:
914 print aformat % (vshape,vsize,var.typecode(),vbytes)
914 print aformat % (vshape,vsize,var.typecode(),vbytes)
915 else:
915 else:
916 print aformat % (vshape,vsize,var.typecode(),vbytes),
916 print aformat % (vshape,vsize,var.typecode(),vbytes),
917 if vbytes < Mb:
917 if vbytes < Mb:
918 print '(%s kb)' % (vbytes/kb,)
918 print '(%s kb)' % (vbytes/kb,)
919 else:
919 else:
920 print '(%s Mb)' % (vbytes/Mb,)
920 print '(%s Mb)' % (vbytes/Mb,)
921 else:
921 else:
922 vstr = str(var).replace('\n','\\n')
922 vstr = str(var).replace('\n','\\n')
923 if len(vstr) < 50:
923 if len(vstr) < 50:
924 print vstr
924 print vstr
925 else:
925 else:
926 printpl(vfmt_short)
926 printpl(vfmt_short)
927
927
928 def magic_reset(self, parameter_s=''):
928 def magic_reset(self, parameter_s=''):
929 """Resets the namespace by removing all names defined by the user.
929 """Resets the namespace by removing all names defined by the user.
930
930
931 Input/Output history are left around in case you need them."""
931 Input/Output history are left around in case you need them."""
932
932
933 ans = raw_input(
933 ans = raw_input(
934 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
934 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
935 if not ans.lower() == 'y':
935 if not ans.lower() == 'y':
936 print 'Nothing done.'
936 print 'Nothing done.'
937 return
937 return
938 user_ns = self.shell.user_ns
938 user_ns = self.shell.user_ns
939 for i in self.magic_who_ls():
939 for i in self.magic_who_ls():
940 del(user_ns[i])
940 del(user_ns[i])
941
941
942 def magic_config(self,parameter_s=''):
942 def magic_config(self,parameter_s=''):
943 """Show IPython's internal configuration."""
943 """Show IPython's internal configuration."""
944
944
945 page('Current configuration structure:\n'+
945 page('Current configuration structure:\n'+
946 pformat(self.shell.rc.dict()))
946 pformat(self.shell.rc.dict()))
947
947
948 def magic_logstart(self,parameter_s=''):
948 def magic_logstart(self,parameter_s=''):
949 """Start logging anywhere in a session.
949 """Start logging anywhere in a session.
950
950
951 %logstart [-o|-t] [log_name [log_mode]]
951 %logstart [-o|-t] [log_name [log_mode]]
952
952
953 If no name is given, it defaults to a file named 'ipython_log.py' in your
953 If no name is given, it defaults to a file named 'ipython_log.py' in your
954 current directory, in 'rotate' mode (see below).
954 current directory, in 'rotate' mode (see below).
955
955
956 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
956 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
957 history up to that point and then continues logging.
957 history up to that point and then continues logging.
958
958
959 %logstart takes a second optional parameter: logging mode. This can be one
959 %logstart takes a second optional parameter: logging mode. This can be one
960 of (note that the modes are given unquoted):\\
960 of (note that the modes are given unquoted):\\
961 append: well, that says it.\\
961 append: well, that says it.\\
962 backup: rename (if exists) to name~ and start name.\\
962 backup: rename (if exists) to name~ and start name.\\
963 global: single logfile in your home dir, appended to.\\
963 global: single logfile in your home dir, appended to.\\
964 over : overwrite existing log.\\
964 over : overwrite existing log.\\
965 rotate: create rotating logs name.1~, name.2~, etc.
965 rotate: create rotating logs name.1~, name.2~, etc.
966
966
967 Options:
967 Options:
968
968
969 -o: log also IPython's output. In this mode, all commands which
969 -o: log also IPython's output. In this mode, all commands which
970 generate an Out[NN] prompt are recorded to the logfile, right after
970 generate an Out[NN] prompt are recorded to the logfile, right after
971 their corresponding input line. The output lines are always
971 their corresponding input line. The output lines are always
972 prepended with a '#[Out]# ' marker, so that the log remains valid
972 prepended with a '#[Out]# ' marker, so that the log remains valid
973 Python code.
973 Python code.
974
974
975 Since this marker is always the same, filtering only the output from
975 Since this marker is always the same, filtering only the output from
976 a log is very easy, using for example a simple awk call:
976 a log is very easy, using for example a simple awk call:
977
977
978 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
978 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
979
979
980 -t: put timestamps before each input line logged (these are put in
980 -t: put timestamps before each input line logged (these are put in
981 comments)."""
981 comments)."""
982
982
983 opts,par = self.parse_options(parameter_s,'ot')
983 opts,par = self.parse_options(parameter_s,'ot')
984 log_output = 'o' in opts
984 log_output = 'o' in opts
985 timestamp = 't' in opts
985 timestamp = 't' in opts
986
986
987 rc = self.shell.rc
987 rc = self.shell.rc
988 logger = self.shell.logger
988 logger = self.shell.logger
989
989
990 # if no args are given, the defaults set in the logger constructor by
990 # if no args are given, the defaults set in the logger constructor by
991 # ipytohn remain valid
991 # ipytohn remain valid
992 if par:
992 if par:
993 try:
993 try:
994 logfname,logmode = par.split()
994 logfname,logmode = par.split()
995 except:
995 except:
996 logfname = par
996 logfname = par
997 logmode = 'backup'
997 logmode = 'backup'
998 else:
998 else:
999 logfname = logger.logfname
999 logfname = logger.logfname
1000 logmode = logger.logmode
1000 logmode = logger.logmode
1001 # put logfname into rc struct as if it had been called on the command
1001 # put logfname into rc struct as if it had been called on the command
1002 # line, so it ends up saved in the log header Save it in case we need
1002 # line, so it ends up saved in the log header Save it in case we need
1003 # to restore it...
1003 # to restore it...
1004 old_logfile = rc.opts.get('logfile','')
1004 old_logfile = rc.opts.get('logfile','')
1005 if logfname:
1005 if logfname:
1006 logfname = os.path.expanduser(logfname)
1006 logfname = os.path.expanduser(logfname)
1007 rc.opts.logfile = logfname
1007 rc.opts.logfile = logfname
1008 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1008 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1009 try:
1009 try:
1010 started = logger.logstart(logfname,loghead,logmode,
1010 started = logger.logstart(logfname,loghead,logmode,
1011 log_output,timestamp)
1011 log_output,timestamp)
1012 except:
1012 except:
1013 rc.opts.logfile = old_logfile
1013 rc.opts.logfile = old_logfile
1014 warn("Couldn't start log: %s" % sys.exc_info()[1])
1014 warn("Couldn't start log: %s" % sys.exc_info()[1])
1015 else:
1015 else:
1016 # log input history up to this point, optionally interleaving
1016 # log input history up to this point, optionally interleaving
1017 # output if requested
1017 # output if requested
1018
1018
1019 if timestamp:
1019 if timestamp:
1020 # disable timestamping for the previous history, since we've
1020 # disable timestamping for the previous history, since we've
1021 # lost those already (no time machine here).
1021 # lost those already (no time machine here).
1022 logger.timestamp = False
1022 logger.timestamp = False
1023 if log_output:
1023 if log_output:
1024 log_write = logger.log_write
1024 log_write = logger.log_write
1025 input_hist = self.shell.input_hist
1025 input_hist = self.shell.input_hist
1026 output_hist = self.shell.output_hist
1026 output_hist = self.shell.output_hist
1027 for n in range(1,len(input_hist)-1):
1027 for n in range(1,len(input_hist)-1):
1028 log_write(input_hist[n].rstrip())
1028 log_write(input_hist[n].rstrip())
1029 if n in output_hist:
1029 if n in output_hist:
1030 log_write(repr(output_hist[n]),'output')
1030 log_write(repr(output_hist[n]),'output')
1031 else:
1031 else:
1032 logger.log_write(self.shell.input_hist[1:])
1032 logger.log_write(self.shell.input_hist[1:])
1033 if timestamp:
1033 if timestamp:
1034 # re-enable timestamping
1034 # re-enable timestamping
1035 logger.timestamp = True
1035 logger.timestamp = True
1036
1036
1037 print ('Activating auto-logging. '
1037 print ('Activating auto-logging. '
1038 'Current session state plus future input saved.')
1038 'Current session state plus future input saved.')
1039 logger.logstate()
1039 logger.logstate()
1040
1040
1041 def magic_logoff(self,parameter_s=''):
1041 def magic_logoff(self,parameter_s=''):
1042 """Temporarily stop logging.
1042 """Temporarily stop logging.
1043
1043
1044 You must have previously started logging."""
1044 You must have previously started logging."""
1045 self.shell.logger.switch_log(0)
1045 self.shell.logger.switch_log(0)
1046
1046
1047 def magic_logon(self,parameter_s=''):
1047 def magic_logon(self,parameter_s=''):
1048 """Restart logging.
1048 """Restart logging.
1049
1049
1050 This function is for restarting logging which you've temporarily
1050 This function is for restarting logging which you've temporarily
1051 stopped with %logoff. For starting logging for the first time, you
1051 stopped with %logoff. For starting logging for the first time, you
1052 must use the %logstart function, which allows you to specify an
1052 must use the %logstart function, which allows you to specify an
1053 optional log filename."""
1053 optional log filename."""
1054
1054
1055 self.shell.logger.switch_log(1)
1055 self.shell.logger.switch_log(1)
1056
1056
1057 def magic_logstate(self,parameter_s=''):
1057 def magic_logstate(self,parameter_s=''):
1058 """Print the status of the logging system."""
1058 """Print the status of the logging system."""
1059
1059
1060 self.shell.logger.logstate()
1060 self.shell.logger.logstate()
1061
1061
1062 def magic_pdb(self, parameter_s=''):
1062 def magic_pdb(self, parameter_s=''):
1063 """Control the calling of the pdb interactive debugger.
1063 """Control the calling of the pdb interactive debugger.
1064
1064
1065 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1065 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1066 argument it works as a toggle.
1066 argument it works as a toggle.
1067
1067
1068 When an exception is triggered, IPython can optionally call the
1068 When an exception is triggered, IPython can optionally call the
1069 interactive pdb debugger after the traceback printout. %pdb toggles
1069 interactive pdb debugger after the traceback printout. %pdb toggles
1070 this feature on and off."""
1070 this feature on and off."""
1071
1071
1072 par = parameter_s.strip().lower()
1072 par = parameter_s.strip().lower()
1073
1073
1074 if par:
1074 if par:
1075 try:
1075 try:
1076 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1076 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1077 except KeyError:
1077 except KeyError:
1078 print ('Incorrect argument. Use on/1, off/0, '
1078 print ('Incorrect argument. Use on/1, off/0, '
1079 'or nothing for a toggle.')
1079 'or nothing for a toggle.')
1080 return
1080 return
1081 else:
1081 else:
1082 # toggle
1082 # toggle
1083 new_pdb = not self.shell.InteractiveTB.call_pdb
1083 new_pdb = not self.shell.InteractiveTB.call_pdb
1084
1084
1085 # set on the shell
1085 # set on the shell
1086 self.shell.call_pdb = new_pdb
1086 self.shell.call_pdb = new_pdb
1087 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1087 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1088
1088
1089 def magic_prun(self, parameter_s ='',user_mode=1,
1089 def magic_prun(self, parameter_s ='',user_mode=1,
1090 opts=None,arg_lst=None,prog_ns=None):
1090 opts=None,arg_lst=None,prog_ns=None):
1091
1091
1092 """Run a statement through the python code profiler.
1092 """Run a statement through the python code profiler.
1093
1093
1094 Usage:\\
1094 Usage:\\
1095 %prun [options] statement
1095 %prun [options] statement
1096
1096
1097 The given statement (which doesn't require quote marks) is run via the
1097 The given statement (which doesn't require quote marks) is run via the
1098 python profiler in a manner similar to the profile.run() function.
1098 python profiler in a manner similar to the profile.run() function.
1099 Namespaces are internally managed to work correctly; profile.run
1099 Namespaces are internally managed to work correctly; profile.run
1100 cannot be used in IPython because it makes certain assumptions about
1100 cannot be used in IPython because it makes certain assumptions about
1101 namespaces which do not hold under IPython.
1101 namespaces which do not hold under IPython.
1102
1102
1103 Options:
1103 Options:
1104
1104
1105 -l <limit>: you can place restrictions on what or how much of the
1105 -l <limit>: you can place restrictions on what or how much of the
1106 profile gets printed. The limit value can be:
1106 profile gets printed. The limit value can be:
1107
1107
1108 * A string: only information for function names containing this string
1108 * A string: only information for function names containing this string
1109 is printed.
1109 is printed.
1110
1110
1111 * An integer: only these many lines are printed.
1111 * An integer: only these many lines are printed.
1112
1112
1113 * A float (between 0 and 1): this fraction of the report is printed
1113 * A float (between 0 and 1): this fraction of the report is printed
1114 (for example, use a limit of 0.4 to see the topmost 40% only).
1114 (for example, use a limit of 0.4 to see the topmost 40% only).
1115
1115
1116 You can combine several limits with repeated use of the option. For
1116 You can combine several limits with repeated use of the option. For
1117 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1117 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1118 information about class constructors.
1118 information about class constructors.
1119
1119
1120 -r: return the pstats.Stats object generated by the profiling. This
1120 -r: return the pstats.Stats object generated by the profiling. This
1121 object has all the information about the profile in it, and you can
1121 object has all the information about the profile in it, and you can
1122 later use it for further analysis or in other functions.
1122 later use it for further analysis or in other functions.
1123
1123
1124 Since magic functions have a particular form of calling which prevents
1124 Since magic functions have a particular form of calling which prevents
1125 you from writing something like:\\
1125 you from writing something like:\\
1126 In [1]: p = %prun -r print 4 # invalid!\\
1126 In [1]: p = %prun -r print 4 # invalid!\\
1127 you must instead use IPython's automatic variables to assign this:\\
1127 you must instead use IPython's automatic variables to assign this:\\
1128 In [1]: %prun -r print 4 \\
1128 In [1]: %prun -r print 4 \\
1129 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1129 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1130 In [2]: stats = _
1130 In [2]: stats = _
1131
1131
1132 If you really need to assign this value via an explicit function call,
1132 If you really need to assign this value via an explicit function call,
1133 you can always tap directly into the true name of the magic function
1133 you can always tap directly into the true name of the magic function
1134 by using the ipmagic function (which IPython automatically adds to the
1134 by using the ipmagic function (which IPython automatically adds to the
1135 builtins):\\
1135 builtins):\\
1136 In [3]: stats = ipmagic('prun','-r print 4')
1136 In [3]: stats = ipmagic('prun','-r print 4')
1137
1137
1138 You can type ipmagic? for more details on ipmagic.
1138 You can type ipmagic? for more details on ipmagic.
1139
1139
1140 -s <key>: sort profile by given key. You can provide more than one key
1140 -s <key>: sort profile by given key. You can provide more than one key
1141 by using the option several times: '-s key1 -s key2 -s key3...'. The
1141 by using the option several times: '-s key1 -s key2 -s key3...'. The
1142 default sorting key is 'time'.
1142 default sorting key is 'time'.
1143
1143
1144 The following is copied verbatim from the profile documentation
1144 The following is copied verbatim from the profile documentation
1145 referenced below:
1145 referenced below:
1146
1146
1147 When more than one key is provided, additional keys are used as
1147 When more than one key is provided, additional keys are used as
1148 secondary criteria when the there is equality in all keys selected
1148 secondary criteria when the there is equality in all keys selected
1149 before them.
1149 before them.
1150
1150
1151 Abbreviations can be used for any key names, as long as the
1151 Abbreviations can be used for any key names, as long as the
1152 abbreviation is unambiguous. The following are the keys currently
1152 abbreviation is unambiguous. The following are the keys currently
1153 defined:
1153 defined:
1154
1154
1155 Valid Arg Meaning\\
1155 Valid Arg Meaning\\
1156 "calls" call count\\
1156 "calls" call count\\
1157 "cumulative" cumulative time\\
1157 "cumulative" cumulative time\\
1158 "file" file name\\
1158 "file" file name\\
1159 "module" file name\\
1159 "module" file name\\
1160 "pcalls" primitive call count\\
1160 "pcalls" primitive call count\\
1161 "line" line number\\
1161 "line" line number\\
1162 "name" function name\\
1162 "name" function name\\
1163 "nfl" name/file/line\\
1163 "nfl" name/file/line\\
1164 "stdname" standard name\\
1164 "stdname" standard name\\
1165 "time" internal time
1165 "time" internal time
1166
1166
1167 Note that all sorts on statistics are in descending order (placing
1167 Note that all sorts on statistics are in descending order (placing
1168 most time consuming items first), where as name, file, and line number
1168 most time consuming items first), where as name, file, and line number
1169 searches are in ascending order (i.e., alphabetical). The subtle
1169 searches are in ascending order (i.e., alphabetical). The subtle
1170 distinction between "nfl" and "stdname" is that the standard name is a
1170 distinction between "nfl" and "stdname" is that the standard name is a
1171 sort of the name as printed, which means that the embedded line
1171 sort of the name as printed, which means that the embedded line
1172 numbers get compared in an odd way. For example, lines 3, 20, and 40
1172 numbers get compared in an odd way. For example, lines 3, 20, and 40
1173 would (if the file names were the same) appear in the string order
1173 would (if the file names were the same) appear in the string order
1174 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1174 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1175 line numbers. In fact, sort_stats("nfl") is the same as
1175 line numbers. In fact, sort_stats("nfl") is the same as
1176 sort_stats("name", "file", "line").
1176 sort_stats("name", "file", "line").
1177
1177
1178 -T <filename>: save profile results as shown on screen to a text
1178 -T <filename>: save profile results as shown on screen to a text
1179 file. The profile is still shown on screen.
1179 file. The profile is still shown on screen.
1180
1180
1181 -D <filename>: save (via dump_stats) profile statistics to given
1181 -D <filename>: save (via dump_stats) profile statistics to given
1182 filename. This data is in a format understod by the pstats module, and
1182 filename. This data is in a format understod by the pstats module, and
1183 is generated by a call to the dump_stats() method of profile
1183 is generated by a call to the dump_stats() method of profile
1184 objects. The profile is still shown on screen.
1184 objects. The profile is still shown on screen.
1185
1185
1186 If you want to run complete programs under the profiler's control, use
1186 If you want to run complete programs under the profiler's control, use
1187 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1187 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1188 contains profiler specific options as described here.
1188 contains profiler specific options as described here.
1189
1189
1190 You can read the complete documentation for the profile module with:\\
1190 You can read the complete documentation for the profile module with:\\
1191 In [1]: import profile; profile.help() """
1191 In [1]: import profile; profile.help() """
1192
1192
1193 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1193 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1194 # protect user quote marks
1194 # protect user quote marks
1195 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1195 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1196
1196
1197 if user_mode: # regular user call
1197 if user_mode: # regular user call
1198 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1198 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1199 list_all=1)
1199 list_all=1)
1200 namespace = self.shell.user_ns
1200 namespace = self.shell.user_ns
1201 else: # called to run a program by %run -p
1201 else: # called to run a program by %run -p
1202 try:
1202 try:
1203 filename = get_py_filename(arg_lst[0])
1203 filename = get_py_filename(arg_lst[0])
1204 except IOError,msg:
1204 except IOError,msg:
1205 error(msg)
1205 error(msg)
1206 return
1206 return
1207
1207
1208 arg_str = 'execfile(filename,prog_ns)'
1208 arg_str = 'execfile(filename,prog_ns)'
1209 namespace = locals()
1209 namespace = locals()
1210
1210
1211 opts.merge(opts_def)
1211 opts.merge(opts_def)
1212
1212
1213 prof = profile.Profile()
1213 prof = profile.Profile()
1214 try:
1214 try:
1215 prof = prof.runctx(arg_str,namespace,namespace)
1215 prof = prof.runctx(arg_str,namespace,namespace)
1216 sys_exit = ''
1216 sys_exit = ''
1217 except SystemExit:
1217 except SystemExit:
1218 sys_exit = """*** SystemExit exception caught in code being profiled."""
1218 sys_exit = """*** SystemExit exception caught in code being profiled."""
1219
1219
1220 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1220 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1221
1221
1222 lims = opts.l
1222 lims = opts.l
1223 if lims:
1223 if lims:
1224 lims = [] # rebuild lims with ints/floats/strings
1224 lims = [] # rebuild lims with ints/floats/strings
1225 for lim in opts.l:
1225 for lim in opts.l:
1226 try:
1226 try:
1227 lims.append(int(lim))
1227 lims.append(int(lim))
1228 except ValueError:
1228 except ValueError:
1229 try:
1229 try:
1230 lims.append(float(lim))
1230 lims.append(float(lim))
1231 except ValueError:
1231 except ValueError:
1232 lims.append(lim)
1232 lims.append(lim)
1233
1233
1234 # trap output
1234 # trap output
1235 sys_stdout = sys.stdout
1235 sys_stdout = sys.stdout
1236 stdout_trap = StringIO()
1236 stdout_trap = StringIO()
1237 try:
1237 try:
1238 sys.stdout = stdout_trap
1238 sys.stdout = stdout_trap
1239 stats.print_stats(*lims)
1239 stats.print_stats(*lims)
1240 finally:
1240 finally:
1241 sys.stdout = sys_stdout
1241 sys.stdout = sys_stdout
1242 output = stdout_trap.getvalue()
1242 output = stdout_trap.getvalue()
1243 output = output.rstrip()
1243 output = output.rstrip()
1244
1244
1245 page(output,screen_lines=self.shell.rc.screen_length)
1245 page(output,screen_lines=self.shell.rc.screen_length)
1246 print sys_exit,
1246 print sys_exit,
1247
1247
1248 dump_file = opts.D[0]
1248 dump_file = opts.D[0]
1249 text_file = opts.T[0]
1249 text_file = opts.T[0]
1250 if dump_file:
1250 if dump_file:
1251 prof.dump_stats(dump_file)
1251 prof.dump_stats(dump_file)
1252 print '\n*** Profile stats marshalled to file',\
1252 print '\n*** Profile stats marshalled to file',\
1253 `dump_file`+'.',sys_exit
1253 `dump_file`+'.',sys_exit
1254 if text_file:
1254 if text_file:
1255 file(text_file,'w').write(output)
1255 file(text_file,'w').write(output)
1256 print '\n*** Profile printout saved to text file',\
1256 print '\n*** Profile printout saved to text file',\
1257 `text_file`+'.',sys_exit
1257 `text_file`+'.',sys_exit
1258
1258
1259 if opts.has_key('r'):
1259 if opts.has_key('r'):
1260 return stats
1260 return stats
1261 else:
1261 else:
1262 return None
1262 return None
1263
1263
1264 def magic_run(self, parameter_s ='',runner=None):
1264 def magic_run(self, parameter_s ='',runner=None):
1265 """Run the named file inside IPython as a program.
1265 """Run the named file inside IPython as a program.
1266
1266
1267 Usage:\\
1267 Usage:\\
1268 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1268 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1269
1269
1270 Parameters after the filename are passed as command-line arguments to
1270 Parameters after the filename are passed as command-line arguments to
1271 the program (put in sys.argv). Then, control returns to IPython's
1271 the program (put in sys.argv). Then, control returns to IPython's
1272 prompt.
1272 prompt.
1273
1273
1274 This is similar to running at a system prompt:\\
1274 This is similar to running at a system prompt:\\
1275 $ python file args\\
1275 $ python file args\\
1276 but with the advantage of giving you IPython's tracebacks, and of
1276 but with the advantage of giving you IPython's tracebacks, and of
1277 loading all variables into your interactive namespace for further use
1277 loading all variables into your interactive namespace for further use
1278 (unless -p is used, see below).
1278 (unless -p is used, see below).
1279
1279
1280 The file is executed in a namespace initially consisting only of
1280 The file is executed in a namespace initially consisting only of
1281 __name__=='__main__' and sys.argv constructed as indicated. It thus
1281 __name__=='__main__' and sys.argv constructed as indicated. It thus
1282 sees its environment as if it were being run as a stand-alone
1282 sees its environment as if it were being run as a stand-alone
1283 program. But after execution, the IPython interactive namespace gets
1283 program. But after execution, the IPython interactive namespace gets
1284 updated with all variables defined in the program (except for __name__
1284 updated with all variables defined in the program (except for __name__
1285 and sys.argv). This allows for very convenient loading of code for
1285 and sys.argv). This allows for very convenient loading of code for
1286 interactive work, while giving each program a 'clean sheet' to run in.
1286 interactive work, while giving each program a 'clean sheet' to run in.
1287
1287
1288 Options:
1288 Options:
1289
1289
1290 -n: __name__ is NOT set to '__main__', but to the running file's name
1290 -n: __name__ is NOT set to '__main__', but to the running file's name
1291 without extension (as python does under import). This allows running
1291 without extension (as python does under import). This allows running
1292 scripts and reloading the definitions in them without calling code
1292 scripts and reloading the definitions in them without calling code
1293 protected by an ' if __name__ == "__main__" ' clause.
1293 protected by an ' if __name__ == "__main__" ' clause.
1294
1294
1295 -i: run the file in IPython's namespace instead of an empty one. This
1295 -i: run the file in IPython's namespace instead of an empty one. This
1296 is useful if you are experimenting with code written in a text editor
1296 is useful if you are experimenting with code written in a text editor
1297 which depends on variables defined interactively.
1297 which depends on variables defined interactively.
1298
1298
1299 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1299 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1300 being run. This is particularly useful if IPython is being used to
1300 being run. This is particularly useful if IPython is being used to
1301 run unittests, which always exit with a sys.exit() call. In such
1301 run unittests, which always exit with a sys.exit() call. In such
1302 cases you are interested in the output of the test results, not in
1302 cases you are interested in the output of the test results, not in
1303 seeing a traceback of the unittest module.
1303 seeing a traceback of the unittest module.
1304
1304
1305 -t: print timing information at the end of the run. IPython will give
1305 -t: print timing information at the end of the run. IPython will give
1306 you an estimated CPU time consumption for your script, which under
1306 you an estimated CPU time consumption for your script, which under
1307 Unix uses the resource module to avoid the wraparound problems of
1307 Unix uses the resource module to avoid the wraparound problems of
1308 time.clock(). Under Unix, an estimate of time spent on system tasks
1308 time.clock(). Under Unix, an estimate of time spent on system tasks
1309 is also given (for Windows platforms this is reported as 0.0).
1309 is also given (for Windows platforms this is reported as 0.0).
1310
1310
1311 If -t is given, an additional -N<N> option can be given, where <N>
1311 If -t is given, an additional -N<N> option can be given, where <N>
1312 must be an integer indicating how many times you want the script to
1312 must be an integer indicating how many times you want the script to
1313 run. The final timing report will include total and per run results.
1313 run. The final timing report will include total and per run results.
1314
1314
1315 For example (testing the script uniq_stable.py):
1315 For example (testing the script uniq_stable.py):
1316
1316
1317 In [1]: run -t uniq_stable
1317 In [1]: run -t uniq_stable
1318
1318
1319 IPython CPU timings (estimated):\\
1319 IPython CPU timings (estimated):\\
1320 User : 0.19597 s.\\
1320 User : 0.19597 s.\\
1321 System: 0.0 s.\\
1321 System: 0.0 s.\\
1322
1322
1323 In [2]: run -t -N5 uniq_stable
1323 In [2]: run -t -N5 uniq_stable
1324
1324
1325 IPython CPU timings (estimated):\\
1325 IPython CPU timings (estimated):\\
1326 Total runs performed: 5\\
1326 Total runs performed: 5\\
1327 Times : Total Per run\\
1327 Times : Total Per run\\
1328 User : 0.910862 s, 0.1821724 s.\\
1328 User : 0.910862 s, 0.1821724 s.\\
1329 System: 0.0 s, 0.0 s.
1329 System: 0.0 s, 0.0 s.
1330
1330
1331 -d: run your program under the control of pdb, the Python debugger.
1331 -d: run your program under the control of pdb, the Python debugger.
1332 This allows you to execute your program step by step, watch variables,
1332 This allows you to execute your program step by step, watch variables,
1333 etc. Internally, what IPython does is similar to calling:
1333 etc. Internally, what IPython does is similar to calling:
1334
1334
1335 pdb.run('execfile("YOURFILENAME")')
1335 pdb.run('execfile("YOURFILENAME")')
1336
1336
1337 with a breakpoint set on line 1 of your file. You can change the line
1337 with a breakpoint set on line 1 of your file. You can change the line
1338 number for this automatic breakpoint to be <N> by using the -bN option
1338 number for this automatic breakpoint to be <N> by using the -bN option
1339 (where N must be an integer). For example:
1339 (where N must be an integer). For example:
1340
1340
1341 %run -d -b40 myscript
1341 %run -d -b40 myscript
1342
1342
1343 will set the first breakpoint at line 40 in myscript.py. Note that
1343 will set the first breakpoint at line 40 in myscript.py. Note that
1344 the first breakpoint must be set on a line which actually does
1344 the first breakpoint must be set on a line which actually does
1345 something (not a comment or docstring) for it to stop execution.
1345 something (not a comment or docstring) for it to stop execution.
1346
1346
1347 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1347 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1348 first enter 'c' (without qoutes) to start execution up to the first
1348 first enter 'c' (without qoutes) to start execution up to the first
1349 breakpoint.
1349 breakpoint.
1350
1350
1351 Entering 'help' gives information about the use of the debugger. You
1351 Entering 'help' gives information about the use of the debugger. You
1352 can easily see pdb's full documentation with "import pdb;pdb.help()"
1352 can easily see pdb's full documentation with "import pdb;pdb.help()"
1353 at a prompt.
1353 at a prompt.
1354
1354
1355 -p: run program under the control of the Python profiler module (which
1355 -p: run program under the control of the Python profiler module (which
1356 prints a detailed report of execution times, function calls, etc).
1356 prints a detailed report of execution times, function calls, etc).
1357
1357
1358 You can pass other options after -p which affect the behavior of the
1358 You can pass other options after -p which affect the behavior of the
1359 profiler itself. See the docs for %prun for details.
1359 profiler itself. See the docs for %prun for details.
1360
1360
1361 In this mode, the program's variables do NOT propagate back to the
1361 In this mode, the program's variables do NOT propagate back to the
1362 IPython interactive namespace (because they remain in the namespace
1362 IPython interactive namespace (because they remain in the namespace
1363 where the profiler executes them).
1363 where the profiler executes them).
1364
1364
1365 Internally this triggers a call to %prun, see its documentation for
1365 Internally this triggers a call to %prun, see its documentation for
1366 details on the options available specifically for profiling."""
1366 details on the options available specifically for profiling."""
1367
1367
1368 # get arguments and set sys.argv for program to be run.
1368 # get arguments and set sys.argv for program to be run.
1369 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1369 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1370 mode='list',list_all=1)
1370 mode='list',list_all=1)
1371
1371
1372 try:
1372 try:
1373 filename = get_py_filename(arg_lst[0])
1373 filename = get_py_filename(arg_lst[0])
1374 except IndexError:
1374 except IndexError:
1375 warn('you must provide at least a filename.')
1375 warn('you must provide at least a filename.')
1376 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1376 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1377 return
1377 return
1378 except IOError,msg:
1378 except IOError,msg:
1379 error(msg)
1379 error(msg)
1380 return
1380 return
1381
1381
1382 # Control the response to exit() calls made by the script being run
1382 # Control the response to exit() calls made by the script being run
1383 exit_ignore = opts.has_key('e')
1383 exit_ignore = opts.has_key('e')
1384
1384
1385 # Make sure that the running script gets a proper sys.argv as if it
1385 # Make sure that the running script gets a proper sys.argv as if it
1386 # were run from a system shell.
1386 # were run from a system shell.
1387 save_argv = sys.argv # save it for later restoring
1387 save_argv = sys.argv # save it for later restoring
1388 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1388 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1389
1389
1390 if opts.has_key('i'):
1390 if opts.has_key('i'):
1391 prog_ns = self.shell.user_ns
1391 prog_ns = self.shell.user_ns
1392 __name__save = self.shell.user_ns['__name__']
1392 __name__save = self.shell.user_ns['__name__']
1393 prog_ns['__name__'] = '__main__'
1393 prog_ns['__name__'] = '__main__'
1394 else:
1394 else:
1395 if opts.has_key('n'):
1395 if opts.has_key('n'):
1396 name = os.path.splitext(os.path.basename(filename))[0]
1396 name = os.path.splitext(os.path.basename(filename))[0]
1397 else:
1397 else:
1398 name = '__main__'
1398 name = '__main__'
1399 prog_ns = {'__name__':name}
1399 prog_ns = {'__name__':name}
1400
1400
1401 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1401 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1402 # set the __file__ global in the script's namespace
1402 # set the __file__ global in the script's namespace
1403 prog_ns['__file__'] = filename
1403 prog_ns['__file__'] = filename
1404
1404
1405 # pickle fix. See iplib for an explanation. But we need to make sure
1405 # pickle fix. See iplib for an explanation. But we need to make sure
1406 # that, if we overwrite __main__, we replace it at the end
1406 # that, if we overwrite __main__, we replace it at the end
1407 if prog_ns['__name__'] == '__main__':
1407 if prog_ns['__name__'] == '__main__':
1408 restore_main = sys.modules['__main__']
1408 restore_main = sys.modules['__main__']
1409 else:
1409 else:
1410 restore_main = False
1410 restore_main = False
1411
1411
1412 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1412 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1413
1413
1414 stats = None
1414 stats = None
1415 try:
1415 try:
1416 if opts.has_key('p'):
1416 if opts.has_key('p'):
1417 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1417 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1418 else:
1418 else:
1419 if opts.has_key('d'):
1419 if opts.has_key('d'):
1420 deb = Debugger.Pdb(self.shell.rc.colors)
1420 deb = Debugger.Pdb(self.shell.rc.colors)
1421 # reset Breakpoint state, which is moronically kept
1421 # reset Breakpoint state, which is moronically kept
1422 # in a class
1422 # in a class
1423 bdb.Breakpoint.next = 1
1423 bdb.Breakpoint.next = 1
1424 bdb.Breakpoint.bplist = {}
1424 bdb.Breakpoint.bplist = {}
1425 bdb.Breakpoint.bpbynumber = [None]
1425 bdb.Breakpoint.bpbynumber = [None]
1426 # Set an initial breakpoint to stop execution
1426 # Set an initial breakpoint to stop execution
1427 maxtries = 10
1427 maxtries = 10
1428 bp = int(opts.get('b',[1])[0])
1428 bp = int(opts.get('b',[1])[0])
1429 checkline = deb.checkline(filename,bp)
1429 checkline = deb.checkline(filename,bp)
1430 if not checkline:
1430 if not checkline:
1431 for bp in range(bp+1,bp+maxtries+1):
1431 for bp in range(bp+1,bp+maxtries+1):
1432 if deb.checkline(filename,bp):
1432 if deb.checkline(filename,bp):
1433 break
1433 break
1434 else:
1434 else:
1435 msg = ("\nI failed to find a valid line to set "
1435 msg = ("\nI failed to find a valid line to set "
1436 "a breakpoint\n"
1436 "a breakpoint\n"
1437 "after trying up to line: %s.\n"
1437 "after trying up to line: %s.\n"
1438 "Please set a valid breakpoint manually "
1438 "Please set a valid breakpoint manually "
1439 "with the -b option." % bp)
1439 "with the -b option." % bp)
1440 error(msg)
1440 error(msg)
1441 return
1441 return
1442 # if we find a good linenumber, set the breakpoint
1442 # if we find a good linenumber, set the breakpoint
1443 deb.do_break('%s:%s' % (filename,bp))
1443 deb.do_break('%s:%s' % (filename,bp))
1444 # Start file run
1444 # Start file run
1445 print "NOTE: Enter 'c' at the",
1445 print "NOTE: Enter 'c' at the",
1446 print "ipdb> prompt to start your script."
1446 print "ipdb> prompt to start your script."
1447 try:
1447 try:
1448 deb.run('execfile("%s")' % filename,prog_ns)
1448 deb.run('execfile("%s")' % filename,prog_ns)
1449 except:
1449 except:
1450 etype, value, tb = sys.exc_info()
1450 etype, value, tb = sys.exc_info()
1451 # Skip three frames in the traceback: the %run one,
1451 # Skip three frames in the traceback: the %run one,
1452 # one inside bdb.py, and the command-line typed by the
1452 # one inside bdb.py, and the command-line typed by the
1453 # user (run by exec in pdb itself).
1453 # user (run by exec in pdb itself).
1454 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1454 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1455 else:
1455 else:
1456 if runner is None:
1456 if runner is None:
1457 runner = self.shell.safe_execfile
1457 runner = self.shell.safe_execfile
1458 if opts.has_key('t'):
1458 if opts.has_key('t'):
1459 try:
1459 try:
1460 nruns = int(opts['N'][0])
1460 nruns = int(opts['N'][0])
1461 if nruns < 1:
1461 if nruns < 1:
1462 error('Number of runs must be >=1')
1462 error('Number of runs must be >=1')
1463 return
1463 return
1464 except (KeyError):
1464 except (KeyError):
1465 nruns = 1
1465 nruns = 1
1466 if nruns == 1:
1466 if nruns == 1:
1467 t0 = clock2()
1467 t0 = clock2()
1468 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1468 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1469 t1 = clock2()
1469 t1 = clock2()
1470 t_usr = t1[0]-t0[0]
1470 t_usr = t1[0]-t0[0]
1471 t_sys = t1[1]-t1[1]
1471 t_sys = t1[1]-t1[1]
1472 print "\nIPython CPU timings (estimated):"
1472 print "\nIPython CPU timings (estimated):"
1473 print " User : %10s s." % t_usr
1473 print " User : %10s s." % t_usr
1474 print " System: %10s s." % t_sys
1474 print " System: %10s s." % t_sys
1475 else:
1475 else:
1476 runs = range(nruns)
1476 runs = range(nruns)
1477 t0 = clock2()
1477 t0 = clock2()
1478 for nr in runs:
1478 for nr in runs:
1479 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1479 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1480 t1 = clock2()
1480 t1 = clock2()
1481 t_usr = t1[0]-t0[0]
1481 t_usr = t1[0]-t0[0]
1482 t_sys = t1[1]-t1[1]
1482 t_sys = t1[1]-t1[1]
1483 print "\nIPython CPU timings (estimated):"
1483 print "\nIPython CPU timings (estimated):"
1484 print "Total runs performed:",nruns
1484 print "Total runs performed:",nruns
1485 print " Times : %10s %10s" % ('Total','Per run')
1485 print " Times : %10s %10s" % ('Total','Per run')
1486 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1486 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1487 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1487 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1488
1488
1489 else:
1489 else:
1490 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1490 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1491 if opts.has_key('i'):
1491 if opts.has_key('i'):
1492 self.shell.user_ns['__name__'] = __name__save
1492 self.shell.user_ns['__name__'] = __name__save
1493 else:
1493 else:
1494 # update IPython interactive namespace
1494 # update IPython interactive namespace
1495 del prog_ns['__name__']
1495 del prog_ns['__name__']
1496 self.shell.user_ns.update(prog_ns)
1496 self.shell.user_ns.update(prog_ns)
1497 finally:
1497 finally:
1498 sys.argv = save_argv
1498 sys.argv = save_argv
1499 if restore_main:
1499 if restore_main:
1500 sys.modules['__main__'] = restore_main
1500 sys.modules['__main__'] = restore_main
1501 return stats
1501 return stats
1502
1502
1503 def magic_runlog(self, parameter_s =''):
1503 def magic_runlog(self, parameter_s =''):
1504 """Run files as logs.
1504 """Run files as logs.
1505
1505
1506 Usage:\\
1506 Usage:\\
1507 %runlog file1 file2 ...
1507 %runlog file1 file2 ...
1508
1508
1509 Run the named files (treating them as log files) in sequence inside
1509 Run the named files (treating them as log files) in sequence inside
1510 the interpreter, and return to the prompt. This is much slower than
1510 the interpreter, and return to the prompt. This is much slower than
1511 %run because each line is executed in a try/except block, but it
1511 %run because each line is executed in a try/except block, but it
1512 allows running files with syntax errors in them.
1512 allows running files with syntax errors in them.
1513
1513
1514 Normally IPython will guess when a file is one of its own logfiles, so
1514 Normally IPython will guess when a file is one of its own logfiles, so
1515 you can typically use %run even for logs. This shorthand allows you to
1515 you can typically use %run even for logs. This shorthand allows you to
1516 force any file to be treated as a log file."""
1516 force any file to be treated as a log file."""
1517
1517
1518 for f in parameter_s.split():
1518 for f in parameter_s.split():
1519 self.shell.safe_execfile(f,self.shell.user_ns,
1519 self.shell.safe_execfile(f,self.shell.user_ns,
1520 self.shell.user_ns,islog=1)
1520 self.shell.user_ns,islog=1)
1521
1521
1522 def magic_time(self,parameter_s = ''):
1522 def magic_time(self,parameter_s = ''):
1523 """Time execution of a Python statement or expression.
1523 """Time execution of a Python statement or expression.
1524
1524
1525 The CPU and wall clock times are printed, and the value of the
1525 The CPU and wall clock times are printed, and the value of the
1526 expression (if any) is returned. Note that under Win32, system time
1526 expression (if any) is returned. Note that under Win32, system time
1527 is always reported as 0, since it can not be measured.
1527 is always reported as 0, since it can not be measured.
1528
1528
1529 This function provides very basic timing functionality. In Python
1529 This function provides very basic timing functionality. In Python
1530 2.3, the timeit module offers more control and sophistication, but for
1530 2.3, the timeit module offers more control and sophistication, but for
1531 now IPython supports Python 2.2, so we can not rely on timeit being
1531 now IPython supports Python 2.2, so we can not rely on timeit being
1532 present.
1532 present.
1533
1533
1534 Some examples:
1534 Some examples:
1535
1535
1536 In [1]: time 2**128
1536 In [1]: time 2**128
1537 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1537 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1538 Wall time: 0.00
1538 Wall time: 0.00
1539 Out[1]: 340282366920938463463374607431768211456L
1539 Out[1]: 340282366920938463463374607431768211456L
1540
1540
1541 In [2]: n = 1000000
1541 In [2]: n = 1000000
1542
1542
1543 In [3]: time sum(range(n))
1543 In [3]: time sum(range(n))
1544 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1544 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1545 Wall time: 1.37
1545 Wall time: 1.37
1546 Out[3]: 499999500000L
1546 Out[3]: 499999500000L
1547
1547
1548 In [4]: time print 'hello world'
1548 In [4]: time print 'hello world'
1549 hello world
1549 hello world
1550 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1550 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1551 Wall time: 0.00
1551 Wall time: 0.00
1552 """
1552 """
1553
1553
1554 # fail immediately if the given expression can't be compiled
1554 # fail immediately if the given expression can't be compiled
1555 try:
1555 try:
1556 mode = 'eval'
1556 mode = 'eval'
1557 code = compile(parameter_s,'<timed eval>',mode)
1557 code = compile(parameter_s,'<timed eval>',mode)
1558 except SyntaxError:
1558 except SyntaxError:
1559 mode = 'exec'
1559 mode = 'exec'
1560 code = compile(parameter_s,'<timed exec>',mode)
1560 code = compile(parameter_s,'<timed exec>',mode)
1561 # skew measurement as little as possible
1561 # skew measurement as little as possible
1562 glob = self.shell.user_ns
1562 glob = self.shell.user_ns
1563 clk = clock2
1563 clk = clock2
1564 wtime = time.time
1564 wtime = time.time
1565 # time execution
1565 # time execution
1566 wall_st = wtime()
1566 wall_st = wtime()
1567 if mode=='eval':
1567 if mode=='eval':
1568 st = clk()
1568 st = clk()
1569 out = eval(code,glob)
1569 out = eval(code,glob)
1570 end = clk()
1570 end = clk()
1571 else:
1571 else:
1572 st = clk()
1572 st = clk()
1573 exec code in glob
1573 exec code in glob
1574 end = clk()
1574 end = clk()
1575 out = None
1575 out = None
1576 wall_end = wtime()
1576 wall_end = wtime()
1577 # Compute actual times and report
1577 # Compute actual times and report
1578 wall_time = wall_end-wall_st
1578 wall_time = wall_end-wall_st
1579 cpu_user = end[0]-st[0]
1579 cpu_user = end[0]-st[0]
1580 cpu_sys = end[1]-st[1]
1580 cpu_sys = end[1]-st[1]
1581 cpu_tot = cpu_user+cpu_sys
1581 cpu_tot = cpu_user+cpu_sys
1582 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1582 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1583 (cpu_user,cpu_sys,cpu_tot)
1583 (cpu_user,cpu_sys,cpu_tot)
1584 print "Wall time: %.2f" % wall_time
1584 print "Wall time: %.2f" % wall_time
1585 return out
1585 return out
1586
1586
1587 def magic_macro(self,parameter_s = ''):
1587 def magic_macro(self,parameter_s = ''):
1588 """Define a set of input lines as a macro for future re-execution.
1588 """Define a set of input lines as a macro for future re-execution.
1589
1589
1590 Usage:\\
1590 Usage:\\
1591 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1591 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1592
1592
1593 This will define a global variable called `name` which is a string
1593 This will define a global variable called `name` which is a string
1594 made of joining the slices and lines you specify (n1,n2,... numbers
1594 made of joining the slices and lines you specify (n1,n2,... numbers
1595 above) from your input history into a single string. This variable
1595 above) from your input history into a single string. This variable
1596 acts like an automatic function which re-executes those lines as if
1596 acts like an automatic function which re-executes those lines as if
1597 you had typed them. You just type 'name' at the prompt and the code
1597 you had typed them. You just type 'name' at the prompt and the code
1598 executes.
1598 executes.
1599
1599
1600 The notation for indicating number ranges is: n1-n2 means 'use line
1600 The notation for indicating number ranges is: n1-n2 means 'use line
1601 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1601 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1602 using the lines numbered 5,6 and 7.
1602 using the lines numbered 5,6 and 7.
1603
1603
1604 Note: as a 'hidden' feature, you can also use traditional python slice
1604 Note: as a 'hidden' feature, you can also use traditional python slice
1605 notation, where N:M means numbers N through M-1.
1605 notation, where N:M means numbers N through M-1.
1606
1606
1607 For example, if your history contains (%hist prints it):
1607 For example, if your history contains (%hist prints it):
1608
1608
1609 44: x=1\\
1609 44: x=1\\
1610 45: y=3\\
1610 45: y=3\\
1611 46: z=x+y\\
1611 46: z=x+y\\
1612 47: print x\\
1612 47: print x\\
1613 48: a=5\\
1613 48: a=5\\
1614 49: print 'x',x,'y',y\\
1614 49: print 'x',x,'y',y\\
1615
1615
1616 you can create a macro with lines 44 through 47 (included) and line 49
1616 you can create a macro with lines 44 through 47 (included) and line 49
1617 called my_macro with:
1617 called my_macro with:
1618
1618
1619 In [51]: %macro my_macro 44-47 49
1619 In [51]: %macro my_macro 44-47 49
1620
1620
1621 Now, typing `my_macro` (without quotes) will re-execute all this code
1621 Now, typing `my_macro` (without quotes) will re-execute all this code
1622 in one pass.
1622 in one pass.
1623
1623
1624 You don't need to give the line-numbers in order, and any given line
1624 You don't need to give the line-numbers in order, and any given line
1625 number can appear multiple times. You can assemble macros with any
1625 number can appear multiple times. You can assemble macros with any
1626 lines from your input history in any order.
1626 lines from your input history in any order.
1627
1627
1628 The macro is a simple object which holds its value in an attribute,
1628 The macro is a simple object which holds its value in an attribute,
1629 but IPython's display system checks for macros and executes them as
1629 but IPython's display system checks for macros and executes them as
1630 code instead of printing them when you type their name.
1630 code instead of printing them when you type their name.
1631
1631
1632 You can view a macro's contents by explicitly printing it with:
1632 You can view a macro's contents by explicitly printing it with:
1633
1633
1634 'print macro_name'.
1634 'print macro_name'.
1635
1635
1636 For one-off cases which DON'T contain magic function calls in them you
1636 For one-off cases which DON'T contain magic function calls in them you
1637 can obtain similar results by explicitly executing slices from your
1637 can obtain similar results by explicitly executing slices from your
1638 input history with:
1638 input history with:
1639
1639
1640 In [60]: exec In[44:48]+In[49]"""
1640 In [60]: exec In[44:48]+In[49]"""
1641
1641
1642 args = parameter_s.split()
1642 args = parameter_s.split()
1643 name,ranges = args[0], args[1:]
1643 name,ranges = args[0], args[1:]
1644 #print 'rng',ranges # dbg
1644 #print 'rng',ranges # dbg
1645 lines = self.extract_input_slices(ranges)
1645 lines = self.extract_input_slices(ranges)
1646 macro = Macro(lines)
1646 macro = Macro(lines)
1647 self.shell.user_ns.update({name:macro})
1647 self.shell.user_ns.update({name:macro})
1648 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1648 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1649 print 'Macro contents:'
1649 print 'Macro contents:'
1650 print macro,
1650 print macro,
1651
1651
1652 def magic_save(self,parameter_s = ''):
1652 def magic_save(self,parameter_s = ''):
1653 """Save a set of lines to a given filename.
1653 """Save a set of lines to a given filename.
1654
1654
1655 Usage:\\
1655 Usage:\\
1656 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1656 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1657
1657
1658 This function uses the same syntax as %macro for line extraction, but
1658 This function uses the same syntax as %macro for line extraction, but
1659 instead of creating a macro it saves the resulting string to the
1659 instead of creating a macro it saves the resulting string to the
1660 filename you specify.
1660 filename you specify.
1661
1661
1662 It adds a '.py' extension to the file if you don't do so yourself, and
1662 It adds a '.py' extension to the file if you don't do so yourself, and
1663 it asks for confirmation before overwriting existing files."""
1663 it asks for confirmation before overwriting existing files."""
1664
1664
1665 args = parameter_s.split()
1665 args = parameter_s.split()
1666 fname,ranges = args[0], args[1:]
1666 fname,ranges = args[0], args[1:]
1667 if not fname.endswith('.py'):
1667 if not fname.endswith('.py'):
1668 fname += '.py'
1668 fname += '.py'
1669 if os.path.isfile(fname):
1669 if os.path.isfile(fname):
1670 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1670 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1671 if ans.lower() not in ['y','yes']:
1671 if ans.lower() not in ['y','yes']:
1672 print 'Operation cancelled.'
1672 print 'Operation cancelled.'
1673 return
1673 return
1674 cmds = ''.join(self.extract_input_slices(ranges))
1674 cmds = ''.join(self.extract_input_slices(ranges))
1675 f = file(fname,'w')
1675 f = file(fname,'w')
1676 f.write(cmds)
1676 f.write(cmds)
1677 f.close()
1677 f.close()
1678 print 'The following commands were written to file `%s`:' % fname
1678 print 'The following commands were written to file `%s`:' % fname
1679 print cmds
1679 print cmds
1680
1680
1681 def _edit_macro(self,mname,macro):
1681 def _edit_macro(self,mname,macro):
1682 """open an editor with the macro data in a file"""
1682 """open an editor with the macro data in a file"""
1683 filename = self.shell.mktempfile(macro.value)
1683 filename = self.shell.mktempfile(macro.value)
1684 self.shell.hooks.editor(filename)
1684 self.shell.hooks.editor(filename)
1685
1685
1686 # and make a new macro object, to replace the old one
1686 # and make a new macro object, to replace the old one
1687 mfile = open(filename)
1687 mfile = open(filename)
1688 mvalue = mfile.read()
1688 mvalue = mfile.read()
1689 mfile.close()
1689 mfile.close()
1690 self.shell.user_ns[mname] = Macro(mvalue)
1690 self.shell.user_ns[mname] = Macro(mvalue)
1691
1691
1692 def magic_ed(self,parameter_s=''):
1692 def magic_ed(self,parameter_s=''):
1693 """Alias to %edit."""
1693 """Alias to %edit."""
1694 return self.magic_edit(parameter_s)
1694 return self.magic_edit(parameter_s)
1695
1695
1696 def magic_edit(self,parameter_s='',last_call=['','']):
1696 def magic_edit(self,parameter_s='',last_call=['','']):
1697 """Bring up an editor and execute the resulting code.
1697 """Bring up an editor and execute the resulting code.
1698
1698
1699 Usage:
1699 Usage:
1700 %edit [options] [args]
1700 %edit [options] [args]
1701
1701
1702 %edit runs IPython's editor hook. The default version of this hook is
1702 %edit runs IPython's editor hook. The default version of this hook is
1703 set to call the __IPYTHON__.rc.editor command. This is read from your
1703 set to call the __IPYTHON__.rc.editor command. This is read from your
1704 environment variable $EDITOR. If this isn't found, it will default to
1704 environment variable $EDITOR. If this isn't found, it will default to
1705 vi under Linux/Unix and to notepad under Windows. See the end of this
1705 vi under Linux/Unix and to notepad under Windows. See the end of this
1706 docstring for how to change the editor hook.
1706 docstring for how to change the editor hook.
1707
1707
1708 You can also set the value of this editor via the command line option
1708 You can also set the value of this editor via the command line option
1709 '-editor' or in your ipythonrc file. This is useful if you wish to use
1709 '-editor' or in your ipythonrc file. This is useful if you wish to use
1710 specifically for IPython an editor different from your typical default
1710 specifically for IPython an editor different from your typical default
1711 (and for Windows users who typically don't set environment variables).
1711 (and for Windows users who typically don't set environment variables).
1712
1712
1713 This command allows you to conveniently edit multi-line code right in
1713 This command allows you to conveniently edit multi-line code right in
1714 your IPython session.
1714 your IPython session.
1715
1715
1716 If called without arguments, %edit opens up an empty editor with a
1716 If called without arguments, %edit opens up an empty editor with a
1717 temporary file and will execute the contents of this file when you
1717 temporary file and will execute the contents of this file when you
1718 close it (don't forget to save it!).
1718 close it (don't forget to save it!).
1719
1719
1720
1720
1721 Options:
1721 Options:
1722
1722
1723 -p: this will call the editor with the same data as the previous time
1723 -p: this will call the editor with the same data as the previous time
1724 it was used, regardless of how long ago (in your current session) it
1724 it was used, regardless of how long ago (in your current session) it
1725 was.
1725 was.
1726
1726
1727 -x: do not execute the edited code immediately upon exit. This is
1727 -x: do not execute the edited code immediately upon exit. This is
1728 mainly useful if you are editing programs which need to be called with
1728 mainly useful if you are editing programs which need to be called with
1729 command line arguments, which you can then do using %run.
1729 command line arguments, which you can then do using %run.
1730
1730
1731
1731
1732 Arguments:
1732 Arguments:
1733
1733
1734 If arguments are given, the following possibilites exist:
1734 If arguments are given, the following possibilites exist:
1735
1735
1736 - The arguments are numbers or pairs of colon-separated numbers (like
1736 - The arguments are numbers or pairs of colon-separated numbers (like
1737 1 4:8 9). These are interpreted as lines of previous input to be
1737 1 4:8 9). These are interpreted as lines of previous input to be
1738 loaded into the editor. The syntax is the same of the %macro command.
1738 loaded into the editor. The syntax is the same of the %macro command.
1739
1739
1740 - If the argument doesn't start with a number, it is evaluated as a
1740 - If the argument doesn't start with a number, it is evaluated as a
1741 variable and its contents loaded into the editor. You can thus edit
1741 variable and its contents loaded into the editor. You can thus edit
1742 any string which contains python code (including the result of
1742 any string which contains python code (including the result of
1743 previous edits).
1743 previous edits).
1744
1744
1745 - If the argument is the name of an object (other than a string),
1745 - If the argument is the name of an object (other than a string),
1746 IPython will try to locate the file where it was defined and open the
1746 IPython will try to locate the file where it was defined and open the
1747 editor at the point where it is defined. You can use `%edit function`
1747 editor at the point where it is defined. You can use `%edit function`
1748 to load an editor exactly at the point where 'function' is defined,
1748 to load an editor exactly at the point where 'function' is defined,
1749 edit it and have the file be executed automatically.
1749 edit it and have the file be executed automatically.
1750
1750
1751 If the object is a macro (see %macro for details), this opens up your
1751 If the object is a macro (see %macro for details), this opens up your
1752 specified editor with a temporary file containing the macro's data.
1752 specified editor with a temporary file containing the macro's data.
1753 Upon exit, the macro is reloaded with the contents of the file.
1753 Upon exit, the macro is reloaded with the contents of the file.
1754
1754
1755 Note: opening at an exact line is only supported under Unix, and some
1755 Note: opening at an exact line is only supported under Unix, and some
1756 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1756 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1757 '+NUMBER' parameter necessary for this feature. Good editors like
1757 '+NUMBER' parameter necessary for this feature. Good editors like
1758 (X)Emacs, vi, jed, pico and joe all do.
1758 (X)Emacs, vi, jed, pico and joe all do.
1759
1759
1760 - If the argument is not found as a variable, IPython will look for a
1760 - If the argument is not found as a variable, IPython will look for a
1761 file with that name (adding .py if necessary) and load it into the
1761 file with that name (adding .py if necessary) and load it into the
1762 editor. It will execute its contents with execfile() when you exit,
1762 editor. It will execute its contents with execfile() when you exit,
1763 loading any code in the file into your interactive namespace.
1763 loading any code in the file into your interactive namespace.
1764
1764
1765 After executing your code, %edit will return as output the code you
1765 After executing your code, %edit will return as output the code you
1766 typed in the editor (except when it was an existing file). This way
1766 typed in the editor (except when it was an existing file). This way
1767 you can reload the code in further invocations of %edit as a variable,
1767 you can reload the code in further invocations of %edit as a variable,
1768 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1768 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1769 the output.
1769 the output.
1770
1770
1771 Note that %edit is also available through the alias %ed.
1771 Note that %edit is also available through the alias %ed.
1772
1772
1773 This is an example of creating a simple function inside the editor and
1773 This is an example of creating a simple function inside the editor and
1774 then modifying it. First, start up the editor:
1774 then modifying it. First, start up the editor:
1775
1775
1776 In [1]: ed\\
1776 In [1]: ed\\
1777 Editing... done. Executing edited code...\\
1777 Editing... done. Executing edited code...\\
1778 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1778 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1779
1779
1780 We can then call the function foo():
1780 We can then call the function foo():
1781
1781
1782 In [2]: foo()\\
1782 In [2]: foo()\\
1783 foo() was defined in an editing session
1783 foo() was defined in an editing session
1784
1784
1785 Now we edit foo. IPython automatically loads the editor with the
1785 Now we edit foo. IPython automatically loads the editor with the
1786 (temporary) file where foo() was previously defined:
1786 (temporary) file where foo() was previously defined:
1787
1787
1788 In [3]: ed foo\\
1788 In [3]: ed foo\\
1789 Editing... done. Executing edited code...
1789 Editing... done. Executing edited code...
1790
1790
1791 And if we call foo() again we get the modified version:
1791 And if we call foo() again we get the modified version:
1792
1792
1793 In [4]: foo()\\
1793 In [4]: foo()\\
1794 foo() has now been changed!
1794 foo() has now been changed!
1795
1795
1796 Here is an example of how to edit a code snippet successive
1796 Here is an example of how to edit a code snippet successive
1797 times. First we call the editor:
1797 times. First we call the editor:
1798
1798
1799 In [8]: ed\\
1799 In [8]: ed\\
1800 Editing... done. Executing edited code...\\
1800 Editing... done. Executing edited code...\\
1801 hello\\
1801 hello\\
1802 Out[8]: "print 'hello'\\n"
1802 Out[8]: "print 'hello'\\n"
1803
1803
1804 Now we call it again with the previous output (stored in _):
1804 Now we call it again with the previous output (stored in _):
1805
1805
1806 In [9]: ed _\\
1806 In [9]: ed _\\
1807 Editing... done. Executing edited code...\\
1807 Editing... done. Executing edited code...\\
1808 hello world\\
1808 hello world\\
1809 Out[9]: "print 'hello world'\\n"
1809 Out[9]: "print 'hello world'\\n"
1810
1810
1811 Now we call it with the output #8 (stored in _8, also as Out[8]):
1811 Now we call it with the output #8 (stored in _8, also as Out[8]):
1812
1812
1813 In [10]: ed _8\\
1813 In [10]: ed _8\\
1814 Editing... done. Executing edited code...\\
1814 Editing... done. Executing edited code...\\
1815 hello again\\
1815 hello again\\
1816 Out[10]: "print 'hello again'\\n"
1816 Out[10]: "print 'hello again'\\n"
1817
1817
1818
1818
1819 Changing the default editor hook:
1819 Changing the default editor hook:
1820
1820
1821 If you wish to write your own editor hook, you can put it in a
1821 If you wish to write your own editor hook, you can put it in a
1822 configuration file which you load at startup time. The default hook
1822 configuration file which you load at startup time. The default hook
1823 is defined in the IPython.hooks module, and you can use that as a
1823 is defined in the IPython.hooks module, and you can use that as a
1824 starting example for further modifications. That file also has
1824 starting example for further modifications. That file also has
1825 general instructions on how to set a new hook for use once you've
1825 general instructions on how to set a new hook for use once you've
1826 defined it."""
1826 defined it."""
1827
1827
1828 # FIXME: This function has become a convoluted mess. It needs a
1828 # FIXME: This function has become a convoluted mess. It needs a
1829 # ground-up rewrite with clean, simple logic.
1829 # ground-up rewrite with clean, simple logic.
1830
1830
1831 def make_filename(arg):
1831 def make_filename(arg):
1832 "Make a filename from the given args"
1832 "Make a filename from the given args"
1833 try:
1833 try:
1834 filename = get_py_filename(arg)
1834 filename = get_py_filename(arg)
1835 except IOError:
1835 except IOError:
1836 if args.endswith('.py'):
1836 if args.endswith('.py'):
1837 filename = arg
1837 filename = arg
1838 else:
1838 else:
1839 filename = None
1839 filename = None
1840 return filename
1840 return filename
1841
1841
1842 # custom exceptions
1842 # custom exceptions
1843 class DataIsObject(Exception): pass
1843 class DataIsObject(Exception): pass
1844
1844
1845 opts,args = self.parse_options(parameter_s,'px')
1845 opts,args = self.parse_options(parameter_s,'px')
1846
1846
1847 # Default line number value
1847 # Default line number value
1848 lineno = None
1848 lineno = None
1849 if opts.has_key('p'):
1849 if opts.has_key('p'):
1850 args = '_%s' % last_call[0]
1850 args = '_%s' % last_call[0]
1851 if not self.shell.user_ns.has_key(args):
1851 if not self.shell.user_ns.has_key(args):
1852 args = last_call[1]
1852 args = last_call[1]
1853
1853
1854 # use last_call to remember the state of the previous call, but don't
1854 # use last_call to remember the state of the previous call, but don't
1855 # let it be clobbered by successive '-p' calls.
1855 # let it be clobbered by successive '-p' calls.
1856 try:
1856 try:
1857 last_call[0] = self.shell.outputcache.prompt_count
1857 last_call[0] = self.shell.outputcache.prompt_count
1858 if not opts.has_key('p'):
1858 if not opts.has_key('p'):
1859 last_call[1] = parameter_s
1859 last_call[1] = parameter_s
1860 except:
1860 except:
1861 pass
1861 pass
1862
1862
1863 # by default this is done with temp files, except when the given
1863 # by default this is done with temp files, except when the given
1864 # arg is a filename
1864 # arg is a filename
1865 use_temp = 1
1865 use_temp = 1
1866
1866
1867 if re.match(r'\d',args):
1867 if re.match(r'\d',args):
1868 # Mode where user specifies ranges of lines, like in %macro.
1868 # Mode where user specifies ranges of lines, like in %macro.
1869 # This means that you can't edit files whose names begin with
1869 # This means that you can't edit files whose names begin with
1870 # numbers this way. Tough.
1870 # numbers this way. Tough.
1871 ranges = args.split()
1871 ranges = args.split()
1872 data = ''.join(self.extract_input_slices(ranges))
1872 data = ''.join(self.extract_input_slices(ranges))
1873 elif args.endswith('.py'):
1873 elif args.endswith('.py'):
1874 filename = make_filename(args)
1874 filename = make_filename(args)
1875 data = ''
1875 data = ''
1876 use_temp = 0
1876 use_temp = 0
1877 elif args:
1877 elif args:
1878 try:
1878 try:
1879 # Load the parameter given as a variable. If not a string,
1879 # Load the parameter given as a variable. If not a string,
1880 # process it as an object instead (below)
1880 # process it as an object instead (below)
1881
1881
1882 #print '*** args',args,'type',type(args) # dbg
1882 #print '*** args',args,'type',type(args) # dbg
1883 data = eval(args,self.shell.user_ns)
1883 data = eval(args,self.shell.user_ns)
1884 if not type(data) in StringTypes:
1884 if not type(data) in StringTypes:
1885 raise DataIsObject
1885 raise DataIsObject
1886
1886
1887 except (NameError,SyntaxError):
1887 except (NameError,SyntaxError):
1888 # given argument is not a variable, try as a filename
1888 # given argument is not a variable, try as a filename
1889 filename = make_filename(args)
1889 filename = make_filename(args)
1890 if filename is None:
1890 if filename is None:
1891 warn("Argument given (%s) can't be found as a variable "
1891 warn("Argument given (%s) can't be found as a variable "
1892 "or as a filename." % args)
1892 "or as a filename." % args)
1893 return
1893 return
1894
1894
1895 data = ''
1895 data = ''
1896 use_temp = 0
1896 use_temp = 0
1897 except DataIsObject:
1897 except DataIsObject:
1898
1898
1899 # macros have a special edit function
1899 # macros have a special edit function
1900 if isinstance(data,Macro):
1900 if isinstance(data,Macro):
1901 self._edit_macro(args,data)
1901 self._edit_macro(args,data)
1902 return
1902 return
1903
1903
1904 # For objects, try to edit the file where they are defined
1904 # For objects, try to edit the file where they are defined
1905 try:
1905 try:
1906 filename = inspect.getabsfile(data)
1906 filename = inspect.getabsfile(data)
1907 datafile = 1
1907 datafile = 1
1908 except TypeError:
1908 except TypeError:
1909 filename = make_filename(args)
1909 filename = make_filename(args)
1910 datafile = 1
1910 datafile = 1
1911 warn('Could not find file where `%s` is defined.\n'
1911 warn('Could not find file where `%s` is defined.\n'
1912 'Opening a file named `%s`' % (args,filename))
1912 'Opening a file named `%s`' % (args,filename))
1913 # Now, make sure we can actually read the source (if it was in
1913 # Now, make sure we can actually read the source (if it was in
1914 # a temp file it's gone by now).
1914 # a temp file it's gone by now).
1915 if datafile:
1915 if datafile:
1916 try:
1916 try:
1917 lineno = inspect.getsourcelines(data)[1]
1917 lineno = inspect.getsourcelines(data)[1]
1918 except IOError:
1918 except IOError:
1919 filename = make_filename(args)
1919 filename = make_filename(args)
1920 if filename is None:
1920 if filename is None:
1921 warn('The file `%s` where `%s` was defined cannot '
1921 warn('The file `%s` where `%s` was defined cannot '
1922 'be read.' % (filename,data))
1922 'be read.' % (filename,data))
1923 return
1923 return
1924 use_temp = 0
1924 use_temp = 0
1925 else:
1925 else:
1926 data = ''
1926 data = ''
1927
1927
1928 if use_temp:
1928 if use_temp:
1929 filename = self.shell.mktempfile(data)
1929 filename = self.shell.mktempfile(data)
1930 print 'IPython will make a temporary file named:',filename
1930 print 'IPython will make a temporary file named:',filename
1931
1931
1932 # do actual editing here
1932 # do actual editing here
1933 print 'Editing...',
1933 print 'Editing...',
1934 sys.stdout.flush()
1934 sys.stdout.flush()
1935 self.shell.hooks.editor(filename,lineno)
1935 self.shell.hooks.editor(filename,lineno)
1936 if opts.has_key('x'): # -x prevents actual execution
1936 if opts.has_key('x'): # -x prevents actual execution
1937 print
1937 print
1938 else:
1938 else:
1939 print 'done. Executing edited code...'
1939 print 'done. Executing edited code...'
1940 self.shell.safe_execfile(filename,self.shell.user_ns)
1940 self.shell.safe_execfile(filename,self.shell.user_ns)
1941 if use_temp:
1941 if use_temp:
1942 try:
1942 try:
1943 return open(filename).read()
1943 return open(filename).read()
1944 except IOError,msg:
1944 except IOError,msg:
1945 if msg.filename == filename:
1945 if msg.filename == filename:
1946 warn('File not found. Did you forget to save?')
1946 warn('File not found. Did you forget to save?')
1947 return
1947 return
1948 else:
1948 else:
1949 self.shell.showtraceback()
1949 self.shell.showtraceback()
1950
1950
1951 def magic_xmode(self,parameter_s = ''):
1951 def magic_xmode(self,parameter_s = ''):
1952 """Switch modes for the exception handlers.
1952 """Switch modes for the exception handlers.
1953
1953
1954 Valid modes: Plain, Context and Verbose.
1954 Valid modes: Plain, Context and Verbose.
1955
1955
1956 If called without arguments, acts as a toggle."""
1956 If called without arguments, acts as a toggle."""
1957
1957
1958 def xmode_switch_err(name):
1958 def xmode_switch_err(name):
1959 warn('Error changing %s exception modes.\n%s' %
1959 warn('Error changing %s exception modes.\n%s' %
1960 (name,sys.exc_info()[1]))
1960 (name,sys.exc_info()[1]))
1961
1961
1962 shell = self.shell
1962 shell = self.shell
1963 new_mode = parameter_s.strip().capitalize()
1963 new_mode = parameter_s.strip().capitalize()
1964 try:
1964 try:
1965 shell.InteractiveTB.set_mode(mode=new_mode)
1965 shell.InteractiveTB.set_mode(mode=new_mode)
1966 print 'Exception reporting mode:',shell.InteractiveTB.mode
1966 print 'Exception reporting mode:',shell.InteractiveTB.mode
1967 except:
1967 except:
1968 xmode_switch_err('user')
1968 xmode_switch_err('user')
1969
1969
1970 # threaded shells use a special handler in sys.excepthook
1970 # threaded shells use a special handler in sys.excepthook
1971 if shell.isthreaded:
1971 if shell.isthreaded:
1972 try:
1972 try:
1973 shell.sys_excepthook.set_mode(mode=new_mode)
1973 shell.sys_excepthook.set_mode(mode=new_mode)
1974 except:
1974 except:
1975 xmode_switch_err('threaded')
1975 xmode_switch_err('threaded')
1976
1976
1977 def magic_colors(self,parameter_s = ''):
1977 def magic_colors(self,parameter_s = ''):
1978 """Switch color scheme for prompts, info system and exception handlers.
1978 """Switch color scheme for prompts, info system and exception handlers.
1979
1979
1980 Currently implemented schemes: NoColor, Linux, LightBG.
1980 Currently implemented schemes: NoColor, Linux, LightBG.
1981
1981
1982 Color scheme names are not case-sensitive."""
1982 Color scheme names are not case-sensitive."""
1983
1983
1984 def color_switch_err(name):
1984 def color_switch_err(name):
1985 warn('Error changing %s color schemes.\n%s' %
1985 warn('Error changing %s color schemes.\n%s' %
1986 (name,sys.exc_info()[1]))
1986 (name,sys.exc_info()[1]))
1987
1987
1988
1988
1989 new_scheme = parameter_s.strip()
1989 new_scheme = parameter_s.strip()
1990 if not new_scheme:
1990 if not new_scheme:
1991 print 'You must specify a color scheme.'
1991 print 'You must specify a color scheme.'
1992 return
1992 return
1993 # Under Windows, check for Gary Bishop's readline, which is necessary
1993 # Under Windows, check for Gary Bishop's readline, which is necessary
1994 # for ANSI coloring
1994 # for ANSI coloring
1995 if os.name in ['nt','dos']:
1995 if os.name in ['nt','dos']:
1996 try:
1996 try:
1997 import readline
1997 import readline
1998 except ImportError:
1998 except ImportError:
1999 has_readline = 0
1999 has_readline = 0
2000 else:
2000 else:
2001 try:
2001 try:
2002 readline.GetOutputFile()
2002 readline.GetOutputFile()
2003 except AttributeError:
2003 except AttributeError:
2004 has_readline = 0
2004 has_readline = 0
2005 else:
2005 else:
2006 has_readline = 1
2006 has_readline = 1
2007 if not has_readline:
2007 if not has_readline:
2008 msg = """\
2008 msg = """\
2009 Proper color support under MS Windows requires Gary Bishop's readline library.
2009 Proper color support under MS Windows requires Gary Bishop's readline library.
2010 You can find it at:
2010 You can find it at:
2011 http://sourceforge.net/projects/uncpythontools
2011 http://sourceforge.net/projects/uncpythontools
2012 Gary's readline needs the ctypes module, from:
2012 Gary's readline needs the ctypes module, from:
2013 http://starship.python.net/crew/theller/ctypes
2013 http://starship.python.net/crew/theller/ctypes
2014
2014
2015 Defaulting color scheme to 'NoColor'"""
2015 Defaulting color scheme to 'NoColor'"""
2016 new_scheme = 'NoColor'
2016 new_scheme = 'NoColor'
2017 warn(msg)
2017 warn(msg)
2018 # local shortcut
2018 # local shortcut
2019 shell = self.shell
2019 shell = self.shell
2020
2020
2021 # Set prompt colors
2021 # Set prompt colors
2022 try:
2022 try:
2023 shell.outputcache.set_colors(new_scheme)
2023 shell.outputcache.set_colors(new_scheme)
2024 except:
2024 except:
2025 color_switch_err('prompt')
2025 color_switch_err('prompt')
2026 else:
2026 else:
2027 shell.rc.colors = \
2027 shell.rc.colors = \
2028 shell.outputcache.color_table.active_scheme_name
2028 shell.outputcache.color_table.active_scheme_name
2029 # Set exception colors
2029 # Set exception colors
2030 try:
2030 try:
2031 shell.InteractiveTB.set_colors(scheme = new_scheme)
2031 shell.InteractiveTB.set_colors(scheme = new_scheme)
2032 shell.SyntaxTB.set_colors(scheme = new_scheme)
2032 shell.SyntaxTB.set_colors(scheme = new_scheme)
2033 except:
2033 except:
2034 color_switch_err('exception')
2034 color_switch_err('exception')
2035
2035
2036 # threaded shells use a verbose traceback in sys.excepthook
2036 # threaded shells use a verbose traceback in sys.excepthook
2037 if shell.isthreaded:
2037 if shell.isthreaded:
2038 try:
2038 try:
2039 shell.sys_excepthook.set_colors(scheme=new_scheme)
2039 shell.sys_excepthook.set_colors(scheme=new_scheme)
2040 except:
2040 except:
2041 color_switch_err('system exception handler')
2041 color_switch_err('system exception handler')
2042
2042
2043 # Set info (for 'object?') colors
2043 # Set info (for 'object?') colors
2044 if shell.rc.color_info:
2044 if shell.rc.color_info:
2045 try:
2045 try:
2046 shell.inspector.set_active_scheme(new_scheme)
2046 shell.inspector.set_active_scheme(new_scheme)
2047 except:
2047 except:
2048 color_switch_err('object inspector')
2048 color_switch_err('object inspector')
2049 else:
2049 else:
2050 shell.inspector.set_active_scheme('NoColor')
2050 shell.inspector.set_active_scheme('NoColor')
2051
2051
2052 def magic_color_info(self,parameter_s = ''):
2052 def magic_color_info(self,parameter_s = ''):
2053 """Toggle color_info.
2053 """Toggle color_info.
2054
2054
2055 The color_info configuration parameter controls whether colors are
2055 The color_info configuration parameter controls whether colors are
2056 used for displaying object details (by things like %psource, %pfile or
2056 used for displaying object details (by things like %psource, %pfile or
2057 the '?' system). This function toggles this value with each call.
2057 the '?' system). This function toggles this value with each call.
2058
2058
2059 Note that unless you have a fairly recent pager (less works better
2059 Note that unless you have a fairly recent pager (less works better
2060 than more) in your system, using colored object information displays
2060 than more) in your system, using colored object information displays
2061 will not work properly. Test it and see."""
2061 will not work properly. Test it and see."""
2062
2062
2063 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2063 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2064 self.magic_colors(self.shell.rc.colors)
2064 self.magic_colors(self.shell.rc.colors)
2065 print 'Object introspection functions have now coloring:',
2065 print 'Object introspection functions have now coloring:',
2066 print ['OFF','ON'][self.shell.rc.color_info]
2066 print ['OFF','ON'][self.shell.rc.color_info]
2067
2067
2068 def magic_Pprint(self, parameter_s=''):
2068 def magic_Pprint(self, parameter_s=''):
2069 """Toggle pretty printing on/off."""
2069 """Toggle pretty printing on/off."""
2070
2070
2071 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2071 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2072 print 'Pretty printing has been turned', \
2072 print 'Pretty printing has been turned', \
2073 ['OFF','ON'][self.shell.outputcache.Pprint]
2073 ['OFF','ON'][self.shell.outputcache.Pprint]
2074
2074
2075 def magic_exit(self, parameter_s=''):
2075 def magic_exit(self, parameter_s=''):
2076 """Exit IPython, confirming if configured to do so.
2076 """Exit IPython, confirming if configured to do so.
2077
2077
2078 You can configure whether IPython asks for confirmation upon exit by
2078 You can configure whether IPython asks for confirmation upon exit by
2079 setting the confirm_exit flag in the ipythonrc file."""
2079 setting the confirm_exit flag in the ipythonrc file."""
2080
2080
2081 self.shell.exit()
2081 self.shell.exit()
2082
2082
2083 def magic_quit(self, parameter_s=''):
2083 def magic_quit(self, parameter_s=''):
2084 """Exit IPython, confirming if configured to do so (like %exit)"""
2084 """Exit IPython, confirming if configured to do so (like %exit)"""
2085
2085
2086 self.shell.exit()
2086 self.shell.exit()
2087
2087
2088 def magic_Exit(self, parameter_s=''):
2088 def magic_Exit(self, parameter_s=''):
2089 """Exit IPython without confirmation."""
2089 """Exit IPython without confirmation."""
2090
2090
2091 self.shell.exit_now = True
2091 self.shell.exit_now = True
2092
2092
2093 def magic_Quit(self, parameter_s=''):
2093 def magic_Quit(self, parameter_s=''):
2094 """Exit IPython without confirmation (like %Exit)."""
2094 """Exit IPython without confirmation (like %Exit)."""
2095
2095
2096 self.shell.exit_now = True
2096 self.shell.exit_now = True
2097
2097
2098 #......................................................................
2098 #......................................................................
2099 # Functions to implement unix shell-type things
2099 # Functions to implement unix shell-type things
2100
2100
2101 def magic_alias(self, parameter_s = ''):
2101 def magic_alias(self, parameter_s = ''):
2102 """Define an alias for a system command.
2102 """Define an alias for a system command.
2103
2103
2104 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2104 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2105
2105
2106 Then, typing 'alias_name params' will execute the system command 'cmd
2106 Then, typing 'alias_name params' will execute the system command 'cmd
2107 params' (from your underlying operating system).
2107 params' (from your underlying operating system).
2108
2108
2109 Aliases have lower precedence than magic functions and Python normal
2109 Aliases have lower precedence than magic functions and Python normal
2110 variables, so if 'foo' is both a Python variable and an alias, the
2110 variables, so if 'foo' is both a Python variable and an alias, the
2111 alias can not be executed until 'del foo' removes the Python variable.
2111 alias can not be executed until 'del foo' removes the Python variable.
2112
2112
2113 You can use the %l specifier in an alias definition to represent the
2113 You can use the %l specifier in an alias definition to represent the
2114 whole line when the alias is called. For example:
2114 whole line when the alias is called. For example:
2115
2115
2116 In [2]: alias all echo "Input in brackets: <%l>"\\
2116 In [2]: alias all echo "Input in brackets: <%l>"\\
2117 In [3]: all hello world\\
2117 In [3]: all hello world\\
2118 Input in brackets: <hello world>
2118 Input in brackets: <hello world>
2119
2119
2120 You can also define aliases with parameters using %s specifiers (one
2120 You can also define aliases with parameters using %s specifiers (one
2121 per parameter):
2121 per parameter):
2122
2122
2123 In [1]: alias parts echo first %s second %s\\
2123 In [1]: alias parts echo first %s second %s\\
2124 In [2]: %parts A B\\
2124 In [2]: %parts A B\\
2125 first A second B\\
2125 first A second B\\
2126 In [3]: %parts A\\
2126 In [3]: %parts A\\
2127 Incorrect number of arguments: 2 expected.\\
2127 Incorrect number of arguments: 2 expected.\\
2128 parts is an alias to: 'echo first %s second %s'
2128 parts is an alias to: 'echo first %s second %s'
2129
2129
2130 Note that %l and %s are mutually exclusive. You can only use one or
2130 Note that %l and %s are mutually exclusive. You can only use one or
2131 the other in your aliases.
2131 the other in your aliases.
2132
2132
2133 Aliases expand Python variables just like system calls using ! or !!
2133 Aliases expand Python variables just like system calls using ! or !!
2134 do: all expressions prefixed with '$' get expanded. For details of
2134 do: all expressions prefixed with '$' get expanded. For details of
2135 the semantic rules, see PEP-215:
2135 the semantic rules, see PEP-215:
2136 http://www.python.org/peps/pep-0215.html. This is the library used by
2136 http://www.python.org/peps/pep-0215.html. This is the library used by
2137 IPython for variable expansion. If you want to access a true shell
2137 IPython for variable expansion. If you want to access a true shell
2138 variable, an extra $ is necessary to prevent its expansion by IPython:
2138 variable, an extra $ is necessary to prevent its expansion by IPython:
2139
2139
2140 In [6]: alias show echo\\
2140 In [6]: alias show echo\\
2141 In [7]: PATH='A Python string'\\
2141 In [7]: PATH='A Python string'\\
2142 In [8]: show $PATH\\
2142 In [8]: show $PATH\\
2143 A Python string\\
2143 A Python string\\
2144 In [9]: show $$PATH\\
2144 In [9]: show $$PATH\\
2145 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2145 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2146
2146
2147 You can use the alias facility to acess all of $PATH. See the %rehash
2147 You can use the alias facility to acess all of $PATH. See the %rehash
2148 and %rehashx functions, which automatically create aliases for the
2148 and %rehashx functions, which automatically create aliases for the
2149 contents of your $PATH.
2149 contents of your $PATH.
2150
2150
2151 If called with no parameters, %alias prints the current alias table."""
2151 If called with no parameters, %alias prints the current alias table."""
2152
2152
2153 par = parameter_s.strip()
2153 par = parameter_s.strip()
2154 if not par:
2154 if not par:
2155 if self.shell.rc.automagic:
2155 if self.shell.rc.automagic:
2156 prechar = ''
2156 prechar = ''
2157 else:
2157 else:
2158 prechar = self.shell.ESC_MAGIC
2158 prechar = self.shell.ESC_MAGIC
2159 print 'Alias\t\tSystem Command\n'+'-'*30
2159 print 'Alias\t\tSystem Command\n'+'-'*30
2160 atab = self.shell.alias_table
2160 atab = self.shell.alias_table
2161 aliases = atab.keys()
2161 aliases = atab.keys()
2162 aliases.sort()
2162 aliases.sort()
2163 for alias in aliases:
2163 for alias in aliases:
2164 print prechar+alias+'\t\t'+atab[alias][1]
2164 print prechar+alias+'\t\t'+atab[alias][1]
2165 print '-'*30+'\nTotal number of aliases:',len(aliases)
2165 print '-'*30+'\nTotal number of aliases:',len(aliases)
2166 return
2166 return
2167 try:
2167 try:
2168 alias,cmd = par.split(None,1)
2168 alias,cmd = par.split(None,1)
2169 except:
2169 except:
2170 print OInspect.getdoc(self.magic_alias)
2170 print OInspect.getdoc(self.magic_alias)
2171 else:
2171 else:
2172 nargs = cmd.count('%s')
2172 nargs = cmd.count('%s')
2173 if nargs>0 and cmd.find('%l')>=0:
2173 if nargs>0 and cmd.find('%l')>=0:
2174 error('The %s and %l specifiers are mutually exclusive '
2174 error('The %s and %l specifiers are mutually exclusive '
2175 'in alias definitions.')
2175 'in alias definitions.')
2176 else: # all looks OK
2176 else: # all looks OK
2177 self.shell.alias_table[alias] = (nargs,cmd)
2177 self.shell.alias_table[alias] = (nargs,cmd)
2178 self.shell.alias_table_validate(verbose=1)
2178 self.shell.alias_table_validate(verbose=1)
2179 # end magic_alias
2179 # end magic_alias
2180
2180
2181 def magic_unalias(self, parameter_s = ''):
2181 def magic_unalias(self, parameter_s = ''):
2182 """Remove an alias"""
2182 """Remove an alias"""
2183
2183
2184 aname = parameter_s.strip()
2184 aname = parameter_s.strip()
2185 if aname in self.shell.alias_table:
2185 if aname in self.shell.alias_table:
2186 del self.shell.alias_table[aname]
2186 del self.shell.alias_table[aname]
2187
2187
2188 def magic_rehash(self, parameter_s = ''):
2188 def magic_rehash(self, parameter_s = ''):
2189 """Update the alias table with all entries in $PATH.
2189 """Update the alias table with all entries in $PATH.
2190
2190
2191 This version does no checks on execute permissions or whether the
2191 This version does no checks on execute permissions or whether the
2192 contents of $PATH are truly files (instead of directories or something
2192 contents of $PATH are truly files (instead of directories or something
2193 else). For such a safer (but slower) version, use %rehashx."""
2193 else). For such a safer (but slower) version, use %rehashx."""
2194
2194
2195 # This function (and rehashx) manipulate the alias_table directly
2195 # This function (and rehashx) manipulate the alias_table directly
2196 # rather than calling magic_alias, for speed reasons. A rehash on a
2196 # rather than calling magic_alias, for speed reasons. A rehash on a
2197 # typical Linux box involves several thousand entries, so efficiency
2197 # typical Linux box involves several thousand entries, so efficiency
2198 # here is a top concern.
2198 # here is a top concern.
2199
2199
2200 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2200 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2201 alias_table = self.shell.alias_table
2201 alias_table = self.shell.alias_table
2202 for pdir in path:
2202 for pdir in path:
2203 for ff in os.listdir(pdir):
2203 for ff in os.listdir(pdir):
2204 # each entry in the alias table must be (N,name), where
2204 # each entry in the alias table must be (N,name), where
2205 # N is the number of positional arguments of the alias.
2205 # N is the number of positional arguments of the alias.
2206 alias_table[ff] = (0,ff)
2206 alias_table[ff] = (0,ff)
2207 # Make sure the alias table doesn't contain keywords or builtins
2207 # Make sure the alias table doesn't contain keywords or builtins
2208 self.shell.alias_table_validate()
2208 self.shell.alias_table_validate()
2209 # Call again init_auto_alias() so we get 'rm -i' and other modified
2209 # Call again init_auto_alias() so we get 'rm -i' and other modified
2210 # aliases since %rehash will probably clobber them
2210 # aliases since %rehash will probably clobber them
2211 self.shell.init_auto_alias()
2211 self.shell.init_auto_alias()
2212
2212
2213 def magic_rehashx(self, parameter_s = ''):
2213 def magic_rehashx(self, parameter_s = ''):
2214 """Update the alias table with all executable files in $PATH.
2214 """Update the alias table with all executable files in $PATH.
2215
2215
2216 This version explicitly checks that every entry in $PATH is a file
2216 This version explicitly checks that every entry in $PATH is a file
2217 with execute access (os.X_OK), so it is much slower than %rehash.
2217 with execute access (os.X_OK), so it is much slower than %rehash.
2218
2218
2219 Under Windows, it checks executability as a match agains a
2219 Under Windows, it checks executability as a match agains a
2220 '|'-separated string of extensions, stored in the IPython config
2220 '|'-separated string of extensions, stored in the IPython config
2221 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2221 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2222
2222
2223 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2223 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2224 alias_table = self.shell.alias_table
2224 alias_table = self.shell.alias_table
2225
2225
2226 if os.name == 'posix':
2226 if os.name == 'posix':
2227 isexec = lambda fname:os.path.isfile(fname) and \
2227 isexec = lambda fname:os.path.isfile(fname) and \
2228 os.access(fname,os.X_OK)
2228 os.access(fname,os.X_OK)
2229 else:
2229 else:
2230
2230
2231 try:
2231 try:
2232 winext = os.environ['pathext'].replace(';','|').replace('.','')
2232 winext = os.environ['pathext'].replace(';','|').replace('.','')
2233 except KeyError:
2233 except KeyError:
2234 winext = 'exe|com|bat'
2234 winext = 'exe|com|bat'
2235
2235
2236 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2236 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2237 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2237 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2238 savedir = os.getcwd()
2238 savedir = os.getcwd()
2239 try:
2239 try:
2240 # write the whole loop for posix/Windows so we don't have an if in
2240 # write the whole loop for posix/Windows so we don't have an if in
2241 # the innermost part
2241 # the innermost part
2242 if os.name == 'posix':
2242 if os.name == 'posix':
2243 for pdir in path:
2243 for pdir in path:
2244 os.chdir(pdir)
2244 os.chdir(pdir)
2245 for ff in os.listdir(pdir):
2245 for ff in os.listdir(pdir):
2246 if isexec(ff):
2246 if isexec(ff):
2247 # each entry in the alias table must be (N,name),
2247 # each entry in the alias table must be (N,name),
2248 # where N is the number of positional arguments of the
2248 # where N is the number of positional arguments of the
2249 # alias.
2249 # alias.
2250 alias_table[ff] = (0,ff)
2250 alias_table[ff] = (0,ff)
2251 else:
2251 else:
2252 for pdir in path:
2252 for pdir in path:
2253 os.chdir(pdir)
2253 os.chdir(pdir)
2254 for ff in os.listdir(pdir):
2254 for ff in os.listdir(pdir):
2255 if isexec(ff):
2255 if isexec(ff):
2256 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2256 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2257 # Make sure the alias table doesn't contain keywords or builtins
2257 # Make sure the alias table doesn't contain keywords or builtins
2258 self.shell.alias_table_validate()
2258 self.shell.alias_table_validate()
2259 # Call again init_auto_alias() so we get 'rm -i' and other
2259 # Call again init_auto_alias() so we get 'rm -i' and other
2260 # modified aliases since %rehashx will probably clobber them
2260 # modified aliases since %rehashx will probably clobber them
2261 self.shell.init_auto_alias()
2261 self.shell.init_auto_alias()
2262 finally:
2262 finally:
2263 os.chdir(savedir)
2263 os.chdir(savedir)
2264
2264
2265 def magic_pwd(self, parameter_s = ''):
2265 def magic_pwd(self, parameter_s = ''):
2266 """Return the current working directory path."""
2266 """Return the current working directory path."""
2267 return os.getcwd()
2267 return os.getcwd()
2268
2268
2269 def magic_cd(self, parameter_s=''):
2269 def magic_cd(self, parameter_s=''):
2270 """Change the current working directory.
2270 """Change the current working directory.
2271
2271
2272 This command automatically maintains an internal list of directories
2272 This command automatically maintains an internal list of directories
2273 you visit during your IPython session, in the variable _dh. The
2273 you visit during your IPython session, in the variable _dh. The
2274 command %dhist shows this history nicely formatted.
2274 command %dhist shows this history nicely formatted.
2275
2275
2276 Usage:
2276 Usage:
2277
2277
2278 cd 'dir': changes to directory 'dir'.
2278 cd 'dir': changes to directory 'dir'.
2279
2279
2280 cd -: changes to the last visited directory.
2280 cd -: changes to the last visited directory.
2281
2281
2282 cd -<n>: changes to the n-th directory in the directory history.
2282 cd -<n>: changes to the n-th directory in the directory history.
2283
2283
2284 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2284 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2285 (note: cd <bookmark_name> is enough if there is no
2285 (note: cd <bookmark_name> is enough if there is no
2286 directory <bookmark_name>, but a bookmark with the name exists.)
2286 directory <bookmark_name>, but a bookmark with the name exists.)
2287
2287
2288 Options:
2288 Options:
2289
2289
2290 -q: quiet. Do not print the working directory after the cd command is
2290 -q: quiet. Do not print the working directory after the cd command is
2291 executed. By default IPython's cd command does print this directory,
2291 executed. By default IPython's cd command does print this directory,
2292 since the default prompts do not display path information.
2292 since the default prompts do not display path information.
2293
2293
2294 Note that !cd doesn't work for this purpose because the shell where
2294 Note that !cd doesn't work for this purpose because the shell where
2295 !command runs is immediately discarded after executing 'command'."""
2295 !command runs is immediately discarded after executing 'command'."""
2296
2296
2297 parameter_s = parameter_s.strip()
2297 parameter_s = parameter_s.strip()
2298 bkms = self.shell.persist.get("bookmarks",{})
2298 bkms = self.shell.persist.get("bookmarks",{})
2299
2299
2300 numcd = re.match(r'(-)(\d+)$',parameter_s)
2300 numcd = re.match(r'(-)(\d+)$',parameter_s)
2301 # jump in directory history by number
2301 # jump in directory history by number
2302 if numcd:
2302 if numcd:
2303 nn = int(numcd.group(2))
2303 nn = int(numcd.group(2))
2304 try:
2304 try:
2305 ps = self.shell.user_ns['_dh'][nn]
2305 ps = self.shell.user_ns['_dh'][nn]
2306 except IndexError:
2306 except IndexError:
2307 print 'The requested directory does not exist in history.'
2307 print 'The requested directory does not exist in history.'
2308 return
2308 return
2309 else:
2309 else:
2310 opts = {}
2310 opts = {}
2311 else:
2311 else:
2312 #turn all non-space-escaping backslashes to slashes,
2312 #turn all non-space-escaping backslashes to slashes,
2313 # for c:\windows\directory\names\
2313 # for c:\windows\directory\names\
2314 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2314 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2315 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2315 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2316 # jump to previous
2316 # jump to previous
2317 if ps == '-':
2317 if ps == '-':
2318 try:
2318 try:
2319 ps = self.shell.user_ns['_dh'][-2]
2319 ps = self.shell.user_ns['_dh'][-2]
2320 except IndexError:
2320 except IndexError:
2321 print 'No previous directory to change to.'
2321 print 'No previous directory to change to.'
2322 return
2322 return
2323 # jump to bookmark
2323 # jump to bookmark
2324 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2324 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2325 if bkms.has_key(ps):
2325 if bkms.has_key(ps):
2326 target = bkms[ps]
2326 target = bkms[ps]
2327 print '(bookmark:%s) -> %s' % (ps,target)
2327 print '(bookmark:%s) -> %s' % (ps,target)
2328 ps = target
2328 ps = target
2329 else:
2329 else:
2330 if bkms:
2330 if bkms:
2331 error("Bookmark '%s' not found. "
2331 error("Bookmark '%s' not found. "
2332 "Use '%%bookmark -l' to see your bookmarks." % ps)
2332 "Use '%%bookmark -l' to see your bookmarks." % ps)
2333 else:
2333 else:
2334 print "Bookmarks not set - use %bookmark <bookmarkname>"
2334 print "Bookmarks not set - use %bookmark <bookmarkname>"
2335 return
2335 return
2336
2336
2337 # at this point ps should point to the target dir
2337 # at this point ps should point to the target dir
2338 if ps:
2338 if ps:
2339 try:
2339 try:
2340 os.chdir(os.path.expanduser(ps))
2340 os.chdir(os.path.expanduser(ps))
2341 ttitle = ("IPy:" + (
2341 ttitle = ("IPy:" + (
2342 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2342 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2343 platutils.set_term_title(ttitle)
2343 platutils.set_term_title(ttitle)
2344 except OSError:
2344 except OSError:
2345 print sys.exc_info()[1]
2345 print sys.exc_info()[1]
2346 else:
2346 else:
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2348 else:
2348 else:
2349 os.chdir(self.shell.home_dir)
2349 os.chdir(self.shell.home_dir)
2350 platutils.set_term_title("IPy:~")
2350 platutils.set_term_title("IPy:~")
2351 self.shell.user_ns['_dh'].append(os.getcwd())
2351 self.shell.user_ns['_dh'].append(os.getcwd())
2352 if not 'q' in opts:
2352 if not 'q' in opts:
2353 print self.shell.user_ns['_dh'][-1]
2353 print self.shell.user_ns['_dh'][-1]
2354
2354
2355 def magic_dhist(self, parameter_s=''):
2355 def magic_dhist(self, parameter_s=''):
2356 """Print your history of visited directories.
2356 """Print your history of visited directories.
2357
2357
2358 %dhist -> print full history\\
2358 %dhist -> print full history\\
2359 %dhist n -> print last n entries only\\
2359 %dhist n -> print last n entries only\\
2360 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2360 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2361
2361
2362 This history is automatically maintained by the %cd command, and
2362 This history is automatically maintained by the %cd command, and
2363 always available as the global list variable _dh. You can use %cd -<n>
2363 always available as the global list variable _dh. You can use %cd -<n>
2364 to go to directory number <n>."""
2364 to go to directory number <n>."""
2365
2365
2366 dh = self.shell.user_ns['_dh']
2366 dh = self.shell.user_ns['_dh']
2367 if parameter_s:
2367 if parameter_s:
2368 try:
2368 try:
2369 args = map(int,parameter_s.split())
2369 args = map(int,parameter_s.split())
2370 except:
2370 except:
2371 self.arg_err(Magic.magic_dhist)
2371 self.arg_err(Magic.magic_dhist)
2372 return
2372 return
2373 if len(args) == 1:
2373 if len(args) == 1:
2374 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2374 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2375 elif len(args) == 2:
2375 elif len(args) == 2:
2376 ini,fin = args
2376 ini,fin = args
2377 else:
2377 else:
2378 self.arg_err(Magic.magic_dhist)
2378 self.arg_err(Magic.magic_dhist)
2379 return
2379 return
2380 else:
2380 else:
2381 ini,fin = 0,len(dh)
2381 ini,fin = 0,len(dh)
2382 nlprint(dh,
2382 nlprint(dh,
2383 header = 'Directory history (kept in _dh)',
2383 header = 'Directory history (kept in _dh)',
2384 start=ini,stop=fin)
2384 start=ini,stop=fin)
2385
2385
2386 def magic_env(self, parameter_s=''):
2386 def magic_env(self, parameter_s=''):
2387 """List environment variables."""
2387 """List environment variables."""
2388
2388
2389 return os.environ.data
2389 return os.environ.data
2390
2390
2391 def magic_pushd(self, parameter_s=''):
2391 def magic_pushd(self, parameter_s=''):
2392 """Place the current dir on stack and change directory.
2392 """Place the current dir on stack and change directory.
2393
2393
2394 Usage:\\
2394 Usage:\\
2395 %pushd ['dirname']
2395 %pushd ['dirname']
2396
2396
2397 %pushd with no arguments does a %pushd to your home directory.
2397 %pushd with no arguments does a %pushd to your home directory.
2398 """
2398 """
2399 if parameter_s == '': parameter_s = '~'
2399 if parameter_s == '': parameter_s = '~'
2400 dir_s = self.shell.dir_stack
2400 dir_s = self.shell.dir_stack
2401 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2401 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2402 os.path.expanduser(self.shell.dir_stack[0]):
2402 os.path.expanduser(self.shell.dir_stack[0]):
2403 try:
2403 try:
2404 self.magic_cd(parameter_s)
2404 self.magic_cd(parameter_s)
2405 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2405 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2406 self.magic_dirs()
2406 self.magic_dirs()
2407 except:
2407 except:
2408 print 'Invalid directory'
2408 print 'Invalid directory'
2409 else:
2409 else:
2410 print 'You are already there!'
2410 print 'You are already there!'
2411
2411
2412 def magic_popd(self, parameter_s=''):
2412 def magic_popd(self, parameter_s=''):
2413 """Change to directory popped off the top of the stack.
2413 """Change to directory popped off the top of the stack.
2414 """
2414 """
2415 if len (self.shell.dir_stack) > 1:
2415 if len (self.shell.dir_stack) > 1:
2416 self.shell.dir_stack.pop(0)
2416 self.shell.dir_stack.pop(0)
2417 self.magic_cd(self.shell.dir_stack[0])
2417 self.magic_cd(self.shell.dir_stack[0])
2418 print self.shell.dir_stack[0]
2418 print self.shell.dir_stack[0]
2419 else:
2419 else:
2420 print "You can't remove the starting directory from the stack:",\
2420 print "You can't remove the starting directory from the stack:",\
2421 self.shell.dir_stack
2421 self.shell.dir_stack
2422
2422
2423 def magic_dirs(self, parameter_s=''):
2423 def magic_dirs(self, parameter_s=''):
2424 """Return the current directory stack."""
2424 """Return the current directory stack."""
2425
2425
2426 return self.shell.dir_stack[:]
2426 return self.shell.dir_stack[:]
2427
2427
2428 def magic_sc(self, parameter_s=''):
2428 def magic_sc(self, parameter_s=''):
2429 """Shell capture - execute a shell command and capture its output.
2429 """Shell capture - execute a shell command and capture its output.
2430
2430
2431 %sc [options] varname=command
2431 %sc [options] varname=command
2432
2432
2433 IPython will run the given command using commands.getoutput(), and
2433 IPython will run the given command using commands.getoutput(), and
2434 will then update the user's interactive namespace with a variable
2434 will then update the user's interactive namespace with a variable
2435 called varname, containing the value of the call. Your command can
2435 called varname, containing the value of the call. Your command can
2436 contain shell wildcards, pipes, etc.
2436 contain shell wildcards, pipes, etc.
2437
2437
2438 The '=' sign in the syntax is mandatory, and the variable name you
2438 The '=' sign in the syntax is mandatory, and the variable name you
2439 supply must follow Python's standard conventions for valid names.
2439 supply must follow Python's standard conventions for valid names.
2440
2440
2441 Options:
2441 Options:
2442
2442
2443 -l: list output. Split the output on newlines into a list before
2443 -l: list output. Split the output on newlines into a list before
2444 assigning it to the given variable. By default the output is stored
2444 assigning it to the given variable. By default the output is stored
2445 as a single string.
2445 as a single string.
2446
2446
2447 -v: verbose. Print the contents of the variable.
2447 -v: verbose. Print the contents of the variable.
2448
2448
2449 In most cases you should not need to split as a list, because the
2449 In most cases you should not need to split as a list, because the
2450 returned value is a special type of string which can automatically
2450 returned value is a special type of string which can automatically
2451 provide its contents either as a list (split on newlines) or as a
2451 provide its contents either as a list (split on newlines) or as a
2452 space-separated string. These are convenient, respectively, either
2452 space-separated string. These are convenient, respectively, either
2453 for sequential processing or to be passed to a shell command.
2453 for sequential processing or to be passed to a shell command.
2454
2454
2455 For example:
2455 For example:
2456
2456
2457 # Capture into variable a
2457 # Capture into variable a
2458 In [9]: sc a=ls *py
2458 In [9]: sc a=ls *py
2459
2459
2460 # a is a string with embedded newlines
2460 # a is a string with embedded newlines
2461 In [10]: a
2461 In [10]: a
2462 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2462 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2463
2463
2464 # which can be seen as a list:
2464 # which can be seen as a list:
2465 In [11]: a.l
2465 In [11]: a.l
2466 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2466 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2467
2467
2468 # or as a whitespace-separated string:
2468 # or as a whitespace-separated string:
2469 In [12]: a.s
2469 In [12]: a.s
2470 Out[12]: 'setup.py win32_manual_post_install.py'
2470 Out[12]: 'setup.py win32_manual_post_install.py'
2471
2471
2472 # a.s is useful to pass as a single command line:
2472 # a.s is useful to pass as a single command line:
2473 In [13]: !wc -l $a.s
2473 In [13]: !wc -l $a.s
2474 146 setup.py
2474 146 setup.py
2475 130 win32_manual_post_install.py
2475 130 win32_manual_post_install.py
2476 276 total
2476 276 total
2477
2477
2478 # while the list form is useful to loop over:
2478 # while the list form is useful to loop over:
2479 In [14]: for f in a.l:
2479 In [14]: for f in a.l:
2480 ....: !wc -l $f
2480 ....: !wc -l $f
2481 ....:
2481 ....:
2482 146 setup.py
2482 146 setup.py
2483 130 win32_manual_post_install.py
2483 130 win32_manual_post_install.py
2484
2484
2485 Similiarly, the lists returned by the -l option are also special, in
2485 Similiarly, the lists returned by the -l option are also special, in
2486 the sense that you can equally invoke the .s attribute on them to
2486 the sense that you can equally invoke the .s attribute on them to
2487 automatically get a whitespace-separated string from their contents:
2487 automatically get a whitespace-separated string from their contents:
2488
2488
2489 In [1]: sc -l b=ls *py
2489 In [1]: sc -l b=ls *py
2490
2490
2491 In [2]: b
2491 In [2]: b
2492 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2492 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2493
2493
2494 In [3]: b.s
2494 In [3]: b.s
2495 Out[3]: 'setup.py win32_manual_post_install.py'
2495 Out[3]: 'setup.py win32_manual_post_install.py'
2496
2496
2497 In summary, both the lists and strings used for ouptut capture have
2497 In summary, both the lists and strings used for ouptut capture have
2498 the following special attributes:
2498 the following special attributes:
2499
2499
2500 .l (or .list) : value as list.
2500 .l (or .list) : value as list.
2501 .n (or .nlstr): value as newline-separated string.
2501 .n (or .nlstr): value as newline-separated string.
2502 .s (or .spstr): value as space-separated string.
2502 .s (or .spstr): value as space-separated string.
2503 """
2503 """
2504
2504
2505 opts,args = self.parse_options(parameter_s,'lv')
2505 opts,args = self.parse_options(parameter_s,'lv')
2506 # Try to get a variable name and command to run
2506 # Try to get a variable name and command to run
2507 try:
2507 try:
2508 # the variable name must be obtained from the parse_options
2508 # the variable name must be obtained from the parse_options
2509 # output, which uses shlex.split to strip options out.
2509 # output, which uses shlex.split to strip options out.
2510 var,_ = args.split('=',1)
2510 var,_ = args.split('=',1)
2511 var = var.strip()
2511 var = var.strip()
2512 # But the the command has to be extracted from the original input
2512 # But the the command has to be extracted from the original input
2513 # parameter_s, not on what parse_options returns, to avoid the
2513 # parameter_s, not on what parse_options returns, to avoid the
2514 # quote stripping which shlex.split performs on it.
2514 # quote stripping which shlex.split performs on it.
2515 _,cmd = parameter_s.split('=',1)
2515 _,cmd = parameter_s.split('=',1)
2516 except ValueError:
2516 except ValueError:
2517 var,cmd = '',''
2517 var,cmd = '',''
2518 if not var:
2518 if not var:
2519 error('you must specify a variable to assign the command to.')
2519 error('you must specify a variable to assign the command to.')
2520 return
2520 return
2521 # If all looks ok, proceed
2521 # If all looks ok, proceed
2522 out,err = self.shell.getoutputerror(cmd)
2522 out,err = self.shell.getoutputerror(cmd)
2523 if err:
2523 if err:
2524 print >> Term.cerr,err
2524 print >> Term.cerr,err
2525 if opts.has_key('l'):
2525 if opts.has_key('l'):
2526 out = SList(out.split('\n'))
2526 out = SList(out.split('\n'))
2527 else:
2527 else:
2528 out = LSString(out)
2528 out = LSString(out)
2529 if opts.has_key('v'):
2529 if opts.has_key('v'):
2530 print '%s ==\n%s' % (var,pformat(out))
2530 print '%s ==\n%s' % (var,pformat(out))
2531 self.shell.user_ns.update({var:out})
2531 self.shell.user_ns.update({var:out})
2532
2532
2533 def magic_sx(self, parameter_s=''):
2533 def magic_sx(self, parameter_s=''):
2534 """Shell execute - run a shell command and capture its output.
2534 """Shell execute - run a shell command and capture its output.
2535
2535
2536 %sx command
2536 %sx command
2537
2537
2538 IPython will run the given command using commands.getoutput(), and
2538 IPython will run the given command using commands.getoutput(), and
2539 return the result formatted as a list (split on '\\n'). Since the
2539 return the result formatted as a list (split on '\\n'). Since the
2540 output is _returned_, it will be stored in ipython's regular output
2540 output is _returned_, it will be stored in ipython's regular output
2541 cache Out[N] and in the '_N' automatic variables.
2541 cache Out[N] and in the '_N' automatic variables.
2542
2542
2543 Notes:
2543 Notes:
2544
2544
2545 1) If an input line begins with '!!', then %sx is automatically
2545 1) If an input line begins with '!!', then %sx is automatically
2546 invoked. That is, while:
2546 invoked. That is, while:
2547 !ls
2547 !ls
2548 causes ipython to simply issue system('ls'), typing
2548 causes ipython to simply issue system('ls'), typing
2549 !!ls
2549 !!ls
2550 is a shorthand equivalent to:
2550 is a shorthand equivalent to:
2551 %sx ls
2551 %sx ls
2552
2552
2553 2) %sx differs from %sc in that %sx automatically splits into a list,
2553 2) %sx differs from %sc in that %sx automatically splits into a list,
2554 like '%sc -l'. The reason for this is to make it as easy as possible
2554 like '%sc -l'. The reason for this is to make it as easy as possible
2555 to process line-oriented shell output via further python commands.
2555 to process line-oriented shell output via further python commands.
2556 %sc is meant to provide much finer control, but requires more
2556 %sc is meant to provide much finer control, but requires more
2557 typing.
2557 typing.
2558
2558
2559 3) Just like %sc -l, this is a list with special attributes:
2559 3) Just like %sc -l, this is a list with special attributes:
2560
2560
2561 .l (or .list) : value as list.
2561 .l (or .list) : value as list.
2562 .n (or .nlstr): value as newline-separated string.
2562 .n (or .nlstr): value as newline-separated string.
2563 .s (or .spstr): value as whitespace-separated string.
2563 .s (or .spstr): value as whitespace-separated string.
2564
2564
2565 This is very useful when trying to use such lists as arguments to
2565 This is very useful when trying to use such lists as arguments to
2566 system commands."""
2566 system commands."""
2567
2567
2568 if parameter_s:
2568 if parameter_s:
2569 out,err = self.shell.getoutputerror(parameter_s)
2569 out,err = self.shell.getoutputerror(parameter_s)
2570 if err:
2570 if err:
2571 print >> Term.cerr,err
2571 print >> Term.cerr,err
2572 return SList(out.split('\n'))
2572 return SList(out.split('\n'))
2573
2573
2574 def magic_bg(self, parameter_s=''):
2574 def magic_bg(self, parameter_s=''):
2575 """Run a job in the background, in a separate thread.
2575 """Run a job in the background, in a separate thread.
2576
2576
2577 For example,
2577 For example,
2578
2578
2579 %bg myfunc(x,y,z=1)
2579 %bg myfunc(x,y,z=1)
2580
2580
2581 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2581 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2582 execution starts, a message will be printed indicating the job
2582 execution starts, a message will be printed indicating the job
2583 number. If your job number is 5, you can use
2583 number. If your job number is 5, you can use
2584
2584
2585 myvar = jobs.result(5) or myvar = jobs[5].result
2585 myvar = jobs.result(5) or myvar = jobs[5].result
2586
2586
2587 to assign this result to variable 'myvar'.
2587 to assign this result to variable 'myvar'.
2588
2588
2589 IPython has a job manager, accessible via the 'jobs' object. You can
2589 IPython has a job manager, accessible via the 'jobs' object. You can
2590 type jobs? to get more information about it, and use jobs.<TAB> to see
2590 type jobs? to get more information about it, and use jobs.<TAB> to see
2591 its attributes. All attributes not starting with an underscore are
2591 its attributes. All attributes not starting with an underscore are
2592 meant for public use.
2592 meant for public use.
2593
2593
2594 In particular, look at the jobs.new() method, which is used to create
2594 In particular, look at the jobs.new() method, which is used to create
2595 new jobs. This magic %bg function is just a convenience wrapper
2595 new jobs. This magic %bg function is just a convenience wrapper
2596 around jobs.new(), for expression-based jobs. If you want to create a
2596 around jobs.new(), for expression-based jobs. If you want to create a
2597 new job with an explicit function object and arguments, you must call
2597 new job with an explicit function object and arguments, you must call
2598 jobs.new() directly.
2598 jobs.new() directly.
2599
2599
2600 The jobs.new docstring also describes in detail several important
2600 The jobs.new docstring also describes in detail several important
2601 caveats associated with a thread-based model for background job
2601 caveats associated with a thread-based model for background job
2602 execution. Type jobs.new? for details.
2602 execution. Type jobs.new? for details.
2603
2603
2604 You can check the status of all jobs with jobs.status().
2604 You can check the status of all jobs with jobs.status().
2605
2605
2606 The jobs variable is set by IPython into the Python builtin namespace.
2606 The jobs variable is set by IPython into the Python builtin namespace.
2607 If you ever declare a variable named 'jobs', you will shadow this
2607 If you ever declare a variable named 'jobs', you will shadow this
2608 name. You can either delete your global jobs variable to regain
2608 name. You can either delete your global jobs variable to regain
2609 access to the job manager, or make a new name and assign it manually
2609 access to the job manager, or make a new name and assign it manually
2610 to the manager (stored in IPython's namespace). For example, to
2610 to the manager (stored in IPython's namespace). For example, to
2611 assign the job manager to the Jobs name, use:
2611 assign the job manager to the Jobs name, use:
2612
2612
2613 Jobs = __builtins__.jobs"""
2613 Jobs = __builtins__.jobs"""
2614
2614
2615 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2615 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2616
2616
2617 def magic_store(self, parameter_s=''):
2617 def magic_store(self, parameter_s=''):
2618 """Lightweight persistence for python variables.
2618 """Lightweight persistence for python variables.
2619
2619
2620 Example:
2620 Example:
2621
2621
2622 ville@badger[~]|1> A = ['hello',10,'world']\\
2622 ville@badger[~]|1> A = ['hello',10,'world']\\
2623 ville@badger[~]|2> %store A\\
2623 ville@badger[~]|2> %store A\\
2624 ville@badger[~]|3> Exit
2624 ville@badger[~]|3> Exit
2625
2625
2626 (IPython session is closed and started again...)
2626 (IPython session is closed and started again...)
2627
2627
2628 ville@badger:~$ ipython -p pysh\\
2628 ville@badger:~$ ipython -p pysh\\
2629 ville@badger[~]|1> print A
2629 ville@badger[~]|1> print A
2630
2630
2631 ['hello', 10, 'world']
2631 ['hello', 10, 'world']
2632
2632
2633 Usage:
2633 Usage:
2634
2634
2635 %store - Show list of all variables and their current values\\
2635 %store - Show list of all variables and their current values\\
2636 %store <var> - Store the *current* value of the variable to disk\\
2636 %store <var> - Store the *current* value of the variable to disk\\
2637 %store -d <var> - Remove the variable and its value from storage\\
2637 %store -d <var> - Remove the variable and its value from storage\\
2638 %store -r - Remove all variables from storage
2638 %store -r - Remove all variables from storage
2639
2639
2640 It should be noted that if you change the value of a variable, you
2640 It should be noted that if you change the value of a variable, you
2641 need to %store it again if you want to persist the new value.
2641 need to %store it again if you want to persist the new value.
2642
2642
2643 Note also that the variables will need to be pickleable; most basic
2643 Note also that the variables will need to be pickleable; most basic
2644 python types can be safely %stored.
2644 python types can be safely %stored.
2645 """
2645 """
2646
2646
2647 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2647 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2648 # delete
2648 # delete
2649 if opts.has_key('d'):
2649 if opts.has_key('d'):
2650 try:
2650 try:
2651 todel = args[0]
2651 todel = args[0]
2652 except IndexError:
2652 except IndexError:
2653 error('You must provide the variable to forget')
2653 error('You must provide the variable to forget')
2654 else:
2654 else:
2655 try:
2655 try:
2656 del self.shell.persist['S:' + todel]
2656 del self.shell.persist['S:' + todel]
2657 except:
2657 except:
2658 error("Can't delete variable '%s'" % todel)
2658 error("Can't delete variable '%s'" % todel)
2659 # reset
2659 # reset
2660 elif opts.has_key('r'):
2660 elif opts.has_key('r'):
2661 for k in self.shell.persist.keys():
2661 for k in self.shell.persist.keys():
2662 if k.startswith('S:'):
2662 if k.startswith('S:'):
2663 del self.shell.persist[k]
2663 del self.shell.persist[k]
2664
2664
2665 # run without arguments -> list variables & values
2665 # run without arguments -> list variables & values
2666 elif not args:
2666 elif not args:
2667 vars = [v[2:] for v in self.shell.persist.keys()
2667 vars = [v[2:] for v in self.shell.persist.keys()
2668 if v.startswith('S:')]
2668 if v.startswith('S:')]
2669 vars.sort()
2669 vars.sort()
2670 if vars:
2670 if vars:
2671 size = max(map(len,vars))
2671 size = max(map(len,vars))
2672 else:
2672 else:
2673 size = 0
2673 size = 0
2674
2674
2675 print 'Stored variables and their in-memory values:'
2675 print 'Stored variables and their in-memory values:'
2676 fmt = '%-'+str(size)+'s -> %s'
2676 fmt = '%-'+str(size)+'s -> %s'
2677 get = self.shell.user_ns.get
2677 get = self.shell.user_ns.get
2678 for var in vars:
2678 for var in vars:
2679 # print 30 first characters from every var
2679 # print 30 first characters from every var
2680 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2680 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2681
2681
2682 # default action - store the variable
2682 # default action - store the variable
2683 else:
2683 else:
2684 obj = self.shell.user_ns[args[0] ]
2684 obj = self.shell.user_ns[args[0] ]
2685 if isinstance(inspect.getmodule(obj), FakeModule):
2685 if isinstance(inspect.getmodule(obj), FakeModule):
2686 print textwrap.dedent("""\
2686 print textwrap.dedent("""\
2687 Warning:%s is %s
2687 Warning:%s is %s
2688 Proper storage of interactively declared classes (or instances
2688 Proper storage of interactively declared classes (or instances
2689 of those classes) is not possible! Only instances
2689 of those classes) is not possible! Only instances
2690 of classes in real modules on file system can be %%store'd.
2690 of classes in real modules on file system can be %%store'd.
2691 """ % (args[0], obj) )
2691 """ % (args[0], obj) )
2692 return
2692 return
2693 pickled = pickle.dumps(obj)
2693 pickled = pickle.dumps(obj)
2694 self.shell.persist[ 'S:' + args[0] ] = pickled
2694 self.shell.persist[ 'S:' + args[0] ] = pickled
2695 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2695 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2696
2696
2697 def magic_bookmark(self, parameter_s=''):
2697 def magic_bookmark(self, parameter_s=''):
2698 """Manage IPython's bookmark system.
2698 """Manage IPython's bookmark system.
2699
2699
2700 %bookmark <name> - set bookmark to current dir
2700 %bookmark <name> - set bookmark to current dir
2701 %bookmark <name> <dir> - set bookmark to <dir>
2701 %bookmark <name> <dir> - set bookmark to <dir>
2702 %bookmark -l - list all bookmarks
2702 %bookmark -l - list all bookmarks
2703 %bookmark -d <name> - remove bookmark
2703 %bookmark -d <name> - remove bookmark
2704 %bookmark -r - remove all bookmarks
2704 %bookmark -r - remove all bookmarks
2705
2705
2706 You can later on access a bookmarked folder with:
2706 You can later on access a bookmarked folder with:
2707 %cd -b <name>
2707 %cd -b <name>
2708 or simply '%cd <name>' if there is no directory called <name> AND
2708 or simply '%cd <name>' if there is no directory called <name> AND
2709 there is such a bookmark defined.
2709 there is such a bookmark defined.
2710
2710
2711 Your bookmarks persist through IPython sessions, but they are
2711 Your bookmarks persist through IPython sessions, but they are
2712 associated with each profile."""
2712 associated with each profile."""
2713
2713
2714 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2714 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2715 if len(args) > 2:
2715 if len(args) > 2:
2716 error('You can only give at most two arguments')
2716 error('You can only give at most two arguments')
2717 return
2717 return
2718
2718
2719 bkms = self.shell.persist.get('bookmarks',{})
2719 bkms = self.shell.persist.get('bookmarks',{})
2720
2720
2721 if opts.has_key('d'):
2721 if opts.has_key('d'):
2722 try:
2722 try:
2723 todel = args[0]
2723 todel = args[0]
2724 except IndexError:
2724 except IndexError:
2725 error('You must provide a bookmark to delete')
2725 error('You must provide a bookmark to delete')
2726 else:
2726 else:
2727 try:
2727 try:
2728 del bkms[todel]
2728 del bkms[todel]
2729 except:
2729 except:
2730 error("Can't delete bookmark '%s'" % todel)
2730 error("Can't delete bookmark '%s'" % todel)
2731 elif opts.has_key('r'):
2731 elif opts.has_key('r'):
2732 bkms = {}
2732 bkms = {}
2733 elif opts.has_key('l'):
2733 elif opts.has_key('l'):
2734 bks = bkms.keys()
2734 bks = bkms.keys()
2735 bks.sort()
2735 bks.sort()
2736 if bks:
2736 if bks:
2737 size = max(map(len,bks))
2737 size = max(map(len,bks))
2738 else:
2738 else:
2739 size = 0
2739 size = 0
2740 fmt = '%-'+str(size)+'s -> %s'
2740 fmt = '%-'+str(size)+'s -> %s'
2741 print 'Current bookmarks:'
2741 print 'Current bookmarks:'
2742 for bk in bks:
2742 for bk in bks:
2743 print fmt % (bk,bkms[bk])
2743 print fmt % (bk,bkms[bk])
2744 else:
2744 else:
2745 if not args:
2745 if not args:
2746 error("You must specify the bookmark name")
2746 error("You must specify the bookmark name")
2747 elif len(args)==1:
2747 elif len(args)==1:
2748 bkms[args[0]] = os.getcwd()
2748 bkms[args[0]] = os.getcwd()
2749 elif len(args)==2:
2749 elif len(args)==2:
2750 bkms[args[0]] = args[1]
2750 bkms[args[0]] = args[1]
2751 self.shell.persist['bookmarks'] = bkms
2751 self.shell.persist['bookmarks'] = bkms
2752
2752
2753 def magic_pycat(self, parameter_s=''):
2753 def magic_pycat(self, parameter_s=''):
2754 """Show a syntax-highlighted file through a pager.
2754 """Show a syntax-highlighted file through a pager.
2755
2755
2756 This magic is similar to the cat utility, but it will assume the file
2756 This magic is similar to the cat utility, but it will assume the file
2757 to be Python source and will show it with syntax highlighting. """
2757 to be Python source and will show it with syntax highlighting. """
2758
2758
2759 filename = get_py_filename(parameter_s)
2759 filename = get_py_filename(parameter_s)
2760 page(self.shell.pycolorize(file_read(filename)),
2760 page(self.shell.pycolorize(file_read(filename)),
2761 screen_lines=self.shell.rc.screen_length)
2761 screen_lines=self.shell.rc.screen_length)
2762
2762
2763 def magic_paste(self, parameter_s=''):
2763 def magic_cpaste(self, parameter_s=''):
2764 """Allows you to paste & execute a pre-formatted code block from
2764 """Allows you to paste & execute a pre-formatted code block from
2765 clipboard.
2765 clipboard.
2766
2766
2767 You must terminate the block with '--' (two minus-signs) alone on the
2767 You must terminate the block with '--' (two minus-signs) alone on the
2768 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2768 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2769 is the new sentinel for this operation)
2769 is the new sentinel for this operation)
2770
2770
2771 The block is dedented prior to execution to enable execution of
2771 The block is dedented prior to execution to enable execution of
2772 method definitions. The executed block is also assigned to variable
2772 method definitions. The executed block is also assigned to variable
2773 named 'pasted_block' for later editing with '%edit pasted_block'.
2773 named 'pasted_block' for later editing with '%edit pasted_block'.
2774
2774
2775 You can also pass a variable name as an argument, e.g. '%paste foo'.
2775 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2776 This assigns the pasted block to variable 'foo' as string, without
2776 This assigns the pasted block to variable 'foo' as string, without
2777 dedenting or executing it.
2777 dedenting or executing it.
2778
2778
2779 Do not be alarmed by garbled output on Windows (it's a readline bug).
2779 Do not be alarmed by garbled output on Windows (it's a readline bug).
2780 Just press enter and type -- (and press enter again) and the block
2780 Just press enter and type -- (and press enter again) and the block
2781 will be what was just pasted.
2781 will be what was just pasted.
2782
2782
2783 IPython statements (magics, shell escapes) are not supported (yet).
2783 IPython statements (magics, shell escapes) are not supported (yet).
2784 """
2784 """
2785 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2785 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2786 par = args.strip()
2786 par = args.strip()
2787 sentinel = opts.get('s','--')
2787 sentinel = opts.get('s','--')
2788
2788
2789 from IPython import iplib
2789 from IPython import iplib
2790 lines = []
2790 lines = []
2791 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2791 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2792 while 1:
2792 while 1:
2793 l = iplib.raw_input_original(':')
2793 l = iplib.raw_input_original(':')
2794 if l ==sentinel:
2794 if l ==sentinel:
2795 break
2795 break
2796 lines.append(l)
2796 lines.append(l)
2797 block = "\n".join(lines)
2797 block = "\n".join(lines)
2798 #print "block:\n",block
2798 #print "block:\n",block
2799 if not par:
2799 if not par:
2800 b = textwrap.dedent(block)
2800 b = textwrap.dedent(block)
2801 exec b in self.user_ns
2801 exec b in self.user_ns
2802 self.user_ns['pasted_block'] = b
2802 self.user_ns['pasted_block'] = b
2803 else:
2803 else:
2804 self.user_ns[par] = block
2804 self.user_ns[par] = block
2805 print "Block assigned to '%s'" % par
2805 print "Block assigned to '%s'" % par
2806
2806
2807
2807
2808
2808
2809 # end Magic
2809 # end Magic
@@ -1,575 +1,584 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 Classes for handling input/output prompts.
3 Classes for handling input/output prompts.
4
4
5 $Id: Prompts.py 1020 2006-01-14 13:22:58Z vivainio $"""
5 $Id: Prompts.py 1076 2006-01-24 17:27:05Z vivainio $"""
6
6
7 #*****************************************************************************
7 #*****************************************************************************
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 from IPython import Release
14 from IPython import Release
15 __author__ = '%s <%s>' % Release.authors['Fernando']
15 __author__ = '%s <%s>' % Release.authors['Fernando']
16 __license__ = Release.license
16 __license__ = Release.license
17 __version__ = Release.version
17 __version__ = Release.version
18
18
19 #****************************************************************************
19 #****************************************************************************
20 # Required modules
20 # Required modules
21 import __builtin__
21 import __builtin__
22 import os
22 import os
23 import socket
23 import socket
24 import sys
24 import sys
25 import time
25 import time
26 from pprint import pprint,pformat
26 from pprint import pprint,pformat
27
27
28 # IPython's own
28 # IPython's own
29 from IPython import ColorANSI
29 from IPython import ColorANSI
30 from IPython.Itpl import ItplNS
30 from IPython.Itpl import ItplNS
31 from IPython.ipstruct import Struct
31 from IPython.ipstruct import Struct
32 from IPython.macro import Macro
32 from IPython.macro import Macro
33 from IPython.genutils import *
33 from IPython.genutils import *
34
34
35 #****************************************************************************
35 #****************************************************************************
36 #Color schemes for Prompts.
36 #Color schemes for Prompts.
37
37
38 PromptColors = ColorANSI.ColorSchemeTable()
38 PromptColors = ColorANSI.ColorSchemeTable()
39 InputColors = ColorANSI.InputTermColors # just a shorthand
39 InputColors = ColorANSI.InputTermColors # just a shorthand
40 Colors = ColorANSI.TermColors # just a shorthand
40 Colors = ColorANSI.TermColors # just a shorthand
41
41
42 PromptColors.add_scheme(ColorANSI.ColorScheme(
42 PromptColors.add_scheme(ColorANSI.ColorScheme(
43 'NoColor',
43 'NoColor',
44 in_prompt = InputColors.NoColor, # Input prompt
44 in_prompt = InputColors.NoColor, # Input prompt
45 in_number = InputColors.NoColor, # Input prompt number
45 in_number = InputColors.NoColor, # Input prompt number
46 in_prompt2 = InputColors.NoColor, # Continuation prompt
46 in_prompt2 = InputColors.NoColor, # Continuation prompt
47 in_normal = InputColors.NoColor, # color off (usu. Colors.Normal)
47 in_normal = InputColors.NoColor, # color off (usu. Colors.Normal)
48
48
49 out_prompt = Colors.NoColor, # Output prompt
49 out_prompt = Colors.NoColor, # Output prompt
50 out_number = Colors.NoColor, # Output prompt number
50 out_number = Colors.NoColor, # Output prompt number
51
51
52 normal = Colors.NoColor # color off (usu. Colors.Normal)
52 normal = Colors.NoColor # color off (usu. Colors.Normal)
53 ))
53 ))
54
54
55 # make some schemes as instances so we can copy them for modification easily:
55 # make some schemes as instances so we can copy them for modification easily:
56 __PColLinux = ColorANSI.ColorScheme(
56 __PColLinux = ColorANSI.ColorScheme(
57 'Linux',
57 'Linux',
58 in_prompt = InputColors.Green,
58 in_prompt = InputColors.Green,
59 in_number = InputColors.LightGreen,
59 in_number = InputColors.LightGreen,
60 in_prompt2 = InputColors.Green,
60 in_prompt2 = InputColors.Green,
61 in_normal = InputColors.Normal, # color off (usu. Colors.Normal)
61 in_normal = InputColors.Normal, # color off (usu. Colors.Normal)
62
62
63 out_prompt = Colors.Red,
63 out_prompt = Colors.Red,
64 out_number = Colors.LightRed,
64 out_number = Colors.LightRed,
65
65
66 normal = Colors.Normal
66 normal = Colors.Normal
67 )
67 )
68 # Don't forget to enter it into the table!
68 # Don't forget to enter it into the table!
69 PromptColors.add_scheme(__PColLinux)
69 PromptColors.add_scheme(__PColLinux)
70
70
71 # Slightly modified Linux for light backgrounds
71 # Slightly modified Linux for light backgrounds
72 __PColLightBG = __PColLinux.copy('LightBG')
72 __PColLightBG = __PColLinux.copy('LightBG')
73
73
74 __PColLightBG.colors.update(
74 __PColLightBG.colors.update(
75 in_prompt = InputColors.Blue,
75 in_prompt = InputColors.Blue,
76 in_number = InputColors.LightBlue,
76 in_number = InputColors.LightBlue,
77 in_prompt2 = InputColors.Blue
77 in_prompt2 = InputColors.Blue
78 )
78 )
79 PromptColors.add_scheme(__PColLightBG)
79 PromptColors.add_scheme(__PColLightBG)
80
80
81 del Colors,InputColors
81 del Colors,InputColors
82
82
83 #-----------------------------------------------------------------------------
83 #-----------------------------------------------------------------------------
84 def multiple_replace(dict, text):
84 def multiple_replace(dict, text):
85 """ Replace in 'text' all occurences of any key in the given
85 """ Replace in 'text' all occurences of any key in the given
86 dictionary by its corresponding value. Returns the new string."""
86 dictionary by its corresponding value. Returns the new string."""
87
87
88 # Function by Xavier Defrang, originally found at:
88 # Function by Xavier Defrang, originally found at:
89 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81330
89 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81330
90
90
91 # Create a regular expression from the dictionary keys
91 # Create a regular expression from the dictionary keys
92 regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))
92 regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))
93 # For each match, look-up corresponding value in dictionary
93 # For each match, look-up corresponding value in dictionary
94 return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)
94 return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)
95
95
96 #-----------------------------------------------------------------------------
96 #-----------------------------------------------------------------------------
97 # Special characters that can be used in prompt templates, mainly bash-like
97 # Special characters that can be used in prompt templates, mainly bash-like
98
98
99 # If $HOME isn't defined (Windows), make it an absurd string so that it can
99 # If $HOME isn't defined (Windows), make it an absurd string so that it can
100 # never be expanded out into '~'. Basically anything which can never be a
100 # never be expanded out into '~'. Basically anything which can never be a
101 # reasonable directory name will do, we just want the $HOME -> '~' operation
101 # reasonable directory name will do, we just want the $HOME -> '~' operation
102 # to become a no-op. We pre-compute $HOME here so it's not done on every
102 # to become a no-op. We pre-compute $HOME here so it's not done on every
103 # prompt call.
103 # prompt call.
104
104
105 # FIXME:
105 # FIXME:
106
106
107 # - This should be turned into a class which does proper namespace management,
107 # - This should be turned into a class which does proper namespace management,
108 # since the prompt specials need to be evaluated in a certain namespace.
108 # since the prompt specials need to be evaluated in a certain namespace.
109 # Currently it's just globals, which need to be managed manually by code
109 # Currently it's just globals, which need to be managed manually by code
110 # below.
110 # below.
111
111
112 # - I also need to split up the color schemes from the prompt specials
112 # - I also need to split up the color schemes from the prompt specials
113 # somehow. I don't have a clean design for that quite yet.
113 # somehow. I don't have a clean design for that quite yet.
114
114
115 HOME = os.environ.get("HOME","//////:::::ZZZZZ,,,~~~")
115 HOME = os.environ.get("HOME","//////:::::ZZZZZ,,,~~~")
116
116
117 # We precompute a few more strings here for the prompt_specials, which are
117 # We precompute a few more strings here for the prompt_specials, which are
118 # fixed once ipython starts. This reduces the runtime overhead of computing
118 # fixed once ipython starts. This reduces the runtime overhead of computing
119 # prompt strings.
119 # prompt strings.
120 USER = os.environ.get("USER")
120 USER = os.environ.get("USER")
121 HOSTNAME = socket.gethostname()
121 HOSTNAME = socket.gethostname()
122 HOSTNAME_SHORT = HOSTNAME.split(".")[0]
122 HOSTNAME_SHORT = HOSTNAME.split(".")[0]
123 ROOT_SYMBOL = "$#"[os.name=='nt' or os.getuid()==0]
123 ROOT_SYMBOL = "$#"[os.name=='nt' or os.getuid()==0]
124
124
125 prompt_specials_color = {
125 prompt_specials_color = {
126 # Prompt/history count
126 # Prompt/history count
127 '%n' : '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
127 '%n' : '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
128 '\\#': '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
128 '\\#': '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
129 # Prompt/history count, with the actual digits replaced by dots. Used
129 # Prompt/history count, with the actual digits replaced by dots. Used
130 # mainly in continuation prompts (prompt_in2)
130 # mainly in continuation prompts (prompt_in2)
131 '\\D': '${"."*len(str(self.cache.prompt_count))}',
131 '\\D': '${"."*len(str(self.cache.prompt_count))}',
132 # Current working directory
132 # Current working directory
133 '\\w': '${os.getcwd()}',
133 '\\w': '${os.getcwd()}',
134 # Current time
134 # Current time
135 '\\t' : '${time.strftime("%H:%M:%S")}',
135 '\\t' : '${time.strftime("%H:%M:%S")}',
136 # Basename of current working directory.
136 # Basename of current working directory.
137 # (use os.sep to make this portable across OSes)
137 # (use os.sep to make this portable across OSes)
138 '\\W' : '${os.getcwd().split("%s")[-1]}' % os.sep,
138 '\\W' : '${os.getcwd().split("%s")[-1]}' % os.sep,
139 # These X<N> are an extension to the normal bash prompts. They return
139 # These X<N> are an extension to the normal bash prompts. They return
140 # N terms of the path, after replacing $HOME with '~'
140 # N terms of the path, after replacing $HOME with '~'
141 '\\X0': '${os.getcwd().replace("%s","~")}' % HOME,
141 '\\X0': '${os.getcwd().replace("%s","~")}' % HOME,
142 '\\X1': '${self.cwd_filt(1)}',
142 '\\X1': '${self.cwd_filt(1)}',
143 '\\X2': '${self.cwd_filt(2)}',
143 '\\X2': '${self.cwd_filt(2)}',
144 '\\X3': '${self.cwd_filt(3)}',
144 '\\X3': '${self.cwd_filt(3)}',
145 '\\X4': '${self.cwd_filt(4)}',
145 '\\X4': '${self.cwd_filt(4)}',
146 '\\X5': '${self.cwd_filt(5)}',
146 '\\X5': '${self.cwd_filt(5)}',
147 # Y<N> are similar to X<N>, but they show '~' if it's the directory
147 # Y<N> are similar to X<N>, but they show '~' if it's the directory
148 # N+1 in the list. Somewhat like %cN in tcsh.
148 # N+1 in the list. Somewhat like %cN in tcsh.
149 '\\Y0': '${self.cwd_filt2(0)}',
149 '\\Y0': '${self.cwd_filt2(0)}',
150 '\\Y1': '${self.cwd_filt2(1)}',
150 '\\Y1': '${self.cwd_filt2(1)}',
151 '\\Y2': '${self.cwd_filt2(2)}',
151 '\\Y2': '${self.cwd_filt2(2)}',
152 '\\Y3': '${self.cwd_filt2(3)}',
152 '\\Y3': '${self.cwd_filt2(3)}',
153 '\\Y4': '${self.cwd_filt2(4)}',
153 '\\Y4': '${self.cwd_filt2(4)}',
154 '\\Y5': '${self.cwd_filt2(5)}',
154 '\\Y5': '${self.cwd_filt2(5)}',
155 # Hostname up to first .
155 # Hostname up to first .
156 '\\h': HOSTNAME_SHORT,
156 '\\h': HOSTNAME_SHORT,
157 # Full hostname
157 # Full hostname
158 '\\H': HOSTNAME,
158 '\\H': HOSTNAME,
159 # Username of current user
159 # Username of current user
160 '\\u': USER,
160 '\\u': USER,
161 # Escaped '\'
161 # Escaped '\'
162 '\\\\': '\\',
162 '\\\\': '\\',
163 # Newline
163 # Newline
164 '\\n': '\n',
164 '\\n': '\n',
165 # Carriage return
165 # Carriage return
166 '\\r': '\r',
166 '\\r': '\r',
167 # Release version
167 # Release version
168 '\\v': __version__,
168 '\\v': __version__,
169 # Root symbol ($ or #)
169 # Root symbol ($ or #)
170 '\\$': ROOT_SYMBOL,
170 '\\$': ROOT_SYMBOL,
171 }
171 }
172
172
173 # A copy of the prompt_specials dictionary but with all color escapes removed,
173 # A copy of the prompt_specials dictionary but with all color escapes removed,
174 # so we can correctly compute the prompt length for the auto_rewrite method.
174 # so we can correctly compute the prompt length for the auto_rewrite method.
175 prompt_specials_nocolor = prompt_specials_color.copy()
175 prompt_specials_nocolor = prompt_specials_color.copy()
176 prompt_specials_nocolor['%n'] = '${self.cache.prompt_count}'
176 prompt_specials_nocolor['%n'] = '${self.cache.prompt_count}'
177 prompt_specials_nocolor['\\#'] = '${self.cache.prompt_count}'
177 prompt_specials_nocolor['\\#'] = '${self.cache.prompt_count}'
178
178
179 # Add in all the InputTermColors color escapes as valid prompt characters.
179 # Add in all the InputTermColors color escapes as valid prompt characters.
180 # They all get added as \\C_COLORNAME, so that we don't have any conflicts
180 # They all get added as \\C_COLORNAME, so that we don't have any conflicts
181 # with a color name which may begin with a letter used by any other of the
181 # with a color name which may begin with a letter used by any other of the
182 # allowed specials. This of course means that \\C will never be allowed for
182 # allowed specials. This of course means that \\C will never be allowed for
183 # anything else.
183 # anything else.
184 input_colors = ColorANSI.InputTermColors
184 input_colors = ColorANSI.InputTermColors
185 for _color in dir(input_colors):
185 for _color in dir(input_colors):
186 if _color[0] != '_':
186 if _color[0] != '_':
187 c_name = '\\C_'+_color
187 c_name = '\\C_'+_color
188 prompt_specials_color[c_name] = getattr(input_colors,_color)
188 prompt_specials_color[c_name] = getattr(input_colors,_color)
189 prompt_specials_nocolor[c_name] = ''
189 prompt_specials_nocolor[c_name] = ''
190
190
191 # we default to no color for safety. Note that prompt_specials is a global
191 # we default to no color for safety. Note that prompt_specials is a global
192 # variable used by all prompt objects.
192 # variable used by all prompt objects.
193 prompt_specials = prompt_specials_nocolor
193 prompt_specials = prompt_specials_nocolor
194
194
195 #-----------------------------------------------------------------------------
195 #-----------------------------------------------------------------------------
196 def str_safe(arg):
196 def str_safe(arg):
197 """Convert to a string, without ever raising an exception.
197 """Convert to a string, without ever raising an exception.
198
198
199 If str(arg) fails, <ERROR: ... > is returned, where ... is the exception
199 If str(arg) fails, <ERROR: ... > is returned, where ... is the exception
200 error message."""
200 error message."""
201
201
202 try:
202 try:
203 out = str(arg)
203 out = str(arg)
204 except UnicodeError:
204 except UnicodeError:
205 try:
205 try:
206 out = arg.encode('utf_8','replace')
206 out = arg.encode('utf_8','replace')
207 except Exception,msg:
207 except Exception,msg:
208 # let's keep this little duplication here, so that the most common
208 # let's keep this little duplication here, so that the most common
209 # case doesn't suffer from a double try wrapping.
209 # case doesn't suffer from a double try wrapping.
210 out = '<ERROR: %s>' % msg
210 out = '<ERROR: %s>' % msg
211 except Exception,msg:
211 except Exception,msg:
212 out = '<ERROR: %s>' % msg
212 out = '<ERROR: %s>' % msg
213 return out
213 return out
214
214
215 class BasePrompt:
215 class BasePrompt:
216 """Interactive prompt similar to Mathematica's."""
216 """Interactive prompt similar to Mathematica's."""
217 def __init__(self,cache,sep,prompt,pad_left=False):
217 def __init__(self,cache,sep,prompt,pad_left=False):
218
218
219 # Hack: we access information about the primary prompt through the
219 # Hack: we access information about the primary prompt through the
220 # cache argument. We need this, because we want the secondary prompt
220 # cache argument. We need this, because we want the secondary prompt
221 # to be aligned with the primary one. Color table info is also shared
221 # to be aligned with the primary one. Color table info is also shared
222 # by all prompt classes through the cache. Nice OO spaghetti code!
222 # by all prompt classes through the cache. Nice OO spaghetti code!
223 self.cache = cache
223 self.cache = cache
224 self.sep = sep
224 self.sep = sep
225
225
226 # regexp to count the number of spaces at the end of a prompt
226 # regexp to count the number of spaces at the end of a prompt
227 # expression, useful for prompt auto-rewriting
227 # expression, useful for prompt auto-rewriting
228 self.rspace = re.compile(r'(\s*)$')
228 self.rspace = re.compile(r'(\s*)$')
229 # Flag to left-pad prompt strings to match the length of the primary
229 # Flag to left-pad prompt strings to match the length of the primary
230 # prompt
230 # prompt
231 self.pad_left = pad_left
231 self.pad_left = pad_left
232 # Set template to create each actual prompt (where numbers change)
232 # Set template to create each actual prompt (where numbers change)
233 self.p_template = prompt
233 self.p_template = prompt
234 self.set_p_str()
234 self.set_p_str()
235
235
236 def set_p_str(self):
236 def set_p_str(self):
237 """ Set the interpolating prompt strings.
237 """ Set the interpolating prompt strings.
238
238
239 This must be called every time the color settings change, because the
239 This must be called every time the color settings change, because the
240 prompt_specials global may have changed."""
240 prompt_specials global may have changed."""
241
241
242 import os,time # needed in locals for prompt string handling
242 import os,time # needed in locals for prompt string handling
243 loc = locals()
243 loc = locals()
244 self.p_str = ItplNS('%s%s%s' %
244 self.p_str = ItplNS('%s%s%s' %
245 ('${self.sep}${self.col_p}',
245 ('${self.sep}${self.col_p}',
246 multiple_replace(prompt_specials, self.p_template),
246 multiple_replace(prompt_specials, self.p_template),
247 '${self.col_norm}'),self.cache.user_ns,loc)
247 '${self.col_norm}'),self.cache.user_ns,loc)
248
248
249 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
249 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
250 self.p_template),
250 self.p_template),
251 self.cache.user_ns,loc)
251 self.cache.user_ns,loc)
252
252
253 def write(self,msg): # dbg
253 def write(self,msg): # dbg
254 sys.stdout.write(msg)
254 sys.stdout.write(msg)
255 return ''
255 return ''
256
256
257 def __str__(self):
257 def __str__(self):
258 """Return a string form of the prompt.
258 """Return a string form of the prompt.
259
259
260 This for is useful for continuation and output prompts, since it is
260 This for is useful for continuation and output prompts, since it is
261 left-padded to match lengths with the primary one (if the
261 left-padded to match lengths with the primary one (if the
262 self.pad_left attribute is set)."""
262 self.pad_left attribute is set)."""
263
263
264 out_str = str_safe(self.p_str)
264 out_str = str_safe(self.p_str)
265 if self.pad_left:
265 if self.pad_left:
266 # We must find the amount of padding required to match lengths,
266 # We must find the amount of padding required to match lengths,
267 # taking the color escapes (which are invisible on-screen) into
267 # taking the color escapes (which are invisible on-screen) into
268 # account.
268 # account.
269 esc_pad = len(out_str) - len(str_safe(self.p_str_nocolor))
269 esc_pad = len(out_str) - len(str_safe(self.p_str_nocolor))
270 format = '%%%ss' % (len(str(self.cache.last_prompt))+esc_pad)
270 format = '%%%ss' % (len(str(self.cache.last_prompt))+esc_pad)
271 return format % out_str
271 return format % out_str
272 else:
272 else:
273 return out_str
273 return out_str
274
274
275 # these path filters are put in as methods so that we can control the
275 # these path filters are put in as methods so that we can control the
276 # namespace where the prompt strings get evaluated
276 # namespace where the prompt strings get evaluated
277 def cwd_filt(self,depth):
277 def cwd_filt(self,depth):
278 """Return the last depth elements of the current working directory.
278 """Return the last depth elements of the current working directory.
279
279
280 $HOME is always replaced with '~'.
280 $HOME is always replaced with '~'.
281 If depth==0, the full path is returned."""
281 If depth==0, the full path is returned."""
282
282
283 cwd = os.getcwd().replace(HOME,"~")
283 cwd = os.getcwd().replace(HOME,"~")
284 out = os.sep.join(cwd.split(os.sep)[-depth:])
284 out = os.sep.join(cwd.split(os.sep)[-depth:])
285 if out:
285 if out:
286 return out
286 return out
287 else:
287 else:
288 return os.sep
288 return os.sep
289
289
290 def cwd_filt2(self,depth):
290 def cwd_filt2(self,depth):
291 """Return the last depth elements of the current working directory.
291 """Return the last depth elements of the current working directory.
292
292
293 $HOME is always replaced with '~'.
293 $HOME is always replaced with '~'.
294 If depth==0, the full path is returned."""
294 If depth==0, the full path is returned."""
295
295
296 cwd = os.getcwd().replace(HOME,"~").split(os.sep)
296 cwd = os.getcwd().replace(HOME,"~").split(os.sep)
297 if '~' in cwd and len(cwd) == depth+1:
297 if '~' in cwd and len(cwd) == depth+1:
298 depth += 1
298 depth += 1
299 out = os.sep.join(cwd[-depth:])
299 out = os.sep.join(cwd[-depth:])
300 if out:
300 if out:
301 return out
301 return out
302 else:
302 else:
303 return os.sep
303 return os.sep
304
304
305 class Prompt1(BasePrompt):
305 class Prompt1(BasePrompt):
306 """Input interactive prompt similar to Mathematica's."""
306 """Input interactive prompt similar to Mathematica's."""
307
307
308 def __init__(self,cache,sep='\n',prompt='In [\\#]: ',pad_left=True):
308 def __init__(self,cache,sep='\n',prompt='In [\\#]: ',pad_left=True):
309 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
309 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
310
310
311 def set_colors(self):
311 def set_colors(self):
312 self.set_p_str()
312 self.set_p_str()
313 Colors = self.cache.color_table.active_colors # shorthand
313 Colors = self.cache.color_table.active_colors # shorthand
314 self.col_p = Colors.in_prompt
314 self.col_p = Colors.in_prompt
315 self.col_num = Colors.in_number
315 self.col_num = Colors.in_number
316 self.col_norm = Colors.in_normal
316 self.col_norm = Colors.in_normal
317 # We need a non-input version of these escapes for the '--->'
317 # We need a non-input version of these escapes for the '--->'
318 # auto-call prompts used in the auto_rewrite() method.
318 # auto-call prompts used in the auto_rewrite() method.
319 self.col_p_ni = self.col_p.replace('\001','').replace('\002','')
319 self.col_p_ni = self.col_p.replace('\001','').replace('\002','')
320 self.col_norm_ni = Colors.normal
320 self.col_norm_ni = Colors.normal
321
321
322 def __str__(self):
322 def __str__(self):
323 self.cache.prompt_count += 1
323 self.cache.prompt_count += 1
324 self.cache.last_prompt = str_safe(self.p_str_nocolor).split('\n')[-1]
324 self.cache.last_prompt = str_safe(self.p_str_nocolor).split('\n')[-1]
325 return str_safe(self.p_str)
325 return str_safe(self.p_str)
326
326
327 def auto_rewrite(self):
327 def auto_rewrite(self):
328 """Print a string of the form '--->' which lines up with the previous
328 """Print a string of the form '--->' which lines up with the previous
329 input string. Useful for systems which re-write the user input when
329 input string. Useful for systems which re-write the user input when
330 handling automatically special syntaxes."""
330 handling automatically special syntaxes."""
331
331
332 curr = str(self.cache.last_prompt)
332 curr = str(self.cache.last_prompt)
333 nrspaces = len(self.rspace.search(curr).group())
333 nrspaces = len(self.rspace.search(curr).group())
334 return '%s%s>%s%s' % (self.col_p_ni,'-'*(len(curr)-nrspaces-1),
334 return '%s%s>%s%s' % (self.col_p_ni,'-'*(len(curr)-nrspaces-1),
335 ' '*nrspaces,self.col_norm_ni)
335 ' '*nrspaces,self.col_norm_ni)
336
336
337 class PromptOut(BasePrompt):
337 class PromptOut(BasePrompt):
338 """Output interactive prompt similar to Mathematica's."""
338 """Output interactive prompt similar to Mathematica's."""
339
339
340 def __init__(self,cache,sep='',prompt='Out[\\#]: ',pad_left=True):
340 def __init__(self,cache,sep='',prompt='Out[\\#]: ',pad_left=True):
341 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
341 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
342 if not self.p_template:
342 if not self.p_template:
343 self.__str__ = lambda: ''
343 self.__str__ = lambda: ''
344
344
345 def set_colors(self):
345 def set_colors(self):
346 self.set_p_str()
346 self.set_p_str()
347 Colors = self.cache.color_table.active_colors # shorthand
347 Colors = self.cache.color_table.active_colors # shorthand
348 self.col_p = Colors.out_prompt
348 self.col_p = Colors.out_prompt
349 self.col_num = Colors.out_number
349 self.col_num = Colors.out_number
350 self.col_norm = Colors.normal
350 self.col_norm = Colors.normal
351
351
352 class Prompt2(BasePrompt):
352 class Prompt2(BasePrompt):
353 """Interactive continuation prompt."""
353 """Interactive continuation prompt."""
354
354
355 def __init__(self,cache,prompt=' .\\D.: ',pad_left=True):
355 def __init__(self,cache,prompt=' .\\D.: ',pad_left=True):
356 self.cache = cache
356 self.cache = cache
357 self.p_template = prompt
357 self.p_template = prompt
358 self.pad_left = pad_left
358 self.pad_left = pad_left
359 self.set_p_str()
359 self.set_p_str()
360
360
361 def set_p_str(self):
361 def set_p_str(self):
362 import os,time # needed in locals for prompt string handling
362 import os,time # needed in locals for prompt string handling
363 loc = locals()
363 loc = locals()
364 self.p_str = ItplNS('%s%s%s' %
364 self.p_str = ItplNS('%s%s%s' %
365 ('${self.col_p2}',
365 ('${self.col_p2}',
366 multiple_replace(prompt_specials, self.p_template),
366 multiple_replace(prompt_specials, self.p_template),
367 '$self.col_norm'),
367 '$self.col_norm'),
368 self.cache.user_ns,loc)
368 self.cache.user_ns,loc)
369 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
369 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
370 self.p_template),
370 self.p_template),
371 self.cache.user_ns,loc)
371 self.cache.user_ns,loc)
372
372
373 def set_colors(self):
373 def set_colors(self):
374 self.set_p_str()
374 self.set_p_str()
375 Colors = self.cache.color_table.active_colors
375 Colors = self.cache.color_table.active_colors
376 self.col_p2 = Colors.in_prompt2
376 self.col_p2 = Colors.in_prompt2
377 self.col_norm = Colors.in_normal
377 self.col_norm = Colors.in_normal
378 # FIXME (2004-06-16) HACK: prevent crashes for users who haven't
378 # FIXME (2004-06-16) HACK: prevent crashes for users who haven't
379 # updated their prompt_in2 definitions. Remove eventually.
379 # updated their prompt_in2 definitions. Remove eventually.
380 self.col_p = Colors.out_prompt
380 self.col_p = Colors.out_prompt
381 self.col_num = Colors.out_number
381 self.col_num = Colors.out_number
382
382
383 #-----------------------------------------------------------------------------
383 #-----------------------------------------------------------------------------
384 class CachedOutput:
384 class CachedOutput:
385 """Class for printing output from calculations while keeping a cache of
385 """Class for printing output from calculations while keeping a cache of
386 reults. It dynamically creates global variables prefixed with _ which
386 reults. It dynamically creates global variables prefixed with _ which
387 contain these results.
387 contain these results.
388
388
389 Meant to be used as a sys.displayhook replacement, providing numbered
389 Meant to be used as a sys.displayhook replacement, providing numbered
390 prompts and cache services.
390 prompts and cache services.
391
391
392 Initialize with initial and final values for cache counter (this defines
392 Initialize with initial and final values for cache counter (this defines
393 the maximum size of the cache."""
393 the maximum size of the cache."""
394
394
395 def __init__(self,shell,cache_size,Pprint,
395 def __init__(self,shell,cache_size,Pprint,
396 colors='NoColor',input_sep='\n',
396 colors='NoColor',input_sep='\n',
397 output_sep='\n',output_sep2='',
397 output_sep='\n',output_sep2='',
398 ps1 = None, ps2 = None,ps_out = None,pad_left=True):
398 ps1 = None, ps2 = None,ps_out = None,pad_left=True):
399
399
400 cache_size_min = 20
400 cache_size_min = 20
401 if cache_size <= 0:
401 if cache_size <= 0:
402 self.do_full_cache = 0
402 self.do_full_cache = 0
403 cache_size = 0
403 cache_size = 0
404 elif cache_size < cache_size_min:
404 elif cache_size < cache_size_min:
405 self.do_full_cache = 0
405 self.do_full_cache = 0
406 cache_size = 0
406 cache_size = 0
407 warn('caching was disabled (min value for cache size is %s).' %
407 warn('caching was disabled (min value for cache size is %s).' %
408 cache_size_min,level=3)
408 cache_size_min,level=3)
409 else:
409 else:
410 self.do_full_cache = 1
410 self.do_full_cache = 1
411
411
412 self.cache_size = cache_size
412 self.cache_size = cache_size
413 self.input_sep = input_sep
413 self.input_sep = input_sep
414
414
415 # we need a reference to the user-level namespace
415 # we need a reference to the user-level namespace
416 self.shell = shell
416 self.shell = shell
417 self.user_ns = shell.user_ns
417 self.user_ns = shell.user_ns
418 # and to the user's input
418 # and to the user's input
419 self.input_hist = shell.input_hist
419 self.input_hist = shell.input_hist
420 # and to the user's logger, for logging output
420 # and to the user's logger, for logging output
421 self.logger = shell.logger
421 self.logger = shell.logger
422
422
423 # Set input prompt strings and colors
423 # Set input prompt strings and colors
424 if cache_size == 0:
424 if cache_size == 0:
425 if ps1.find('%n') > -1 or ps1.find('\\#') > -1: ps1 = '>>> '
425 if ps1.find('%n') > -1 or ps1.find('\\#') > -1: ps1 = '>>> '
426 if ps2.find('%n') > -1 or ps2.find('\\#') > -1: ps2 = '... '
426 if ps2.find('%n') > -1 or ps2.find('\\#') > -1: ps2 = '... '
427 self.ps1_str = self._set_prompt_str(ps1,'In [\\#]: ','>>> ')
427 self.ps1_str = self._set_prompt_str(ps1,'In [\\#]: ','>>> ')
428 self.ps2_str = self._set_prompt_str(ps2,' .\\D.: ','... ')
428 self.ps2_str = self._set_prompt_str(ps2,' .\\D.: ','... ')
429 self.ps_out_str = self._set_prompt_str(ps_out,'Out[\\#]: ','')
429 self.ps_out_str = self._set_prompt_str(ps_out,'Out[\\#]: ','')
430
430
431 self.color_table = PromptColors
431 self.color_table = PromptColors
432 self.prompt1 = Prompt1(self,sep=input_sep,prompt=self.ps1_str,
432 self.prompt1 = Prompt1(self,sep=input_sep,prompt=self.ps1_str,
433 pad_left=pad_left)
433 pad_left=pad_left)
434 self.prompt2 = Prompt2(self,prompt=self.ps2_str,pad_left=pad_left)
434 self.prompt2 = Prompt2(self,prompt=self.ps2_str,pad_left=pad_left)
435 self.prompt_out = PromptOut(self,sep='',prompt=self.ps_out_str,
435 self.prompt_out = PromptOut(self,sep='',prompt=self.ps_out_str,
436 pad_left=pad_left)
436 pad_left=pad_left)
437 self.set_colors(colors)
437 self.set_colors(colors)
438
438
439 # other more normal stuff
439 # other more normal stuff
440 # b/c each call to the In[] prompt raises it by 1, even the first.
440 # b/c each call to the In[] prompt raises it by 1, even the first.
441 self.prompt_count = 0
441 self.prompt_count = 0
442 self.cache_count = 1
442 self.cache_count = 1
443 # Store the last prompt string each time, we need it for aligning
443 # Store the last prompt string each time, we need it for aligning
444 # continuation and auto-rewrite prompts
444 # continuation and auto-rewrite prompts
445 self.last_prompt = ''
445 self.last_prompt = ''
446 self.entries = [None] # output counter starts at 1 for the user
446 self.entries = [None] # output counter starts at 1 for the user
447 self.Pprint = Pprint
447 self.Pprint = Pprint
448 self.output_sep = output_sep
448 self.output_sep = output_sep
449 self.output_sep2 = output_sep2
449 self.output_sep2 = output_sep2
450 self._,self.__,self.___ = '','',''
450 self._,self.__,self.___ = '','',''
451 self.pprint_types = map(type,[(),[],{}])
451 self.pprint_types = map(type,[(),[],{}])
452
452
453 # these are deliberately global:
453 # these are deliberately global:
454 to_user_ns = {'_':self._,'__':self.__,'___':self.___}
454 to_user_ns = {'_':self._,'__':self.__,'___':self.___}
455 self.user_ns.update(to_user_ns)
455 self.user_ns.update(to_user_ns)
456
456
457 def _set_prompt_str(self,p_str,cache_def,no_cache_def):
457 def _set_prompt_str(self,p_str,cache_def,no_cache_def):
458 if p_str is None:
458 if p_str is None:
459 if self.do_full_cache:
459 if self.do_full_cache:
460 return cache_def
460 return cache_def
461 else:
461 else:
462 return no_cache_def
462 return no_cache_def
463 else:
463 else:
464 return p_str
464 return p_str
465
465
466 def set_colors(self,colors):
466 def set_colors(self,colors):
467 """Set the active color scheme and configure colors for the three
467 """Set the active color scheme and configure colors for the three
468 prompt subsystems."""
468 prompt subsystems."""
469
469
470 # FIXME: the prompt_specials global should be gobbled inside this
470 # FIXME: the prompt_specials global should be gobbled inside this
471 # class instead. Do it when cleaning up the whole 3-prompt system.
471 # class instead. Do it when cleaning up the whole 3-prompt system.
472 global prompt_specials
472 global prompt_specials
473 if colors.lower()=='nocolor':
473 if colors.lower()=='nocolor':
474 prompt_specials = prompt_specials_nocolor
474 prompt_specials = prompt_specials_nocolor
475 else:
475 else:
476 prompt_specials = prompt_specials_color
476 prompt_specials = prompt_specials_color
477
477
478 self.color_table.set_active_scheme(colors)
478 self.color_table.set_active_scheme(colors)
479 self.prompt1.set_colors()
479 self.prompt1.set_colors()
480 self.prompt2.set_colors()
480 self.prompt2.set_colors()
481 self.prompt_out.set_colors()
481 self.prompt_out.set_colors()
482
482
483 def __call__(self,arg=None):
483 def __call__(self,arg=None):
484 """Printing with history cache management.
484 """Printing with history cache management.
485
485
486 This is invoked everytime the interpreter needs to print, and is
486 This is invoked everytime the interpreter needs to print, and is
487 activated by setting the variable sys.displayhook to it."""
487 activated by setting the variable sys.displayhook to it."""
488
488
489 # If something injected a '_' variable in __builtin__, delete
489 # If something injected a '_' variable in __builtin__, delete
490 # ipython's automatic one so we don't clobber that. gettext() in
490 # ipython's automatic one so we don't clobber that. gettext() in
491 # particular uses _, so we need to stay away from it.
491 # particular uses _, so we need to stay away from it.
492 if '_' in __builtin__.__dict__:
492 if '_' in __builtin__.__dict__:
493 try:
493 try:
494 del self.user_ns['_']
494 del self.user_ns['_']
495 except KeyError:
495 except KeyError:
496 pass
496 pass
497 if arg is not None:
497 if arg is not None:
498 cout_write = Term.cout.write # fast lookup
498 cout_write = Term.cout.write # fast lookup
499 # first handle the cache and counters
499 # first handle the cache and counters
500 # but avoid recursive reference when displaying _oh/Out
500
501 if arg is not self.user_ns['_oh']:
502 self.update(arg)
503 # do not print output if input ends in ';'
501 # do not print output if input ends in ';'
504 if self.input_hist[self.prompt_count].endswith(';\n'):
502 if self.input_hist[self.prompt_count].endswith(';\n'):
505 return
503 return
506 # don't use print, puts an extra space
504 # don't use print, puts an extra space
507 cout_write(self.output_sep)
505 cout_write(self.output_sep)
508 if self.do_full_cache:
506 if self.do_full_cache:
509 cout_write(str(self.prompt_out))
507 cout_write(str(self.prompt_out))
510
508
511 if isinstance(arg,Macro):
509 if isinstance(arg,Macro):
512 print 'Executing Macro...'
510 print 'Executing Macro...'
513 # in case the macro takes a long time to execute
511 # in case the macro takes a long time to execute
514 Term.cout.flush()
512 Term.cout.flush()
515 self.shell.runlines(arg.value)
513 self.shell.runlines(arg.value)
516 return None
514 return None
517
515
518 # and now call a possibly user-defined print mechanism
516 # and now call a possibly user-defined print mechanism
519 self.display(arg)
517 manipulated_val = self.display(arg)
518
519 # user display hooks can change the variable to be stored in
520 # output history
521
522 if manipulated_val is not None:
523 arg = manipulated_val
524
525 # avoid recursive reference when displaying _oh/Out
526 if arg is not self.user_ns['_oh']:
527 self.update(arg)
528
520 if self.logger.log_output:
529 if self.logger.log_output:
521 self.logger.log_write(repr(arg),'output')
530 self.logger.log_write(repr(arg),'output')
522 cout_write(self.output_sep2)
531 cout_write(self.output_sep2)
523 Term.cout.flush()
532 Term.cout.flush()
524
533
525 def _display(self,arg):
534 def _display(self,arg):
526 """Default printer method, uses pprint.
535 """Default printer method, uses pprint.
527
536
528 Do ip.set_hook("result_display", my_displayhook) for custom result
537 Do ip.set_hook("result_display", my_displayhook) for custom result
529 display, e.g. when your own objects need special formatting.
538 display, e.g. when your own objects need special formatting.
530 """
539 """
531
540
532 self.shell.hooks.result_display(arg)
541 return self.shell.hooks.result_display(arg)
533
542
534 # Assign the default display method:
543 # Assign the default display method:
535 display = _display
544 display = _display
536
545
537 def update(self,arg):
546 def update(self,arg):
538 #print '***cache_count', self.cache_count # dbg
547 #print '***cache_count', self.cache_count # dbg
539 if self.cache_count >= self.cache_size and self.do_full_cache:
548 if self.cache_count >= self.cache_size and self.do_full_cache:
540 self.flush()
549 self.flush()
541 # Don't overwrite '_' and friends if '_' is in __builtin__ (otherwise
550 # Don't overwrite '_' and friends if '_' is in __builtin__ (otherwise
542 # we cause buggy behavior for things like gettext).
551 # we cause buggy behavior for things like gettext).
543 if '_' not in __builtin__.__dict__:
552 if '_' not in __builtin__.__dict__:
544 self.___ = self.__
553 self.___ = self.__
545 self.__ = self._
554 self.__ = self._
546 self._ = arg
555 self._ = arg
547 self.user_ns.update({'_':self._,'__':self.__,'___':self.___})
556 self.user_ns.update({'_':self._,'__':self.__,'___':self.___})
548
557
549 # hackish access to top-level namespace to create _1,_2... dynamically
558 # hackish access to top-level namespace to create _1,_2... dynamically
550 to_main = {}
559 to_main = {}
551 if self.do_full_cache:
560 if self.do_full_cache:
552 self.cache_count += 1
561 self.cache_count += 1
553 self.entries.append(arg)
562 self.entries.append(arg)
554 new_result = '_'+`self.prompt_count`
563 new_result = '_'+`self.prompt_count`
555 to_main[new_result] = self.entries[-1]
564 to_main[new_result] = self.entries[-1]
556 self.user_ns.update(to_main)
565 self.user_ns.update(to_main)
557 self.user_ns['_oh'][self.prompt_count] = arg
566 self.user_ns['_oh'][self.prompt_count] = arg
558
567
559 def flush(self):
568 def flush(self):
560 if not self.do_full_cache:
569 if not self.do_full_cache:
561 raise ValueError,"You shouldn't have reached the cache flush "\
570 raise ValueError,"You shouldn't have reached the cache flush "\
562 "if full caching is not enabled!"
571 "if full caching is not enabled!"
563 warn('Output cache limit (currently '+\
572 warn('Output cache limit (currently '+\
564 `self.cache_count`+' entries) hit.\n'
573 `self.cache_count`+' entries) hit.\n'
565 'Flushing cache and resetting history counter...\n'
574 'Flushing cache and resetting history counter...\n'
566 'The only history variables available will be _,__,___ and _1\n'
575 'The only history variables available will be _,__,___ and _1\n'
567 'with the current result.')
576 'with the current result.')
568 # delete auto-generated vars from global namespace
577 # delete auto-generated vars from global namespace
569 for n in range(1,self.prompt_count + 1):
578 for n in range(1,self.prompt_count + 1):
570 key = '_'+`n`
579 key = '_'+`n`
571 try:
580 try:
572 del self.user_ns[key]
581 del self.user_ns[key]
573 except: pass
582 except: pass
574 self.prompt_count = 1
583 self.prompt_count = 1
575 self.cache_count = 1
584 self.cache_count = 1
@@ -1,149 +1,150 b''
1 """hooks for IPython.
1 """hooks for IPython.
2
2
3 In Python, it is possible to overwrite any method of any object if you really
3 In Python, it is possible to overwrite any method of any object if you really
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
5 be overwritten by users for customization purposes. This module defines the
5 be overwritten by users for customization purposes. This module defines the
6 default versions of all such hooks, which get used by IPython if not
6 default versions of all such hooks, which get used by IPython if not
7 overridden by the user.
7 overridden by the user.
8
8
9 hooks are simple functions, but they should be declared with 'self' as their
9 hooks are simple functions, but they should be declared with 'self' as their
10 first argument, because when activated they are registered into IPython as
10 first argument, because when activated they are registered into IPython as
11 instance methods. The self argument will be the IPython running instance
11 instance methods. The self argument will be the IPython running instance
12 itself, so hooks have full access to the entire IPython object.
12 itself, so hooks have full access to the entire IPython object.
13
13
14 If you wish to define a new hook and activate it, you need to put the
14 If you wish to define a new hook and activate it, you need to put the
15 necessary code into a python file which can be either imported or execfile()'d
15 necessary code into a python file which can be either imported or execfile()'d
16 from within your ipythonrc configuration.
16 from within your ipythonrc configuration.
17
17
18 For example, suppose that you have a module called 'myiphooks' in your
18 For example, suppose that you have a module called 'myiphooks' in your
19 PYTHONPATH, which contains the following definition:
19 PYTHONPATH, which contains the following definition:
20
20
21 import os
21 import os
22 def calljed(self,filename, linenum):
22 def calljed(self,filename, linenum):
23 "My editor hook calls the jed editor directly."
23 "My editor hook calls the jed editor directly."
24 print "Calling my own editor, jed ..."
24 print "Calling my own editor, jed ..."
25 os.system('jed +%d %s' % (linenum,filename))
25 os.system('jed +%d %s' % (linenum,filename))
26
26
27 You can then execute the following line of code to make it the new IPython
27 You can then execute the following line of code to make it the new IPython
28 editor hook, after having imported 'myiphooks':
28 editor hook, after having imported 'myiphooks':
29
29
30 ip_set_hook('editor',myiphooks.calljed)
30 ip_set_hook('editor',myiphooks.calljed)
31
31
32 The ip_set_hook function is put by IPython into the builtin namespace, so it
32 The ip_set_hook function is put by IPython into the builtin namespace, so it
33 is always available from all running code.
33 is always available from all running code.
34
34
35 $Id: hooks.py 1020 2006-01-14 13:22:58Z vivainio $"""
35 $Id: hooks.py 1076 2006-01-24 17:27:05Z vivainio $"""
36
36
37 #*****************************************************************************
37 #*****************************************************************************
38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 #
39 #
40 # Distributed under the terms of the BSD License. The full license is in
40 # Distributed under the terms of the BSD License. The full license is in
41 # the file COPYING, distributed as part of this software.
41 # the file COPYING, distributed as part of this software.
42 #*****************************************************************************
42 #*****************************************************************************
43
43
44 from IPython import Release
44 from IPython import Release
45 from IPython import ipapi
45 __author__ = '%s <%s>' % Release.authors['Fernando']
46 __author__ = '%s <%s>' % Release.authors['Fernando']
46 __license__ = Release.license
47 __license__ = Release.license
47 __version__ = Release.version
48 __version__ = Release.version
48
49
49 import os,bisect
50 import os,bisect
50 from genutils import Term
51 from genutils import Term
51 from pprint import pformat
52 from pprint import pformat
52
53
53 # List here all the default hooks. For now it's just the editor functions
54 # List here all the default hooks. For now it's just the editor functions
54 # but over time we'll move here all the public API for user-accessible things.
55 # but over time we'll move here all the public API for user-accessible things.
55 __all__ = ['editor', 'fix_error_editor', 'result_display']
56 __all__ = ['editor', 'fix_error_editor', 'result_display']
56
57
57 def editor(self,filename, linenum=None):
58 def editor(self,filename, linenum=None):
58 """Open the default editor at the given filename and linenumber.
59 """Open the default editor at the given filename and linenumber.
59
60
60 This is IPython's default editor hook, you can use it as an example to
61 This is IPython's default editor hook, you can use it as an example to
61 write your own modified one. To set your own editor function as the
62 write your own modified one. To set your own editor function as the
62 new editor hook, call ip_set_hook('editor',yourfunc)."""
63 new editor hook, call ip_set_hook('editor',yourfunc)."""
63
64
64 # IPython configures a default editor at startup by reading $EDITOR from
65 # IPython configures a default editor at startup by reading $EDITOR from
65 # the environment, and falling back on vi (unix) or notepad (win32).
66 # the environment, and falling back on vi (unix) or notepad (win32).
66 editor = self.rc.editor
67 editor = self.rc.editor
67
68
68 # marker for at which line to open the file (for existing objects)
69 # marker for at which line to open the file (for existing objects)
69 if linenum is None or editor=='notepad':
70 if linenum is None or editor=='notepad':
70 linemark = ''
71 linemark = ''
71 else:
72 else:
72 linemark = '+%d' % linenum
73 linemark = '+%d' % linenum
73 # Call the actual editor
74 # Call the actual editor
74 os.system('%s %s %s' % (editor,linemark,filename))
75 os.system('%s %s %s' % (editor,linemark,filename))
75
76
76 import tempfile
77 import tempfile
77 def fix_error_editor(self,filename,linenum,column,msg):
78 def fix_error_editor(self,filename,linenum,column,msg):
78 """Open the editor at the given filename, linenumber, column and
79 """Open the editor at the given filename, linenumber, column and
79 show an error message. This is used for correcting syntax errors.
80 show an error message. This is used for correcting syntax errors.
80 The current implementation only has special support for the VIM editor,
81 The current implementation only has special support for the VIM editor,
81 and falls back on the 'editor' hook if VIM is not used.
82 and falls back on the 'editor' hook if VIM is not used.
82
83
83 Call ip_set_hook('fix_error_editor',youfunc) to use your own function,
84 Call ip_set_hook('fix_error_editor',youfunc) to use your own function,
84 """
85 """
85 def vim_quickfix_file():
86 def vim_quickfix_file():
86 t = tempfile.NamedTemporaryFile()
87 t = tempfile.NamedTemporaryFile()
87 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
88 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
88 t.flush()
89 t.flush()
89 return t
90 return t
90 if os.path.basename(self.rc.editor) != 'vim':
91 if os.path.basename(self.rc.editor) != 'vim':
91 self.hooks.editor(filename,linenum)
92 self.hooks.editor(filename,linenum)
92 return
93 return
93 t = vim_quickfix_file()
94 t = vim_quickfix_file()
94 try:
95 try:
95 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
96 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
96 finally:
97 finally:
97 t.close()
98 t.close()
98
99
99 class TryNext(Exception):
100 pass
101
100
102 class CommandChainDispatcher:
101 class CommandChainDispatcher:
103 """ Dispatch calls to a chain of commands until some func can handle it
102 """ Dispatch calls to a chain of commands until some func can handle it
104
103
105 Usage: instantiate, execute "add" to add commands (with optional
104 Usage: instantiate, execute "add" to add commands (with optional
106 priority), execute normally via f() calling mechanism.
105 priority), execute normally via f() calling mechanism.
107
106
108 """
107 """
109 def __init__(self,commands=None):
108 def __init__(self,commands=None):
110 if commands is None:
109 if commands is None:
111 self.chain = []
110 self.chain = []
112 else:
111 else:
113 self.chain = commands
112 self.chain = commands
114
113
115
114
116 def __call__(self,*args, **kw):
115 def __call__(self,*args, **kw):
117 """ Command chain is called just like normal func.
116 """ Command chain is called just like normal func.
118
117
119 This will call all funcs in chain with the same args as were given to this
118 This will call all funcs in chain with the same args as were given to this
120 function, and return the result of first func that didn't raise
119 function, and return the result of first func that didn't raise
121 TryNext """
120 TryNext """
122
121
123 for prio,cmd in self.chain:
122 for prio,cmd in self.chain:
124 #print "prio",prio,"cmd",cmd #dbg
123 #print "prio",prio,"cmd",cmd #dbg
125 try:
124 try:
126 ret = cmd(*args, **kw)
125 ret = cmd(*args, **kw)
127 return ret
126 return ret
128 except TryNext:
127 except ipapi.TryNext:
129 pass
128 pass
130
129
131 def __str__(self):
130 def __str__(self):
132 return str(self.chain)
131 return str(self.chain)
133
132
134 def add(self, func, priority=0):
133 def add(self, func, priority=0):
135 """ Add a func to the cmd chain with given priority """
134 """ Add a func to the cmd chain with given priority """
136 bisect.insort(self.chain,(priority,func))
135 bisect.insort(self.chain,(priority,func))
137
136
138 def result_display(self,arg):
137 def result_display(self,arg):
139 if self.rc.pprint:
138 if self.rc.pprint:
140 out = pformat(arg)
139 out = pformat(arg)
141 if '\n' in out:
140 if '\n' in out:
142 # So that multi-line strings line up with the left column of
141 # So that multi-line strings line up with the left column of
143 # the screen, instead of having the output prompt mess up
142 # the screen, instead of having the output prompt mess up
144 # their first line.
143 # their first line.
145 Term.cout.write('\n')
144 Term.cout.write('\n')
146 print >>Term.cout, out
145 print >>Term.cout, out
147 else:
146 else:
148 print >>Term.cout, arg
147 print >>Term.cout, arg
148 # the default display hook doesn't manipulate the value to put in history
149 return None
149 No newline at end of file
150
@@ -1,157 +1,174 b''
1 ''' IPython customization API
1 ''' IPython customization API
2
2
3 Your one-stop module for configuring & extending ipython
3 Your one-stop module for configuring & extending ipython
4
4
5 The API will probably break when ipython 1.0 is released, but so
5 The API will probably break when ipython 1.0 is released, but so
6 will the other configuration method (rc files).
6 will the other configuration method (rc files).
7
7
8 All names prefixed by underscores are for internal use, not part
8 All names prefixed by underscores are for internal use, not part
9 of the public api.
9 of the public api.
10
10
11 Below is an example that you can just put to a module and import from ipython.
11 Below is an example that you can just put to a module and import from ipython.
12
12
13 A good practice is to install the config script below as e.g.
13 A good practice is to install the config script below as e.g.
14
14
15 ~/.ipython/my_private_conf.py
15 ~/.ipython/my_private_conf.py
16
16
17 And do
17 And do
18
18
19 import_mod my_private_conf
19 import_mod my_private_conf
20
20
21 in ~/.ipython/ipythonrc
21 in ~/.ipython/ipythonrc
22
22
23 That way the module is imported at startup and you can have all your
23 That way the module is imported at startup and you can have all your
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
25 stuff) in there.
25 stuff) in there.
26
26
27 -----------------------------------------------
27 -----------------------------------------------
28 import IPython.ipapi as ip
28 import IPython.ipapi as ip
29
29
30 def ankka_f(self, arg):
30 def ankka_f(self, arg):
31 print "Ankka",self,"says uppercase:",arg.upper()
31 print "Ankka",self,"says uppercase:",arg.upper()
32
32
33 ip.expose_magic("ankka",ankka_f)
33 ip.expose_magic("ankka",ankka_f)
34
34
35 ip.magic('alias sayhi echo "Testing, hi ok"')
35 ip.magic('alias sayhi echo "Testing, hi ok"')
36 ip.magic('alias helloworld echo "Hello world"')
36 ip.magic('alias helloworld echo "Hello world"')
37 ip.system('pwd')
37 ip.system('pwd')
38
38
39 ip.ex('import re')
39 ip.ex('import re')
40 ip.ex("""
40 ip.ex("""
41 def funcci(a,b):
41 def funcci(a,b):
42 print a+b
42 print a+b
43 print funcci(3,4)
43 print funcci(3,4)
44 """)
44 """)
45 ip.ex("funcci(348,9)")
45 ip.ex("funcci(348,9)")
46
46
47 def jed_editor(self,filename, linenum=None):
47 def jed_editor(self,filename, linenum=None):
48 print "Calling my own editor, jed ... via hook!"
48 print "Calling my own editor, jed ... via hook!"
49 import os
49 import os
50 if linenum is None: linenum = 0
50 if linenum is None: linenum = 0
51 os.system('jed +%d %s' % (linenum, filename))
51 os.system('jed +%d %s' % (linenum, filename))
52 print "exiting jed"
52 print "exiting jed"
53
53
54 ip.set_hook('editor',jed_editor)
54 ip.set_hook('editor',jed_editor)
55
55
56 o = ip.options()
56 o = ip.options()
57 o.autocall = 2 # FULL autocall mode
57 o.autocall = 2 # FULL autocall mode
58
58
59 print "done!"
59 print "done!"
60
60
61 '''
61 '''
62
62
63
64 class TryNext(Exception):
65 """ Try next hook exception.
66
67 Raise this in your hook function to indicate that the next
68 hook handler should be used to handle the operation.
69 """
70
71
72
73 __IP = None
74
63 def _init_with_shell(ip):
75 def _init_with_shell(ip):
64 global magic
76 global magic
65 magic = ip.ipmagic
77 magic = ip.ipmagic
66 global system
78 global system
67 system = ip.ipsystem
79 system = ip.ipsystem
68 global set_hook
80 global set_hook
69 set_hook = ip.set_hook
81 set_hook = ip.set_hook
70
82
71 global __IP
83 global __IP
72 __IP = ip
84 __IP = ip
73
85
74 def options():
86 def options():
75 """ All configurable variables """
87 """ All configurable variables """
76 return __IP.rc
88 return __IP.rc
77
89
78 def user_ns():
90 def user_ns():
79 return __IP.user_ns
91 return __IP.user_ns
80
92
81 def expose_magic(magicname, func):
93 def expose_magic(magicname, func):
82 ''' Expose own function as magic function for ipython
94 ''' Expose own function as magic function for ipython
83
95
84 def foo_impl(self,parameter_s=''):
96 def foo_impl(self,parameter_s=''):
85 """My very own magic!. (Use docstrings, IPython reads them)."""
97 """My very own magic!. (Use docstrings, IPython reads them)."""
86 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
98 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
87 print 'The self object is:',self
99 print 'The self object is:',self
88
100
89 ipapi.expose_magic("foo",foo_impl)
101 ipapi.expose_magic("foo",foo_impl)
90 '''
102 '''
91
103
92 from IPython import Magic
104 from IPython import Magic
93 import new
105 import new
94 im = new.instancemethod(func,__IP, __IP.__class__)
106 im = new.instancemethod(func,__IP, __IP.__class__)
95 setattr(__IP, "magic_" + magicname, im)
107 setattr(__IP, "magic_" + magicname, im)
96
108
97 class asmagic:
109 class asmagic:
98 """ Decorator for exposing magics in a friendly 2.4 decorator form
110 """ Decorator for exposing magics in a friendly 2.4 decorator form
99
111
100 @ip.asmagic("foo")
112 @ip.asmagic("foo")
101 def f(self,arg):
113 def f(self,arg):
102 pring "arg given:",arg
114 pring "arg given:",arg
103
115
104 After this, %foo is a magic function.
116 After this, %foo is a magic function.
105 """
117 """
106
118
107 def __init__(self,magicname):
119 def __init__(self,magicname):
108 self.name = magicname
120 self.name = magicname
109
121
110 def __call__(self,f):
122 def __call__(self,f):
111 expose_magic(self.name, f)
123 expose_magic(self.name, f)
112 return f
124 return f
113
125
114 class ashook:
126 class ashook:
115 """ Decorator for exposing magics in a friendly 2.4 decorator form
127 """ Decorator for exposing magics in a friendly 2.4 decorator form
116
128
117 @ip.ashook("editor")
129 @ip.ashook("editor")
118 def jed_editor(self,filename, linenum=None):
130 def jed_editor(self,filename, linenum=None):
119 import os
131 import os
120 if linenum is None: linenum = 0
132 if linenum is None: linenum = 0
121 os.system('jed +%d %s' % (linenum, filename))
133 os.system('jed +%d %s' % (linenum, filename))
122
134
123 """
135 """
124
136
125 def __init__(self,name,priority=50):
137 def __init__(self,name,priority=50):
126 self.name = name
138 self.name = name
127 self.prio = priority
139 self.prio = priority
128
140
129 def __call__(self,f):
141 def __call__(self,f):
130 set_hook(self.name, f, self.prio)
142 set_hook(self.name, f, self.prio)
131 return f
143 return f
132
144
133
145
134 def ex(cmd):
146 def ex(cmd):
135 """ Execute a normal python statement in user namespace """
147 """ Execute a normal python statement in user namespace """
136 exec cmd in user_ns()
148 exec cmd in user_ns()
137
149
138 def ev(expr):
150 def ev(expr):
139 """ Evaluate python expression expr in user namespace
151 """ Evaluate python expression expr in user namespace
140
152
141 Returns the result """
153 Returns the result """
142 return eval(expr,user_ns())
154 return eval(expr,user_ns())
143
155
144 def launch_new_instance():
156 def launch_new_instance():
145 """ Creata and start a new ipython instance.
157 """ Creata and start a new ipython instance.
146
158
147 This can be called even without having an already initialized
159 This can be called even without having an already initialized
148 ipython session running.
160 ipython session running.
149
161
150 """
162 """
151 import IPython
163 import IPython
152
164
153 IPython.Shell.start().mainloop()
165 IPython.Shell.start().mainloop()
166
167 def is_ipython_session():
168 """ Return a true value if running inside IPython.
154
169
170 """
155
171
156
172 # Yes, this is the shell object or None - however, it's an implementation
157 No newline at end of file
173 # detail and should not be relied on, only truth value matters.
174 return __IP
@@ -1,5032 +1,5041 b''
1 2006-01-24 Ville Vainio <vivainio@gmail.com>
2
3 * iplib.py, hooks.py: 'result_display' hook can return a non-None
4 value to manipulate resulting history entry.
5
6 * ipapi.py: Moved TryNext here from hooks.py, added
7 is_ipython_session() to determine whether we are running
8 inside an ipython session.
9
1 2006-01-23 Ville Vainio <vivainio@gmail.com>
10 2006-01-23 Ville Vainio <vivainio@gmail.com>
2
11
3 * Added %paste magic for pasting python code
12 * Added %cpaste magic for pasting python code
4
13
5 2006-01-22 Ville Vainio <vivainio@gmail.com>
14 2006-01-22 Ville Vainio <vivainio@gmail.com>
6
15
7 * Merge from branches/0.7.1 into trunk, revs 1052-1057
16 * Merge from branches/0.7.1 into trunk, revs 1052-1057
8
17
9 * Versionstring = 0.7.2.svn
18 * Versionstring = 0.7.2.svn
10
19
11 * eggsetup.py: A separate script for constructing eggs, creates
20 * eggsetup.py: A separate script for constructing eggs, creates
12 proper launch scripts even on Windows (an .exe file in
21 proper launch scripts even on Windows (an .exe file in
13 \python24\scripts).
22 \python24\scripts).
14
23
15 * ipapi.py: launch_new_instance, launch entry point needed for the
24 * ipapi.py: launch_new_instance, launch entry point needed for the
16 egg.
25 egg.
17
26
18 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
27 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
19
28
20 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
29 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
21 %pfile foo would print the file for foo even if it was a binary.
30 %pfile foo would print the file for foo even if it was a binary.
22 Now, extensions '.so' and '.dll' are skipped.
31 Now, extensions '.so' and '.dll' are skipped.
23
32
24 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
33 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
25 bug, where macros would fail in all threaded modes. I'm not 100%
34 bug, where macros would fail in all threaded modes. I'm not 100%
26 sure, so I'm going to put out an rc instead of making a release
35 sure, so I'm going to put out an rc instead of making a release
27 today, and wait for feedback for at least a few days.
36 today, and wait for feedback for at least a few days.
28
37
29 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
38 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
30 it...) the handling of pasting external code with autoindent on.
39 it...) the handling of pasting external code with autoindent on.
31 To get out of a multiline input, the rule will appear for most
40 To get out of a multiline input, the rule will appear for most
32 users unchanged: two blank lines or change the indent level
41 users unchanged: two blank lines or change the indent level
33 proposed by IPython. But there is a twist now: you can
42 proposed by IPython. But there is a twist now: you can
34 add/subtract only *one or two spaces*. If you add/subtract three
43 add/subtract only *one or two spaces*. If you add/subtract three
35 or more (unless you completely delete the line), IPython will
44 or more (unless you completely delete the line), IPython will
36 accept that line, and you'll need to enter a second one of pure
45 accept that line, and you'll need to enter a second one of pure
37 whitespace. I know it sounds complicated, but I can't find a
46 whitespace. I know it sounds complicated, but I can't find a
38 different solution that covers all the cases, with the right
47 different solution that covers all the cases, with the right
39 heuristics. Hopefully in actual use, nobody will really notice
48 heuristics. Hopefully in actual use, nobody will really notice
40 all these strange rules and things will 'just work'.
49 all these strange rules and things will 'just work'.
41
50
42 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
51 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
43
52
44 * IPython/iplib.py (interact): catch exceptions which can be
53 * IPython/iplib.py (interact): catch exceptions which can be
45 triggered asynchronously by signal handlers. Thanks to an
54 triggered asynchronously by signal handlers. Thanks to an
46 automatic crash report, submitted by Colin Kingsley
55 automatic crash report, submitted by Colin Kingsley
47 <tercel-AT-gentoo.org>.
56 <tercel-AT-gentoo.org>.
48
57
49 2006-01-20 Ville Vainio <vivainio@gmail.com>
58 2006-01-20 Ville Vainio <vivainio@gmail.com>
50
59
51 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
60 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
52 (%rehashdir, very useful, try it out) of how to extend ipython
61 (%rehashdir, very useful, try it out) of how to extend ipython
53 with new magics. Also added Extensions dir to pythonpath to make
62 with new magics. Also added Extensions dir to pythonpath to make
54 importing extensions easy.
63 importing extensions easy.
55
64
56 * %store now complains when trying to store interactively declared
65 * %store now complains when trying to store interactively declared
57 classes / instances of those classes.
66 classes / instances of those classes.
58
67
59 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
68 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
60 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
69 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
61 if they exist, and ipy_user_conf.py with some defaults is created for
70 if they exist, and ipy_user_conf.py with some defaults is created for
62 the user.
71 the user.
63
72
64 * Startup rehashing done by the config file, not InterpreterExec.
73 * Startup rehashing done by the config file, not InterpreterExec.
65 This means system commands are available even without selecting the
74 This means system commands are available even without selecting the
66 pysh profile. It's the sensible default after all.
75 pysh profile. It's the sensible default after all.
67
76
68 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
77 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
69
78
70 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
79 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
71 multiline code with autoindent on working. But I am really not
80 multiline code with autoindent on working. But I am really not
72 sure, so this needs more testing. Will commit a debug-enabled
81 sure, so this needs more testing. Will commit a debug-enabled
73 version for now, while I test it some more, so that Ville and
82 version for now, while I test it some more, so that Ville and
74 others may also catch any problems. Also made
83 others may also catch any problems. Also made
75 self.indent_current_str() a method, to ensure that there's no
84 self.indent_current_str() a method, to ensure that there's no
76 chance of the indent space count and the corresponding string
85 chance of the indent space count and the corresponding string
77 falling out of sync. All code needing the string should just call
86 falling out of sync. All code needing the string should just call
78 the method.
87 the method.
79
88
80 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
89 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
81
90
82 * IPython/Magic.py (magic_edit): fix check for when users don't
91 * IPython/Magic.py (magic_edit): fix check for when users don't
83 save their output files, the try/except was in the wrong section.
92 save their output files, the try/except was in the wrong section.
84
93
85 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
94 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
86
95
87 * IPython/Magic.py (magic_run): fix __file__ global missing from
96 * IPython/Magic.py (magic_run): fix __file__ global missing from
88 script's namespace when executed via %run. After a report by
97 script's namespace when executed via %run. After a report by
89 Vivian.
98 Vivian.
90
99
91 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
100 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
92 when using python 2.4. The parent constructor changed in 2.4, and
101 when using python 2.4. The parent constructor changed in 2.4, and
93 we need to track it directly (we can't call it, as it messes up
102 we need to track it directly (we can't call it, as it messes up
94 readline and tab-completion inside our pdb would stop working).
103 readline and tab-completion inside our pdb would stop working).
95 After a bug report by R. Bernstein <rocky-AT-panix.com>.
104 After a bug report by R. Bernstein <rocky-AT-panix.com>.
96
105
97 2006-01-16 Ville Vainio <vivainio@gmail.com>
106 2006-01-16 Ville Vainio <vivainio@gmail.com>
98
107
99 * Ipython/magic.py:Reverted back to old %edit functionality
108 * Ipython/magic.py:Reverted back to old %edit functionality
100 that returns file contents on exit.
109 that returns file contents on exit.
101
110
102 * IPython/path.py: Added Jason Orendorff's "path" module to
111 * IPython/path.py: Added Jason Orendorff's "path" module to
103 IPython tree, http://www.jorendorff.com/articles/python/path/.
112 IPython tree, http://www.jorendorff.com/articles/python/path/.
104 You can get path objects conveniently through %sc, and !!, e.g.:
113 You can get path objects conveniently through %sc, and !!, e.g.:
105 sc files=ls
114 sc files=ls
106 for p in files.paths: # or files.p
115 for p in files.paths: # or files.p
107 print p,p.mtime
116 print p,p.mtime
108
117
109 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
118 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
110 now work again without considering the exclusion regexp -
119 now work again without considering the exclusion regexp -
111 hence, things like ',foo my/path' turn to 'foo("my/path")'
120 hence, things like ',foo my/path' turn to 'foo("my/path")'
112 instead of syntax error.
121 instead of syntax error.
113
122
114
123
115 2006-01-14 Ville Vainio <vivainio@gmail.com>
124 2006-01-14 Ville Vainio <vivainio@gmail.com>
116
125
117 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
126 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
118 ipapi decorators for python 2.4 users, options() provides access to rc
127 ipapi decorators for python 2.4 users, options() provides access to rc
119 data.
128 data.
120
129
121 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
130 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
122 as path separators (even on Linux ;-). Space character after
131 as path separators (even on Linux ;-). Space character after
123 backslash (as yielded by tab completer) is still space;
132 backslash (as yielded by tab completer) is still space;
124 "%cd long\ name" works as expected.
133 "%cd long\ name" works as expected.
125
134
126 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
135 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
127 as "chain of command", with priority. API stays the same,
136 as "chain of command", with priority. API stays the same,
128 TryNext exception raised by a hook function signals that
137 TryNext exception raised by a hook function signals that
129 current hook failed and next hook should try handling it, as
138 current hook failed and next hook should try handling it, as
130 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
139 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
131 requested configurable display hook, which is now implemented.
140 requested configurable display hook, which is now implemented.
132
141
133 2006-01-13 Ville Vainio <vivainio@gmail.com>
142 2006-01-13 Ville Vainio <vivainio@gmail.com>
134
143
135 * IPython/platutils*.py: platform specific utility functions,
144 * IPython/platutils*.py: platform specific utility functions,
136 so far only set_term_title is implemented (change terminal
145 so far only set_term_title is implemented (change terminal
137 label in windowing systems). %cd now changes the title to
146 label in windowing systems). %cd now changes the title to
138 current dir.
147 current dir.
139
148
140 * IPython/Release.py: Added myself to "authors" list,
149 * IPython/Release.py: Added myself to "authors" list,
141 had to create new files.
150 had to create new files.
142
151
143 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
152 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
144 shell escape; not a known bug but had potential to be one in the
153 shell escape; not a known bug but had potential to be one in the
145 future.
154 future.
146
155
147 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
156 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
148 extension API for IPython! See the module for usage example. Fix
157 extension API for IPython! See the module for usage example. Fix
149 OInspect for docstring-less magic functions.
158 OInspect for docstring-less magic functions.
150
159
151
160
152 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
161 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
153
162
154 * IPython/iplib.py (raw_input): temporarily deactivate all
163 * IPython/iplib.py (raw_input): temporarily deactivate all
155 attempts at allowing pasting of code with autoindent on. It
164 attempts at allowing pasting of code with autoindent on. It
156 introduced bugs (reported by Prabhu) and I can't seem to find a
165 introduced bugs (reported by Prabhu) and I can't seem to find a
157 robust combination which works in all cases. Will have to revisit
166 robust combination which works in all cases. Will have to revisit
158 later.
167 later.
159
168
160 * IPython/genutils.py: remove isspace() function. We've dropped
169 * IPython/genutils.py: remove isspace() function. We've dropped
161 2.2 compatibility, so it's OK to use the string method.
170 2.2 compatibility, so it's OK to use the string method.
162
171
163 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
172 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
164
173
165 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
174 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
166 matching what NOT to autocall on, to include all python binary
175 matching what NOT to autocall on, to include all python binary
167 operators (including things like 'and', 'or', 'is' and 'in').
176 operators (including things like 'and', 'or', 'is' and 'in').
168 Prompted by a bug report on 'foo & bar', but I realized we had
177 Prompted by a bug report on 'foo & bar', but I realized we had
169 many more potential bug cases with other operators. The regexp is
178 many more potential bug cases with other operators. The regexp is
170 self.re_exclude_auto, it's fairly commented.
179 self.re_exclude_auto, it's fairly commented.
171
180
172 2006-01-12 Ville Vainio <vivainio@gmail.com>
181 2006-01-12 Ville Vainio <vivainio@gmail.com>
173
182
174 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
183 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
175 Prettified and hardened string/backslash quoting with ipsystem(),
184 Prettified and hardened string/backslash quoting with ipsystem(),
176 ipalias() and ipmagic(). Now even \ characters are passed to
185 ipalias() and ipmagic(). Now even \ characters are passed to
177 %magics, !shell escapes and aliases exactly as they are in the
186 %magics, !shell escapes and aliases exactly as they are in the
178 ipython command line. Should improve backslash experience,
187 ipython command line. Should improve backslash experience,
179 particularly in Windows (path delimiter for some commands that
188 particularly in Windows (path delimiter for some commands that
180 won't understand '/'), but Unix benefits as well (regexps). %cd
189 won't understand '/'), but Unix benefits as well (regexps). %cd
181 magic still doesn't support backslash path delimiters, though. Also
190 magic still doesn't support backslash path delimiters, though. Also
182 deleted all pretense of supporting multiline command strings in
191 deleted all pretense of supporting multiline command strings in
183 !system or %magic commands. Thanks to Jerry McRae for suggestions.
192 !system or %magic commands. Thanks to Jerry McRae for suggestions.
184
193
185 * doc/build_doc_instructions.txt added. Documentation on how to
194 * doc/build_doc_instructions.txt added. Documentation on how to
186 use doc/update_manual.py, added yesterday. Both files contributed
195 use doc/update_manual.py, added yesterday. Both files contributed
187 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
196 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
188 doc/*.sh for deprecation at a later date.
197 doc/*.sh for deprecation at a later date.
189
198
190 * /ipython.py Added ipython.py to root directory for
199 * /ipython.py Added ipython.py to root directory for
191 zero-installation (tar xzvf ipython.tgz; cd ipython; python
200 zero-installation (tar xzvf ipython.tgz; cd ipython; python
192 ipython.py) and development convenience (no need to kee doing
201 ipython.py) and development convenience (no need to kee doing
193 "setup.py install" between changes).
202 "setup.py install" between changes).
194
203
195 * Made ! and !! shell escapes work (again) in multiline expressions:
204 * Made ! and !! shell escapes work (again) in multiline expressions:
196 if 1:
205 if 1:
197 !ls
206 !ls
198 !!ls
207 !!ls
199
208
200 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
209 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
201
210
202 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
211 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
203 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
212 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
204 module in case-insensitive installation. Was causing crashes
213 module in case-insensitive installation. Was causing crashes
205 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
214 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
206
215
207 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
216 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
208 <marienz-AT-gentoo.org>, closes
217 <marienz-AT-gentoo.org>, closes
209 http://www.scipy.net/roundup/ipython/issue51.
218 http://www.scipy.net/roundup/ipython/issue51.
210
219
211 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
220 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
212
221
213 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
222 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
214 problem of excessive CPU usage under *nix and keyboard lag under
223 problem of excessive CPU usage under *nix and keyboard lag under
215 win32.
224 win32.
216
225
217 2006-01-10 *** Released version 0.7.0
226 2006-01-10 *** Released version 0.7.0
218
227
219 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
228 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
220
229
221 * IPython/Release.py (revision): tag version number to 0.7.0,
230 * IPython/Release.py (revision): tag version number to 0.7.0,
222 ready for release.
231 ready for release.
223
232
224 * IPython/Magic.py (magic_edit): Add print statement to %edit so
233 * IPython/Magic.py (magic_edit): Add print statement to %edit so
225 it informs the user of the name of the temp. file used. This can
234 it informs the user of the name of the temp. file used. This can
226 help if you decide later to reuse that same file, so you know
235 help if you decide later to reuse that same file, so you know
227 where to copy the info from.
236 where to copy the info from.
228
237
229 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
238 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
230
239
231 * setup_bdist_egg.py: little script to build an egg. Added
240 * setup_bdist_egg.py: little script to build an egg. Added
232 support in the release tools as well.
241 support in the release tools as well.
233
242
234 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
243 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
235
244
236 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
245 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
237 version selection (new -wxversion command line and ipythonrc
246 version selection (new -wxversion command line and ipythonrc
238 parameter). Patch contributed by Arnd Baecker
247 parameter). Patch contributed by Arnd Baecker
239 <arnd.baecker-AT-web.de>.
248 <arnd.baecker-AT-web.de>.
240
249
241 * IPython/iplib.py (embed_mainloop): fix tab-completion in
250 * IPython/iplib.py (embed_mainloop): fix tab-completion in
242 embedded instances, for variables defined at the interactive
251 embedded instances, for variables defined at the interactive
243 prompt of the embedded ipython. Reported by Arnd.
252 prompt of the embedded ipython. Reported by Arnd.
244
253
245 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
254 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
246 it can be used as a (stateful) toggle, or with a direct parameter.
255 it can be used as a (stateful) toggle, or with a direct parameter.
247
256
248 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
257 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
249 could be triggered in certain cases and cause the traceback
258 could be triggered in certain cases and cause the traceback
250 printer not to work.
259 printer not to work.
251
260
252 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
261 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
253
262
254 * IPython/iplib.py (_should_recompile): Small fix, closes
263 * IPython/iplib.py (_should_recompile): Small fix, closes
255 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
264 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
256
265
257 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
266 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
258
267
259 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
268 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
260 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
269 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
261 Moad for help with tracking it down.
270 Moad for help with tracking it down.
262
271
263 * IPython/iplib.py (handle_auto): fix autocall handling for
272 * IPython/iplib.py (handle_auto): fix autocall handling for
264 objects which support BOTH __getitem__ and __call__ (so that f [x]
273 objects which support BOTH __getitem__ and __call__ (so that f [x]
265 is left alone, instead of becoming f([x]) automatically).
274 is left alone, instead of becoming f([x]) automatically).
266
275
267 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
276 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
268 Ville's patch.
277 Ville's patch.
269
278
270 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
279 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
271
280
272 * IPython/iplib.py (handle_auto): changed autocall semantics to
281 * IPython/iplib.py (handle_auto): changed autocall semantics to
273 include 'smart' mode, where the autocall transformation is NOT
282 include 'smart' mode, where the autocall transformation is NOT
274 applied if there are no arguments on the line. This allows you to
283 applied if there are no arguments on the line. This allows you to
275 just type 'foo' if foo is a callable to see its internal form,
284 just type 'foo' if foo is a callable to see its internal form,
276 instead of having it called with no arguments (typically a
285 instead of having it called with no arguments (typically a
277 mistake). The old 'full' autocall still exists: for that, you
286 mistake). The old 'full' autocall still exists: for that, you
278 need to set the 'autocall' parameter to 2 in your ipythonrc file.
287 need to set the 'autocall' parameter to 2 in your ipythonrc file.
279
288
280 * IPython/completer.py (Completer.attr_matches): add
289 * IPython/completer.py (Completer.attr_matches): add
281 tab-completion support for Enthoughts' traits. After a report by
290 tab-completion support for Enthoughts' traits. After a report by
282 Arnd and a patch by Prabhu.
291 Arnd and a patch by Prabhu.
283
292
284 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
285
294
286 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
295 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
287 Schmolck's patch to fix inspect.getinnerframes().
296 Schmolck's patch to fix inspect.getinnerframes().
288
297
289 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
298 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
290 for embedded instances, regarding handling of namespaces and items
299 for embedded instances, regarding handling of namespaces and items
291 added to the __builtin__ one. Multiple embedded instances and
300 added to the __builtin__ one. Multiple embedded instances and
292 recursive embeddings should work better now (though I'm not sure
301 recursive embeddings should work better now (though I'm not sure
293 I've got all the corner cases fixed, that code is a bit of a brain
302 I've got all the corner cases fixed, that code is a bit of a brain
294 twister).
303 twister).
295
304
296 * IPython/Magic.py (magic_edit): added support to edit in-memory
305 * IPython/Magic.py (magic_edit): added support to edit in-memory
297 macros (automatically creates the necessary temp files). %edit
306 macros (automatically creates the necessary temp files). %edit
298 also doesn't return the file contents anymore, it's just noise.
307 also doesn't return the file contents anymore, it's just noise.
299
308
300 * IPython/completer.py (Completer.attr_matches): revert change to
309 * IPython/completer.py (Completer.attr_matches): revert change to
301 complete only on attributes listed in __all__. I realized it
310 complete only on attributes listed in __all__. I realized it
302 cripples the tab-completion system as a tool for exploring the
311 cripples the tab-completion system as a tool for exploring the
303 internals of unknown libraries (it renders any non-__all__
312 internals of unknown libraries (it renders any non-__all__
304 attribute off-limits). I got bit by this when trying to see
313 attribute off-limits). I got bit by this when trying to see
305 something inside the dis module.
314 something inside the dis module.
306
315
307 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
316 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
308
317
309 * IPython/iplib.py (InteractiveShell.__init__): add .meta
318 * IPython/iplib.py (InteractiveShell.__init__): add .meta
310 namespace for users and extension writers to hold data in. This
319 namespace for users and extension writers to hold data in. This
311 follows the discussion in
320 follows the discussion in
312 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
321 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
313
322
314 * IPython/completer.py (IPCompleter.complete): small patch to help
323 * IPython/completer.py (IPCompleter.complete): small patch to help
315 tab-completion under Emacs, after a suggestion by John Barnard
324 tab-completion under Emacs, after a suggestion by John Barnard
316 <barnarj-AT-ccf.org>.
325 <barnarj-AT-ccf.org>.
317
326
318 * IPython/Magic.py (Magic.extract_input_slices): added support for
327 * IPython/Magic.py (Magic.extract_input_slices): added support for
319 the slice notation in magics to use N-M to represent numbers N...M
328 the slice notation in magics to use N-M to represent numbers N...M
320 (closed endpoints). This is used by %macro and %save.
329 (closed endpoints). This is used by %macro and %save.
321
330
322 * IPython/completer.py (Completer.attr_matches): for modules which
331 * IPython/completer.py (Completer.attr_matches): for modules which
323 define __all__, complete only on those. After a patch by Jeffrey
332 define __all__, complete only on those. After a patch by Jeffrey
324 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
333 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
325 speed up this routine.
334 speed up this routine.
326
335
327 * IPython/Logger.py (Logger.log): fix a history handling bug. I
336 * IPython/Logger.py (Logger.log): fix a history handling bug. I
328 don't know if this is the end of it, but the behavior now is
337 don't know if this is the end of it, but the behavior now is
329 certainly much more correct. Note that coupled with macros,
338 certainly much more correct. Note that coupled with macros,
330 slightly surprising (at first) behavior may occur: a macro will in
339 slightly surprising (at first) behavior may occur: a macro will in
331 general expand to multiple lines of input, so upon exiting, the
340 general expand to multiple lines of input, so upon exiting, the
332 in/out counters will both be bumped by the corresponding amount
341 in/out counters will both be bumped by the corresponding amount
333 (as if the macro's contents had been typed interactively). Typing
342 (as if the macro's contents had been typed interactively). Typing
334 %hist will reveal the intermediate (silently processed) lines.
343 %hist will reveal the intermediate (silently processed) lines.
335
344
336 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
345 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
337 pickle to fail (%run was overwriting __main__ and not restoring
346 pickle to fail (%run was overwriting __main__ and not restoring
338 it, but pickle relies on __main__ to operate).
347 it, but pickle relies on __main__ to operate).
339
348
340 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
349 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
341 using properties, but forgot to make the main InteractiveShell
350 using properties, but forgot to make the main InteractiveShell
342 class a new-style class. Properties fail silently, and
351 class a new-style class. Properties fail silently, and
343 misteriously, with old-style class (getters work, but
352 misteriously, with old-style class (getters work, but
344 setters don't do anything).
353 setters don't do anything).
345
354
346 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
355 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
347
356
348 * IPython/Magic.py (magic_history): fix history reporting bug (I
357 * IPython/Magic.py (magic_history): fix history reporting bug (I
349 know some nasties are still there, I just can't seem to find a
358 know some nasties are still there, I just can't seem to find a
350 reproducible test case to track them down; the input history is
359 reproducible test case to track them down; the input history is
351 falling out of sync...)
360 falling out of sync...)
352
361
353 * IPython/iplib.py (handle_shell_escape): fix bug where both
362 * IPython/iplib.py (handle_shell_escape): fix bug where both
354 aliases and system accesses where broken for indented code (such
363 aliases and system accesses where broken for indented code (such
355 as loops).
364 as loops).
356
365
357 * IPython/genutils.py (shell): fix small but critical bug for
366 * IPython/genutils.py (shell): fix small but critical bug for
358 win32 system access.
367 win32 system access.
359
368
360 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
369 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
361
370
362 * IPython/iplib.py (showtraceback): remove use of the
371 * IPython/iplib.py (showtraceback): remove use of the
363 sys.last_{type/value/traceback} structures, which are non
372 sys.last_{type/value/traceback} structures, which are non
364 thread-safe.
373 thread-safe.
365 (_prefilter): change control flow to ensure that we NEVER
374 (_prefilter): change control flow to ensure that we NEVER
366 introspect objects when autocall is off. This will guarantee that
375 introspect objects when autocall is off. This will guarantee that
367 having an input line of the form 'x.y', where access to attribute
376 having an input line of the form 'x.y', where access to attribute
368 'y' has side effects, doesn't trigger the side effect TWICE. It
377 'y' has side effects, doesn't trigger the side effect TWICE. It
369 is important to note that, with autocall on, these side effects
378 is important to note that, with autocall on, these side effects
370 can still happen.
379 can still happen.
371 (ipsystem): new builtin, to complete the ip{magic/alias/system}
380 (ipsystem): new builtin, to complete the ip{magic/alias/system}
372 trio. IPython offers these three kinds of special calls which are
381 trio. IPython offers these three kinds of special calls which are
373 not python code, and it's a good thing to have their call method
382 not python code, and it's a good thing to have their call method
374 be accessible as pure python functions (not just special syntax at
383 be accessible as pure python functions (not just special syntax at
375 the command line). It gives us a better internal implementation
384 the command line). It gives us a better internal implementation
376 structure, as well as exposing these for user scripting more
385 structure, as well as exposing these for user scripting more
377 cleanly.
386 cleanly.
378
387
379 * IPython/macro.py (Macro.__init__): moved macros to a standalone
388 * IPython/macro.py (Macro.__init__): moved macros to a standalone
380 file. Now that they'll be more likely to be used with the
389 file. Now that they'll be more likely to be used with the
381 persistance system (%store), I want to make sure their module path
390 persistance system (%store), I want to make sure their module path
382 doesn't change in the future, so that we don't break things for
391 doesn't change in the future, so that we don't break things for
383 users' persisted data.
392 users' persisted data.
384
393
385 * IPython/iplib.py (autoindent_update): move indentation
394 * IPython/iplib.py (autoindent_update): move indentation
386 management into the _text_ processing loop, not the keyboard
395 management into the _text_ processing loop, not the keyboard
387 interactive one. This is necessary to correctly process non-typed
396 interactive one. This is necessary to correctly process non-typed
388 multiline input (such as macros).
397 multiline input (such as macros).
389
398
390 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
399 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
391 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
400 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
392 which was producing problems in the resulting manual.
401 which was producing problems in the resulting manual.
393 (magic_whos): improve reporting of instances (show their class,
402 (magic_whos): improve reporting of instances (show their class,
394 instead of simply printing 'instance' which isn't terribly
403 instead of simply printing 'instance' which isn't terribly
395 informative).
404 informative).
396
405
397 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
406 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
398 (minor mods) to support network shares under win32.
407 (minor mods) to support network shares under win32.
399
408
400 * IPython/winconsole.py (get_console_size): add new winconsole
409 * IPython/winconsole.py (get_console_size): add new winconsole
401 module and fixes to page_dumb() to improve its behavior under
410 module and fixes to page_dumb() to improve its behavior under
402 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
411 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
403
412
404 * IPython/Magic.py (Macro): simplified Macro class to just
413 * IPython/Magic.py (Macro): simplified Macro class to just
405 subclass list. We've had only 2.2 compatibility for a very long
414 subclass list. We've had only 2.2 compatibility for a very long
406 time, yet I was still avoiding subclassing the builtin types. No
415 time, yet I was still avoiding subclassing the builtin types. No
407 more (I'm also starting to use properties, though I won't shift to
416 more (I'm also starting to use properties, though I won't shift to
408 2.3-specific features quite yet).
417 2.3-specific features quite yet).
409 (magic_store): added Ville's patch for lightweight variable
418 (magic_store): added Ville's patch for lightweight variable
410 persistence, after a request on the user list by Matt Wilkie
419 persistence, after a request on the user list by Matt Wilkie
411 <maphew-AT-gmail.com>. The new %store magic's docstring has full
420 <maphew-AT-gmail.com>. The new %store magic's docstring has full
412 details.
421 details.
413
422
414 * IPython/iplib.py (InteractiveShell.post_config_initialization):
423 * IPython/iplib.py (InteractiveShell.post_config_initialization):
415 changed the default logfile name from 'ipython.log' to
424 changed the default logfile name from 'ipython.log' to
416 'ipython_log.py'. These logs are real python files, and now that
425 'ipython_log.py'. These logs are real python files, and now that
417 we have much better multiline support, people are more likely to
426 we have much better multiline support, people are more likely to
418 want to use them as such. Might as well name them correctly.
427 want to use them as such. Might as well name them correctly.
419
428
420 * IPython/Magic.py: substantial cleanup. While we can't stop
429 * IPython/Magic.py: substantial cleanup. While we can't stop
421 using magics as mixins, due to the existing customizations 'out
430 using magics as mixins, due to the existing customizations 'out
422 there' which rely on the mixin naming conventions, at least I
431 there' which rely on the mixin naming conventions, at least I
423 cleaned out all cross-class name usage. So once we are OK with
432 cleaned out all cross-class name usage. So once we are OK with
424 breaking compatibility, the two systems can be separated.
433 breaking compatibility, the two systems can be separated.
425
434
426 * IPython/Logger.py: major cleanup. This one is NOT a mixin
435 * IPython/Logger.py: major cleanup. This one is NOT a mixin
427 anymore, and the class is a fair bit less hideous as well. New
436 anymore, and the class is a fair bit less hideous as well. New
428 features were also introduced: timestamping of input, and logging
437 features were also introduced: timestamping of input, and logging
429 of output results. These are user-visible with the -t and -o
438 of output results. These are user-visible with the -t and -o
430 options to %logstart. Closes
439 options to %logstart. Closes
431 http://www.scipy.net/roundup/ipython/issue11 and a request by
440 http://www.scipy.net/roundup/ipython/issue11 and a request by
432 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
441 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
433
442
434 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
443 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
435
444
436 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
445 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
437 better hadnle backslashes in paths. See the thread 'More Windows
446 better hadnle backslashes in paths. See the thread 'More Windows
438 questions part 2 - \/ characters revisited' on the iypthon user
447 questions part 2 - \/ characters revisited' on the iypthon user
439 list:
448 list:
440 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
449 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
441
450
442 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
451 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
443
452
444 (InteractiveShell.__init__): change threaded shells to not use the
453 (InteractiveShell.__init__): change threaded shells to not use the
445 ipython crash handler. This was causing more problems than not,
454 ipython crash handler. This was causing more problems than not,
446 as exceptions in the main thread (GUI code, typically) would
455 as exceptions in the main thread (GUI code, typically) would
447 always show up as a 'crash', when they really weren't.
456 always show up as a 'crash', when they really weren't.
448
457
449 The colors and exception mode commands (%colors/%xmode) have been
458 The colors and exception mode commands (%colors/%xmode) have been
450 synchronized to also take this into account, so users can get
459 synchronized to also take this into account, so users can get
451 verbose exceptions for their threaded code as well. I also added
460 verbose exceptions for their threaded code as well. I also added
452 support for activating pdb inside this exception handler as well,
461 support for activating pdb inside this exception handler as well,
453 so now GUI authors can use IPython's enhanced pdb at runtime.
462 so now GUI authors can use IPython's enhanced pdb at runtime.
454
463
455 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
464 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
456 true by default, and add it to the shipped ipythonrc file. Since
465 true by default, and add it to the shipped ipythonrc file. Since
457 this asks the user before proceeding, I think it's OK to make it
466 this asks the user before proceeding, I think it's OK to make it
458 true by default.
467 true by default.
459
468
460 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
469 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
461 of the previous special-casing of input in the eval loop. I think
470 of the previous special-casing of input in the eval loop. I think
462 this is cleaner, as they really are commands and shouldn't have
471 this is cleaner, as they really are commands and shouldn't have
463 a special role in the middle of the core code.
472 a special role in the middle of the core code.
464
473
465 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
474 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
466
475
467 * IPython/iplib.py (edit_syntax_error): added support for
476 * IPython/iplib.py (edit_syntax_error): added support for
468 automatically reopening the editor if the file had a syntax error
477 automatically reopening the editor if the file had a syntax error
469 in it. Thanks to scottt who provided the patch at:
478 in it. Thanks to scottt who provided the patch at:
470 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
479 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
471 version committed).
480 version committed).
472
481
473 * IPython/iplib.py (handle_normal): add suport for multi-line
482 * IPython/iplib.py (handle_normal): add suport for multi-line
474 input with emtpy lines. This fixes
483 input with emtpy lines. This fixes
475 http://www.scipy.net/roundup/ipython/issue43 and a similar
484 http://www.scipy.net/roundup/ipython/issue43 and a similar
476 discussion on the user list.
485 discussion on the user list.
477
486
478 WARNING: a behavior change is necessarily introduced to support
487 WARNING: a behavior change is necessarily introduced to support
479 blank lines: now a single blank line with whitespace does NOT
488 blank lines: now a single blank line with whitespace does NOT
480 break the input loop, which means that when autoindent is on, by
489 break the input loop, which means that when autoindent is on, by
481 default hitting return on the next (indented) line does NOT exit.
490 default hitting return on the next (indented) line does NOT exit.
482
491
483 Instead, to exit a multiline input you can either have:
492 Instead, to exit a multiline input you can either have:
484
493
485 - TWO whitespace lines (just hit return again), or
494 - TWO whitespace lines (just hit return again), or
486 - a single whitespace line of a different length than provided
495 - a single whitespace line of a different length than provided
487 by the autoindent (add or remove a space).
496 by the autoindent (add or remove a space).
488
497
489 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
498 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
490 module to better organize all readline-related functionality.
499 module to better organize all readline-related functionality.
491 I've deleted FlexCompleter and put all completion clases here.
500 I've deleted FlexCompleter and put all completion clases here.
492
501
493 * IPython/iplib.py (raw_input): improve indentation management.
502 * IPython/iplib.py (raw_input): improve indentation management.
494 It is now possible to paste indented code with autoindent on, and
503 It is now possible to paste indented code with autoindent on, and
495 the code is interpreted correctly (though it still looks bad on
504 the code is interpreted correctly (though it still looks bad on
496 screen, due to the line-oriented nature of ipython).
505 screen, due to the line-oriented nature of ipython).
497 (MagicCompleter.complete): change behavior so that a TAB key on an
506 (MagicCompleter.complete): change behavior so that a TAB key on an
498 otherwise empty line actually inserts a tab, instead of completing
507 otherwise empty line actually inserts a tab, instead of completing
499 on the entire global namespace. This makes it easier to use the
508 on the entire global namespace. This makes it easier to use the
500 TAB key for indentation. After a request by Hans Meine
509 TAB key for indentation. After a request by Hans Meine
501 <hans_meine-AT-gmx.net>
510 <hans_meine-AT-gmx.net>
502 (_prefilter): add support so that typing plain 'exit' or 'quit'
511 (_prefilter): add support so that typing plain 'exit' or 'quit'
503 does a sensible thing. Originally I tried to deviate as little as
512 does a sensible thing. Originally I tried to deviate as little as
504 possible from the default python behavior, but even that one may
513 possible from the default python behavior, but even that one may
505 change in this direction (thread on python-dev to that effect).
514 change in this direction (thread on python-dev to that effect).
506 Regardless, ipython should do the right thing even if CPython's
515 Regardless, ipython should do the right thing even if CPython's
507 '>>>' prompt doesn't.
516 '>>>' prompt doesn't.
508 (InteractiveShell): removed subclassing code.InteractiveConsole
517 (InteractiveShell): removed subclassing code.InteractiveConsole
509 class. By now we'd overridden just about all of its methods: I've
518 class. By now we'd overridden just about all of its methods: I've
510 copied the remaining two over, and now ipython is a standalone
519 copied the remaining two over, and now ipython is a standalone
511 class. This will provide a clearer picture for the chainsaw
520 class. This will provide a clearer picture for the chainsaw
512 branch refactoring.
521 branch refactoring.
513
522
514 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
523 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
515
524
516 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
525 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
517 failures for objects which break when dir() is called on them.
526 failures for objects which break when dir() is called on them.
518
527
519 * IPython/FlexCompleter.py (Completer.__init__): Added support for
528 * IPython/FlexCompleter.py (Completer.__init__): Added support for
520 distinct local and global namespaces in the completer API. This
529 distinct local and global namespaces in the completer API. This
521 change allows us top properly handle completion with distinct
530 change allows us top properly handle completion with distinct
522 scopes, including in embedded instances (this had never really
531 scopes, including in embedded instances (this had never really
523 worked correctly).
532 worked correctly).
524
533
525 Note: this introduces a change in the constructor for
534 Note: this introduces a change in the constructor for
526 MagicCompleter, as a new global_namespace parameter is now the
535 MagicCompleter, as a new global_namespace parameter is now the
527 second argument (the others were bumped one position).
536 second argument (the others were bumped one position).
528
537
529 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
538 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
530
539
531 * IPython/iplib.py (embed_mainloop): fix tab-completion in
540 * IPython/iplib.py (embed_mainloop): fix tab-completion in
532 embedded instances (which can be done now thanks to Vivian's
541 embedded instances (which can be done now thanks to Vivian's
533 frame-handling fixes for pdb).
542 frame-handling fixes for pdb).
534 (InteractiveShell.__init__): Fix namespace handling problem in
543 (InteractiveShell.__init__): Fix namespace handling problem in
535 embedded instances. We were overwriting __main__ unconditionally,
544 embedded instances. We were overwriting __main__ unconditionally,
536 and this should only be done for 'full' (non-embedded) IPython;
545 and this should only be done for 'full' (non-embedded) IPython;
537 embedded instances must respect the caller's __main__. Thanks to
546 embedded instances must respect the caller's __main__. Thanks to
538 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
547 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
539
548
540 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
549 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
541
550
542 * setup.py: added download_url to setup(). This registers the
551 * setup.py: added download_url to setup(). This registers the
543 download address at PyPI, which is not only useful to humans
552 download address at PyPI, which is not only useful to humans
544 browsing the site, but is also picked up by setuptools (the Eggs
553 browsing the site, but is also picked up by setuptools (the Eggs
545 machinery). Thanks to Ville and R. Kern for the info/discussion
554 machinery). Thanks to Ville and R. Kern for the info/discussion
546 on this.
555 on this.
547
556
548 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
557 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
549
558
550 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
559 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
551 This brings a lot of nice functionality to the pdb mode, which now
560 This brings a lot of nice functionality to the pdb mode, which now
552 has tab-completion, syntax highlighting, and better stack handling
561 has tab-completion, syntax highlighting, and better stack handling
553 than before. Many thanks to Vivian De Smedt
562 than before. Many thanks to Vivian De Smedt
554 <vivian-AT-vdesmedt.com> for the original patches.
563 <vivian-AT-vdesmedt.com> for the original patches.
555
564
556 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
565 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
557
566
558 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
567 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
559 sequence to consistently accept the banner argument. The
568 sequence to consistently accept the banner argument. The
560 inconsistency was tripping SAGE, thanks to Gary Zablackis
569 inconsistency was tripping SAGE, thanks to Gary Zablackis
561 <gzabl-AT-yahoo.com> for the report.
570 <gzabl-AT-yahoo.com> for the report.
562
571
563 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
572 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
564
573
565 * IPython/iplib.py (InteractiveShell.post_config_initialization):
574 * IPython/iplib.py (InteractiveShell.post_config_initialization):
566 Fix bug where a naked 'alias' call in the ipythonrc file would
575 Fix bug where a naked 'alias' call in the ipythonrc file would
567 cause a crash. Bug reported by Jorgen Stenarson.
576 cause a crash. Bug reported by Jorgen Stenarson.
568
577
569 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
578 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
570
579
571 * IPython/ipmaker.py (make_IPython): cleanups which should improve
580 * IPython/ipmaker.py (make_IPython): cleanups which should improve
572 startup time.
581 startup time.
573
582
574 * IPython/iplib.py (runcode): my globals 'fix' for embedded
583 * IPython/iplib.py (runcode): my globals 'fix' for embedded
575 instances had introduced a bug with globals in normal code. Now
584 instances had introduced a bug with globals in normal code. Now
576 it's working in all cases.
585 it's working in all cases.
577
586
578 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
587 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
579 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
588 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
580 has been introduced to set the default case sensitivity of the
589 has been introduced to set the default case sensitivity of the
581 searches. Users can still select either mode at runtime on a
590 searches. Users can still select either mode at runtime on a
582 per-search basis.
591 per-search basis.
583
592
584 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
593 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
585
594
586 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
595 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
587 attributes in wildcard searches for subclasses. Modified version
596 attributes in wildcard searches for subclasses. Modified version
588 of a patch by Jorgen.
597 of a patch by Jorgen.
589
598
590 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
599 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
591
600
592 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
601 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
593 embedded instances. I added a user_global_ns attribute to the
602 embedded instances. I added a user_global_ns attribute to the
594 InteractiveShell class to handle this.
603 InteractiveShell class to handle this.
595
604
596 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
605 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
597
606
598 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
607 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
599 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
608 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
600 (reported under win32, but may happen also in other platforms).
609 (reported under win32, but may happen also in other platforms).
601 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
610 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
602
611
603 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
612 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
604
613
605 * IPython/Magic.py (magic_psearch): new support for wildcard
614 * IPython/Magic.py (magic_psearch): new support for wildcard
606 patterns. Now, typing ?a*b will list all names which begin with a
615 patterns. Now, typing ?a*b will list all names which begin with a
607 and end in b, for example. The %psearch magic has full
616 and end in b, for example. The %psearch magic has full
608 docstrings. Many thanks to JΓΆrgen Stenarson
617 docstrings. Many thanks to JΓΆrgen Stenarson
609 <jorgen.stenarson-AT-bostream.nu>, author of the patches
618 <jorgen.stenarson-AT-bostream.nu>, author of the patches
610 implementing this functionality.
619 implementing this functionality.
611
620
612 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
621 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
613
622
614 * Manual: fixed long-standing annoyance of double-dashes (as in
623 * Manual: fixed long-standing annoyance of double-dashes (as in
615 --prefix=~, for example) being stripped in the HTML version. This
624 --prefix=~, for example) being stripped in the HTML version. This
616 is a latex2html bug, but a workaround was provided. Many thanks
625 is a latex2html bug, but a workaround was provided. Many thanks
617 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
626 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
618 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
627 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
619 rolling. This seemingly small issue had tripped a number of users
628 rolling. This seemingly small issue had tripped a number of users
620 when first installing, so I'm glad to see it gone.
629 when first installing, so I'm glad to see it gone.
621
630
622 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
631 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
623
632
624 * IPython/Extensions/numeric_formats.py: fix missing import,
633 * IPython/Extensions/numeric_formats.py: fix missing import,
625 reported by Stephen Walton.
634 reported by Stephen Walton.
626
635
627 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
636 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
628
637
629 * IPython/demo.py: finish demo module, fully documented now.
638 * IPython/demo.py: finish demo module, fully documented now.
630
639
631 * IPython/genutils.py (file_read): simple little utility to read a
640 * IPython/genutils.py (file_read): simple little utility to read a
632 file and ensure it's closed afterwards.
641 file and ensure it's closed afterwards.
633
642
634 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
643 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
635
644
636 * IPython/demo.py (Demo.__init__): added support for individually
645 * IPython/demo.py (Demo.__init__): added support for individually
637 tagging blocks for automatic execution.
646 tagging blocks for automatic execution.
638
647
639 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
648 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
640 syntax-highlighted python sources, requested by John.
649 syntax-highlighted python sources, requested by John.
641
650
642 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
651 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
643
652
644 * IPython/demo.py (Demo.again): fix bug where again() blocks after
653 * IPython/demo.py (Demo.again): fix bug where again() blocks after
645 finishing.
654 finishing.
646
655
647 * IPython/genutils.py (shlex_split): moved from Magic to here,
656 * IPython/genutils.py (shlex_split): moved from Magic to here,
648 where all 2.2 compatibility stuff lives. I needed it for demo.py.
657 where all 2.2 compatibility stuff lives. I needed it for demo.py.
649
658
650 * IPython/demo.py (Demo.__init__): added support for silent
659 * IPython/demo.py (Demo.__init__): added support for silent
651 blocks, improved marks as regexps, docstrings written.
660 blocks, improved marks as regexps, docstrings written.
652 (Demo.__init__): better docstring, added support for sys.argv.
661 (Demo.__init__): better docstring, added support for sys.argv.
653
662
654 * IPython/genutils.py (marquee): little utility used by the demo
663 * IPython/genutils.py (marquee): little utility used by the demo
655 code, handy in general.
664 code, handy in general.
656
665
657 * IPython/demo.py (Demo.__init__): new class for interactive
666 * IPython/demo.py (Demo.__init__): new class for interactive
658 demos. Not documented yet, I just wrote it in a hurry for
667 demos. Not documented yet, I just wrote it in a hurry for
659 scipy'05. Will docstring later.
668 scipy'05. Will docstring later.
660
669
661 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
670 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
662
671
663 * IPython/Shell.py (sigint_handler): Drastic simplification which
672 * IPython/Shell.py (sigint_handler): Drastic simplification which
664 also seems to make Ctrl-C work correctly across threads! This is
673 also seems to make Ctrl-C work correctly across threads! This is
665 so simple, that I can't beleive I'd missed it before. Needs more
674 so simple, that I can't beleive I'd missed it before. Needs more
666 testing, though.
675 testing, though.
667 (KBINT): Never mind, revert changes. I'm sure I'd tried something
676 (KBINT): Never mind, revert changes. I'm sure I'd tried something
668 like this before...
677 like this before...
669
678
670 * IPython/genutils.py (get_home_dir): add protection against
679 * IPython/genutils.py (get_home_dir): add protection against
671 non-dirs in win32 registry.
680 non-dirs in win32 registry.
672
681
673 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
682 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
674 bug where dict was mutated while iterating (pysh crash).
683 bug where dict was mutated while iterating (pysh crash).
675
684
676 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
685 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
677
686
678 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
687 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
679 spurious newlines added by this routine. After a report by
688 spurious newlines added by this routine. After a report by
680 F. Mantegazza.
689 F. Mantegazza.
681
690
682 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
691 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
683
692
684 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
693 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
685 calls. These were a leftover from the GTK 1.x days, and can cause
694 calls. These were a leftover from the GTK 1.x days, and can cause
686 problems in certain cases (after a report by John Hunter).
695 problems in certain cases (after a report by John Hunter).
687
696
688 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
697 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
689 os.getcwd() fails at init time. Thanks to patch from David Remahl
698 os.getcwd() fails at init time. Thanks to patch from David Remahl
690 <chmod007-AT-mac.com>.
699 <chmod007-AT-mac.com>.
691 (InteractiveShell.__init__): prevent certain special magics from
700 (InteractiveShell.__init__): prevent certain special magics from
692 being shadowed by aliases. Closes
701 being shadowed by aliases. Closes
693 http://www.scipy.net/roundup/ipython/issue41.
702 http://www.scipy.net/roundup/ipython/issue41.
694
703
695 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
704 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
696
705
697 * IPython/iplib.py (InteractiveShell.complete): Added new
706 * IPython/iplib.py (InteractiveShell.complete): Added new
698 top-level completion method to expose the completion mechanism
707 top-level completion method to expose the completion mechanism
699 beyond readline-based environments.
708 beyond readline-based environments.
700
709
701 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
710 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
702
711
703 * tools/ipsvnc (svnversion): fix svnversion capture.
712 * tools/ipsvnc (svnversion): fix svnversion capture.
704
713
705 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
714 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
706 attribute to self, which was missing. Before, it was set by a
715 attribute to self, which was missing. Before, it was set by a
707 routine which in certain cases wasn't being called, so the
716 routine which in certain cases wasn't being called, so the
708 instance could end up missing the attribute. This caused a crash.
717 instance could end up missing the attribute. This caused a crash.
709 Closes http://www.scipy.net/roundup/ipython/issue40.
718 Closes http://www.scipy.net/roundup/ipython/issue40.
710
719
711 2005-08-16 Fernando Perez <fperez@colorado.edu>
720 2005-08-16 Fernando Perez <fperez@colorado.edu>
712
721
713 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
722 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
714 contains non-string attribute. Closes
723 contains non-string attribute. Closes
715 http://www.scipy.net/roundup/ipython/issue38.
724 http://www.scipy.net/roundup/ipython/issue38.
716
725
717 2005-08-14 Fernando Perez <fperez@colorado.edu>
726 2005-08-14 Fernando Perez <fperez@colorado.edu>
718
727
719 * tools/ipsvnc: Minor improvements, to add changeset info.
728 * tools/ipsvnc: Minor improvements, to add changeset info.
720
729
721 2005-08-12 Fernando Perez <fperez@colorado.edu>
730 2005-08-12 Fernando Perez <fperez@colorado.edu>
722
731
723 * IPython/iplib.py (runsource): remove self.code_to_run_src
732 * IPython/iplib.py (runsource): remove self.code_to_run_src
724 attribute. I realized this is nothing more than
733 attribute. I realized this is nothing more than
725 '\n'.join(self.buffer), and having the same data in two different
734 '\n'.join(self.buffer), and having the same data in two different
726 places is just asking for synchronization bugs. This may impact
735 places is just asking for synchronization bugs. This may impact
727 people who have custom exception handlers, so I need to warn
736 people who have custom exception handlers, so I need to warn
728 ipython-dev about it (F. Mantegazza may use them).
737 ipython-dev about it (F. Mantegazza may use them).
729
738
730 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
739 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
731
740
732 * IPython/genutils.py: fix 2.2 compatibility (generators)
741 * IPython/genutils.py: fix 2.2 compatibility (generators)
733
742
734 2005-07-18 Fernando Perez <fperez@colorado.edu>
743 2005-07-18 Fernando Perez <fperez@colorado.edu>
735
744
736 * IPython/genutils.py (get_home_dir): fix to help users with
745 * IPython/genutils.py (get_home_dir): fix to help users with
737 invalid $HOME under win32.
746 invalid $HOME under win32.
738
747
739 2005-07-17 Fernando Perez <fperez@colorado.edu>
748 2005-07-17 Fernando Perez <fperez@colorado.edu>
740
749
741 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
750 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
742 some old hacks and clean up a bit other routines; code should be
751 some old hacks and clean up a bit other routines; code should be
743 simpler and a bit faster.
752 simpler and a bit faster.
744
753
745 * IPython/iplib.py (interact): removed some last-resort attempts
754 * IPython/iplib.py (interact): removed some last-resort attempts
746 to survive broken stdout/stderr. That code was only making it
755 to survive broken stdout/stderr. That code was only making it
747 harder to abstract out the i/o (necessary for gui integration),
756 harder to abstract out the i/o (necessary for gui integration),
748 and the crashes it could prevent were extremely rare in practice
757 and the crashes it could prevent were extremely rare in practice
749 (besides being fully user-induced in a pretty violent manner).
758 (besides being fully user-induced in a pretty violent manner).
750
759
751 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
760 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
752 Nothing major yet, but the code is simpler to read; this should
761 Nothing major yet, but the code is simpler to read; this should
753 make it easier to do more serious modifications in the future.
762 make it easier to do more serious modifications in the future.
754
763
755 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
764 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
756 which broke in .15 (thanks to a report by Ville).
765 which broke in .15 (thanks to a report by Ville).
757
766
758 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
767 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
759 be quite correct, I know next to nothing about unicode). This
768 be quite correct, I know next to nothing about unicode). This
760 will allow unicode strings to be used in prompts, amongst other
769 will allow unicode strings to be used in prompts, amongst other
761 cases. It also will prevent ipython from crashing when unicode
770 cases. It also will prevent ipython from crashing when unicode
762 shows up unexpectedly in many places. If ascii encoding fails, we
771 shows up unexpectedly in many places. If ascii encoding fails, we
763 assume utf_8. Currently the encoding is not a user-visible
772 assume utf_8. Currently the encoding is not a user-visible
764 setting, though it could be made so if there is demand for it.
773 setting, though it could be made so if there is demand for it.
765
774
766 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
775 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
767
776
768 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
777 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
769
778
770 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
779 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
771
780
772 * IPython/genutils.py: Add 2.2 compatibility here, so all other
781 * IPython/genutils.py: Add 2.2 compatibility here, so all other
773 code can work transparently for 2.2/2.3.
782 code can work transparently for 2.2/2.3.
774
783
775 2005-07-16 Fernando Perez <fperez@colorado.edu>
784 2005-07-16 Fernando Perez <fperez@colorado.edu>
776
785
777 * IPython/ultraTB.py (ExceptionColors): Make a global variable
786 * IPython/ultraTB.py (ExceptionColors): Make a global variable
778 out of the color scheme table used for coloring exception
787 out of the color scheme table used for coloring exception
779 tracebacks. This allows user code to add new schemes at runtime.
788 tracebacks. This allows user code to add new schemes at runtime.
780 This is a minimally modified version of the patch at
789 This is a minimally modified version of the patch at
781 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
790 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
782 for the contribution.
791 for the contribution.
783
792
784 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
793 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
785 slightly modified version of the patch in
794 slightly modified version of the patch in
786 http://www.scipy.net/roundup/ipython/issue34, which also allows me
795 http://www.scipy.net/roundup/ipython/issue34, which also allows me
787 to remove the previous try/except solution (which was costlier).
796 to remove the previous try/except solution (which was costlier).
788 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
797 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
789
798
790 2005-06-08 Fernando Perez <fperez@colorado.edu>
799 2005-06-08 Fernando Perez <fperez@colorado.edu>
791
800
792 * IPython/iplib.py (write/write_err): Add methods to abstract all
801 * IPython/iplib.py (write/write_err): Add methods to abstract all
793 I/O a bit more.
802 I/O a bit more.
794
803
795 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
804 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
796 warning, reported by Aric Hagberg, fix by JD Hunter.
805 warning, reported by Aric Hagberg, fix by JD Hunter.
797
806
798 2005-06-02 *** Released version 0.6.15
807 2005-06-02 *** Released version 0.6.15
799
808
800 2005-06-01 Fernando Perez <fperez@colorado.edu>
809 2005-06-01 Fernando Perez <fperez@colorado.edu>
801
810
802 * IPython/iplib.py (MagicCompleter.file_matches): Fix
811 * IPython/iplib.py (MagicCompleter.file_matches): Fix
803 tab-completion of filenames within open-quoted strings. Note that
812 tab-completion of filenames within open-quoted strings. Note that
804 this requires that in ~/.ipython/ipythonrc, users change the
813 this requires that in ~/.ipython/ipythonrc, users change the
805 readline delimiters configuration to read:
814 readline delimiters configuration to read:
806
815
807 readline_remove_delims -/~
816 readline_remove_delims -/~
808
817
809
818
810 2005-05-31 *** Released version 0.6.14
819 2005-05-31 *** Released version 0.6.14
811
820
812 2005-05-29 Fernando Perez <fperez@colorado.edu>
821 2005-05-29 Fernando Perez <fperez@colorado.edu>
813
822
814 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
823 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
815 with files not on the filesystem. Reported by Eliyahu Sandler
824 with files not on the filesystem. Reported by Eliyahu Sandler
816 <eli@gondolin.net>
825 <eli@gondolin.net>
817
826
818 2005-05-22 Fernando Perez <fperez@colorado.edu>
827 2005-05-22 Fernando Perez <fperez@colorado.edu>
819
828
820 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
829 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
821 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
830 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
822
831
823 2005-05-19 Fernando Perez <fperez@colorado.edu>
832 2005-05-19 Fernando Perez <fperez@colorado.edu>
824
833
825 * IPython/iplib.py (safe_execfile): close a file which could be
834 * IPython/iplib.py (safe_execfile): close a file which could be
826 left open (causing problems in win32, which locks open files).
835 left open (causing problems in win32, which locks open files).
827 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
836 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
828
837
829 2005-05-18 Fernando Perez <fperez@colorado.edu>
838 2005-05-18 Fernando Perez <fperez@colorado.edu>
830
839
831 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
840 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
832 keyword arguments correctly to safe_execfile().
841 keyword arguments correctly to safe_execfile().
833
842
834 2005-05-13 Fernando Perez <fperez@colorado.edu>
843 2005-05-13 Fernando Perez <fperez@colorado.edu>
835
844
836 * ipython.1: Added info about Qt to manpage, and threads warning
845 * ipython.1: Added info about Qt to manpage, and threads warning
837 to usage page (invoked with --help).
846 to usage page (invoked with --help).
838
847
839 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
848 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
840 new matcher (it goes at the end of the priority list) to do
849 new matcher (it goes at the end of the priority list) to do
841 tab-completion on named function arguments. Submitted by George
850 tab-completion on named function arguments. Submitted by George
842 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
851 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
843 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
852 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
844 for more details.
853 for more details.
845
854
846 * IPython/Magic.py (magic_run): Added new -e flag to ignore
855 * IPython/Magic.py (magic_run): Added new -e flag to ignore
847 SystemExit exceptions in the script being run. Thanks to a report
856 SystemExit exceptions in the script being run. Thanks to a report
848 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
857 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
849 producing very annoying behavior when running unit tests.
858 producing very annoying behavior when running unit tests.
850
859
851 2005-05-12 Fernando Perez <fperez@colorado.edu>
860 2005-05-12 Fernando Perez <fperez@colorado.edu>
852
861
853 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
862 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
854 which I'd broken (again) due to a changed regexp. In the process,
863 which I'd broken (again) due to a changed regexp. In the process,
855 added ';' as an escape to auto-quote the whole line without
864 added ';' as an escape to auto-quote the whole line without
856 splitting its arguments. Thanks to a report by Jerry McRae
865 splitting its arguments. Thanks to a report by Jerry McRae
857 <qrs0xyc02-AT-sneakemail.com>.
866 <qrs0xyc02-AT-sneakemail.com>.
858
867
859 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
868 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
860 possible crashes caused by a TokenError. Reported by Ed Schofield
869 possible crashes caused by a TokenError. Reported by Ed Schofield
861 <schofield-AT-ftw.at>.
870 <schofield-AT-ftw.at>.
862
871
863 2005-05-06 Fernando Perez <fperez@colorado.edu>
872 2005-05-06 Fernando Perez <fperez@colorado.edu>
864
873
865 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
874 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
866
875
867 2005-04-29 Fernando Perez <fperez@colorado.edu>
876 2005-04-29 Fernando Perez <fperez@colorado.edu>
868
877
869 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
878 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
870 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
879 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
871 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
880 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
872 which provides support for Qt interactive usage (similar to the
881 which provides support for Qt interactive usage (similar to the
873 existing one for WX and GTK). This had been often requested.
882 existing one for WX and GTK). This had been often requested.
874
883
875 2005-04-14 *** Released version 0.6.13
884 2005-04-14 *** Released version 0.6.13
876
885
877 2005-04-08 Fernando Perez <fperez@colorado.edu>
886 2005-04-08 Fernando Perez <fperez@colorado.edu>
878
887
879 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
888 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
880 from _ofind, which gets called on almost every input line. Now,
889 from _ofind, which gets called on almost every input line. Now,
881 we only try to get docstrings if they are actually going to be
890 we only try to get docstrings if they are actually going to be
882 used (the overhead of fetching unnecessary docstrings can be
891 used (the overhead of fetching unnecessary docstrings can be
883 noticeable for certain objects, such as Pyro proxies).
892 noticeable for certain objects, such as Pyro proxies).
884
893
885 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
894 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
886 for completers. For some reason I had been passing them the state
895 for completers. For some reason I had been passing them the state
887 variable, which completers never actually need, and was in
896 variable, which completers never actually need, and was in
888 conflict with the rlcompleter API. Custom completers ONLY need to
897 conflict with the rlcompleter API. Custom completers ONLY need to
889 take the text parameter.
898 take the text parameter.
890
899
891 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
900 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
892 work correctly in pysh. I've also moved all the logic which used
901 work correctly in pysh. I've also moved all the logic which used
893 to be in pysh.py here, which will prevent problems with future
902 to be in pysh.py here, which will prevent problems with future
894 upgrades. However, this time I must warn users to update their
903 upgrades. However, this time I must warn users to update their
895 pysh profile to include the line
904 pysh profile to include the line
896
905
897 import_all IPython.Extensions.InterpreterExec
906 import_all IPython.Extensions.InterpreterExec
898
907
899 because otherwise things won't work for them. They MUST also
908 because otherwise things won't work for them. They MUST also
900 delete pysh.py and the line
909 delete pysh.py and the line
901
910
902 execfile pysh.py
911 execfile pysh.py
903
912
904 from their ipythonrc-pysh.
913 from their ipythonrc-pysh.
905
914
906 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
915 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
907 robust in the face of objects whose dir() returns non-strings
916 robust in the face of objects whose dir() returns non-strings
908 (which it shouldn't, but some broken libs like ITK do). Thanks to
917 (which it shouldn't, but some broken libs like ITK do). Thanks to
909 a patch by John Hunter (implemented differently, though). Also
918 a patch by John Hunter (implemented differently, though). Also
910 minor improvements by using .extend instead of + on lists.
919 minor improvements by using .extend instead of + on lists.
911
920
912 * pysh.py:
921 * pysh.py:
913
922
914 2005-04-06 Fernando Perez <fperez@colorado.edu>
923 2005-04-06 Fernando Perez <fperez@colorado.edu>
915
924
916 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
925 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
917 by default, so that all users benefit from it. Those who don't
926 by default, so that all users benefit from it. Those who don't
918 want it can still turn it off.
927 want it can still turn it off.
919
928
920 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
929 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
921 config file, I'd forgotten about this, so users were getting it
930 config file, I'd forgotten about this, so users were getting it
922 off by default.
931 off by default.
923
932
924 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
933 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
925 consistency. Now magics can be called in multiline statements,
934 consistency. Now magics can be called in multiline statements,
926 and python variables can be expanded in magic calls via $var.
935 and python variables can be expanded in magic calls via $var.
927 This makes the magic system behave just like aliases or !system
936 This makes the magic system behave just like aliases or !system
928 calls.
937 calls.
929
938
930 2005-03-28 Fernando Perez <fperez@colorado.edu>
939 2005-03-28 Fernando Perez <fperez@colorado.edu>
931
940
932 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
941 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
933 expensive string additions for building command. Add support for
942 expensive string additions for building command. Add support for
934 trailing ';' when autocall is used.
943 trailing ';' when autocall is used.
935
944
936 2005-03-26 Fernando Perez <fperez@colorado.edu>
945 2005-03-26 Fernando Perez <fperez@colorado.edu>
937
946
938 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
947 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
939 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
948 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
940 ipython.el robust against prompts with any number of spaces
949 ipython.el robust against prompts with any number of spaces
941 (including 0) after the ':' character.
950 (including 0) after the ':' character.
942
951
943 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
952 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
944 continuation prompt, which misled users to think the line was
953 continuation prompt, which misled users to think the line was
945 already indented. Closes debian Bug#300847, reported to me by
954 already indented. Closes debian Bug#300847, reported to me by
946 Norbert Tretkowski <tretkowski-AT-inittab.de>.
955 Norbert Tretkowski <tretkowski-AT-inittab.de>.
947
956
948 2005-03-23 Fernando Perez <fperez@colorado.edu>
957 2005-03-23 Fernando Perez <fperez@colorado.edu>
949
958
950 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
959 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
951 properly aligned if they have embedded newlines.
960 properly aligned if they have embedded newlines.
952
961
953 * IPython/iplib.py (runlines): Add a public method to expose
962 * IPython/iplib.py (runlines): Add a public method to expose
954 IPython's code execution machinery, so that users can run strings
963 IPython's code execution machinery, so that users can run strings
955 as if they had been typed at the prompt interactively.
964 as if they had been typed at the prompt interactively.
956 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
965 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
957 methods which can call the system shell, but with python variable
966 methods which can call the system shell, but with python variable
958 expansion. The three such methods are: __IPYTHON__.system,
967 expansion. The three such methods are: __IPYTHON__.system,
959 .getoutput and .getoutputerror. These need to be documented in a
968 .getoutput and .getoutputerror. These need to be documented in a
960 'public API' section (to be written) of the manual.
969 'public API' section (to be written) of the manual.
961
970
962 2005-03-20 Fernando Perez <fperez@colorado.edu>
971 2005-03-20 Fernando Perez <fperez@colorado.edu>
963
972
964 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
973 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
965 for custom exception handling. This is quite powerful, and it
974 for custom exception handling. This is quite powerful, and it
966 allows for user-installable exception handlers which can trap
975 allows for user-installable exception handlers which can trap
967 custom exceptions at runtime and treat them separately from
976 custom exceptions at runtime and treat them separately from
968 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
977 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
969 Mantegazza <mantegazza-AT-ill.fr>.
978 Mantegazza <mantegazza-AT-ill.fr>.
970 (InteractiveShell.set_custom_completer): public API function to
979 (InteractiveShell.set_custom_completer): public API function to
971 add new completers at runtime.
980 add new completers at runtime.
972
981
973 2005-03-19 Fernando Perez <fperez@colorado.edu>
982 2005-03-19 Fernando Perez <fperez@colorado.edu>
974
983
975 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
984 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
976 allow objects which provide their docstrings via non-standard
985 allow objects which provide their docstrings via non-standard
977 mechanisms (like Pyro proxies) to still be inspected by ipython's
986 mechanisms (like Pyro proxies) to still be inspected by ipython's
978 ? system.
987 ? system.
979
988
980 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
989 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
981 automatic capture system. I tried quite hard to make it work
990 automatic capture system. I tried quite hard to make it work
982 reliably, and simply failed. I tried many combinations with the
991 reliably, and simply failed. I tried many combinations with the
983 subprocess module, but eventually nothing worked in all needed
992 subprocess module, but eventually nothing worked in all needed
984 cases (not blocking stdin for the child, duplicating stdout
993 cases (not blocking stdin for the child, duplicating stdout
985 without blocking, etc). The new %sc/%sx still do capture to these
994 without blocking, etc). The new %sc/%sx still do capture to these
986 magical list/string objects which make shell use much more
995 magical list/string objects which make shell use much more
987 conveninent, so not all is lost.
996 conveninent, so not all is lost.
988
997
989 XXX - FIX MANUAL for the change above!
998 XXX - FIX MANUAL for the change above!
990
999
991 (runsource): I copied code.py's runsource() into ipython to modify
1000 (runsource): I copied code.py's runsource() into ipython to modify
992 it a bit. Now the code object and source to be executed are
1001 it a bit. Now the code object and source to be executed are
993 stored in ipython. This makes this info accessible to third-party
1002 stored in ipython. This makes this info accessible to third-party
994 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1003 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
995 Mantegazza <mantegazza-AT-ill.fr>.
1004 Mantegazza <mantegazza-AT-ill.fr>.
996
1005
997 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1006 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
998 history-search via readline (like C-p/C-n). I'd wanted this for a
1007 history-search via readline (like C-p/C-n). I'd wanted this for a
999 long time, but only recently found out how to do it. For users
1008 long time, but only recently found out how to do it. For users
1000 who already have their ipythonrc files made and want this, just
1009 who already have their ipythonrc files made and want this, just
1001 add:
1010 add:
1002
1011
1003 readline_parse_and_bind "\e[A": history-search-backward
1012 readline_parse_and_bind "\e[A": history-search-backward
1004 readline_parse_and_bind "\e[B": history-search-forward
1013 readline_parse_and_bind "\e[B": history-search-forward
1005
1014
1006 2005-03-18 Fernando Perez <fperez@colorado.edu>
1015 2005-03-18 Fernando Perez <fperez@colorado.edu>
1007
1016
1008 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1017 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1009 LSString and SList classes which allow transparent conversions
1018 LSString and SList classes which allow transparent conversions
1010 between list mode and whitespace-separated string.
1019 between list mode and whitespace-separated string.
1011 (magic_r): Fix recursion problem in %r.
1020 (magic_r): Fix recursion problem in %r.
1012
1021
1013 * IPython/genutils.py (LSString): New class to be used for
1022 * IPython/genutils.py (LSString): New class to be used for
1014 automatic storage of the results of all alias/system calls in _o
1023 automatic storage of the results of all alias/system calls in _o
1015 and _e (stdout/err). These provide a .l/.list attribute which
1024 and _e (stdout/err). These provide a .l/.list attribute which
1016 does automatic splitting on newlines. This means that for most
1025 does automatic splitting on newlines. This means that for most
1017 uses, you'll never need to do capturing of output with %sc/%sx
1026 uses, you'll never need to do capturing of output with %sc/%sx
1018 anymore, since ipython keeps this always done for you. Note that
1027 anymore, since ipython keeps this always done for you. Note that
1019 only the LAST results are stored, the _o/e variables are
1028 only the LAST results are stored, the _o/e variables are
1020 overwritten on each call. If you need to save their contents
1029 overwritten on each call. If you need to save their contents
1021 further, simply bind them to any other name.
1030 further, simply bind them to any other name.
1022
1031
1023 2005-03-17 Fernando Perez <fperez@colorado.edu>
1032 2005-03-17 Fernando Perez <fperez@colorado.edu>
1024
1033
1025 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1034 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1026 prompt namespace handling.
1035 prompt namespace handling.
1027
1036
1028 2005-03-16 Fernando Perez <fperez@colorado.edu>
1037 2005-03-16 Fernando Perez <fperez@colorado.edu>
1029
1038
1030 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1039 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1031 classic prompts to be '>>> ' (final space was missing, and it
1040 classic prompts to be '>>> ' (final space was missing, and it
1032 trips the emacs python mode).
1041 trips the emacs python mode).
1033 (BasePrompt.__str__): Added safe support for dynamic prompt
1042 (BasePrompt.__str__): Added safe support for dynamic prompt
1034 strings. Now you can set your prompt string to be '$x', and the
1043 strings. Now you can set your prompt string to be '$x', and the
1035 value of x will be printed from your interactive namespace. The
1044 value of x will be printed from your interactive namespace. The
1036 interpolation syntax includes the full Itpl support, so
1045 interpolation syntax includes the full Itpl support, so
1037 ${foo()+x+bar()} is a valid prompt string now, and the function
1046 ${foo()+x+bar()} is a valid prompt string now, and the function
1038 calls will be made at runtime.
1047 calls will be made at runtime.
1039
1048
1040 2005-03-15 Fernando Perez <fperez@colorado.edu>
1049 2005-03-15 Fernando Perez <fperez@colorado.edu>
1041
1050
1042 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1051 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1043 avoid name clashes in pylab. %hist still works, it just forwards
1052 avoid name clashes in pylab. %hist still works, it just forwards
1044 the call to %history.
1053 the call to %history.
1045
1054
1046 2005-03-02 *** Released version 0.6.12
1055 2005-03-02 *** Released version 0.6.12
1047
1056
1048 2005-03-02 Fernando Perez <fperez@colorado.edu>
1057 2005-03-02 Fernando Perez <fperez@colorado.edu>
1049
1058
1050 * IPython/iplib.py (handle_magic): log magic calls properly as
1059 * IPython/iplib.py (handle_magic): log magic calls properly as
1051 ipmagic() function calls.
1060 ipmagic() function calls.
1052
1061
1053 * IPython/Magic.py (magic_time): Improved %time to support
1062 * IPython/Magic.py (magic_time): Improved %time to support
1054 statements and provide wall-clock as well as CPU time.
1063 statements and provide wall-clock as well as CPU time.
1055
1064
1056 2005-02-27 Fernando Perez <fperez@colorado.edu>
1065 2005-02-27 Fernando Perez <fperez@colorado.edu>
1057
1066
1058 * IPython/hooks.py: New hooks module, to expose user-modifiable
1067 * IPython/hooks.py: New hooks module, to expose user-modifiable
1059 IPython functionality in a clean manner. For now only the editor
1068 IPython functionality in a clean manner. For now only the editor
1060 hook is actually written, and other thigns which I intend to turn
1069 hook is actually written, and other thigns which I intend to turn
1061 into proper hooks aren't yet there. The display and prefilter
1070 into proper hooks aren't yet there. The display and prefilter
1062 stuff, for example, should be hooks. But at least now the
1071 stuff, for example, should be hooks. But at least now the
1063 framework is in place, and the rest can be moved here with more
1072 framework is in place, and the rest can be moved here with more
1064 time later. IPython had had a .hooks variable for a long time for
1073 time later. IPython had had a .hooks variable for a long time for
1065 this purpose, but I'd never actually used it for anything.
1074 this purpose, but I'd never actually used it for anything.
1066
1075
1067 2005-02-26 Fernando Perez <fperez@colorado.edu>
1076 2005-02-26 Fernando Perez <fperez@colorado.edu>
1068
1077
1069 * IPython/ipmaker.py (make_IPython): make the default ipython
1078 * IPython/ipmaker.py (make_IPython): make the default ipython
1070 directory be called _ipython under win32, to follow more the
1079 directory be called _ipython under win32, to follow more the
1071 naming peculiarities of that platform (where buggy software like
1080 naming peculiarities of that platform (where buggy software like
1072 Visual Sourcesafe breaks with .named directories). Reported by
1081 Visual Sourcesafe breaks with .named directories). Reported by
1073 Ville Vainio.
1082 Ville Vainio.
1074
1083
1075 2005-02-23 Fernando Perez <fperez@colorado.edu>
1084 2005-02-23 Fernando Perez <fperez@colorado.edu>
1076
1085
1077 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1086 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1078 auto_aliases for win32 which were causing problems. Users can
1087 auto_aliases for win32 which were causing problems. Users can
1079 define the ones they personally like.
1088 define the ones they personally like.
1080
1089
1081 2005-02-21 Fernando Perez <fperez@colorado.edu>
1090 2005-02-21 Fernando Perez <fperez@colorado.edu>
1082
1091
1083 * IPython/Magic.py (magic_time): new magic to time execution of
1092 * IPython/Magic.py (magic_time): new magic to time execution of
1084 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1093 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1085
1094
1086 2005-02-19 Fernando Perez <fperez@colorado.edu>
1095 2005-02-19 Fernando Perez <fperez@colorado.edu>
1087
1096
1088 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1097 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1089 into keys (for prompts, for example).
1098 into keys (for prompts, for example).
1090
1099
1091 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1100 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1092 prompts in case users want them. This introduces a small behavior
1101 prompts in case users want them. This introduces a small behavior
1093 change: ipython does not automatically add a space to all prompts
1102 change: ipython does not automatically add a space to all prompts
1094 anymore. To get the old prompts with a space, users should add it
1103 anymore. To get the old prompts with a space, users should add it
1095 manually to their ipythonrc file, so for example prompt_in1 should
1104 manually to their ipythonrc file, so for example prompt_in1 should
1096 now read 'In [\#]: ' instead of 'In [\#]:'.
1105 now read 'In [\#]: ' instead of 'In [\#]:'.
1097 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1106 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1098 file) to control left-padding of secondary prompts.
1107 file) to control left-padding of secondary prompts.
1099
1108
1100 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1109 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1101 the profiler can't be imported. Fix for Debian, which removed
1110 the profiler can't be imported. Fix for Debian, which removed
1102 profile.py because of License issues. I applied a slightly
1111 profile.py because of License issues. I applied a slightly
1103 modified version of the original Debian patch at
1112 modified version of the original Debian patch at
1104 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1113 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1105
1114
1106 2005-02-17 Fernando Perez <fperez@colorado.edu>
1115 2005-02-17 Fernando Perez <fperez@colorado.edu>
1107
1116
1108 * IPython/genutils.py (native_line_ends): Fix bug which would
1117 * IPython/genutils.py (native_line_ends): Fix bug which would
1109 cause improper line-ends under win32 b/c I was not opening files
1118 cause improper line-ends under win32 b/c I was not opening files
1110 in binary mode. Bug report and fix thanks to Ville.
1119 in binary mode. Bug report and fix thanks to Ville.
1111
1120
1112 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1121 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1113 trying to catch spurious foo[1] autocalls. My fix actually broke
1122 trying to catch spurious foo[1] autocalls. My fix actually broke
1114 ',/' autoquote/call with explicit escape (bad regexp).
1123 ',/' autoquote/call with explicit escape (bad regexp).
1115
1124
1116 2005-02-15 *** Released version 0.6.11
1125 2005-02-15 *** Released version 0.6.11
1117
1126
1118 2005-02-14 Fernando Perez <fperez@colorado.edu>
1127 2005-02-14 Fernando Perez <fperez@colorado.edu>
1119
1128
1120 * IPython/background_jobs.py: New background job management
1129 * IPython/background_jobs.py: New background job management
1121 subsystem. This is implemented via a new set of classes, and
1130 subsystem. This is implemented via a new set of classes, and
1122 IPython now provides a builtin 'jobs' object for background job
1131 IPython now provides a builtin 'jobs' object for background job
1123 execution. A convenience %bg magic serves as a lightweight
1132 execution. A convenience %bg magic serves as a lightweight
1124 frontend for starting the more common type of calls. This was
1133 frontend for starting the more common type of calls. This was
1125 inspired by discussions with B. Granger and the BackgroundCommand
1134 inspired by discussions with B. Granger and the BackgroundCommand
1126 class described in the book Python Scripting for Computational
1135 class described in the book Python Scripting for Computational
1127 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1136 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1128 (although ultimately no code from this text was used, as IPython's
1137 (although ultimately no code from this text was used, as IPython's
1129 system is a separate implementation).
1138 system is a separate implementation).
1130
1139
1131 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1140 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1132 to control the completion of single/double underscore names
1141 to control the completion of single/double underscore names
1133 separately. As documented in the example ipytonrc file, the
1142 separately. As documented in the example ipytonrc file, the
1134 readline_omit__names variable can now be set to 2, to omit even
1143 readline_omit__names variable can now be set to 2, to omit even
1135 single underscore names. Thanks to a patch by Brian Wong
1144 single underscore names. Thanks to a patch by Brian Wong
1136 <BrianWong-AT-AirgoNetworks.Com>.
1145 <BrianWong-AT-AirgoNetworks.Com>.
1137 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1146 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1138 be autocalled as foo([1]) if foo were callable. A problem for
1147 be autocalled as foo([1]) if foo were callable. A problem for
1139 things which are both callable and implement __getitem__.
1148 things which are both callable and implement __getitem__.
1140 (init_readline): Fix autoindentation for win32. Thanks to a patch
1149 (init_readline): Fix autoindentation for win32. Thanks to a patch
1141 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1150 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1142
1151
1143 2005-02-12 Fernando Perez <fperez@colorado.edu>
1152 2005-02-12 Fernando Perez <fperez@colorado.edu>
1144
1153
1145 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1154 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1146 which I had written long ago to sort out user error messages which
1155 which I had written long ago to sort out user error messages which
1147 may occur during startup. This seemed like a good idea initially,
1156 may occur during startup. This seemed like a good idea initially,
1148 but it has proven a disaster in retrospect. I don't want to
1157 but it has proven a disaster in retrospect. I don't want to
1149 change much code for now, so my fix is to set the internal 'debug'
1158 change much code for now, so my fix is to set the internal 'debug'
1150 flag to true everywhere, whose only job was precisely to control
1159 flag to true everywhere, whose only job was precisely to control
1151 this subsystem. This closes issue 28 (as well as avoiding all
1160 this subsystem. This closes issue 28 (as well as avoiding all
1152 sorts of strange hangups which occur from time to time).
1161 sorts of strange hangups which occur from time to time).
1153
1162
1154 2005-02-07 Fernando Perez <fperez@colorado.edu>
1163 2005-02-07 Fernando Perez <fperez@colorado.edu>
1155
1164
1156 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1165 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1157 previous call produced a syntax error.
1166 previous call produced a syntax error.
1158
1167
1159 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1168 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1160 classes without constructor.
1169 classes without constructor.
1161
1170
1162 2005-02-06 Fernando Perez <fperez@colorado.edu>
1171 2005-02-06 Fernando Perez <fperez@colorado.edu>
1163
1172
1164 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1173 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1165 completions with the results of each matcher, so we return results
1174 completions with the results of each matcher, so we return results
1166 to the user from all namespaces. This breaks with ipython
1175 to the user from all namespaces. This breaks with ipython
1167 tradition, but I think it's a nicer behavior. Now you get all
1176 tradition, but I think it's a nicer behavior. Now you get all
1168 possible completions listed, from all possible namespaces (python,
1177 possible completions listed, from all possible namespaces (python,
1169 filesystem, magics...) After a request by John Hunter
1178 filesystem, magics...) After a request by John Hunter
1170 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1179 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1171
1180
1172 2005-02-05 Fernando Perez <fperez@colorado.edu>
1181 2005-02-05 Fernando Perez <fperez@colorado.edu>
1173
1182
1174 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1183 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1175 the call had quote characters in it (the quotes were stripped).
1184 the call had quote characters in it (the quotes were stripped).
1176
1185
1177 2005-01-31 Fernando Perez <fperez@colorado.edu>
1186 2005-01-31 Fernando Perez <fperez@colorado.edu>
1178
1187
1179 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1188 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1180 Itpl.itpl() to make the code more robust against psyco
1189 Itpl.itpl() to make the code more robust against psyco
1181 optimizations.
1190 optimizations.
1182
1191
1183 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1192 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1184 of causing an exception. Quicker, cleaner.
1193 of causing an exception. Quicker, cleaner.
1185
1194
1186 2005-01-28 Fernando Perez <fperez@colorado.edu>
1195 2005-01-28 Fernando Perez <fperez@colorado.edu>
1187
1196
1188 * scripts/ipython_win_post_install.py (install): hardcode
1197 * scripts/ipython_win_post_install.py (install): hardcode
1189 sys.prefix+'python.exe' as the executable path. It turns out that
1198 sys.prefix+'python.exe' as the executable path. It turns out that
1190 during the post-installation run, sys.executable resolves to the
1199 during the post-installation run, sys.executable resolves to the
1191 name of the binary installer! I should report this as a distutils
1200 name of the binary installer! I should report this as a distutils
1192 bug, I think. I updated the .10 release with this tiny fix, to
1201 bug, I think. I updated the .10 release with this tiny fix, to
1193 avoid annoying the lists further.
1202 avoid annoying the lists further.
1194
1203
1195 2005-01-27 *** Released version 0.6.10
1204 2005-01-27 *** Released version 0.6.10
1196
1205
1197 2005-01-27 Fernando Perez <fperez@colorado.edu>
1206 2005-01-27 Fernando Perez <fperez@colorado.edu>
1198
1207
1199 * IPython/numutils.py (norm): Added 'inf' as optional name for
1208 * IPython/numutils.py (norm): Added 'inf' as optional name for
1200 L-infinity norm, included references to mathworld.com for vector
1209 L-infinity norm, included references to mathworld.com for vector
1201 norm definitions.
1210 norm definitions.
1202 (amin/amax): added amin/amax for array min/max. Similar to what
1211 (amin/amax): added amin/amax for array min/max. Similar to what
1203 pylab ships with after the recent reorganization of names.
1212 pylab ships with after the recent reorganization of names.
1204 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1213 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1205
1214
1206 * ipython.el: committed Alex's recent fixes and improvements.
1215 * ipython.el: committed Alex's recent fixes and improvements.
1207 Tested with python-mode from CVS, and it looks excellent. Since
1216 Tested with python-mode from CVS, and it looks excellent. Since
1208 python-mode hasn't released anything in a while, I'm temporarily
1217 python-mode hasn't released anything in a while, I'm temporarily
1209 putting a copy of today's CVS (v 4.70) of python-mode in:
1218 putting a copy of today's CVS (v 4.70) of python-mode in:
1210 http://ipython.scipy.org/tmp/python-mode.el
1219 http://ipython.scipy.org/tmp/python-mode.el
1211
1220
1212 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1221 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1213 sys.executable for the executable name, instead of assuming it's
1222 sys.executable for the executable name, instead of assuming it's
1214 called 'python.exe' (the post-installer would have produced broken
1223 called 'python.exe' (the post-installer would have produced broken
1215 setups on systems with a differently named python binary).
1224 setups on systems with a differently named python binary).
1216
1225
1217 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1226 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1218 references to os.linesep, to make the code more
1227 references to os.linesep, to make the code more
1219 platform-independent. This is also part of the win32 coloring
1228 platform-independent. This is also part of the win32 coloring
1220 fixes.
1229 fixes.
1221
1230
1222 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1231 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1223 lines, which actually cause coloring bugs because the length of
1232 lines, which actually cause coloring bugs because the length of
1224 the line is very difficult to correctly compute with embedded
1233 the line is very difficult to correctly compute with embedded
1225 escapes. This was the source of all the coloring problems under
1234 escapes. This was the source of all the coloring problems under
1226 Win32. I think that _finally_, Win32 users have a properly
1235 Win32. I think that _finally_, Win32 users have a properly
1227 working ipython in all respects. This would never have happened
1236 working ipython in all respects. This would never have happened
1228 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1237 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1229
1238
1230 2005-01-26 *** Released version 0.6.9
1239 2005-01-26 *** Released version 0.6.9
1231
1240
1232 2005-01-25 Fernando Perez <fperez@colorado.edu>
1241 2005-01-25 Fernando Perez <fperez@colorado.edu>
1233
1242
1234 * setup.py: finally, we have a true Windows installer, thanks to
1243 * setup.py: finally, we have a true Windows installer, thanks to
1235 the excellent work of Viktor Ransmayr
1244 the excellent work of Viktor Ransmayr
1236 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1245 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1237 Windows users. The setup routine is quite a bit cleaner thanks to
1246 Windows users. The setup routine is quite a bit cleaner thanks to
1238 this, and the post-install script uses the proper functions to
1247 this, and the post-install script uses the proper functions to
1239 allow a clean de-installation using the standard Windows Control
1248 allow a clean de-installation using the standard Windows Control
1240 Panel.
1249 Panel.
1241
1250
1242 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1251 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1243 environment variable under all OSes (including win32) if
1252 environment variable under all OSes (including win32) if
1244 available. This will give consistency to win32 users who have set
1253 available. This will give consistency to win32 users who have set
1245 this variable for any reason. If os.environ['HOME'] fails, the
1254 this variable for any reason. If os.environ['HOME'] fails, the
1246 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1255 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1247
1256
1248 2005-01-24 Fernando Perez <fperez@colorado.edu>
1257 2005-01-24 Fernando Perez <fperez@colorado.edu>
1249
1258
1250 * IPython/numutils.py (empty_like): add empty_like(), similar to
1259 * IPython/numutils.py (empty_like): add empty_like(), similar to
1251 zeros_like() but taking advantage of the new empty() Numeric routine.
1260 zeros_like() but taking advantage of the new empty() Numeric routine.
1252
1261
1253 2005-01-23 *** Released version 0.6.8
1262 2005-01-23 *** Released version 0.6.8
1254
1263
1255 2005-01-22 Fernando Perez <fperez@colorado.edu>
1264 2005-01-22 Fernando Perez <fperez@colorado.edu>
1256
1265
1257 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1266 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1258 automatic show() calls. After discussing things with JDH, it
1267 automatic show() calls. After discussing things with JDH, it
1259 turns out there are too many corner cases where this can go wrong.
1268 turns out there are too many corner cases where this can go wrong.
1260 It's best not to try to be 'too smart', and simply have ipython
1269 It's best not to try to be 'too smart', and simply have ipython
1261 reproduce as much as possible the default behavior of a normal
1270 reproduce as much as possible the default behavior of a normal
1262 python shell.
1271 python shell.
1263
1272
1264 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1273 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1265 line-splitting regexp and _prefilter() to avoid calling getattr()
1274 line-splitting regexp and _prefilter() to avoid calling getattr()
1266 on assignments. This closes
1275 on assignments. This closes
1267 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1276 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1268 readline uses getattr(), so a simple <TAB> keypress is still
1277 readline uses getattr(), so a simple <TAB> keypress is still
1269 enough to trigger getattr() calls on an object.
1278 enough to trigger getattr() calls on an object.
1270
1279
1271 2005-01-21 Fernando Perez <fperez@colorado.edu>
1280 2005-01-21 Fernando Perez <fperez@colorado.edu>
1272
1281
1273 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1282 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1274 docstring under pylab so it doesn't mask the original.
1283 docstring under pylab so it doesn't mask the original.
1275
1284
1276 2005-01-21 *** Released version 0.6.7
1285 2005-01-21 *** Released version 0.6.7
1277
1286
1278 2005-01-21 Fernando Perez <fperez@colorado.edu>
1287 2005-01-21 Fernando Perez <fperez@colorado.edu>
1279
1288
1280 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1289 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1281 signal handling for win32 users in multithreaded mode.
1290 signal handling for win32 users in multithreaded mode.
1282
1291
1283 2005-01-17 Fernando Perez <fperez@colorado.edu>
1292 2005-01-17 Fernando Perez <fperez@colorado.edu>
1284
1293
1285 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1294 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1286 instances with no __init__. After a crash report by Norbert Nemec
1295 instances with no __init__. After a crash report by Norbert Nemec
1287 <Norbert-AT-nemec-online.de>.
1296 <Norbert-AT-nemec-online.de>.
1288
1297
1289 2005-01-14 Fernando Perez <fperez@colorado.edu>
1298 2005-01-14 Fernando Perez <fperez@colorado.edu>
1290
1299
1291 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1300 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1292 names for verbose exceptions, when multiple dotted names and the
1301 names for verbose exceptions, when multiple dotted names and the
1293 'parent' object were present on the same line.
1302 'parent' object were present on the same line.
1294
1303
1295 2005-01-11 Fernando Perez <fperez@colorado.edu>
1304 2005-01-11 Fernando Perez <fperez@colorado.edu>
1296
1305
1297 * IPython/genutils.py (flag_calls): new utility to trap and flag
1306 * IPython/genutils.py (flag_calls): new utility to trap and flag
1298 calls in functions. I need it to clean up matplotlib support.
1307 calls in functions. I need it to clean up matplotlib support.
1299 Also removed some deprecated code in genutils.
1308 Also removed some deprecated code in genutils.
1300
1309
1301 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1310 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1302 that matplotlib scripts called with %run, which don't call show()
1311 that matplotlib scripts called with %run, which don't call show()
1303 themselves, still have their plotting windows open.
1312 themselves, still have their plotting windows open.
1304
1313
1305 2005-01-05 Fernando Perez <fperez@colorado.edu>
1314 2005-01-05 Fernando Perez <fperez@colorado.edu>
1306
1315
1307 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1316 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1308 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1317 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1309
1318
1310 2004-12-19 Fernando Perez <fperez@colorado.edu>
1319 2004-12-19 Fernando Perez <fperez@colorado.edu>
1311
1320
1312 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1321 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1313 parent_runcode, which was an eyesore. The same result can be
1322 parent_runcode, which was an eyesore. The same result can be
1314 obtained with Python's regular superclass mechanisms.
1323 obtained with Python's regular superclass mechanisms.
1315
1324
1316 2004-12-17 Fernando Perez <fperez@colorado.edu>
1325 2004-12-17 Fernando Perez <fperez@colorado.edu>
1317
1326
1318 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1327 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1319 reported by Prabhu.
1328 reported by Prabhu.
1320 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1329 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1321 sys.stderr) instead of explicitly calling sys.stderr. This helps
1330 sys.stderr) instead of explicitly calling sys.stderr. This helps
1322 maintain our I/O abstractions clean, for future GUI embeddings.
1331 maintain our I/O abstractions clean, for future GUI embeddings.
1323
1332
1324 * IPython/genutils.py (info): added new utility for sys.stderr
1333 * IPython/genutils.py (info): added new utility for sys.stderr
1325 unified info message handling (thin wrapper around warn()).
1334 unified info message handling (thin wrapper around warn()).
1326
1335
1327 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1336 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1328 composite (dotted) names on verbose exceptions.
1337 composite (dotted) names on verbose exceptions.
1329 (VerboseTB.nullrepr): harden against another kind of errors which
1338 (VerboseTB.nullrepr): harden against another kind of errors which
1330 Python's inspect module can trigger, and which were crashing
1339 Python's inspect module can trigger, and which were crashing
1331 IPython. Thanks to a report by Marco Lombardi
1340 IPython. Thanks to a report by Marco Lombardi
1332 <mlombard-AT-ma010192.hq.eso.org>.
1341 <mlombard-AT-ma010192.hq.eso.org>.
1333
1342
1334 2004-12-13 *** Released version 0.6.6
1343 2004-12-13 *** Released version 0.6.6
1335
1344
1336 2004-12-12 Fernando Perez <fperez@colorado.edu>
1345 2004-12-12 Fernando Perez <fperez@colorado.edu>
1337
1346
1338 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1347 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1339 generated by pygtk upon initialization if it was built without
1348 generated by pygtk upon initialization if it was built without
1340 threads (for matplotlib users). After a crash reported by
1349 threads (for matplotlib users). After a crash reported by
1341 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1350 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1342
1351
1343 * IPython/ipmaker.py (make_IPython): fix small bug in the
1352 * IPython/ipmaker.py (make_IPython): fix small bug in the
1344 import_some parameter for multiple imports.
1353 import_some parameter for multiple imports.
1345
1354
1346 * IPython/iplib.py (ipmagic): simplified the interface of
1355 * IPython/iplib.py (ipmagic): simplified the interface of
1347 ipmagic() to take a single string argument, just as it would be
1356 ipmagic() to take a single string argument, just as it would be
1348 typed at the IPython cmd line.
1357 typed at the IPython cmd line.
1349 (ipalias): Added new ipalias() with an interface identical to
1358 (ipalias): Added new ipalias() with an interface identical to
1350 ipmagic(). This completes exposing a pure python interface to the
1359 ipmagic(). This completes exposing a pure python interface to the
1351 alias and magic system, which can be used in loops or more complex
1360 alias and magic system, which can be used in loops or more complex
1352 code where IPython's automatic line mangling is not active.
1361 code where IPython's automatic line mangling is not active.
1353
1362
1354 * IPython/genutils.py (timing): changed interface of timing to
1363 * IPython/genutils.py (timing): changed interface of timing to
1355 simply run code once, which is the most common case. timings()
1364 simply run code once, which is the most common case. timings()
1356 remains unchanged, for the cases where you want multiple runs.
1365 remains unchanged, for the cases where you want multiple runs.
1357
1366
1358 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1367 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1359 bug where Python2.2 crashes with exec'ing code which does not end
1368 bug where Python2.2 crashes with exec'ing code which does not end
1360 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1369 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1361 before.
1370 before.
1362
1371
1363 2004-12-10 Fernando Perez <fperez@colorado.edu>
1372 2004-12-10 Fernando Perez <fperez@colorado.edu>
1364
1373
1365 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1374 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1366 -t to -T, to accomodate the new -t flag in %run (the %run and
1375 -t to -T, to accomodate the new -t flag in %run (the %run and
1367 %prun options are kind of intermixed, and it's not easy to change
1376 %prun options are kind of intermixed, and it's not easy to change
1368 this with the limitations of python's getopt).
1377 this with the limitations of python's getopt).
1369
1378
1370 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1379 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1371 the execution of scripts. It's not as fine-tuned as timeit.py,
1380 the execution of scripts. It's not as fine-tuned as timeit.py,
1372 but it works from inside ipython (and under 2.2, which lacks
1381 but it works from inside ipython (and under 2.2, which lacks
1373 timeit.py). Optionally a number of runs > 1 can be given for
1382 timeit.py). Optionally a number of runs > 1 can be given for
1374 timing very short-running code.
1383 timing very short-running code.
1375
1384
1376 * IPython/genutils.py (uniq_stable): new routine which returns a
1385 * IPython/genutils.py (uniq_stable): new routine which returns a
1377 list of unique elements in any iterable, but in stable order of
1386 list of unique elements in any iterable, but in stable order of
1378 appearance. I needed this for the ultraTB fixes, and it's a handy
1387 appearance. I needed this for the ultraTB fixes, and it's a handy
1379 utility.
1388 utility.
1380
1389
1381 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1390 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1382 dotted names in Verbose exceptions. This had been broken since
1391 dotted names in Verbose exceptions. This had been broken since
1383 the very start, now x.y will properly be printed in a Verbose
1392 the very start, now x.y will properly be printed in a Verbose
1384 traceback, instead of x being shown and y appearing always as an
1393 traceback, instead of x being shown and y appearing always as an
1385 'undefined global'. Getting this to work was a bit tricky,
1394 'undefined global'. Getting this to work was a bit tricky,
1386 because by default python tokenizers are stateless. Saved by
1395 because by default python tokenizers are stateless. Saved by
1387 python's ability to easily add a bit of state to an arbitrary
1396 python's ability to easily add a bit of state to an arbitrary
1388 function (without needing to build a full-blown callable object).
1397 function (without needing to build a full-blown callable object).
1389
1398
1390 Also big cleanup of this code, which had horrendous runtime
1399 Also big cleanup of this code, which had horrendous runtime
1391 lookups of zillions of attributes for colorization. Moved all
1400 lookups of zillions of attributes for colorization. Moved all
1392 this code into a few templates, which make it cleaner and quicker.
1401 this code into a few templates, which make it cleaner and quicker.
1393
1402
1394 Printout quality was also improved for Verbose exceptions: one
1403 Printout quality was also improved for Verbose exceptions: one
1395 variable per line, and memory addresses are printed (this can be
1404 variable per line, and memory addresses are printed (this can be
1396 quite handy in nasty debugging situations, which is what Verbose
1405 quite handy in nasty debugging situations, which is what Verbose
1397 is for).
1406 is for).
1398
1407
1399 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1408 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1400 the command line as scripts to be loaded by embedded instances.
1409 the command line as scripts to be loaded by embedded instances.
1401 Doing so has the potential for an infinite recursion if there are
1410 Doing so has the potential for an infinite recursion if there are
1402 exceptions thrown in the process. This fixes a strange crash
1411 exceptions thrown in the process. This fixes a strange crash
1403 reported by Philippe MULLER <muller-AT-irit.fr>.
1412 reported by Philippe MULLER <muller-AT-irit.fr>.
1404
1413
1405 2004-12-09 Fernando Perez <fperez@colorado.edu>
1414 2004-12-09 Fernando Perez <fperez@colorado.edu>
1406
1415
1407 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1416 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1408 to reflect new names in matplotlib, which now expose the
1417 to reflect new names in matplotlib, which now expose the
1409 matlab-compatible interface via a pylab module instead of the
1418 matlab-compatible interface via a pylab module instead of the
1410 'matlab' name. The new code is backwards compatible, so users of
1419 'matlab' name. The new code is backwards compatible, so users of
1411 all matplotlib versions are OK. Patch by J. Hunter.
1420 all matplotlib versions are OK. Patch by J. Hunter.
1412
1421
1413 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1422 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1414 of __init__ docstrings for instances (class docstrings are already
1423 of __init__ docstrings for instances (class docstrings are already
1415 automatically printed). Instances with customized docstrings
1424 automatically printed). Instances with customized docstrings
1416 (indep. of the class) are also recognized and all 3 separate
1425 (indep. of the class) are also recognized and all 3 separate
1417 docstrings are printed (instance, class, constructor). After some
1426 docstrings are printed (instance, class, constructor). After some
1418 comments/suggestions by J. Hunter.
1427 comments/suggestions by J. Hunter.
1419
1428
1420 2004-12-05 Fernando Perez <fperez@colorado.edu>
1429 2004-12-05 Fernando Perez <fperez@colorado.edu>
1421
1430
1422 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1431 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1423 warnings when tab-completion fails and triggers an exception.
1432 warnings when tab-completion fails and triggers an exception.
1424
1433
1425 2004-12-03 Fernando Perez <fperez@colorado.edu>
1434 2004-12-03 Fernando Perez <fperez@colorado.edu>
1426
1435
1427 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1436 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1428 be triggered when using 'run -p'. An incorrect option flag was
1437 be triggered when using 'run -p'. An incorrect option flag was
1429 being set ('d' instead of 'D').
1438 being set ('d' instead of 'D').
1430 (manpage): fix missing escaped \- sign.
1439 (manpage): fix missing escaped \- sign.
1431
1440
1432 2004-11-30 *** Released version 0.6.5
1441 2004-11-30 *** Released version 0.6.5
1433
1442
1434 2004-11-30 Fernando Perez <fperez@colorado.edu>
1443 2004-11-30 Fernando Perez <fperez@colorado.edu>
1435
1444
1436 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1445 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1437 setting with -d option.
1446 setting with -d option.
1438
1447
1439 * setup.py (docfiles): Fix problem where the doc glob I was using
1448 * setup.py (docfiles): Fix problem where the doc glob I was using
1440 was COMPLETELY BROKEN. It was giving the right files by pure
1449 was COMPLETELY BROKEN. It was giving the right files by pure
1441 accident, but failed once I tried to include ipython.el. Note:
1450 accident, but failed once I tried to include ipython.el. Note:
1442 glob() does NOT allow you to do exclusion on multiple endings!
1451 glob() does NOT allow you to do exclusion on multiple endings!
1443
1452
1444 2004-11-29 Fernando Perez <fperez@colorado.edu>
1453 2004-11-29 Fernando Perez <fperez@colorado.edu>
1445
1454
1446 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1455 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1447 the manpage as the source. Better formatting & consistency.
1456 the manpage as the source. Better formatting & consistency.
1448
1457
1449 * IPython/Magic.py (magic_run): Added new -d option, to run
1458 * IPython/Magic.py (magic_run): Added new -d option, to run
1450 scripts under the control of the python pdb debugger. Note that
1459 scripts under the control of the python pdb debugger. Note that
1451 this required changing the %prun option -d to -D, to avoid a clash
1460 this required changing the %prun option -d to -D, to avoid a clash
1452 (since %run must pass options to %prun, and getopt is too dumb to
1461 (since %run must pass options to %prun, and getopt is too dumb to
1453 handle options with string values with embedded spaces). Thanks
1462 handle options with string values with embedded spaces). Thanks
1454 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1463 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1455 (magic_who_ls): added type matching to %who and %whos, so that one
1464 (magic_who_ls): added type matching to %who and %whos, so that one
1456 can filter their output to only include variables of certain
1465 can filter their output to only include variables of certain
1457 types. Another suggestion by Matthew.
1466 types. Another suggestion by Matthew.
1458 (magic_whos): Added memory summaries in kb and Mb for arrays.
1467 (magic_whos): Added memory summaries in kb and Mb for arrays.
1459 (magic_who): Improve formatting (break lines every 9 vars).
1468 (magic_who): Improve formatting (break lines every 9 vars).
1460
1469
1461 2004-11-28 Fernando Perez <fperez@colorado.edu>
1470 2004-11-28 Fernando Perez <fperez@colorado.edu>
1462
1471
1463 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1472 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1464 cache when empty lines were present.
1473 cache when empty lines were present.
1465
1474
1466 2004-11-24 Fernando Perez <fperez@colorado.edu>
1475 2004-11-24 Fernando Perez <fperez@colorado.edu>
1467
1476
1468 * IPython/usage.py (__doc__): document the re-activated threading
1477 * IPython/usage.py (__doc__): document the re-activated threading
1469 options for WX and GTK.
1478 options for WX and GTK.
1470
1479
1471 2004-11-23 Fernando Perez <fperez@colorado.edu>
1480 2004-11-23 Fernando Perez <fperez@colorado.edu>
1472
1481
1473 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1482 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1474 the -wthread and -gthread options, along with a new -tk one to try
1483 the -wthread and -gthread options, along with a new -tk one to try
1475 and coordinate Tk threading with wx/gtk. The tk support is very
1484 and coordinate Tk threading with wx/gtk. The tk support is very
1476 platform dependent, since it seems to require Tcl and Tk to be
1485 platform dependent, since it seems to require Tcl and Tk to be
1477 built with threads (Fedora1/2 appears NOT to have it, but in
1486 built with threads (Fedora1/2 appears NOT to have it, but in
1478 Prabhu's Debian boxes it works OK). But even with some Tk
1487 Prabhu's Debian boxes it works OK). But even with some Tk
1479 limitations, this is a great improvement.
1488 limitations, this is a great improvement.
1480
1489
1481 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1490 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1482 info in user prompts. Patch by Prabhu.
1491 info in user prompts. Patch by Prabhu.
1483
1492
1484 2004-11-18 Fernando Perez <fperez@colorado.edu>
1493 2004-11-18 Fernando Perez <fperez@colorado.edu>
1485
1494
1486 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1495 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1487 EOFErrors and bail, to avoid infinite loops if a non-terminating
1496 EOFErrors and bail, to avoid infinite loops if a non-terminating
1488 file is fed into ipython. Patch submitted in issue 19 by user,
1497 file is fed into ipython. Patch submitted in issue 19 by user,
1489 many thanks.
1498 many thanks.
1490
1499
1491 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1500 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1492 autoquote/parens in continuation prompts, which can cause lots of
1501 autoquote/parens in continuation prompts, which can cause lots of
1493 problems. Closes roundup issue 20.
1502 problems. Closes roundup issue 20.
1494
1503
1495 2004-11-17 Fernando Perez <fperez@colorado.edu>
1504 2004-11-17 Fernando Perez <fperez@colorado.edu>
1496
1505
1497 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1506 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1498 reported as debian bug #280505. I'm not sure my local changelog
1507 reported as debian bug #280505. I'm not sure my local changelog
1499 entry has the proper debian format (Jack?).
1508 entry has the proper debian format (Jack?).
1500
1509
1501 2004-11-08 *** Released version 0.6.4
1510 2004-11-08 *** Released version 0.6.4
1502
1511
1503 2004-11-08 Fernando Perez <fperez@colorado.edu>
1512 2004-11-08 Fernando Perez <fperez@colorado.edu>
1504
1513
1505 * IPython/iplib.py (init_readline): Fix exit message for Windows
1514 * IPython/iplib.py (init_readline): Fix exit message for Windows
1506 when readline is active. Thanks to a report by Eric Jones
1515 when readline is active. Thanks to a report by Eric Jones
1507 <eric-AT-enthought.com>.
1516 <eric-AT-enthought.com>.
1508
1517
1509 2004-11-07 Fernando Perez <fperez@colorado.edu>
1518 2004-11-07 Fernando Perez <fperez@colorado.edu>
1510
1519
1511 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1520 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1512 sometimes seen by win2k/cygwin users.
1521 sometimes seen by win2k/cygwin users.
1513
1522
1514 2004-11-06 Fernando Perez <fperez@colorado.edu>
1523 2004-11-06 Fernando Perez <fperez@colorado.edu>
1515
1524
1516 * IPython/iplib.py (interact): Change the handling of %Exit from
1525 * IPython/iplib.py (interact): Change the handling of %Exit from
1517 trying to propagate a SystemExit to an internal ipython flag.
1526 trying to propagate a SystemExit to an internal ipython flag.
1518 This is less elegant than using Python's exception mechanism, but
1527 This is less elegant than using Python's exception mechanism, but
1519 I can't get that to work reliably with threads, so under -pylab
1528 I can't get that to work reliably with threads, so under -pylab
1520 %Exit was hanging IPython. Cross-thread exception handling is
1529 %Exit was hanging IPython. Cross-thread exception handling is
1521 really a bitch. Thaks to a bug report by Stephen Walton
1530 really a bitch. Thaks to a bug report by Stephen Walton
1522 <stephen.walton-AT-csun.edu>.
1531 <stephen.walton-AT-csun.edu>.
1523
1532
1524 2004-11-04 Fernando Perez <fperez@colorado.edu>
1533 2004-11-04 Fernando Perez <fperez@colorado.edu>
1525
1534
1526 * IPython/iplib.py (raw_input_original): store a pointer to the
1535 * IPython/iplib.py (raw_input_original): store a pointer to the
1527 true raw_input to harden against code which can modify it
1536 true raw_input to harden against code which can modify it
1528 (wx.py.PyShell does this and would otherwise crash ipython).
1537 (wx.py.PyShell does this and would otherwise crash ipython).
1529 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1538 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1530
1539
1531 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1540 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1532 Ctrl-C problem, which does not mess up the input line.
1541 Ctrl-C problem, which does not mess up the input line.
1533
1542
1534 2004-11-03 Fernando Perez <fperez@colorado.edu>
1543 2004-11-03 Fernando Perez <fperez@colorado.edu>
1535
1544
1536 * IPython/Release.py: Changed licensing to BSD, in all files.
1545 * IPython/Release.py: Changed licensing to BSD, in all files.
1537 (name): lowercase name for tarball/RPM release.
1546 (name): lowercase name for tarball/RPM release.
1538
1547
1539 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1548 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1540 use throughout ipython.
1549 use throughout ipython.
1541
1550
1542 * IPython/Magic.py (Magic._ofind): Switch to using the new
1551 * IPython/Magic.py (Magic._ofind): Switch to using the new
1543 OInspect.getdoc() function.
1552 OInspect.getdoc() function.
1544
1553
1545 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1554 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1546 of the line currently being canceled via Ctrl-C. It's extremely
1555 of the line currently being canceled via Ctrl-C. It's extremely
1547 ugly, but I don't know how to do it better (the problem is one of
1556 ugly, but I don't know how to do it better (the problem is one of
1548 handling cross-thread exceptions).
1557 handling cross-thread exceptions).
1549
1558
1550 2004-10-28 Fernando Perez <fperez@colorado.edu>
1559 2004-10-28 Fernando Perez <fperez@colorado.edu>
1551
1560
1552 * IPython/Shell.py (signal_handler): add signal handlers to trap
1561 * IPython/Shell.py (signal_handler): add signal handlers to trap
1553 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1562 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1554 report by Francesc Alted.
1563 report by Francesc Alted.
1555
1564
1556 2004-10-21 Fernando Perez <fperez@colorado.edu>
1565 2004-10-21 Fernando Perez <fperez@colorado.edu>
1557
1566
1558 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1567 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1559 to % for pysh syntax extensions.
1568 to % for pysh syntax extensions.
1560
1569
1561 2004-10-09 Fernando Perez <fperez@colorado.edu>
1570 2004-10-09 Fernando Perez <fperez@colorado.edu>
1562
1571
1563 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1572 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1564 arrays to print a more useful summary, without calling str(arr).
1573 arrays to print a more useful summary, without calling str(arr).
1565 This avoids the problem of extremely lengthy computations which
1574 This avoids the problem of extremely lengthy computations which
1566 occur if arr is large, and appear to the user as a system lockup
1575 occur if arr is large, and appear to the user as a system lockup
1567 with 100% cpu activity. After a suggestion by Kristian Sandberg
1576 with 100% cpu activity. After a suggestion by Kristian Sandberg
1568 <Kristian.Sandberg@colorado.edu>.
1577 <Kristian.Sandberg@colorado.edu>.
1569 (Magic.__init__): fix bug in global magic escapes not being
1578 (Magic.__init__): fix bug in global magic escapes not being
1570 correctly set.
1579 correctly set.
1571
1580
1572 2004-10-08 Fernando Perez <fperez@colorado.edu>
1581 2004-10-08 Fernando Perez <fperez@colorado.edu>
1573
1582
1574 * IPython/Magic.py (__license__): change to absolute imports of
1583 * IPython/Magic.py (__license__): change to absolute imports of
1575 ipython's own internal packages, to start adapting to the absolute
1584 ipython's own internal packages, to start adapting to the absolute
1576 import requirement of PEP-328.
1585 import requirement of PEP-328.
1577
1586
1578 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1587 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1579 files, and standardize author/license marks through the Release
1588 files, and standardize author/license marks through the Release
1580 module instead of having per/file stuff (except for files with
1589 module instead of having per/file stuff (except for files with
1581 particular licenses, like the MIT/PSF-licensed codes).
1590 particular licenses, like the MIT/PSF-licensed codes).
1582
1591
1583 * IPython/Debugger.py: remove dead code for python 2.1
1592 * IPython/Debugger.py: remove dead code for python 2.1
1584
1593
1585 2004-10-04 Fernando Perez <fperez@colorado.edu>
1594 2004-10-04 Fernando Perez <fperez@colorado.edu>
1586
1595
1587 * IPython/iplib.py (ipmagic): New function for accessing magics
1596 * IPython/iplib.py (ipmagic): New function for accessing magics
1588 via a normal python function call.
1597 via a normal python function call.
1589
1598
1590 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1599 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1591 from '@' to '%', to accomodate the new @decorator syntax of python
1600 from '@' to '%', to accomodate the new @decorator syntax of python
1592 2.4.
1601 2.4.
1593
1602
1594 2004-09-29 Fernando Perez <fperez@colorado.edu>
1603 2004-09-29 Fernando Perez <fperez@colorado.edu>
1595
1604
1596 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1605 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1597 matplotlib.use to prevent running scripts which try to switch
1606 matplotlib.use to prevent running scripts which try to switch
1598 interactive backends from within ipython. This will just crash
1607 interactive backends from within ipython. This will just crash
1599 the python interpreter, so we can't allow it (but a detailed error
1608 the python interpreter, so we can't allow it (but a detailed error
1600 is given to the user).
1609 is given to the user).
1601
1610
1602 2004-09-28 Fernando Perez <fperez@colorado.edu>
1611 2004-09-28 Fernando Perez <fperez@colorado.edu>
1603
1612
1604 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1613 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1605 matplotlib-related fixes so that using @run with non-matplotlib
1614 matplotlib-related fixes so that using @run with non-matplotlib
1606 scripts doesn't pop up spurious plot windows. This requires
1615 scripts doesn't pop up spurious plot windows. This requires
1607 matplotlib >= 0.63, where I had to make some changes as well.
1616 matplotlib >= 0.63, where I had to make some changes as well.
1608
1617
1609 * IPython/ipmaker.py (make_IPython): update version requirement to
1618 * IPython/ipmaker.py (make_IPython): update version requirement to
1610 python 2.2.
1619 python 2.2.
1611
1620
1612 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1621 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1613 banner arg for embedded customization.
1622 banner arg for embedded customization.
1614
1623
1615 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1624 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1616 explicit uses of __IP as the IPython's instance name. Now things
1625 explicit uses of __IP as the IPython's instance name. Now things
1617 are properly handled via the shell.name value. The actual code
1626 are properly handled via the shell.name value. The actual code
1618 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1627 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1619 is much better than before. I'll clean things completely when the
1628 is much better than before. I'll clean things completely when the
1620 magic stuff gets a real overhaul.
1629 magic stuff gets a real overhaul.
1621
1630
1622 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1631 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1623 minor changes to debian dir.
1632 minor changes to debian dir.
1624
1633
1625 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1634 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1626 pointer to the shell itself in the interactive namespace even when
1635 pointer to the shell itself in the interactive namespace even when
1627 a user-supplied dict is provided. This is needed for embedding
1636 a user-supplied dict is provided. This is needed for embedding
1628 purposes (found by tests with Michel Sanner).
1637 purposes (found by tests with Michel Sanner).
1629
1638
1630 2004-09-27 Fernando Perez <fperez@colorado.edu>
1639 2004-09-27 Fernando Perez <fperez@colorado.edu>
1631
1640
1632 * IPython/UserConfig/ipythonrc: remove []{} from
1641 * IPython/UserConfig/ipythonrc: remove []{} from
1633 readline_remove_delims, so that things like [modname.<TAB> do
1642 readline_remove_delims, so that things like [modname.<TAB> do
1634 proper completion. This disables [].TAB, but that's a less common
1643 proper completion. This disables [].TAB, but that's a less common
1635 case than module names in list comprehensions, for example.
1644 case than module names in list comprehensions, for example.
1636 Thanks to a report by Andrea Riciputi.
1645 Thanks to a report by Andrea Riciputi.
1637
1646
1638 2004-09-09 Fernando Perez <fperez@colorado.edu>
1647 2004-09-09 Fernando Perez <fperez@colorado.edu>
1639
1648
1640 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1649 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1641 blocking problems in win32 and osx. Fix by John.
1650 blocking problems in win32 and osx. Fix by John.
1642
1651
1643 2004-09-08 Fernando Perez <fperez@colorado.edu>
1652 2004-09-08 Fernando Perez <fperez@colorado.edu>
1644
1653
1645 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1654 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1646 for Win32 and OSX. Fix by John Hunter.
1655 for Win32 and OSX. Fix by John Hunter.
1647
1656
1648 2004-08-30 *** Released version 0.6.3
1657 2004-08-30 *** Released version 0.6.3
1649
1658
1650 2004-08-30 Fernando Perez <fperez@colorado.edu>
1659 2004-08-30 Fernando Perez <fperez@colorado.edu>
1651
1660
1652 * setup.py (isfile): Add manpages to list of dependent files to be
1661 * setup.py (isfile): Add manpages to list of dependent files to be
1653 updated.
1662 updated.
1654
1663
1655 2004-08-27 Fernando Perez <fperez@colorado.edu>
1664 2004-08-27 Fernando Perez <fperez@colorado.edu>
1656
1665
1657 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1666 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1658 for now. They don't really work with standalone WX/GTK code
1667 for now. They don't really work with standalone WX/GTK code
1659 (though matplotlib IS working fine with both of those backends).
1668 (though matplotlib IS working fine with both of those backends).
1660 This will neeed much more testing. I disabled most things with
1669 This will neeed much more testing. I disabled most things with
1661 comments, so turning it back on later should be pretty easy.
1670 comments, so turning it back on later should be pretty easy.
1662
1671
1663 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1672 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1664 autocalling of expressions like r'foo', by modifying the line
1673 autocalling of expressions like r'foo', by modifying the line
1665 split regexp. Closes
1674 split regexp. Closes
1666 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1675 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1667 Riley <ipythonbugs-AT-sabi.net>.
1676 Riley <ipythonbugs-AT-sabi.net>.
1668 (InteractiveShell.mainloop): honor --nobanner with banner
1677 (InteractiveShell.mainloop): honor --nobanner with banner
1669 extensions.
1678 extensions.
1670
1679
1671 * IPython/Shell.py: Significant refactoring of all classes, so
1680 * IPython/Shell.py: Significant refactoring of all classes, so
1672 that we can really support ALL matplotlib backends and threading
1681 that we can really support ALL matplotlib backends and threading
1673 models (John spotted a bug with Tk which required this). Now we
1682 models (John spotted a bug with Tk which required this). Now we
1674 should support single-threaded, WX-threads and GTK-threads, both
1683 should support single-threaded, WX-threads and GTK-threads, both
1675 for generic code and for matplotlib.
1684 for generic code and for matplotlib.
1676
1685
1677 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1686 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1678 -pylab, to simplify things for users. Will also remove the pylab
1687 -pylab, to simplify things for users. Will also remove the pylab
1679 profile, since now all of matplotlib configuration is directly
1688 profile, since now all of matplotlib configuration is directly
1680 handled here. This also reduces startup time.
1689 handled here. This also reduces startup time.
1681
1690
1682 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1691 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1683 shell wasn't being correctly called. Also in IPShellWX.
1692 shell wasn't being correctly called. Also in IPShellWX.
1684
1693
1685 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1694 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1686 fine-tune banner.
1695 fine-tune banner.
1687
1696
1688 * IPython/numutils.py (spike): Deprecate these spike functions,
1697 * IPython/numutils.py (spike): Deprecate these spike functions,
1689 delete (long deprecated) gnuplot_exec handler.
1698 delete (long deprecated) gnuplot_exec handler.
1690
1699
1691 2004-08-26 Fernando Perez <fperez@colorado.edu>
1700 2004-08-26 Fernando Perez <fperez@colorado.edu>
1692
1701
1693 * ipython.1: Update for threading options, plus some others which
1702 * ipython.1: Update for threading options, plus some others which
1694 were missing.
1703 were missing.
1695
1704
1696 * IPython/ipmaker.py (__call__): Added -wthread option for
1705 * IPython/ipmaker.py (__call__): Added -wthread option for
1697 wxpython thread handling. Make sure threading options are only
1706 wxpython thread handling. Make sure threading options are only
1698 valid at the command line.
1707 valid at the command line.
1699
1708
1700 * scripts/ipython: moved shell selection into a factory function
1709 * scripts/ipython: moved shell selection into a factory function
1701 in Shell.py, to keep the starter script to a minimum.
1710 in Shell.py, to keep the starter script to a minimum.
1702
1711
1703 2004-08-25 Fernando Perez <fperez@colorado.edu>
1712 2004-08-25 Fernando Perez <fperez@colorado.edu>
1704
1713
1705 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1714 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1706 John. Along with some recent changes he made to matplotlib, the
1715 John. Along with some recent changes he made to matplotlib, the
1707 next versions of both systems should work very well together.
1716 next versions of both systems should work very well together.
1708
1717
1709 2004-08-24 Fernando Perez <fperez@colorado.edu>
1718 2004-08-24 Fernando Perez <fperez@colorado.edu>
1710
1719
1711 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1720 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1712 tried to switch the profiling to using hotshot, but I'm getting
1721 tried to switch the profiling to using hotshot, but I'm getting
1713 strange errors from prof.runctx() there. I may be misreading the
1722 strange errors from prof.runctx() there. I may be misreading the
1714 docs, but it looks weird. For now the profiling code will
1723 docs, but it looks weird. For now the profiling code will
1715 continue to use the standard profiler.
1724 continue to use the standard profiler.
1716
1725
1717 2004-08-23 Fernando Perez <fperez@colorado.edu>
1726 2004-08-23 Fernando Perez <fperez@colorado.edu>
1718
1727
1719 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1728 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1720 threaded shell, by John Hunter. It's not quite ready yet, but
1729 threaded shell, by John Hunter. It's not quite ready yet, but
1721 close.
1730 close.
1722
1731
1723 2004-08-22 Fernando Perez <fperez@colorado.edu>
1732 2004-08-22 Fernando Perez <fperez@colorado.edu>
1724
1733
1725 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1734 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1726 in Magic and ultraTB.
1735 in Magic and ultraTB.
1727
1736
1728 * ipython.1: document threading options in manpage.
1737 * ipython.1: document threading options in manpage.
1729
1738
1730 * scripts/ipython: Changed name of -thread option to -gthread,
1739 * scripts/ipython: Changed name of -thread option to -gthread,
1731 since this is GTK specific. I want to leave the door open for a
1740 since this is GTK specific. I want to leave the door open for a
1732 -wthread option for WX, which will most likely be necessary. This
1741 -wthread option for WX, which will most likely be necessary. This
1733 change affects usage and ipmaker as well.
1742 change affects usage and ipmaker as well.
1734
1743
1735 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1744 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1736 handle the matplotlib shell issues. Code by John Hunter
1745 handle the matplotlib shell issues. Code by John Hunter
1737 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1746 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1738 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1747 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1739 broken (and disabled for end users) for now, but it puts the
1748 broken (and disabled for end users) for now, but it puts the
1740 infrastructure in place.
1749 infrastructure in place.
1741
1750
1742 2004-08-21 Fernando Perez <fperez@colorado.edu>
1751 2004-08-21 Fernando Perez <fperez@colorado.edu>
1743
1752
1744 * ipythonrc-pylab: Add matplotlib support.
1753 * ipythonrc-pylab: Add matplotlib support.
1745
1754
1746 * matplotlib_config.py: new files for matplotlib support, part of
1755 * matplotlib_config.py: new files for matplotlib support, part of
1747 the pylab profile.
1756 the pylab profile.
1748
1757
1749 * IPython/usage.py (__doc__): documented the threading options.
1758 * IPython/usage.py (__doc__): documented the threading options.
1750
1759
1751 2004-08-20 Fernando Perez <fperez@colorado.edu>
1760 2004-08-20 Fernando Perez <fperez@colorado.edu>
1752
1761
1753 * ipython: Modified the main calling routine to handle the -thread
1762 * ipython: Modified the main calling routine to handle the -thread
1754 and -mpthread options. This needs to be done as a top-level hack,
1763 and -mpthread options. This needs to be done as a top-level hack,
1755 because it determines which class to instantiate for IPython
1764 because it determines which class to instantiate for IPython
1756 itself.
1765 itself.
1757
1766
1758 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1767 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1759 classes to support multithreaded GTK operation without blocking,
1768 classes to support multithreaded GTK operation without blocking,
1760 and matplotlib with all backends. This is a lot of still very
1769 and matplotlib with all backends. This is a lot of still very
1761 experimental code, and threads are tricky. So it may still have a
1770 experimental code, and threads are tricky. So it may still have a
1762 few rough edges... This code owes a lot to
1771 few rough edges... This code owes a lot to
1763 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1772 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1764 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1773 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1765 to John Hunter for all the matplotlib work.
1774 to John Hunter for all the matplotlib work.
1766
1775
1767 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1776 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1768 options for gtk thread and matplotlib support.
1777 options for gtk thread and matplotlib support.
1769
1778
1770 2004-08-16 Fernando Perez <fperez@colorado.edu>
1779 2004-08-16 Fernando Perez <fperez@colorado.edu>
1771
1780
1772 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1781 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1773 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1782 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1774 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1783 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1775
1784
1776 2004-08-11 Fernando Perez <fperez@colorado.edu>
1785 2004-08-11 Fernando Perez <fperez@colorado.edu>
1777
1786
1778 * setup.py (isfile): Fix build so documentation gets updated for
1787 * setup.py (isfile): Fix build so documentation gets updated for
1779 rpms (it was only done for .tgz builds).
1788 rpms (it was only done for .tgz builds).
1780
1789
1781 2004-08-10 Fernando Perez <fperez@colorado.edu>
1790 2004-08-10 Fernando Perez <fperez@colorado.edu>
1782
1791
1783 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1792 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1784
1793
1785 * iplib.py : Silence syntax error exceptions in tab-completion.
1794 * iplib.py : Silence syntax error exceptions in tab-completion.
1786
1795
1787 2004-08-05 Fernando Perez <fperez@colorado.edu>
1796 2004-08-05 Fernando Perez <fperez@colorado.edu>
1788
1797
1789 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1798 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1790 'color off' mark for continuation prompts. This was causing long
1799 'color off' mark for continuation prompts. This was causing long
1791 continuation lines to mis-wrap.
1800 continuation lines to mis-wrap.
1792
1801
1793 2004-08-01 Fernando Perez <fperez@colorado.edu>
1802 2004-08-01 Fernando Perez <fperez@colorado.edu>
1794
1803
1795 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1804 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1796 for building ipython to be a parameter. All this is necessary
1805 for building ipython to be a parameter. All this is necessary
1797 right now to have a multithreaded version, but this insane
1806 right now to have a multithreaded version, but this insane
1798 non-design will be cleaned up soon. For now, it's a hack that
1807 non-design will be cleaned up soon. For now, it's a hack that
1799 works.
1808 works.
1800
1809
1801 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1810 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1802 args in various places. No bugs so far, but it's a dangerous
1811 args in various places. No bugs so far, but it's a dangerous
1803 practice.
1812 practice.
1804
1813
1805 2004-07-31 Fernando Perez <fperez@colorado.edu>
1814 2004-07-31 Fernando Perez <fperez@colorado.edu>
1806
1815
1807 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1816 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1808 fix completion of files with dots in their names under most
1817 fix completion of files with dots in their names under most
1809 profiles (pysh was OK because the completion order is different).
1818 profiles (pysh was OK because the completion order is different).
1810
1819
1811 2004-07-27 Fernando Perez <fperez@colorado.edu>
1820 2004-07-27 Fernando Perez <fperez@colorado.edu>
1812
1821
1813 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1822 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1814 keywords manually, b/c the one in keyword.py was removed in python
1823 keywords manually, b/c the one in keyword.py was removed in python
1815 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1824 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1816 This is NOT a bug under python 2.3 and earlier.
1825 This is NOT a bug under python 2.3 and earlier.
1817
1826
1818 2004-07-26 Fernando Perez <fperez@colorado.edu>
1827 2004-07-26 Fernando Perez <fperez@colorado.edu>
1819
1828
1820 * IPython/ultraTB.py (VerboseTB.text): Add another
1829 * IPython/ultraTB.py (VerboseTB.text): Add another
1821 linecache.checkcache() call to try to prevent inspect.py from
1830 linecache.checkcache() call to try to prevent inspect.py from
1822 crashing under python 2.3. I think this fixes
1831 crashing under python 2.3. I think this fixes
1823 http://www.scipy.net/roundup/ipython/issue17.
1832 http://www.scipy.net/roundup/ipython/issue17.
1824
1833
1825 2004-07-26 *** Released version 0.6.2
1834 2004-07-26 *** Released version 0.6.2
1826
1835
1827 2004-07-26 Fernando Perez <fperez@colorado.edu>
1836 2004-07-26 Fernando Perez <fperez@colorado.edu>
1828
1837
1829 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1838 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1830 fail for any number.
1839 fail for any number.
1831 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1840 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1832 empty bookmarks.
1841 empty bookmarks.
1833
1842
1834 2004-07-26 *** Released version 0.6.1
1843 2004-07-26 *** Released version 0.6.1
1835
1844
1836 2004-07-26 Fernando Perez <fperez@colorado.edu>
1845 2004-07-26 Fernando Perez <fperez@colorado.edu>
1837
1846
1838 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1847 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1839
1848
1840 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1849 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1841 escaping '()[]{}' in filenames.
1850 escaping '()[]{}' in filenames.
1842
1851
1843 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1852 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1844 Python 2.2 users who lack a proper shlex.split.
1853 Python 2.2 users who lack a proper shlex.split.
1845
1854
1846 2004-07-19 Fernando Perez <fperez@colorado.edu>
1855 2004-07-19 Fernando Perez <fperez@colorado.edu>
1847
1856
1848 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1857 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1849 for reading readline's init file. I follow the normal chain:
1858 for reading readline's init file. I follow the normal chain:
1850 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1859 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1851 report by Mike Heeter. This closes
1860 report by Mike Heeter. This closes
1852 http://www.scipy.net/roundup/ipython/issue16.
1861 http://www.scipy.net/roundup/ipython/issue16.
1853
1862
1854 2004-07-18 Fernando Perez <fperez@colorado.edu>
1863 2004-07-18 Fernando Perez <fperez@colorado.edu>
1855
1864
1856 * IPython/iplib.py (__init__): Add better handling of '\' under
1865 * IPython/iplib.py (__init__): Add better handling of '\' under
1857 Win32 for filenames. After a patch by Ville.
1866 Win32 for filenames. After a patch by Ville.
1858
1867
1859 2004-07-17 Fernando Perez <fperez@colorado.edu>
1868 2004-07-17 Fernando Perez <fperez@colorado.edu>
1860
1869
1861 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1870 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1862 autocalling would be triggered for 'foo is bar' if foo is
1871 autocalling would be triggered for 'foo is bar' if foo is
1863 callable. I also cleaned up the autocall detection code to use a
1872 callable. I also cleaned up the autocall detection code to use a
1864 regexp, which is faster. Bug reported by Alexander Schmolck.
1873 regexp, which is faster. Bug reported by Alexander Schmolck.
1865
1874
1866 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1875 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1867 '?' in them would confuse the help system. Reported by Alex
1876 '?' in them would confuse the help system. Reported by Alex
1868 Schmolck.
1877 Schmolck.
1869
1878
1870 2004-07-16 Fernando Perez <fperez@colorado.edu>
1879 2004-07-16 Fernando Perez <fperez@colorado.edu>
1871
1880
1872 * IPython/GnuplotInteractive.py (__all__): added plot2.
1881 * IPython/GnuplotInteractive.py (__all__): added plot2.
1873
1882
1874 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1883 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1875 plotting dictionaries, lists or tuples of 1d arrays.
1884 plotting dictionaries, lists or tuples of 1d arrays.
1876
1885
1877 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1886 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1878 optimizations.
1887 optimizations.
1879
1888
1880 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1889 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1881 the information which was there from Janko's original IPP code:
1890 the information which was there from Janko's original IPP code:
1882
1891
1883 03.05.99 20:53 porto.ifm.uni-kiel.de
1892 03.05.99 20:53 porto.ifm.uni-kiel.de
1884 --Started changelog.
1893 --Started changelog.
1885 --make clear do what it say it does
1894 --make clear do what it say it does
1886 --added pretty output of lines from inputcache
1895 --added pretty output of lines from inputcache
1887 --Made Logger a mixin class, simplifies handling of switches
1896 --Made Logger a mixin class, simplifies handling of switches
1888 --Added own completer class. .string<TAB> expands to last history
1897 --Added own completer class. .string<TAB> expands to last history
1889 line which starts with string. The new expansion is also present
1898 line which starts with string. The new expansion is also present
1890 with Ctrl-r from the readline library. But this shows, who this
1899 with Ctrl-r from the readline library. But this shows, who this
1891 can be done for other cases.
1900 can be done for other cases.
1892 --Added convention that all shell functions should accept a
1901 --Added convention that all shell functions should accept a
1893 parameter_string This opens the door for different behaviour for
1902 parameter_string This opens the door for different behaviour for
1894 each function. @cd is a good example of this.
1903 each function. @cd is a good example of this.
1895
1904
1896 04.05.99 12:12 porto.ifm.uni-kiel.de
1905 04.05.99 12:12 porto.ifm.uni-kiel.de
1897 --added logfile rotation
1906 --added logfile rotation
1898 --added new mainloop method which freezes first the namespace
1907 --added new mainloop method which freezes first the namespace
1899
1908
1900 07.05.99 21:24 porto.ifm.uni-kiel.de
1909 07.05.99 21:24 porto.ifm.uni-kiel.de
1901 --added the docreader classes. Now there is a help system.
1910 --added the docreader classes. Now there is a help system.
1902 -This is only a first try. Currently it's not easy to put new
1911 -This is only a first try. Currently it's not easy to put new
1903 stuff in the indices. But this is the way to go. Info would be
1912 stuff in the indices. But this is the way to go. Info would be
1904 better, but HTML is every where and not everybody has an info
1913 better, but HTML is every where and not everybody has an info
1905 system installed and it's not so easy to change html-docs to info.
1914 system installed and it's not so easy to change html-docs to info.
1906 --added global logfile option
1915 --added global logfile option
1907 --there is now a hook for object inspection method pinfo needs to
1916 --there is now a hook for object inspection method pinfo needs to
1908 be provided for this. Can be reached by two '??'.
1917 be provided for this. Can be reached by two '??'.
1909
1918
1910 08.05.99 20:51 porto.ifm.uni-kiel.de
1919 08.05.99 20:51 porto.ifm.uni-kiel.de
1911 --added a README
1920 --added a README
1912 --bug in rc file. Something has changed so functions in the rc
1921 --bug in rc file. Something has changed so functions in the rc
1913 file need to reference the shell and not self. Not clear if it's a
1922 file need to reference the shell and not self. Not clear if it's a
1914 bug or feature.
1923 bug or feature.
1915 --changed rc file for new behavior
1924 --changed rc file for new behavior
1916
1925
1917 2004-07-15 Fernando Perez <fperez@colorado.edu>
1926 2004-07-15 Fernando Perez <fperez@colorado.edu>
1918
1927
1919 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1928 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1920 cache was falling out of sync in bizarre manners when multi-line
1929 cache was falling out of sync in bizarre manners when multi-line
1921 input was present. Minor optimizations and cleanup.
1930 input was present. Minor optimizations and cleanup.
1922
1931
1923 (Logger): Remove old Changelog info for cleanup. This is the
1932 (Logger): Remove old Changelog info for cleanup. This is the
1924 information which was there from Janko's original code:
1933 information which was there from Janko's original code:
1925
1934
1926 Changes to Logger: - made the default log filename a parameter
1935 Changes to Logger: - made the default log filename a parameter
1927
1936
1928 - put a check for lines beginning with !@? in log(). Needed
1937 - put a check for lines beginning with !@? in log(). Needed
1929 (even if the handlers properly log their lines) for mid-session
1938 (even if the handlers properly log their lines) for mid-session
1930 logging activation to work properly. Without this, lines logged
1939 logging activation to work properly. Without this, lines logged
1931 in mid session, which get read from the cache, would end up
1940 in mid session, which get read from the cache, would end up
1932 'bare' (with !@? in the open) in the log. Now they are caught
1941 'bare' (with !@? in the open) in the log. Now they are caught
1933 and prepended with a #.
1942 and prepended with a #.
1934
1943
1935 * IPython/iplib.py (InteractiveShell.init_readline): added check
1944 * IPython/iplib.py (InteractiveShell.init_readline): added check
1936 in case MagicCompleter fails to be defined, so we don't crash.
1945 in case MagicCompleter fails to be defined, so we don't crash.
1937
1946
1938 2004-07-13 Fernando Perez <fperez@colorado.edu>
1947 2004-07-13 Fernando Perez <fperez@colorado.edu>
1939
1948
1940 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1949 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1941 of EPS if the requested filename ends in '.eps'.
1950 of EPS if the requested filename ends in '.eps'.
1942
1951
1943 2004-07-04 Fernando Perez <fperez@colorado.edu>
1952 2004-07-04 Fernando Perez <fperez@colorado.edu>
1944
1953
1945 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1954 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1946 escaping of quotes when calling the shell.
1955 escaping of quotes when calling the shell.
1947
1956
1948 2004-07-02 Fernando Perez <fperez@colorado.edu>
1957 2004-07-02 Fernando Perez <fperez@colorado.edu>
1949
1958
1950 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1959 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1951 gettext not working because we were clobbering '_'. Fixes
1960 gettext not working because we were clobbering '_'. Fixes
1952 http://www.scipy.net/roundup/ipython/issue6.
1961 http://www.scipy.net/roundup/ipython/issue6.
1953
1962
1954 2004-07-01 Fernando Perez <fperez@colorado.edu>
1963 2004-07-01 Fernando Perez <fperez@colorado.edu>
1955
1964
1956 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1965 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1957 into @cd. Patch by Ville.
1966 into @cd. Patch by Ville.
1958
1967
1959 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1968 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1960 new function to store things after ipmaker runs. Patch by Ville.
1969 new function to store things after ipmaker runs. Patch by Ville.
1961 Eventually this will go away once ipmaker is removed and the class
1970 Eventually this will go away once ipmaker is removed and the class
1962 gets cleaned up, but for now it's ok. Key functionality here is
1971 gets cleaned up, but for now it's ok. Key functionality here is
1963 the addition of the persistent storage mechanism, a dict for
1972 the addition of the persistent storage mechanism, a dict for
1964 keeping data across sessions (for now just bookmarks, but more can
1973 keeping data across sessions (for now just bookmarks, but more can
1965 be implemented later).
1974 be implemented later).
1966
1975
1967 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1976 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1968 persistent across sections. Patch by Ville, I modified it
1977 persistent across sections. Patch by Ville, I modified it
1969 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1978 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1970 added a '-l' option to list all bookmarks.
1979 added a '-l' option to list all bookmarks.
1971
1980
1972 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1981 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1973 center for cleanup. Registered with atexit.register(). I moved
1982 center for cleanup. Registered with atexit.register(). I moved
1974 here the old exit_cleanup(). After a patch by Ville.
1983 here the old exit_cleanup(). After a patch by Ville.
1975
1984
1976 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1985 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1977 characters in the hacked shlex_split for python 2.2.
1986 characters in the hacked shlex_split for python 2.2.
1978
1987
1979 * IPython/iplib.py (file_matches): more fixes to filenames with
1988 * IPython/iplib.py (file_matches): more fixes to filenames with
1980 whitespace in them. It's not perfect, but limitations in python's
1989 whitespace in them. It's not perfect, but limitations in python's
1981 readline make it impossible to go further.
1990 readline make it impossible to go further.
1982
1991
1983 2004-06-29 Fernando Perez <fperez@colorado.edu>
1992 2004-06-29 Fernando Perez <fperez@colorado.edu>
1984
1993
1985 * IPython/iplib.py (file_matches): escape whitespace correctly in
1994 * IPython/iplib.py (file_matches): escape whitespace correctly in
1986 filename completions. Bug reported by Ville.
1995 filename completions. Bug reported by Ville.
1987
1996
1988 2004-06-28 Fernando Perez <fperez@colorado.edu>
1997 2004-06-28 Fernando Perez <fperez@colorado.edu>
1989
1998
1990 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1999 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1991 the history file will be called 'history-PROFNAME' (or just
2000 the history file will be called 'history-PROFNAME' (or just
1992 'history' if no profile is loaded). I was getting annoyed at
2001 'history' if no profile is loaded). I was getting annoyed at
1993 getting my Numerical work history clobbered by pysh sessions.
2002 getting my Numerical work history clobbered by pysh sessions.
1994
2003
1995 * IPython/iplib.py (InteractiveShell.__init__): Internal
2004 * IPython/iplib.py (InteractiveShell.__init__): Internal
1996 getoutputerror() function so that we can honor the system_verbose
2005 getoutputerror() function so that we can honor the system_verbose
1997 flag for _all_ system calls. I also added escaping of #
2006 flag for _all_ system calls. I also added escaping of #
1998 characters here to avoid confusing Itpl.
2007 characters here to avoid confusing Itpl.
1999
2008
2000 * IPython/Magic.py (shlex_split): removed call to shell in
2009 * IPython/Magic.py (shlex_split): removed call to shell in
2001 parse_options and replaced it with shlex.split(). The annoying
2010 parse_options and replaced it with shlex.split(). The annoying
2002 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2011 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2003 to backport it from 2.3, with several frail hacks (the shlex
2012 to backport it from 2.3, with several frail hacks (the shlex
2004 module is rather limited in 2.2). Thanks to a suggestion by Ville
2013 module is rather limited in 2.2). Thanks to a suggestion by Ville
2005 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2014 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2006 problem.
2015 problem.
2007
2016
2008 (Magic.magic_system_verbose): new toggle to print the actual
2017 (Magic.magic_system_verbose): new toggle to print the actual
2009 system calls made by ipython. Mainly for debugging purposes.
2018 system calls made by ipython. Mainly for debugging purposes.
2010
2019
2011 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2020 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2012 doesn't support persistence. Reported (and fix suggested) by
2021 doesn't support persistence. Reported (and fix suggested) by
2013 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2022 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2014
2023
2015 2004-06-26 Fernando Perez <fperez@colorado.edu>
2024 2004-06-26 Fernando Perez <fperez@colorado.edu>
2016
2025
2017 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2026 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2018 continue prompts.
2027 continue prompts.
2019
2028
2020 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2029 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2021 function (basically a big docstring) and a few more things here to
2030 function (basically a big docstring) and a few more things here to
2022 speedup startup. pysh.py is now very lightweight. We want because
2031 speedup startup. pysh.py is now very lightweight. We want because
2023 it gets execfile'd, while InterpreterExec gets imported, so
2032 it gets execfile'd, while InterpreterExec gets imported, so
2024 byte-compilation saves time.
2033 byte-compilation saves time.
2025
2034
2026 2004-06-25 Fernando Perez <fperez@colorado.edu>
2035 2004-06-25 Fernando Perez <fperez@colorado.edu>
2027
2036
2028 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2037 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2029 -NUM', which was recently broken.
2038 -NUM', which was recently broken.
2030
2039
2031 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2040 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2032 in multi-line input (but not !!, which doesn't make sense there).
2041 in multi-line input (but not !!, which doesn't make sense there).
2033
2042
2034 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2043 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2035 It's just too useful, and people can turn it off in the less
2044 It's just too useful, and people can turn it off in the less
2036 common cases where it's a problem.
2045 common cases where it's a problem.
2037
2046
2038 2004-06-24 Fernando Perez <fperez@colorado.edu>
2047 2004-06-24 Fernando Perez <fperez@colorado.edu>
2039
2048
2040 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2049 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2041 special syntaxes (like alias calling) is now allied in multi-line
2050 special syntaxes (like alias calling) is now allied in multi-line
2042 input. This is still _very_ experimental, but it's necessary for
2051 input. This is still _very_ experimental, but it's necessary for
2043 efficient shell usage combining python looping syntax with system
2052 efficient shell usage combining python looping syntax with system
2044 calls. For now it's restricted to aliases, I don't think it
2053 calls. For now it's restricted to aliases, I don't think it
2045 really even makes sense to have this for magics.
2054 really even makes sense to have this for magics.
2046
2055
2047 2004-06-23 Fernando Perez <fperez@colorado.edu>
2056 2004-06-23 Fernando Perez <fperez@colorado.edu>
2048
2057
2049 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2058 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2050 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2059 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2051
2060
2052 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2061 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2053 extensions under Windows (after code sent by Gary Bishop). The
2062 extensions under Windows (after code sent by Gary Bishop). The
2054 extensions considered 'executable' are stored in IPython's rc
2063 extensions considered 'executable' are stored in IPython's rc
2055 structure as win_exec_ext.
2064 structure as win_exec_ext.
2056
2065
2057 * IPython/genutils.py (shell): new function, like system() but
2066 * IPython/genutils.py (shell): new function, like system() but
2058 without return value. Very useful for interactive shell work.
2067 without return value. Very useful for interactive shell work.
2059
2068
2060 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2069 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2061 delete aliases.
2070 delete aliases.
2062
2071
2063 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2072 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2064 sure that the alias table doesn't contain python keywords.
2073 sure that the alias table doesn't contain python keywords.
2065
2074
2066 2004-06-21 Fernando Perez <fperez@colorado.edu>
2075 2004-06-21 Fernando Perez <fperez@colorado.edu>
2067
2076
2068 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2077 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2069 non-existent items are found in $PATH. Reported by Thorsten.
2078 non-existent items are found in $PATH. Reported by Thorsten.
2070
2079
2071 2004-06-20 Fernando Perez <fperez@colorado.edu>
2080 2004-06-20 Fernando Perez <fperez@colorado.edu>
2072
2081
2073 * IPython/iplib.py (complete): modified the completer so that the
2082 * IPython/iplib.py (complete): modified the completer so that the
2074 order of priorities can be easily changed at runtime.
2083 order of priorities can be easily changed at runtime.
2075
2084
2076 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2085 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2077 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2086 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2078
2087
2079 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2088 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2080 expand Python variables prepended with $ in all system calls. The
2089 expand Python variables prepended with $ in all system calls. The
2081 same was done to InteractiveShell.handle_shell_escape. Now all
2090 same was done to InteractiveShell.handle_shell_escape. Now all
2082 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2091 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2083 expansion of python variables and expressions according to the
2092 expansion of python variables and expressions according to the
2084 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2093 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2085
2094
2086 Though PEP-215 has been rejected, a similar (but simpler) one
2095 Though PEP-215 has been rejected, a similar (but simpler) one
2087 seems like it will go into Python 2.4, PEP-292 -
2096 seems like it will go into Python 2.4, PEP-292 -
2088 http://www.python.org/peps/pep-0292.html.
2097 http://www.python.org/peps/pep-0292.html.
2089
2098
2090 I'll keep the full syntax of PEP-215, since IPython has since the
2099 I'll keep the full syntax of PEP-215, since IPython has since the
2091 start used Ka-Ping Yee's reference implementation discussed there
2100 start used Ka-Ping Yee's reference implementation discussed there
2092 (Itpl), and I actually like the powerful semantics it offers.
2101 (Itpl), and I actually like the powerful semantics it offers.
2093
2102
2094 In order to access normal shell variables, the $ has to be escaped
2103 In order to access normal shell variables, the $ has to be escaped
2095 via an extra $. For example:
2104 via an extra $. For example:
2096
2105
2097 In [7]: PATH='a python variable'
2106 In [7]: PATH='a python variable'
2098
2107
2099 In [8]: !echo $PATH
2108 In [8]: !echo $PATH
2100 a python variable
2109 a python variable
2101
2110
2102 In [9]: !echo $$PATH
2111 In [9]: !echo $$PATH
2103 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2112 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2104
2113
2105 (Magic.parse_options): escape $ so the shell doesn't evaluate
2114 (Magic.parse_options): escape $ so the shell doesn't evaluate
2106 things prematurely.
2115 things prematurely.
2107
2116
2108 * IPython/iplib.py (InteractiveShell.call_alias): added the
2117 * IPython/iplib.py (InteractiveShell.call_alias): added the
2109 ability for aliases to expand python variables via $.
2118 ability for aliases to expand python variables via $.
2110
2119
2111 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2120 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2112 system, now there's a @rehash/@rehashx pair of magics. These work
2121 system, now there's a @rehash/@rehashx pair of magics. These work
2113 like the csh rehash command, and can be invoked at any time. They
2122 like the csh rehash command, and can be invoked at any time. They
2114 build a table of aliases to everything in the user's $PATH
2123 build a table of aliases to everything in the user's $PATH
2115 (@rehash uses everything, @rehashx is slower but only adds
2124 (@rehash uses everything, @rehashx is slower but only adds
2116 executable files). With this, the pysh.py-based shell profile can
2125 executable files). With this, the pysh.py-based shell profile can
2117 now simply call rehash upon startup, and full access to all
2126 now simply call rehash upon startup, and full access to all
2118 programs in the user's path is obtained.
2127 programs in the user's path is obtained.
2119
2128
2120 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2129 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2121 functionality is now fully in place. I removed the old dynamic
2130 functionality is now fully in place. I removed the old dynamic
2122 code generation based approach, in favor of a much lighter one
2131 code generation based approach, in favor of a much lighter one
2123 based on a simple dict. The advantage is that this allows me to
2132 based on a simple dict. The advantage is that this allows me to
2124 now have thousands of aliases with negligible cost (unthinkable
2133 now have thousands of aliases with negligible cost (unthinkable
2125 with the old system).
2134 with the old system).
2126
2135
2127 2004-06-19 Fernando Perez <fperez@colorado.edu>
2136 2004-06-19 Fernando Perez <fperez@colorado.edu>
2128
2137
2129 * IPython/iplib.py (__init__): extended MagicCompleter class to
2138 * IPython/iplib.py (__init__): extended MagicCompleter class to
2130 also complete (last in priority) on user aliases.
2139 also complete (last in priority) on user aliases.
2131
2140
2132 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2141 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2133 call to eval.
2142 call to eval.
2134 (ItplNS.__init__): Added a new class which functions like Itpl,
2143 (ItplNS.__init__): Added a new class which functions like Itpl,
2135 but allows configuring the namespace for the evaluation to occur
2144 but allows configuring the namespace for the evaluation to occur
2136 in.
2145 in.
2137
2146
2138 2004-06-18 Fernando Perez <fperez@colorado.edu>
2147 2004-06-18 Fernando Perez <fperez@colorado.edu>
2139
2148
2140 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2149 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2141 better message when 'exit' or 'quit' are typed (a common newbie
2150 better message when 'exit' or 'quit' are typed (a common newbie
2142 confusion).
2151 confusion).
2143
2152
2144 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2153 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2145 check for Windows users.
2154 check for Windows users.
2146
2155
2147 * IPython/iplib.py (InteractiveShell.user_setup): removed
2156 * IPython/iplib.py (InteractiveShell.user_setup): removed
2148 disabling of colors for Windows. I'll test at runtime and issue a
2157 disabling of colors for Windows. I'll test at runtime and issue a
2149 warning if Gary's readline isn't found, as to nudge users to
2158 warning if Gary's readline isn't found, as to nudge users to
2150 download it.
2159 download it.
2151
2160
2152 2004-06-16 Fernando Perez <fperez@colorado.edu>
2161 2004-06-16 Fernando Perez <fperez@colorado.edu>
2153
2162
2154 * IPython/genutils.py (Stream.__init__): changed to print errors
2163 * IPython/genutils.py (Stream.__init__): changed to print errors
2155 to sys.stderr. I had a circular dependency here. Now it's
2164 to sys.stderr. I had a circular dependency here. Now it's
2156 possible to run ipython as IDLE's shell (consider this pre-alpha,
2165 possible to run ipython as IDLE's shell (consider this pre-alpha,
2157 since true stdout things end up in the starting terminal instead
2166 since true stdout things end up in the starting terminal instead
2158 of IDLE's out).
2167 of IDLE's out).
2159
2168
2160 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2169 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2161 users who haven't # updated their prompt_in2 definitions. Remove
2170 users who haven't # updated their prompt_in2 definitions. Remove
2162 eventually.
2171 eventually.
2163 (multiple_replace): added credit to original ASPN recipe.
2172 (multiple_replace): added credit to original ASPN recipe.
2164
2173
2165 2004-06-15 Fernando Perez <fperez@colorado.edu>
2174 2004-06-15 Fernando Perez <fperez@colorado.edu>
2166
2175
2167 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2176 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2168 list of auto-defined aliases.
2177 list of auto-defined aliases.
2169
2178
2170 2004-06-13 Fernando Perez <fperez@colorado.edu>
2179 2004-06-13 Fernando Perez <fperez@colorado.edu>
2171
2180
2172 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2181 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2173 install was really requested (so setup.py can be used for other
2182 install was really requested (so setup.py can be used for other
2174 things under Windows).
2183 things under Windows).
2175
2184
2176 2004-06-10 Fernando Perez <fperez@colorado.edu>
2185 2004-06-10 Fernando Perez <fperez@colorado.edu>
2177
2186
2178 * IPython/Logger.py (Logger.create_log): Manually remove any old
2187 * IPython/Logger.py (Logger.create_log): Manually remove any old
2179 backup, since os.remove may fail under Windows. Fixes bug
2188 backup, since os.remove may fail under Windows. Fixes bug
2180 reported by Thorsten.
2189 reported by Thorsten.
2181
2190
2182 2004-06-09 Fernando Perez <fperez@colorado.edu>
2191 2004-06-09 Fernando Perez <fperez@colorado.edu>
2183
2192
2184 * examples/example-embed.py: fixed all references to %n (replaced
2193 * examples/example-embed.py: fixed all references to %n (replaced
2185 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2194 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2186 for all examples and the manual as well.
2195 for all examples and the manual as well.
2187
2196
2188 2004-06-08 Fernando Perez <fperez@colorado.edu>
2197 2004-06-08 Fernando Perez <fperez@colorado.edu>
2189
2198
2190 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2199 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2191 alignment and color management. All 3 prompt subsystems now
2200 alignment and color management. All 3 prompt subsystems now
2192 inherit from BasePrompt.
2201 inherit from BasePrompt.
2193
2202
2194 * tools/release: updates for windows installer build and tag rpms
2203 * tools/release: updates for windows installer build and tag rpms
2195 with python version (since paths are fixed).
2204 with python version (since paths are fixed).
2196
2205
2197 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2206 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2198 which will become eventually obsolete. Also fixed the default
2207 which will become eventually obsolete. Also fixed the default
2199 prompt_in2 to use \D, so at least new users start with the correct
2208 prompt_in2 to use \D, so at least new users start with the correct
2200 defaults.
2209 defaults.
2201 WARNING: Users with existing ipythonrc files will need to apply
2210 WARNING: Users with existing ipythonrc files will need to apply
2202 this fix manually!
2211 this fix manually!
2203
2212
2204 * setup.py: make windows installer (.exe). This is finally the
2213 * setup.py: make windows installer (.exe). This is finally the
2205 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2214 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2206 which I hadn't included because it required Python 2.3 (or recent
2215 which I hadn't included because it required Python 2.3 (or recent
2207 distutils).
2216 distutils).
2208
2217
2209 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2218 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2210 usage of new '\D' escape.
2219 usage of new '\D' escape.
2211
2220
2212 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2221 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2213 lacks os.getuid())
2222 lacks os.getuid())
2214 (CachedOutput.set_colors): Added the ability to turn coloring
2223 (CachedOutput.set_colors): Added the ability to turn coloring
2215 on/off with @colors even for manually defined prompt colors. It
2224 on/off with @colors even for manually defined prompt colors. It
2216 uses a nasty global, but it works safely and via the generic color
2225 uses a nasty global, but it works safely and via the generic color
2217 handling mechanism.
2226 handling mechanism.
2218 (Prompt2.__init__): Introduced new escape '\D' for continuation
2227 (Prompt2.__init__): Introduced new escape '\D' for continuation
2219 prompts. It represents the counter ('\#') as dots.
2228 prompts. It represents the counter ('\#') as dots.
2220 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2229 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2221 need to update their ipythonrc files and replace '%n' with '\D' in
2230 need to update their ipythonrc files and replace '%n' with '\D' in
2222 their prompt_in2 settings everywhere. Sorry, but there's
2231 their prompt_in2 settings everywhere. Sorry, but there's
2223 otherwise no clean way to get all prompts to properly align. The
2232 otherwise no clean way to get all prompts to properly align. The
2224 ipythonrc shipped with IPython has been updated.
2233 ipythonrc shipped with IPython has been updated.
2225
2234
2226 2004-06-07 Fernando Perez <fperez@colorado.edu>
2235 2004-06-07 Fernando Perez <fperez@colorado.edu>
2227
2236
2228 * setup.py (isfile): Pass local_icons option to latex2html, so the
2237 * setup.py (isfile): Pass local_icons option to latex2html, so the
2229 resulting HTML file is self-contained. Thanks to
2238 resulting HTML file is self-contained. Thanks to
2230 dryice-AT-liu.com.cn for the tip.
2239 dryice-AT-liu.com.cn for the tip.
2231
2240
2232 * pysh.py: I created a new profile 'shell', which implements a
2241 * pysh.py: I created a new profile 'shell', which implements a
2233 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2242 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2234 system shell, nor will it become one anytime soon. It's mainly
2243 system shell, nor will it become one anytime soon. It's mainly
2235 meant to illustrate the use of the new flexible bash-like prompts.
2244 meant to illustrate the use of the new flexible bash-like prompts.
2236 I guess it could be used by hardy souls for true shell management,
2245 I guess it could be used by hardy souls for true shell management,
2237 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2246 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2238 profile. This uses the InterpreterExec extension provided by
2247 profile. This uses the InterpreterExec extension provided by
2239 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2248 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2240
2249
2241 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2250 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2242 auto-align itself with the length of the previous input prompt
2251 auto-align itself with the length of the previous input prompt
2243 (taking into account the invisible color escapes).
2252 (taking into account the invisible color escapes).
2244 (CachedOutput.__init__): Large restructuring of this class. Now
2253 (CachedOutput.__init__): Large restructuring of this class. Now
2245 all three prompts (primary1, primary2, output) are proper objects,
2254 all three prompts (primary1, primary2, output) are proper objects,
2246 managed by the 'parent' CachedOutput class. The code is still a
2255 managed by the 'parent' CachedOutput class. The code is still a
2247 bit hackish (all prompts share state via a pointer to the cache),
2256 bit hackish (all prompts share state via a pointer to the cache),
2248 but it's overall far cleaner than before.
2257 but it's overall far cleaner than before.
2249
2258
2250 * IPython/genutils.py (getoutputerror): modified to add verbose,
2259 * IPython/genutils.py (getoutputerror): modified to add verbose,
2251 debug and header options. This makes the interface of all getout*
2260 debug and header options. This makes the interface of all getout*
2252 functions uniform.
2261 functions uniform.
2253 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2262 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2254
2263
2255 * IPython/Magic.py (Magic.default_option): added a function to
2264 * IPython/Magic.py (Magic.default_option): added a function to
2256 allow registering default options for any magic command. This
2265 allow registering default options for any magic command. This
2257 makes it easy to have profiles which customize the magics globally
2266 makes it easy to have profiles which customize the magics globally
2258 for a certain use. The values set through this function are
2267 for a certain use. The values set through this function are
2259 picked up by the parse_options() method, which all magics should
2268 picked up by the parse_options() method, which all magics should
2260 use to parse their options.
2269 use to parse their options.
2261
2270
2262 * IPython/genutils.py (warn): modified the warnings framework to
2271 * IPython/genutils.py (warn): modified the warnings framework to
2263 use the Term I/O class. I'm trying to slowly unify all of
2272 use the Term I/O class. I'm trying to slowly unify all of
2264 IPython's I/O operations to pass through Term.
2273 IPython's I/O operations to pass through Term.
2265
2274
2266 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2275 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2267 the secondary prompt to correctly match the length of the primary
2276 the secondary prompt to correctly match the length of the primary
2268 one for any prompt. Now multi-line code will properly line up
2277 one for any prompt. Now multi-line code will properly line up
2269 even for path dependent prompts, such as the new ones available
2278 even for path dependent prompts, such as the new ones available
2270 via the prompt_specials.
2279 via the prompt_specials.
2271
2280
2272 2004-06-06 Fernando Perez <fperez@colorado.edu>
2281 2004-06-06 Fernando Perez <fperez@colorado.edu>
2273
2282
2274 * IPython/Prompts.py (prompt_specials): Added the ability to have
2283 * IPython/Prompts.py (prompt_specials): Added the ability to have
2275 bash-like special sequences in the prompts, which get
2284 bash-like special sequences in the prompts, which get
2276 automatically expanded. Things like hostname, current working
2285 automatically expanded. Things like hostname, current working
2277 directory and username are implemented already, but it's easy to
2286 directory and username are implemented already, but it's easy to
2278 add more in the future. Thanks to a patch by W.J. van der Laan
2287 add more in the future. Thanks to a patch by W.J. van der Laan
2279 <gnufnork-AT-hetdigitalegat.nl>
2288 <gnufnork-AT-hetdigitalegat.nl>
2280 (prompt_specials): Added color support for prompt strings, so
2289 (prompt_specials): Added color support for prompt strings, so
2281 users can define arbitrary color setups for their prompts.
2290 users can define arbitrary color setups for their prompts.
2282
2291
2283 2004-06-05 Fernando Perez <fperez@colorado.edu>
2292 2004-06-05 Fernando Perez <fperez@colorado.edu>
2284
2293
2285 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2294 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2286 code to load Gary Bishop's readline and configure it
2295 code to load Gary Bishop's readline and configure it
2287 automatically. Thanks to Gary for help on this.
2296 automatically. Thanks to Gary for help on this.
2288
2297
2289 2004-06-01 Fernando Perez <fperez@colorado.edu>
2298 2004-06-01 Fernando Perez <fperez@colorado.edu>
2290
2299
2291 * IPython/Logger.py (Logger.create_log): fix bug for logging
2300 * IPython/Logger.py (Logger.create_log): fix bug for logging
2292 with no filename (previous fix was incomplete).
2301 with no filename (previous fix was incomplete).
2293
2302
2294 2004-05-25 Fernando Perez <fperez@colorado.edu>
2303 2004-05-25 Fernando Perez <fperez@colorado.edu>
2295
2304
2296 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2305 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2297 parens would get passed to the shell.
2306 parens would get passed to the shell.
2298
2307
2299 2004-05-20 Fernando Perez <fperez@colorado.edu>
2308 2004-05-20 Fernando Perez <fperez@colorado.edu>
2300
2309
2301 * IPython/Magic.py (Magic.magic_prun): changed default profile
2310 * IPython/Magic.py (Magic.magic_prun): changed default profile
2302 sort order to 'time' (the more common profiling need).
2311 sort order to 'time' (the more common profiling need).
2303
2312
2304 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2313 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2305 so that source code shown is guaranteed in sync with the file on
2314 so that source code shown is guaranteed in sync with the file on
2306 disk (also changed in psource). Similar fix to the one for
2315 disk (also changed in psource). Similar fix to the one for
2307 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2316 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2308 <yann.ledu-AT-noos.fr>.
2317 <yann.ledu-AT-noos.fr>.
2309
2318
2310 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2319 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2311 with a single option would not be correctly parsed. Closes
2320 with a single option would not be correctly parsed. Closes
2312 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2321 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2313 introduced in 0.6.0 (on 2004-05-06).
2322 introduced in 0.6.0 (on 2004-05-06).
2314
2323
2315 2004-05-13 *** Released version 0.6.0
2324 2004-05-13 *** Released version 0.6.0
2316
2325
2317 2004-05-13 Fernando Perez <fperez@colorado.edu>
2326 2004-05-13 Fernando Perez <fperez@colorado.edu>
2318
2327
2319 * debian/: Added debian/ directory to CVS, so that debian support
2328 * debian/: Added debian/ directory to CVS, so that debian support
2320 is publicly accessible. The debian package is maintained by Jack
2329 is publicly accessible. The debian package is maintained by Jack
2321 Moffit <jack-AT-xiph.org>.
2330 Moffit <jack-AT-xiph.org>.
2322
2331
2323 * Documentation: included the notes about an ipython-based system
2332 * Documentation: included the notes about an ipython-based system
2324 shell (the hypothetical 'pysh') into the new_design.pdf document,
2333 shell (the hypothetical 'pysh') into the new_design.pdf document,
2325 so that these ideas get distributed to users along with the
2334 so that these ideas get distributed to users along with the
2326 official documentation.
2335 official documentation.
2327
2336
2328 2004-05-10 Fernando Perez <fperez@colorado.edu>
2337 2004-05-10 Fernando Perez <fperez@colorado.edu>
2329
2338
2330 * IPython/Logger.py (Logger.create_log): fix recently introduced
2339 * IPython/Logger.py (Logger.create_log): fix recently introduced
2331 bug (misindented line) where logstart would fail when not given an
2340 bug (misindented line) where logstart would fail when not given an
2332 explicit filename.
2341 explicit filename.
2333
2342
2334 2004-05-09 Fernando Perez <fperez@colorado.edu>
2343 2004-05-09 Fernando Perez <fperez@colorado.edu>
2335
2344
2336 * IPython/Magic.py (Magic.parse_options): skip system call when
2345 * IPython/Magic.py (Magic.parse_options): skip system call when
2337 there are no options to look for. Faster, cleaner for the common
2346 there are no options to look for. Faster, cleaner for the common
2338 case.
2347 case.
2339
2348
2340 * Documentation: many updates to the manual: describing Windows
2349 * Documentation: many updates to the manual: describing Windows
2341 support better, Gnuplot updates, credits, misc small stuff. Also
2350 support better, Gnuplot updates, credits, misc small stuff. Also
2342 updated the new_design doc a bit.
2351 updated the new_design doc a bit.
2343
2352
2344 2004-05-06 *** Released version 0.6.0.rc1
2353 2004-05-06 *** Released version 0.6.0.rc1
2345
2354
2346 2004-05-06 Fernando Perez <fperez@colorado.edu>
2355 2004-05-06 Fernando Perez <fperez@colorado.edu>
2347
2356
2348 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2357 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2349 operations to use the vastly more efficient list/''.join() method.
2358 operations to use the vastly more efficient list/''.join() method.
2350 (FormattedTB.text): Fix
2359 (FormattedTB.text): Fix
2351 http://www.scipy.net/roundup/ipython/issue12 - exception source
2360 http://www.scipy.net/roundup/ipython/issue12 - exception source
2352 extract not updated after reload. Thanks to Mike Salib
2361 extract not updated after reload. Thanks to Mike Salib
2353 <msalib-AT-mit.edu> for pinning the source of the problem.
2362 <msalib-AT-mit.edu> for pinning the source of the problem.
2354 Fortunately, the solution works inside ipython and doesn't require
2363 Fortunately, the solution works inside ipython and doesn't require
2355 any changes to python proper.
2364 any changes to python proper.
2356
2365
2357 * IPython/Magic.py (Magic.parse_options): Improved to process the
2366 * IPython/Magic.py (Magic.parse_options): Improved to process the
2358 argument list as a true shell would (by actually using the
2367 argument list as a true shell would (by actually using the
2359 underlying system shell). This way, all @magics automatically get
2368 underlying system shell). This way, all @magics automatically get
2360 shell expansion for variables. Thanks to a comment by Alex
2369 shell expansion for variables. Thanks to a comment by Alex
2361 Schmolck.
2370 Schmolck.
2362
2371
2363 2004-04-04 Fernando Perez <fperez@colorado.edu>
2372 2004-04-04 Fernando Perez <fperez@colorado.edu>
2364
2373
2365 * IPython/iplib.py (InteractiveShell.interact): Added a special
2374 * IPython/iplib.py (InteractiveShell.interact): Added a special
2366 trap for a debugger quit exception, which is basically impossible
2375 trap for a debugger quit exception, which is basically impossible
2367 to handle by normal mechanisms, given what pdb does to the stack.
2376 to handle by normal mechanisms, given what pdb does to the stack.
2368 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2377 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2369
2378
2370 2004-04-03 Fernando Perez <fperez@colorado.edu>
2379 2004-04-03 Fernando Perez <fperez@colorado.edu>
2371
2380
2372 * IPython/genutils.py (Term): Standardized the names of the Term
2381 * IPython/genutils.py (Term): Standardized the names of the Term
2373 class streams to cin/cout/cerr, following C++ naming conventions
2382 class streams to cin/cout/cerr, following C++ naming conventions
2374 (I can't use in/out/err because 'in' is not a valid attribute
2383 (I can't use in/out/err because 'in' is not a valid attribute
2375 name).
2384 name).
2376
2385
2377 * IPython/iplib.py (InteractiveShell.interact): don't increment
2386 * IPython/iplib.py (InteractiveShell.interact): don't increment
2378 the prompt if there's no user input. By Daniel 'Dang' Griffith
2387 the prompt if there's no user input. By Daniel 'Dang' Griffith
2379 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2388 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2380 Francois Pinard.
2389 Francois Pinard.
2381
2390
2382 2004-04-02 Fernando Perez <fperez@colorado.edu>
2391 2004-04-02 Fernando Perez <fperez@colorado.edu>
2383
2392
2384 * IPython/genutils.py (Stream.__init__): Modified to survive at
2393 * IPython/genutils.py (Stream.__init__): Modified to survive at
2385 least importing in contexts where stdin/out/err aren't true file
2394 least importing in contexts where stdin/out/err aren't true file
2386 objects, such as PyCrust (they lack fileno() and mode). However,
2395 objects, such as PyCrust (they lack fileno() and mode). However,
2387 the recovery facilities which rely on these things existing will
2396 the recovery facilities which rely on these things existing will
2388 not work.
2397 not work.
2389
2398
2390 2004-04-01 Fernando Perez <fperez@colorado.edu>
2399 2004-04-01 Fernando Perez <fperez@colorado.edu>
2391
2400
2392 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2401 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2393 use the new getoutputerror() function, so it properly
2402 use the new getoutputerror() function, so it properly
2394 distinguishes stdout/err.
2403 distinguishes stdout/err.
2395
2404
2396 * IPython/genutils.py (getoutputerror): added a function to
2405 * IPython/genutils.py (getoutputerror): added a function to
2397 capture separately the standard output and error of a command.
2406 capture separately the standard output and error of a command.
2398 After a comment from dang on the mailing lists. This code is
2407 After a comment from dang on the mailing lists. This code is
2399 basically a modified version of commands.getstatusoutput(), from
2408 basically a modified version of commands.getstatusoutput(), from
2400 the standard library.
2409 the standard library.
2401
2410
2402 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2411 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2403 '!!' as a special syntax (shorthand) to access @sx.
2412 '!!' as a special syntax (shorthand) to access @sx.
2404
2413
2405 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2414 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2406 command and return its output as a list split on '\n'.
2415 command and return its output as a list split on '\n'.
2407
2416
2408 2004-03-31 Fernando Perez <fperez@colorado.edu>
2417 2004-03-31 Fernando Perez <fperez@colorado.edu>
2409
2418
2410 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2419 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2411 method to dictionaries used as FakeModule instances if they lack
2420 method to dictionaries used as FakeModule instances if they lack
2412 it. At least pydoc in python2.3 breaks for runtime-defined
2421 it. At least pydoc in python2.3 breaks for runtime-defined
2413 functions without this hack. At some point I need to _really_
2422 functions without this hack. At some point I need to _really_
2414 understand what FakeModule is doing, because it's a gross hack.
2423 understand what FakeModule is doing, because it's a gross hack.
2415 But it solves Arnd's problem for now...
2424 But it solves Arnd's problem for now...
2416
2425
2417 2004-02-27 Fernando Perez <fperez@colorado.edu>
2426 2004-02-27 Fernando Perez <fperez@colorado.edu>
2418
2427
2419 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2428 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2420 mode would behave erratically. Also increased the number of
2429 mode would behave erratically. Also increased the number of
2421 possible logs in rotate mod to 999. Thanks to Rod Holland
2430 possible logs in rotate mod to 999. Thanks to Rod Holland
2422 <rhh@StructureLABS.com> for the report and fixes.
2431 <rhh@StructureLABS.com> for the report and fixes.
2423
2432
2424 2004-02-26 Fernando Perez <fperez@colorado.edu>
2433 2004-02-26 Fernando Perez <fperez@colorado.edu>
2425
2434
2426 * IPython/genutils.py (page): Check that the curses module really
2435 * IPython/genutils.py (page): Check that the curses module really
2427 has the initscr attribute before trying to use it. For some
2436 has the initscr attribute before trying to use it. For some
2428 reason, the Solaris curses module is missing this. I think this
2437 reason, the Solaris curses module is missing this. I think this
2429 should be considered a Solaris python bug, but I'm not sure.
2438 should be considered a Solaris python bug, but I'm not sure.
2430
2439
2431 2004-01-17 Fernando Perez <fperez@colorado.edu>
2440 2004-01-17 Fernando Perez <fperez@colorado.edu>
2432
2441
2433 * IPython/genutils.py (Stream.__init__): Changes to try to make
2442 * IPython/genutils.py (Stream.__init__): Changes to try to make
2434 ipython robust against stdin/out/err being closed by the user.
2443 ipython robust against stdin/out/err being closed by the user.
2435 This is 'user error' (and blocks a normal python session, at least
2444 This is 'user error' (and blocks a normal python session, at least
2436 the stdout case). However, Ipython should be able to survive such
2445 the stdout case). However, Ipython should be able to survive such
2437 instances of abuse as gracefully as possible. To simplify the
2446 instances of abuse as gracefully as possible. To simplify the
2438 coding and maintain compatibility with Gary Bishop's Term
2447 coding and maintain compatibility with Gary Bishop's Term
2439 contributions, I've made use of classmethods for this. I think
2448 contributions, I've made use of classmethods for this. I think
2440 this introduces a dependency on python 2.2.
2449 this introduces a dependency on python 2.2.
2441
2450
2442 2004-01-13 Fernando Perez <fperez@colorado.edu>
2451 2004-01-13 Fernando Perez <fperez@colorado.edu>
2443
2452
2444 * IPython/numutils.py (exp_safe): simplified the code a bit and
2453 * IPython/numutils.py (exp_safe): simplified the code a bit and
2445 removed the need for importing the kinds module altogether.
2454 removed the need for importing the kinds module altogether.
2446
2455
2447 2004-01-06 Fernando Perez <fperez@colorado.edu>
2456 2004-01-06 Fernando Perez <fperez@colorado.edu>
2448
2457
2449 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2458 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2450 a magic function instead, after some community feedback. No
2459 a magic function instead, after some community feedback. No
2451 special syntax will exist for it, but its name is deliberately
2460 special syntax will exist for it, but its name is deliberately
2452 very short.
2461 very short.
2453
2462
2454 2003-12-20 Fernando Perez <fperez@colorado.edu>
2463 2003-12-20 Fernando Perez <fperez@colorado.edu>
2455
2464
2456 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2465 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2457 new functionality, to automagically assign the result of a shell
2466 new functionality, to automagically assign the result of a shell
2458 command to a variable. I'll solicit some community feedback on
2467 command to a variable. I'll solicit some community feedback on
2459 this before making it permanent.
2468 this before making it permanent.
2460
2469
2461 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2470 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2462 requested about callables for which inspect couldn't obtain a
2471 requested about callables for which inspect couldn't obtain a
2463 proper argspec. Thanks to a crash report sent by Etienne
2472 proper argspec. Thanks to a crash report sent by Etienne
2464 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2473 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2465
2474
2466 2003-12-09 Fernando Perez <fperez@colorado.edu>
2475 2003-12-09 Fernando Perez <fperez@colorado.edu>
2467
2476
2468 * IPython/genutils.py (page): patch for the pager to work across
2477 * IPython/genutils.py (page): patch for the pager to work across
2469 various versions of Windows. By Gary Bishop.
2478 various versions of Windows. By Gary Bishop.
2470
2479
2471 2003-12-04 Fernando Perez <fperez@colorado.edu>
2480 2003-12-04 Fernando Perez <fperez@colorado.edu>
2472
2481
2473 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2482 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2474 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2483 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2475 While I tested this and it looks ok, there may still be corner
2484 While I tested this and it looks ok, there may still be corner
2476 cases I've missed.
2485 cases I've missed.
2477
2486
2478 2003-12-01 Fernando Perez <fperez@colorado.edu>
2487 2003-12-01 Fernando Perez <fperez@colorado.edu>
2479
2488
2480 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2489 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2481 where a line like 'p,q=1,2' would fail because the automagic
2490 where a line like 'p,q=1,2' would fail because the automagic
2482 system would be triggered for @p.
2491 system would be triggered for @p.
2483
2492
2484 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2493 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2485 cleanups, code unmodified.
2494 cleanups, code unmodified.
2486
2495
2487 * IPython/genutils.py (Term): added a class for IPython to handle
2496 * IPython/genutils.py (Term): added a class for IPython to handle
2488 output. In most cases it will just be a proxy for stdout/err, but
2497 output. In most cases it will just be a proxy for stdout/err, but
2489 having this allows modifications to be made for some platforms,
2498 having this allows modifications to be made for some platforms,
2490 such as handling color escapes under Windows. All of this code
2499 such as handling color escapes under Windows. All of this code
2491 was contributed by Gary Bishop, with minor modifications by me.
2500 was contributed by Gary Bishop, with minor modifications by me.
2492 The actual changes affect many files.
2501 The actual changes affect many files.
2493
2502
2494 2003-11-30 Fernando Perez <fperez@colorado.edu>
2503 2003-11-30 Fernando Perez <fperez@colorado.edu>
2495
2504
2496 * IPython/iplib.py (file_matches): new completion code, courtesy
2505 * IPython/iplib.py (file_matches): new completion code, courtesy
2497 of Jeff Collins. This enables filename completion again under
2506 of Jeff Collins. This enables filename completion again under
2498 python 2.3, which disabled it at the C level.
2507 python 2.3, which disabled it at the C level.
2499
2508
2500 2003-11-11 Fernando Perez <fperez@colorado.edu>
2509 2003-11-11 Fernando Perez <fperez@colorado.edu>
2501
2510
2502 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2511 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2503 for Numeric.array(map(...)), but often convenient.
2512 for Numeric.array(map(...)), but often convenient.
2504
2513
2505 2003-11-05 Fernando Perez <fperez@colorado.edu>
2514 2003-11-05 Fernando Perez <fperez@colorado.edu>
2506
2515
2507 * IPython/numutils.py (frange): Changed a call from int() to
2516 * IPython/numutils.py (frange): Changed a call from int() to
2508 int(round()) to prevent a problem reported with arange() in the
2517 int(round()) to prevent a problem reported with arange() in the
2509 numpy list.
2518 numpy list.
2510
2519
2511 2003-10-06 Fernando Perez <fperez@colorado.edu>
2520 2003-10-06 Fernando Perez <fperez@colorado.edu>
2512
2521
2513 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2522 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2514 prevent crashes if sys lacks an argv attribute (it happens with
2523 prevent crashes if sys lacks an argv attribute (it happens with
2515 embedded interpreters which build a bare-bones sys module).
2524 embedded interpreters which build a bare-bones sys module).
2516 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2525 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2517
2526
2518 2003-09-24 Fernando Perez <fperez@colorado.edu>
2527 2003-09-24 Fernando Perez <fperez@colorado.edu>
2519
2528
2520 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2529 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2521 to protect against poorly written user objects where __getattr__
2530 to protect against poorly written user objects where __getattr__
2522 raises exceptions other than AttributeError. Thanks to a bug
2531 raises exceptions other than AttributeError. Thanks to a bug
2523 report by Oliver Sander <osander-AT-gmx.de>.
2532 report by Oliver Sander <osander-AT-gmx.de>.
2524
2533
2525 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2534 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2526 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2535 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2527
2536
2528 2003-09-09 Fernando Perez <fperez@colorado.edu>
2537 2003-09-09 Fernando Perez <fperez@colorado.edu>
2529
2538
2530 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2539 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2531 unpacking a list whith a callable as first element would
2540 unpacking a list whith a callable as first element would
2532 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2541 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2533 Collins.
2542 Collins.
2534
2543
2535 2003-08-25 *** Released version 0.5.0
2544 2003-08-25 *** Released version 0.5.0
2536
2545
2537 2003-08-22 Fernando Perez <fperez@colorado.edu>
2546 2003-08-22 Fernando Perez <fperez@colorado.edu>
2538
2547
2539 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2548 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2540 improperly defined user exceptions. Thanks to feedback from Mark
2549 improperly defined user exceptions. Thanks to feedback from Mark
2541 Russell <mrussell-AT-verio.net>.
2550 Russell <mrussell-AT-verio.net>.
2542
2551
2543 2003-08-20 Fernando Perez <fperez@colorado.edu>
2552 2003-08-20 Fernando Perez <fperez@colorado.edu>
2544
2553
2545 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2554 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2546 printing so that it would print multi-line string forms starting
2555 printing so that it would print multi-line string forms starting
2547 with a new line. This way the formatting is better respected for
2556 with a new line. This way the formatting is better respected for
2548 objects which work hard to make nice string forms.
2557 objects which work hard to make nice string forms.
2549
2558
2550 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2559 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2551 autocall would overtake data access for objects with both
2560 autocall would overtake data access for objects with both
2552 __getitem__ and __call__.
2561 __getitem__ and __call__.
2553
2562
2554 2003-08-19 *** Released version 0.5.0-rc1
2563 2003-08-19 *** Released version 0.5.0-rc1
2555
2564
2556 2003-08-19 Fernando Perez <fperez@colorado.edu>
2565 2003-08-19 Fernando Perez <fperez@colorado.edu>
2557
2566
2558 * IPython/deep_reload.py (load_tail): single tiny change here
2567 * IPython/deep_reload.py (load_tail): single tiny change here
2559 seems to fix the long-standing bug of dreload() failing to work
2568 seems to fix the long-standing bug of dreload() failing to work
2560 for dotted names. But this module is pretty tricky, so I may have
2569 for dotted names. But this module is pretty tricky, so I may have
2561 missed some subtlety. Needs more testing!.
2570 missed some subtlety. Needs more testing!.
2562
2571
2563 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2572 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2564 exceptions which have badly implemented __str__ methods.
2573 exceptions which have badly implemented __str__ methods.
2565 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2574 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2566 which I've been getting reports about from Python 2.3 users. I
2575 which I've been getting reports about from Python 2.3 users. I
2567 wish I had a simple test case to reproduce the problem, so I could
2576 wish I had a simple test case to reproduce the problem, so I could
2568 either write a cleaner workaround or file a bug report if
2577 either write a cleaner workaround or file a bug report if
2569 necessary.
2578 necessary.
2570
2579
2571 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2580 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2572 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2581 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2573 a bug report by Tjabo Kloppenburg.
2582 a bug report by Tjabo Kloppenburg.
2574
2583
2575 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2584 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2576 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2585 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2577 seems rather unstable. Thanks to a bug report by Tjabo
2586 seems rather unstable. Thanks to a bug report by Tjabo
2578 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2587 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2579
2588
2580 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2589 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2581 this out soon because of the critical fixes in the inner loop for
2590 this out soon because of the critical fixes in the inner loop for
2582 generators.
2591 generators.
2583
2592
2584 * IPython/Magic.py (Magic.getargspec): removed. This (and
2593 * IPython/Magic.py (Magic.getargspec): removed. This (and
2585 _get_def) have been obsoleted by OInspect for a long time, I
2594 _get_def) have been obsoleted by OInspect for a long time, I
2586 hadn't noticed that they were dead code.
2595 hadn't noticed that they were dead code.
2587 (Magic._ofind): restored _ofind functionality for a few literals
2596 (Magic._ofind): restored _ofind functionality for a few literals
2588 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2597 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2589 for things like "hello".capitalize?, since that would require a
2598 for things like "hello".capitalize?, since that would require a
2590 potentially dangerous eval() again.
2599 potentially dangerous eval() again.
2591
2600
2592 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2601 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2593 logic a bit more to clean up the escapes handling and minimize the
2602 logic a bit more to clean up the escapes handling and minimize the
2594 use of _ofind to only necessary cases. The interactive 'feel' of
2603 use of _ofind to only necessary cases. The interactive 'feel' of
2595 IPython should have improved quite a bit with the changes in
2604 IPython should have improved quite a bit with the changes in
2596 _prefilter and _ofind (besides being far safer than before).
2605 _prefilter and _ofind (besides being far safer than before).
2597
2606
2598 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2607 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2599 obscure, never reported). Edit would fail to find the object to
2608 obscure, never reported). Edit would fail to find the object to
2600 edit under some circumstances.
2609 edit under some circumstances.
2601 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2610 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2602 which were causing double-calling of generators. Those eval calls
2611 which were causing double-calling of generators. Those eval calls
2603 were _very_ dangerous, since code with side effects could be
2612 were _very_ dangerous, since code with side effects could be
2604 triggered. As they say, 'eval is evil'... These were the
2613 triggered. As they say, 'eval is evil'... These were the
2605 nastiest evals in IPython. Besides, _ofind is now far simpler,
2614 nastiest evals in IPython. Besides, _ofind is now far simpler,
2606 and it should also be quite a bit faster. Its use of inspect is
2615 and it should also be quite a bit faster. Its use of inspect is
2607 also safer, so perhaps some of the inspect-related crashes I've
2616 also safer, so perhaps some of the inspect-related crashes I've
2608 seen lately with Python 2.3 might be taken care of. That will
2617 seen lately with Python 2.3 might be taken care of. That will
2609 need more testing.
2618 need more testing.
2610
2619
2611 2003-08-17 Fernando Perez <fperez@colorado.edu>
2620 2003-08-17 Fernando Perez <fperez@colorado.edu>
2612
2621
2613 * IPython/iplib.py (InteractiveShell._prefilter): significant
2622 * IPython/iplib.py (InteractiveShell._prefilter): significant
2614 simplifications to the logic for handling user escapes. Faster
2623 simplifications to the logic for handling user escapes. Faster
2615 and simpler code.
2624 and simpler code.
2616
2625
2617 2003-08-14 Fernando Perez <fperez@colorado.edu>
2626 2003-08-14 Fernando Perez <fperez@colorado.edu>
2618
2627
2619 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2628 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2620 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2629 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2621 but it should be quite a bit faster. And the recursive version
2630 but it should be quite a bit faster. And the recursive version
2622 generated O(log N) intermediate storage for all rank>1 arrays,
2631 generated O(log N) intermediate storage for all rank>1 arrays,
2623 even if they were contiguous.
2632 even if they were contiguous.
2624 (l1norm): Added this function.
2633 (l1norm): Added this function.
2625 (norm): Added this function for arbitrary norms (including
2634 (norm): Added this function for arbitrary norms (including
2626 l-infinity). l1 and l2 are still special cases for convenience
2635 l-infinity). l1 and l2 are still special cases for convenience
2627 and speed.
2636 and speed.
2628
2637
2629 2003-08-03 Fernando Perez <fperez@colorado.edu>
2638 2003-08-03 Fernando Perez <fperez@colorado.edu>
2630
2639
2631 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2640 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2632 exceptions, which now raise PendingDeprecationWarnings in Python
2641 exceptions, which now raise PendingDeprecationWarnings in Python
2633 2.3. There were some in Magic and some in Gnuplot2.
2642 2.3. There were some in Magic and some in Gnuplot2.
2634
2643
2635 2003-06-30 Fernando Perez <fperez@colorado.edu>
2644 2003-06-30 Fernando Perez <fperez@colorado.edu>
2636
2645
2637 * IPython/genutils.py (page): modified to call curses only for
2646 * IPython/genutils.py (page): modified to call curses only for
2638 terminals where TERM=='xterm'. After problems under many other
2647 terminals where TERM=='xterm'. After problems under many other
2639 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2648 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2640
2649
2641 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2650 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2642 would be triggered when readline was absent. This was just an old
2651 would be triggered when readline was absent. This was just an old
2643 debugging statement I'd forgotten to take out.
2652 debugging statement I'd forgotten to take out.
2644
2653
2645 2003-06-20 Fernando Perez <fperez@colorado.edu>
2654 2003-06-20 Fernando Perez <fperez@colorado.edu>
2646
2655
2647 * IPython/genutils.py (clock): modified to return only user time
2656 * IPython/genutils.py (clock): modified to return only user time
2648 (not counting system time), after a discussion on scipy. While
2657 (not counting system time), after a discussion on scipy. While
2649 system time may be a useful quantity occasionally, it may much
2658 system time may be a useful quantity occasionally, it may much
2650 more easily be skewed by occasional swapping or other similar
2659 more easily be skewed by occasional swapping or other similar
2651 activity.
2660 activity.
2652
2661
2653 2003-06-05 Fernando Perez <fperez@colorado.edu>
2662 2003-06-05 Fernando Perez <fperez@colorado.edu>
2654
2663
2655 * IPython/numutils.py (identity): new function, for building
2664 * IPython/numutils.py (identity): new function, for building
2656 arbitrary rank Kronecker deltas (mostly backwards compatible with
2665 arbitrary rank Kronecker deltas (mostly backwards compatible with
2657 Numeric.identity)
2666 Numeric.identity)
2658
2667
2659 2003-06-03 Fernando Perez <fperez@colorado.edu>
2668 2003-06-03 Fernando Perez <fperez@colorado.edu>
2660
2669
2661 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2670 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2662 arguments passed to magics with spaces, to allow trailing '\' to
2671 arguments passed to magics with spaces, to allow trailing '\' to
2663 work normally (mainly for Windows users).
2672 work normally (mainly for Windows users).
2664
2673
2665 2003-05-29 Fernando Perez <fperez@colorado.edu>
2674 2003-05-29 Fernando Perez <fperez@colorado.edu>
2666
2675
2667 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2676 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2668 instead of pydoc.help. This fixes a bizarre behavior where
2677 instead of pydoc.help. This fixes a bizarre behavior where
2669 printing '%s' % locals() would trigger the help system. Now
2678 printing '%s' % locals() would trigger the help system. Now
2670 ipython behaves like normal python does.
2679 ipython behaves like normal python does.
2671
2680
2672 Note that if one does 'from pydoc import help', the bizarre
2681 Note that if one does 'from pydoc import help', the bizarre
2673 behavior returns, but this will also happen in normal python, so
2682 behavior returns, but this will also happen in normal python, so
2674 it's not an ipython bug anymore (it has to do with how pydoc.help
2683 it's not an ipython bug anymore (it has to do with how pydoc.help
2675 is implemented).
2684 is implemented).
2676
2685
2677 2003-05-22 Fernando Perez <fperez@colorado.edu>
2686 2003-05-22 Fernando Perez <fperez@colorado.edu>
2678
2687
2679 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2688 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2680 return [] instead of None when nothing matches, also match to end
2689 return [] instead of None when nothing matches, also match to end
2681 of line. Patch by Gary Bishop.
2690 of line. Patch by Gary Bishop.
2682
2691
2683 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2692 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2684 protection as before, for files passed on the command line. This
2693 protection as before, for files passed on the command line. This
2685 prevents the CrashHandler from kicking in if user files call into
2694 prevents the CrashHandler from kicking in if user files call into
2686 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2695 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2687 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2696 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2688
2697
2689 2003-05-20 *** Released version 0.4.0
2698 2003-05-20 *** Released version 0.4.0
2690
2699
2691 2003-05-20 Fernando Perez <fperez@colorado.edu>
2700 2003-05-20 Fernando Perez <fperez@colorado.edu>
2692
2701
2693 * setup.py: added support for manpages. It's a bit hackish b/c of
2702 * setup.py: added support for manpages. It's a bit hackish b/c of
2694 a bug in the way the bdist_rpm distutils target handles gzipped
2703 a bug in the way the bdist_rpm distutils target handles gzipped
2695 manpages, but it works. After a patch by Jack.
2704 manpages, but it works. After a patch by Jack.
2696
2705
2697 2003-05-19 Fernando Perez <fperez@colorado.edu>
2706 2003-05-19 Fernando Perez <fperez@colorado.edu>
2698
2707
2699 * IPython/numutils.py: added a mockup of the kinds module, since
2708 * IPython/numutils.py: added a mockup of the kinds module, since
2700 it was recently removed from Numeric. This way, numutils will
2709 it was recently removed from Numeric. This way, numutils will
2701 work for all users even if they are missing kinds.
2710 work for all users even if they are missing kinds.
2702
2711
2703 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2712 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2704 failure, which can occur with SWIG-wrapped extensions. After a
2713 failure, which can occur with SWIG-wrapped extensions. After a
2705 crash report from Prabhu.
2714 crash report from Prabhu.
2706
2715
2707 2003-05-16 Fernando Perez <fperez@colorado.edu>
2716 2003-05-16 Fernando Perez <fperez@colorado.edu>
2708
2717
2709 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2718 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2710 protect ipython from user code which may call directly
2719 protect ipython from user code which may call directly
2711 sys.excepthook (this looks like an ipython crash to the user, even
2720 sys.excepthook (this looks like an ipython crash to the user, even
2712 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2721 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2713 This is especially important to help users of WxWindows, but may
2722 This is especially important to help users of WxWindows, but may
2714 also be useful in other cases.
2723 also be useful in other cases.
2715
2724
2716 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2725 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2717 an optional tb_offset to be specified, and to preserve exception
2726 an optional tb_offset to be specified, and to preserve exception
2718 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2727 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2719
2728
2720 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2729 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2721
2730
2722 2003-05-15 Fernando Perez <fperez@colorado.edu>
2731 2003-05-15 Fernando Perez <fperez@colorado.edu>
2723
2732
2724 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2733 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2725 installing for a new user under Windows.
2734 installing for a new user under Windows.
2726
2735
2727 2003-05-12 Fernando Perez <fperez@colorado.edu>
2736 2003-05-12 Fernando Perez <fperez@colorado.edu>
2728
2737
2729 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2738 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2730 handler for Emacs comint-based lines. Currently it doesn't do
2739 handler for Emacs comint-based lines. Currently it doesn't do
2731 much (but importantly, it doesn't update the history cache). In
2740 much (but importantly, it doesn't update the history cache). In
2732 the future it may be expanded if Alex needs more functionality
2741 the future it may be expanded if Alex needs more functionality
2733 there.
2742 there.
2734
2743
2735 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2744 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2736 info to crash reports.
2745 info to crash reports.
2737
2746
2738 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2747 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2739 just like Python's -c. Also fixed crash with invalid -color
2748 just like Python's -c. Also fixed crash with invalid -color
2740 option value at startup. Thanks to Will French
2749 option value at startup. Thanks to Will French
2741 <wfrench-AT-bestweb.net> for the bug report.
2750 <wfrench-AT-bestweb.net> for the bug report.
2742
2751
2743 2003-05-09 Fernando Perez <fperez@colorado.edu>
2752 2003-05-09 Fernando Perez <fperez@colorado.edu>
2744
2753
2745 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2754 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2746 to EvalDict (it's a mapping, after all) and simplified its code
2755 to EvalDict (it's a mapping, after all) and simplified its code
2747 quite a bit, after a nice discussion on c.l.py where Gustavo
2756 quite a bit, after a nice discussion on c.l.py where Gustavo
2748 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2757 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2749
2758
2750 2003-04-30 Fernando Perez <fperez@colorado.edu>
2759 2003-04-30 Fernando Perez <fperez@colorado.edu>
2751
2760
2752 * IPython/genutils.py (timings_out): modified it to reduce its
2761 * IPython/genutils.py (timings_out): modified it to reduce its
2753 overhead in the common reps==1 case.
2762 overhead in the common reps==1 case.
2754
2763
2755 2003-04-29 Fernando Perez <fperez@colorado.edu>
2764 2003-04-29 Fernando Perez <fperez@colorado.edu>
2756
2765
2757 * IPython/genutils.py (timings_out): Modified to use the resource
2766 * IPython/genutils.py (timings_out): Modified to use the resource
2758 module, which avoids the wraparound problems of time.clock().
2767 module, which avoids the wraparound problems of time.clock().
2759
2768
2760 2003-04-17 *** Released version 0.2.15pre4
2769 2003-04-17 *** Released version 0.2.15pre4
2761
2770
2762 2003-04-17 Fernando Perez <fperez@colorado.edu>
2771 2003-04-17 Fernando Perez <fperez@colorado.edu>
2763
2772
2764 * setup.py (scriptfiles): Split windows-specific stuff over to a
2773 * setup.py (scriptfiles): Split windows-specific stuff over to a
2765 separate file, in an attempt to have a Windows GUI installer.
2774 separate file, in an attempt to have a Windows GUI installer.
2766 That didn't work, but part of the groundwork is done.
2775 That didn't work, but part of the groundwork is done.
2767
2776
2768 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2777 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2769 indent/unindent with 4 spaces. Particularly useful in combination
2778 indent/unindent with 4 spaces. Particularly useful in combination
2770 with the new auto-indent option.
2779 with the new auto-indent option.
2771
2780
2772 2003-04-16 Fernando Perez <fperez@colorado.edu>
2781 2003-04-16 Fernando Perez <fperez@colorado.edu>
2773
2782
2774 * IPython/Magic.py: various replacements of self.rc for
2783 * IPython/Magic.py: various replacements of self.rc for
2775 self.shell.rc. A lot more remains to be done to fully disentangle
2784 self.shell.rc. A lot more remains to be done to fully disentangle
2776 this class from the main Shell class.
2785 this class from the main Shell class.
2777
2786
2778 * IPython/GnuplotRuntime.py: added checks for mouse support so
2787 * IPython/GnuplotRuntime.py: added checks for mouse support so
2779 that we don't try to enable it if the current gnuplot doesn't
2788 that we don't try to enable it if the current gnuplot doesn't
2780 really support it. Also added checks so that we don't try to
2789 really support it. Also added checks so that we don't try to
2781 enable persist under Windows (where Gnuplot doesn't recognize the
2790 enable persist under Windows (where Gnuplot doesn't recognize the
2782 option).
2791 option).
2783
2792
2784 * IPython/iplib.py (InteractiveShell.interact): Added optional
2793 * IPython/iplib.py (InteractiveShell.interact): Added optional
2785 auto-indenting code, after a patch by King C. Shu
2794 auto-indenting code, after a patch by King C. Shu
2786 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2795 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2787 get along well with pasting indented code. If I ever figure out
2796 get along well with pasting indented code. If I ever figure out
2788 how to make that part go well, it will become on by default.
2797 how to make that part go well, it will become on by default.
2789
2798
2790 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2799 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2791 crash ipython if there was an unmatched '%' in the user's prompt
2800 crash ipython if there was an unmatched '%' in the user's prompt
2792 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2801 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2793
2802
2794 * IPython/iplib.py (InteractiveShell.interact): removed the
2803 * IPython/iplib.py (InteractiveShell.interact): removed the
2795 ability to ask the user whether he wants to crash or not at the
2804 ability to ask the user whether he wants to crash or not at the
2796 'last line' exception handler. Calling functions at that point
2805 'last line' exception handler. Calling functions at that point
2797 changes the stack, and the error reports would have incorrect
2806 changes the stack, and the error reports would have incorrect
2798 tracebacks.
2807 tracebacks.
2799
2808
2800 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2809 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2801 pass through a peger a pretty-printed form of any object. After a
2810 pass through a peger a pretty-printed form of any object. After a
2802 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2811 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2803
2812
2804 2003-04-14 Fernando Perez <fperez@colorado.edu>
2813 2003-04-14 Fernando Perez <fperez@colorado.edu>
2805
2814
2806 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2815 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2807 all files in ~ would be modified at first install (instead of
2816 all files in ~ would be modified at first install (instead of
2808 ~/.ipython). This could be potentially disastrous, as the
2817 ~/.ipython). This could be potentially disastrous, as the
2809 modification (make line-endings native) could damage binary files.
2818 modification (make line-endings native) could damage binary files.
2810
2819
2811 2003-04-10 Fernando Perez <fperez@colorado.edu>
2820 2003-04-10 Fernando Perez <fperez@colorado.edu>
2812
2821
2813 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2822 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2814 handle only lines which are invalid python. This now means that
2823 handle only lines which are invalid python. This now means that
2815 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2824 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2816 for the bug report.
2825 for the bug report.
2817
2826
2818 2003-04-01 Fernando Perez <fperez@colorado.edu>
2827 2003-04-01 Fernando Perez <fperez@colorado.edu>
2819
2828
2820 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2829 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2821 where failing to set sys.last_traceback would crash pdb.pm().
2830 where failing to set sys.last_traceback would crash pdb.pm().
2822 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2831 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2823 report.
2832 report.
2824
2833
2825 2003-03-25 Fernando Perez <fperez@colorado.edu>
2834 2003-03-25 Fernando Perez <fperez@colorado.edu>
2826
2835
2827 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2836 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2828 before printing it (it had a lot of spurious blank lines at the
2837 before printing it (it had a lot of spurious blank lines at the
2829 end).
2838 end).
2830
2839
2831 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2840 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2832 output would be sent 21 times! Obviously people don't use this
2841 output would be sent 21 times! Obviously people don't use this
2833 too often, or I would have heard about it.
2842 too often, or I would have heard about it.
2834
2843
2835 2003-03-24 Fernando Perez <fperez@colorado.edu>
2844 2003-03-24 Fernando Perez <fperez@colorado.edu>
2836
2845
2837 * setup.py (scriptfiles): renamed the data_files parameter from
2846 * setup.py (scriptfiles): renamed the data_files parameter from
2838 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2847 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2839 for the patch.
2848 for the patch.
2840
2849
2841 2003-03-20 Fernando Perez <fperez@colorado.edu>
2850 2003-03-20 Fernando Perez <fperez@colorado.edu>
2842
2851
2843 * IPython/genutils.py (error): added error() and fatal()
2852 * IPython/genutils.py (error): added error() and fatal()
2844 functions.
2853 functions.
2845
2854
2846 2003-03-18 *** Released version 0.2.15pre3
2855 2003-03-18 *** Released version 0.2.15pre3
2847
2856
2848 2003-03-18 Fernando Perez <fperez@colorado.edu>
2857 2003-03-18 Fernando Perez <fperez@colorado.edu>
2849
2858
2850 * setupext/install_data_ext.py
2859 * setupext/install_data_ext.py
2851 (install_data_ext.initialize_options): Class contributed by Jack
2860 (install_data_ext.initialize_options): Class contributed by Jack
2852 Moffit for fixing the old distutils hack. He is sending this to
2861 Moffit for fixing the old distutils hack. He is sending this to
2853 the distutils folks so in the future we may not need it as a
2862 the distutils folks so in the future we may not need it as a
2854 private fix.
2863 private fix.
2855
2864
2856 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2865 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2857 changes for Debian packaging. See his patch for full details.
2866 changes for Debian packaging. See his patch for full details.
2858 The old distutils hack of making the ipythonrc* files carry a
2867 The old distutils hack of making the ipythonrc* files carry a
2859 bogus .py extension is gone, at last. Examples were moved to a
2868 bogus .py extension is gone, at last. Examples were moved to a
2860 separate subdir under doc/, and the separate executable scripts
2869 separate subdir under doc/, and the separate executable scripts
2861 now live in their own directory. Overall a great cleanup. The
2870 now live in their own directory. Overall a great cleanup. The
2862 manual was updated to use the new files, and setup.py has been
2871 manual was updated to use the new files, and setup.py has been
2863 fixed for this setup.
2872 fixed for this setup.
2864
2873
2865 * IPython/PyColorize.py (Parser.usage): made non-executable and
2874 * IPython/PyColorize.py (Parser.usage): made non-executable and
2866 created a pycolor wrapper around it to be included as a script.
2875 created a pycolor wrapper around it to be included as a script.
2867
2876
2868 2003-03-12 *** Released version 0.2.15pre2
2877 2003-03-12 *** Released version 0.2.15pre2
2869
2878
2870 2003-03-12 Fernando Perez <fperez@colorado.edu>
2879 2003-03-12 Fernando Perez <fperez@colorado.edu>
2871
2880
2872 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2881 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2873 long-standing problem with garbage characters in some terminals.
2882 long-standing problem with garbage characters in some terminals.
2874 The issue was really that the \001 and \002 escapes must _only_ be
2883 The issue was really that the \001 and \002 escapes must _only_ be
2875 passed to input prompts (which call readline), but _never_ to
2884 passed to input prompts (which call readline), but _never_ to
2876 normal text to be printed on screen. I changed ColorANSI to have
2885 normal text to be printed on screen. I changed ColorANSI to have
2877 two classes: TermColors and InputTermColors, each with the
2886 two classes: TermColors and InputTermColors, each with the
2878 appropriate escapes for input prompts or normal text. The code in
2887 appropriate escapes for input prompts or normal text. The code in
2879 Prompts.py got slightly more complicated, but this very old and
2888 Prompts.py got slightly more complicated, but this very old and
2880 annoying bug is finally fixed.
2889 annoying bug is finally fixed.
2881
2890
2882 All the credit for nailing down the real origin of this problem
2891 All the credit for nailing down the real origin of this problem
2883 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2892 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2884 *Many* thanks to him for spending quite a bit of effort on this.
2893 *Many* thanks to him for spending quite a bit of effort on this.
2885
2894
2886 2003-03-05 *** Released version 0.2.15pre1
2895 2003-03-05 *** Released version 0.2.15pre1
2887
2896
2888 2003-03-03 Fernando Perez <fperez@colorado.edu>
2897 2003-03-03 Fernando Perez <fperez@colorado.edu>
2889
2898
2890 * IPython/FakeModule.py: Moved the former _FakeModule to a
2899 * IPython/FakeModule.py: Moved the former _FakeModule to a
2891 separate file, because it's also needed by Magic (to fix a similar
2900 separate file, because it's also needed by Magic (to fix a similar
2892 pickle-related issue in @run).
2901 pickle-related issue in @run).
2893
2902
2894 2003-03-02 Fernando Perez <fperez@colorado.edu>
2903 2003-03-02 Fernando Perez <fperez@colorado.edu>
2895
2904
2896 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2905 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2897 the autocall option at runtime.
2906 the autocall option at runtime.
2898 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2907 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2899 across Magic.py to start separating Magic from InteractiveShell.
2908 across Magic.py to start separating Magic from InteractiveShell.
2900 (Magic._ofind): Fixed to return proper namespace for dotted
2909 (Magic._ofind): Fixed to return proper namespace for dotted
2901 names. Before, a dotted name would always return 'not currently
2910 names. Before, a dotted name would always return 'not currently
2902 defined', because it would find the 'parent'. s.x would be found,
2911 defined', because it would find the 'parent'. s.x would be found,
2903 but since 'x' isn't defined by itself, it would get confused.
2912 but since 'x' isn't defined by itself, it would get confused.
2904 (Magic.magic_run): Fixed pickling problems reported by Ralf
2913 (Magic.magic_run): Fixed pickling problems reported by Ralf
2905 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2914 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2906 that I'd used when Mike Heeter reported similar issues at the
2915 that I'd used when Mike Heeter reported similar issues at the
2907 top-level, but now for @run. It boils down to injecting the
2916 top-level, but now for @run. It boils down to injecting the
2908 namespace where code is being executed with something that looks
2917 namespace where code is being executed with something that looks
2909 enough like a module to fool pickle.dump(). Since a pickle stores
2918 enough like a module to fool pickle.dump(). Since a pickle stores
2910 a named reference to the importing module, we need this for
2919 a named reference to the importing module, we need this for
2911 pickles to save something sensible.
2920 pickles to save something sensible.
2912
2921
2913 * IPython/ipmaker.py (make_IPython): added an autocall option.
2922 * IPython/ipmaker.py (make_IPython): added an autocall option.
2914
2923
2915 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2924 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2916 the auto-eval code. Now autocalling is an option, and the code is
2925 the auto-eval code. Now autocalling is an option, and the code is
2917 also vastly safer. There is no more eval() involved at all.
2926 also vastly safer. There is no more eval() involved at all.
2918
2927
2919 2003-03-01 Fernando Perez <fperez@colorado.edu>
2928 2003-03-01 Fernando Perez <fperez@colorado.edu>
2920
2929
2921 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2930 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2922 dict with named keys instead of a tuple.
2931 dict with named keys instead of a tuple.
2923
2932
2924 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2933 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2925
2934
2926 * setup.py (make_shortcut): Fixed message about directories
2935 * setup.py (make_shortcut): Fixed message about directories
2927 created during Windows installation (the directories were ok, just
2936 created during Windows installation (the directories were ok, just
2928 the printed message was misleading). Thanks to Chris Liechti
2937 the printed message was misleading). Thanks to Chris Liechti
2929 <cliechti-AT-gmx.net> for the heads up.
2938 <cliechti-AT-gmx.net> for the heads up.
2930
2939
2931 2003-02-21 Fernando Perez <fperez@colorado.edu>
2940 2003-02-21 Fernando Perez <fperez@colorado.edu>
2932
2941
2933 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2942 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2934 of ValueError exception when checking for auto-execution. This
2943 of ValueError exception when checking for auto-execution. This
2935 one is raised by things like Numeric arrays arr.flat when the
2944 one is raised by things like Numeric arrays arr.flat when the
2936 array is non-contiguous.
2945 array is non-contiguous.
2937
2946
2938 2003-01-31 Fernando Perez <fperez@colorado.edu>
2947 2003-01-31 Fernando Perez <fperez@colorado.edu>
2939
2948
2940 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2949 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2941 not return any value at all (even though the command would get
2950 not return any value at all (even though the command would get
2942 executed).
2951 executed).
2943 (xsys): Flush stdout right after printing the command to ensure
2952 (xsys): Flush stdout right after printing the command to ensure
2944 proper ordering of commands and command output in the total
2953 proper ordering of commands and command output in the total
2945 output.
2954 output.
2946 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2955 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2947 system/getoutput as defaults. The old ones are kept for
2956 system/getoutput as defaults. The old ones are kept for
2948 compatibility reasons, so no code which uses this library needs
2957 compatibility reasons, so no code which uses this library needs
2949 changing.
2958 changing.
2950
2959
2951 2003-01-27 *** Released version 0.2.14
2960 2003-01-27 *** Released version 0.2.14
2952
2961
2953 2003-01-25 Fernando Perez <fperez@colorado.edu>
2962 2003-01-25 Fernando Perez <fperez@colorado.edu>
2954
2963
2955 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2964 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2956 functions defined in previous edit sessions could not be re-edited
2965 functions defined in previous edit sessions could not be re-edited
2957 (because the temp files were immediately removed). Now temp files
2966 (because the temp files were immediately removed). Now temp files
2958 are removed only at IPython's exit.
2967 are removed only at IPython's exit.
2959 (Magic.magic_run): Improved @run to perform shell-like expansions
2968 (Magic.magic_run): Improved @run to perform shell-like expansions
2960 on its arguments (~users and $VARS). With this, @run becomes more
2969 on its arguments (~users and $VARS). With this, @run becomes more
2961 like a normal command-line.
2970 like a normal command-line.
2962
2971
2963 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2972 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2964 bugs related to embedding and cleaned up that code. A fairly
2973 bugs related to embedding and cleaned up that code. A fairly
2965 important one was the impossibility to access the global namespace
2974 important one was the impossibility to access the global namespace
2966 through the embedded IPython (only local variables were visible).
2975 through the embedded IPython (only local variables were visible).
2967
2976
2968 2003-01-14 Fernando Perez <fperez@colorado.edu>
2977 2003-01-14 Fernando Perez <fperez@colorado.edu>
2969
2978
2970 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2979 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2971 auto-calling to be a bit more conservative. Now it doesn't get
2980 auto-calling to be a bit more conservative. Now it doesn't get
2972 triggered if any of '!=()<>' are in the rest of the input line, to
2981 triggered if any of '!=()<>' are in the rest of the input line, to
2973 allow comparing callables. Thanks to Alex for the heads up.
2982 allow comparing callables. Thanks to Alex for the heads up.
2974
2983
2975 2003-01-07 Fernando Perez <fperez@colorado.edu>
2984 2003-01-07 Fernando Perez <fperez@colorado.edu>
2976
2985
2977 * IPython/genutils.py (page): fixed estimation of the number of
2986 * IPython/genutils.py (page): fixed estimation of the number of
2978 lines in a string to be paged to simply count newlines. This
2987 lines in a string to be paged to simply count newlines. This
2979 prevents over-guessing due to embedded escape sequences. A better
2988 prevents over-guessing due to embedded escape sequences. A better
2980 long-term solution would involve stripping out the control chars
2989 long-term solution would involve stripping out the control chars
2981 for the count, but it's potentially so expensive I just don't
2990 for the count, but it's potentially so expensive I just don't
2982 think it's worth doing.
2991 think it's worth doing.
2983
2992
2984 2002-12-19 *** Released version 0.2.14pre50
2993 2002-12-19 *** Released version 0.2.14pre50
2985
2994
2986 2002-12-19 Fernando Perez <fperez@colorado.edu>
2995 2002-12-19 Fernando Perez <fperez@colorado.edu>
2987
2996
2988 * tools/release (version): Changed release scripts to inform
2997 * tools/release (version): Changed release scripts to inform
2989 Andrea and build a NEWS file with a list of recent changes.
2998 Andrea and build a NEWS file with a list of recent changes.
2990
2999
2991 * IPython/ColorANSI.py (__all__): changed terminal detection
3000 * IPython/ColorANSI.py (__all__): changed terminal detection
2992 code. Seems to work better for xterms without breaking
3001 code. Seems to work better for xterms without breaking
2993 konsole. Will need more testing to determine if WinXP and Mac OSX
3002 konsole. Will need more testing to determine if WinXP and Mac OSX
2994 also work ok.
3003 also work ok.
2995
3004
2996 2002-12-18 *** Released version 0.2.14pre49
3005 2002-12-18 *** Released version 0.2.14pre49
2997
3006
2998 2002-12-18 Fernando Perez <fperez@colorado.edu>
3007 2002-12-18 Fernando Perez <fperez@colorado.edu>
2999
3008
3000 * Docs: added new info about Mac OSX, from Andrea.
3009 * Docs: added new info about Mac OSX, from Andrea.
3001
3010
3002 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3011 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3003 allow direct plotting of python strings whose format is the same
3012 allow direct plotting of python strings whose format is the same
3004 of gnuplot data files.
3013 of gnuplot data files.
3005
3014
3006 2002-12-16 Fernando Perez <fperez@colorado.edu>
3015 2002-12-16 Fernando Perez <fperez@colorado.edu>
3007
3016
3008 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3017 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3009 value of exit question to be acknowledged.
3018 value of exit question to be acknowledged.
3010
3019
3011 2002-12-03 Fernando Perez <fperez@colorado.edu>
3020 2002-12-03 Fernando Perez <fperez@colorado.edu>
3012
3021
3013 * IPython/ipmaker.py: removed generators, which had been added
3022 * IPython/ipmaker.py: removed generators, which had been added
3014 by mistake in an earlier debugging run. This was causing trouble
3023 by mistake in an earlier debugging run. This was causing trouble
3015 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3024 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3016 for pointing this out.
3025 for pointing this out.
3017
3026
3018 2002-11-17 Fernando Perez <fperez@colorado.edu>
3027 2002-11-17 Fernando Perez <fperez@colorado.edu>
3019
3028
3020 * Manual: updated the Gnuplot section.
3029 * Manual: updated the Gnuplot section.
3021
3030
3022 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3031 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3023 a much better split of what goes in Runtime and what goes in
3032 a much better split of what goes in Runtime and what goes in
3024 Interactive.
3033 Interactive.
3025
3034
3026 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3035 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3027 being imported from iplib.
3036 being imported from iplib.
3028
3037
3029 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3038 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3030 for command-passing. Now the global Gnuplot instance is called
3039 for command-passing. Now the global Gnuplot instance is called
3031 'gp' instead of 'g', which was really a far too fragile and
3040 'gp' instead of 'g', which was really a far too fragile and
3032 common name.
3041 common name.
3033
3042
3034 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3043 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3035 bounding boxes generated by Gnuplot for square plots.
3044 bounding boxes generated by Gnuplot for square plots.
3036
3045
3037 * IPython/genutils.py (popkey): new function added. I should
3046 * IPython/genutils.py (popkey): new function added. I should
3038 suggest this on c.l.py as a dict method, it seems useful.
3047 suggest this on c.l.py as a dict method, it seems useful.
3039
3048
3040 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3049 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3041 to transparently handle PostScript generation. MUCH better than
3050 to transparently handle PostScript generation. MUCH better than
3042 the previous plot_eps/replot_eps (which I removed now). The code
3051 the previous plot_eps/replot_eps (which I removed now). The code
3043 is also fairly clean and well documented now (including
3052 is also fairly clean and well documented now (including
3044 docstrings).
3053 docstrings).
3045
3054
3046 2002-11-13 Fernando Perez <fperez@colorado.edu>
3055 2002-11-13 Fernando Perez <fperez@colorado.edu>
3047
3056
3048 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3057 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3049 (inconsistent with options).
3058 (inconsistent with options).
3050
3059
3051 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3060 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3052 manually disabled, I don't know why. Fixed it.
3061 manually disabled, I don't know why. Fixed it.
3053 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3062 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3054 eps output.
3063 eps output.
3055
3064
3056 2002-11-12 Fernando Perez <fperez@colorado.edu>
3065 2002-11-12 Fernando Perez <fperez@colorado.edu>
3057
3066
3058 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3067 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3059 don't propagate up to caller. Fixes crash reported by François
3068 don't propagate up to caller. Fixes crash reported by François
3060 Pinard.
3069 Pinard.
3061
3070
3062 2002-11-09 Fernando Perez <fperez@colorado.edu>
3071 2002-11-09 Fernando Perez <fperez@colorado.edu>
3063
3072
3064 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3073 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3065 history file for new users.
3074 history file for new users.
3066 (make_IPython): fixed bug where initial install would leave the
3075 (make_IPython): fixed bug where initial install would leave the
3067 user running in the .ipython dir.
3076 user running in the .ipython dir.
3068 (make_IPython): fixed bug where config dir .ipython would be
3077 (make_IPython): fixed bug where config dir .ipython would be
3069 created regardless of the given -ipythondir option. Thanks to Cory
3078 created regardless of the given -ipythondir option. Thanks to Cory
3070 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3079 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3071
3080
3072 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3081 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3073 type confirmations. Will need to use it in all of IPython's code
3082 type confirmations. Will need to use it in all of IPython's code
3074 consistently.
3083 consistently.
3075
3084
3076 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3085 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3077 context to print 31 lines instead of the default 5. This will make
3086 context to print 31 lines instead of the default 5. This will make
3078 the crash reports extremely detailed in case the problem is in
3087 the crash reports extremely detailed in case the problem is in
3079 libraries I don't have access to.
3088 libraries I don't have access to.
3080
3089
3081 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3090 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3082 line of defense' code to still crash, but giving users fair
3091 line of defense' code to still crash, but giving users fair
3083 warning. I don't want internal errors to go unreported: if there's
3092 warning. I don't want internal errors to go unreported: if there's
3084 an internal problem, IPython should crash and generate a full
3093 an internal problem, IPython should crash and generate a full
3085 report.
3094 report.
3086
3095
3087 2002-11-08 Fernando Perez <fperez@colorado.edu>
3096 2002-11-08 Fernando Perez <fperez@colorado.edu>
3088
3097
3089 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3098 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3090 otherwise uncaught exceptions which can appear if people set
3099 otherwise uncaught exceptions which can appear if people set
3091 sys.stdout to something badly broken. Thanks to a crash report
3100 sys.stdout to something badly broken. Thanks to a crash report
3092 from henni-AT-mail.brainbot.com.
3101 from henni-AT-mail.brainbot.com.
3093
3102
3094 2002-11-04 Fernando Perez <fperez@colorado.edu>
3103 2002-11-04 Fernando Perez <fperez@colorado.edu>
3095
3104
3096 * IPython/iplib.py (InteractiveShell.interact): added
3105 * IPython/iplib.py (InteractiveShell.interact): added
3097 __IPYTHON__active to the builtins. It's a flag which goes on when
3106 __IPYTHON__active to the builtins. It's a flag which goes on when
3098 the interaction starts and goes off again when it stops. This
3107 the interaction starts and goes off again when it stops. This
3099 allows embedding code to detect being inside IPython. Before this
3108 allows embedding code to detect being inside IPython. Before this
3100 was done via __IPYTHON__, but that only shows that an IPython
3109 was done via __IPYTHON__, but that only shows that an IPython
3101 instance has been created.
3110 instance has been created.
3102
3111
3103 * IPython/Magic.py (Magic.magic_env): I realized that in a
3112 * IPython/Magic.py (Magic.magic_env): I realized that in a
3104 UserDict, instance.data holds the data as a normal dict. So I
3113 UserDict, instance.data holds the data as a normal dict. So I
3105 modified @env to return os.environ.data instead of rebuilding a
3114 modified @env to return os.environ.data instead of rebuilding a
3106 dict by hand.
3115 dict by hand.
3107
3116
3108 2002-11-02 Fernando Perez <fperez@colorado.edu>
3117 2002-11-02 Fernando Perez <fperez@colorado.edu>
3109
3118
3110 * IPython/genutils.py (warn): changed so that level 1 prints no
3119 * IPython/genutils.py (warn): changed so that level 1 prints no
3111 header. Level 2 is now the default (with 'WARNING' header, as
3120 header. Level 2 is now the default (with 'WARNING' header, as
3112 before). I think I tracked all places where changes were needed in
3121 before). I think I tracked all places where changes were needed in
3113 IPython, but outside code using the old level numbering may have
3122 IPython, but outside code using the old level numbering may have
3114 broken.
3123 broken.
3115
3124
3116 * IPython/iplib.py (InteractiveShell.runcode): added this to
3125 * IPython/iplib.py (InteractiveShell.runcode): added this to
3117 handle the tracebacks in SystemExit traps correctly. The previous
3126 handle the tracebacks in SystemExit traps correctly. The previous
3118 code (through interact) was printing more of the stack than
3127 code (through interact) was printing more of the stack than
3119 necessary, showing IPython internal code to the user.
3128 necessary, showing IPython internal code to the user.
3120
3129
3121 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3130 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3122 default. Now that the default at the confirmation prompt is yes,
3131 default. Now that the default at the confirmation prompt is yes,
3123 it's not so intrusive. François' argument that ipython sessions
3132 it's not so intrusive. François' argument that ipython sessions
3124 tend to be complex enough not to lose them from an accidental C-d,
3133 tend to be complex enough not to lose them from an accidental C-d,
3125 is a valid one.
3134 is a valid one.
3126
3135
3127 * IPython/iplib.py (InteractiveShell.interact): added a
3136 * IPython/iplib.py (InteractiveShell.interact): added a
3128 showtraceback() call to the SystemExit trap, and modified the exit
3137 showtraceback() call to the SystemExit trap, and modified the exit
3129 confirmation to have yes as the default.
3138 confirmation to have yes as the default.
3130
3139
3131 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3140 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3132 this file. It's been gone from the code for a long time, this was
3141 this file. It's been gone from the code for a long time, this was
3133 simply leftover junk.
3142 simply leftover junk.
3134
3143
3135 2002-11-01 Fernando Perez <fperez@colorado.edu>
3144 2002-11-01 Fernando Perez <fperez@colorado.edu>
3136
3145
3137 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3146 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3138 added. If set, IPython now traps EOF and asks for
3147 added. If set, IPython now traps EOF and asks for
3139 confirmation. After a request by François Pinard.
3148 confirmation. After a request by François Pinard.
3140
3149
3141 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3150 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3142 of @abort, and with a new (better) mechanism for handling the
3151 of @abort, and with a new (better) mechanism for handling the
3143 exceptions.
3152 exceptions.
3144
3153
3145 2002-10-27 Fernando Perez <fperez@colorado.edu>
3154 2002-10-27 Fernando Perez <fperez@colorado.edu>
3146
3155
3147 * IPython/usage.py (__doc__): updated the --help information and
3156 * IPython/usage.py (__doc__): updated the --help information and
3148 the ipythonrc file to indicate that -log generates
3157 the ipythonrc file to indicate that -log generates
3149 ./ipython.log. Also fixed the corresponding info in @logstart.
3158 ./ipython.log. Also fixed the corresponding info in @logstart.
3150 This and several other fixes in the manuals thanks to reports by
3159 This and several other fixes in the manuals thanks to reports by
3151 François Pinard <pinard-AT-iro.umontreal.ca>.
3160 François Pinard <pinard-AT-iro.umontreal.ca>.
3152
3161
3153 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3162 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3154 refer to @logstart (instead of @log, which doesn't exist).
3163 refer to @logstart (instead of @log, which doesn't exist).
3155
3164
3156 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3165 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3157 AttributeError crash. Thanks to Christopher Armstrong
3166 AttributeError crash. Thanks to Christopher Armstrong
3158 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3167 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3159 introduced recently (in 0.2.14pre37) with the fix to the eval
3168 introduced recently (in 0.2.14pre37) with the fix to the eval
3160 problem mentioned below.
3169 problem mentioned below.
3161
3170
3162 2002-10-17 Fernando Perez <fperez@colorado.edu>
3171 2002-10-17 Fernando Perez <fperez@colorado.edu>
3163
3172
3164 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3173 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3165 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3174 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3166
3175
3167 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3176 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3168 this function to fix a problem reported by Alex Schmolck. He saw
3177 this function to fix a problem reported by Alex Schmolck. He saw
3169 it with list comprehensions and generators, which were getting
3178 it with list comprehensions and generators, which were getting
3170 called twice. The real problem was an 'eval' call in testing for
3179 called twice. The real problem was an 'eval' call in testing for
3171 automagic which was evaluating the input line silently.
3180 automagic which was evaluating the input line silently.
3172
3181
3173 This is a potentially very nasty bug, if the input has side
3182 This is a potentially very nasty bug, if the input has side
3174 effects which must not be repeated. The code is much cleaner now,
3183 effects which must not be repeated. The code is much cleaner now,
3175 without any blanket 'except' left and with a regexp test for
3184 without any blanket 'except' left and with a regexp test for
3176 actual function names.
3185 actual function names.
3177
3186
3178 But an eval remains, which I'm not fully comfortable with. I just
3187 But an eval remains, which I'm not fully comfortable with. I just
3179 don't know how to find out if an expression could be a callable in
3188 don't know how to find out if an expression could be a callable in
3180 the user's namespace without doing an eval on the string. However
3189 the user's namespace without doing an eval on the string. However
3181 that string is now much more strictly checked so that no code
3190 that string is now much more strictly checked so that no code
3182 slips by, so the eval should only happen for things that can
3191 slips by, so the eval should only happen for things that can
3183 really be only function/method names.
3192 really be only function/method names.
3184
3193
3185 2002-10-15 Fernando Perez <fperez@colorado.edu>
3194 2002-10-15 Fernando Perez <fperez@colorado.edu>
3186
3195
3187 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3196 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3188 OSX information to main manual, removed README_Mac_OSX file from
3197 OSX information to main manual, removed README_Mac_OSX file from
3189 distribution. Also updated credits for recent additions.
3198 distribution. Also updated credits for recent additions.
3190
3199
3191 2002-10-10 Fernando Perez <fperez@colorado.edu>
3200 2002-10-10 Fernando Perez <fperez@colorado.edu>
3192
3201
3193 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3202 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3194 terminal-related issues. Many thanks to Andrea Riciputi
3203 terminal-related issues. Many thanks to Andrea Riciputi
3195 <andrea.riciputi-AT-libero.it> for writing it.
3204 <andrea.riciputi-AT-libero.it> for writing it.
3196
3205
3197 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3206 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3198 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3207 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3199
3208
3200 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3209 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3201 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3210 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3202 <syver-en-AT-online.no> who both submitted patches for this problem.
3211 <syver-en-AT-online.no> who both submitted patches for this problem.
3203
3212
3204 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3213 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3205 global embedding to make sure that things don't overwrite user
3214 global embedding to make sure that things don't overwrite user
3206 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3215 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3207
3216
3208 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3217 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3209 compatibility. Thanks to Hayden Callow
3218 compatibility. Thanks to Hayden Callow
3210 <h.callow-AT-elec.canterbury.ac.nz>
3219 <h.callow-AT-elec.canterbury.ac.nz>
3211
3220
3212 2002-10-04 Fernando Perez <fperez@colorado.edu>
3221 2002-10-04 Fernando Perez <fperez@colorado.edu>
3213
3222
3214 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3223 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3215 Gnuplot.File objects.
3224 Gnuplot.File objects.
3216
3225
3217 2002-07-23 Fernando Perez <fperez@colorado.edu>
3226 2002-07-23 Fernando Perez <fperez@colorado.edu>
3218
3227
3219 * IPython/genutils.py (timing): Added timings() and timing() for
3228 * IPython/genutils.py (timing): Added timings() and timing() for
3220 quick access to the most commonly needed data, the execution
3229 quick access to the most commonly needed data, the execution
3221 times. Old timing() renamed to timings_out().
3230 times. Old timing() renamed to timings_out().
3222
3231
3223 2002-07-18 Fernando Perez <fperez@colorado.edu>
3232 2002-07-18 Fernando Perez <fperez@colorado.edu>
3224
3233
3225 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3234 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3226 bug with nested instances disrupting the parent's tab completion.
3235 bug with nested instances disrupting the parent's tab completion.
3227
3236
3228 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3237 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3229 all_completions code to begin the emacs integration.
3238 all_completions code to begin the emacs integration.
3230
3239
3231 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3240 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3232 argument to allow titling individual arrays when plotting.
3241 argument to allow titling individual arrays when plotting.
3233
3242
3234 2002-07-15 Fernando Perez <fperez@colorado.edu>
3243 2002-07-15 Fernando Perez <fperez@colorado.edu>
3235
3244
3236 * setup.py (make_shortcut): changed to retrieve the value of
3245 * setup.py (make_shortcut): changed to retrieve the value of
3237 'Program Files' directory from the registry (this value changes in
3246 'Program Files' directory from the registry (this value changes in
3238 non-english versions of Windows). Thanks to Thomas Fanslau
3247 non-english versions of Windows). Thanks to Thomas Fanslau
3239 <tfanslau-AT-gmx.de> for the report.
3248 <tfanslau-AT-gmx.de> for the report.
3240
3249
3241 2002-07-10 Fernando Perez <fperez@colorado.edu>
3250 2002-07-10 Fernando Perez <fperez@colorado.edu>
3242
3251
3243 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3252 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3244 a bug in pdb, which crashes if a line with only whitespace is
3253 a bug in pdb, which crashes if a line with only whitespace is
3245 entered. Bug report submitted to sourceforge.
3254 entered. Bug report submitted to sourceforge.
3246
3255
3247 2002-07-09 Fernando Perez <fperez@colorado.edu>
3256 2002-07-09 Fernando Perez <fperez@colorado.edu>
3248
3257
3249 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3258 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3250 reporting exceptions (it's a bug in inspect.py, I just set a
3259 reporting exceptions (it's a bug in inspect.py, I just set a
3251 workaround).
3260 workaround).
3252
3261
3253 2002-07-08 Fernando Perez <fperez@colorado.edu>
3262 2002-07-08 Fernando Perez <fperez@colorado.edu>
3254
3263
3255 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3264 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3256 __IPYTHON__ in __builtins__ to show up in user_ns.
3265 __IPYTHON__ in __builtins__ to show up in user_ns.
3257
3266
3258 2002-07-03 Fernando Perez <fperez@colorado.edu>
3267 2002-07-03 Fernando Perez <fperez@colorado.edu>
3259
3268
3260 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3269 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3261 name from @gp_set_instance to @gp_set_default.
3270 name from @gp_set_instance to @gp_set_default.
3262
3271
3263 * IPython/ipmaker.py (make_IPython): default editor value set to
3272 * IPython/ipmaker.py (make_IPython): default editor value set to
3264 '0' (a string), to match the rc file. Otherwise will crash when
3273 '0' (a string), to match the rc file. Otherwise will crash when
3265 .strip() is called on it.
3274 .strip() is called on it.
3266
3275
3267
3276
3268 2002-06-28 Fernando Perez <fperez@colorado.edu>
3277 2002-06-28 Fernando Perez <fperez@colorado.edu>
3269
3278
3270 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3279 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3271 of files in current directory when a file is executed via
3280 of files in current directory when a file is executed via
3272 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3281 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3273
3282
3274 * setup.py (manfiles): fix for rpm builds, submitted by RA
3283 * setup.py (manfiles): fix for rpm builds, submitted by RA
3275 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3284 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3276
3285
3277 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3286 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3278 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3287 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3279 string!). A. Schmolck caught this one.
3288 string!). A. Schmolck caught this one.
3280
3289
3281 2002-06-27 Fernando Perez <fperez@colorado.edu>
3290 2002-06-27 Fernando Perez <fperez@colorado.edu>
3282
3291
3283 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3292 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3284 defined files at the cmd line. __name__ wasn't being set to
3293 defined files at the cmd line. __name__ wasn't being set to
3285 __main__.
3294 __main__.
3286
3295
3287 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3296 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3288 regular lists and tuples besides Numeric arrays.
3297 regular lists and tuples besides Numeric arrays.
3289
3298
3290 * IPython/Prompts.py (CachedOutput.__call__): Added output
3299 * IPython/Prompts.py (CachedOutput.__call__): Added output
3291 supression for input ending with ';'. Similar to Mathematica and
3300 supression for input ending with ';'. Similar to Mathematica and
3292 Matlab. The _* vars and Out[] list are still updated, just like
3301 Matlab. The _* vars and Out[] list are still updated, just like
3293 Mathematica behaves.
3302 Mathematica behaves.
3294
3303
3295 2002-06-25 Fernando Perez <fperez@colorado.edu>
3304 2002-06-25 Fernando Perez <fperez@colorado.edu>
3296
3305
3297 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3306 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3298 .ini extensions for profiels under Windows.
3307 .ini extensions for profiels under Windows.
3299
3308
3300 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3309 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3301 string form. Fix contributed by Alexander Schmolck
3310 string form. Fix contributed by Alexander Schmolck
3302 <a.schmolck-AT-gmx.net>
3311 <a.schmolck-AT-gmx.net>
3303
3312
3304 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3313 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3305 pre-configured Gnuplot instance.
3314 pre-configured Gnuplot instance.
3306
3315
3307 2002-06-21 Fernando Perez <fperez@colorado.edu>
3316 2002-06-21 Fernando Perez <fperez@colorado.edu>
3308
3317
3309 * IPython/numutils.py (exp_safe): new function, works around the
3318 * IPython/numutils.py (exp_safe): new function, works around the
3310 underflow problems in Numeric.
3319 underflow problems in Numeric.
3311 (log2): New fn. Safe log in base 2: returns exact integer answer
3320 (log2): New fn. Safe log in base 2: returns exact integer answer
3312 for exact integer powers of 2.
3321 for exact integer powers of 2.
3313
3322
3314 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3323 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3315 properly.
3324 properly.
3316
3325
3317 2002-06-20 Fernando Perez <fperez@colorado.edu>
3326 2002-06-20 Fernando Perez <fperez@colorado.edu>
3318
3327
3319 * IPython/genutils.py (timing): new function like
3328 * IPython/genutils.py (timing): new function like
3320 Mathematica's. Similar to time_test, but returns more info.
3329 Mathematica's. Similar to time_test, but returns more info.
3321
3330
3322 2002-06-18 Fernando Perez <fperez@colorado.edu>
3331 2002-06-18 Fernando Perez <fperez@colorado.edu>
3323
3332
3324 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3333 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3325 according to Mike Heeter's suggestions.
3334 according to Mike Heeter's suggestions.
3326
3335
3327 2002-06-16 Fernando Perez <fperez@colorado.edu>
3336 2002-06-16 Fernando Perez <fperez@colorado.edu>
3328
3337
3329 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3338 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3330 system. GnuplotMagic is gone as a user-directory option. New files
3339 system. GnuplotMagic is gone as a user-directory option. New files
3331 make it easier to use all the gnuplot stuff both from external
3340 make it easier to use all the gnuplot stuff both from external
3332 programs as well as from IPython. Had to rewrite part of
3341 programs as well as from IPython. Had to rewrite part of
3333 hardcopy() b/c of a strange bug: often the ps files simply don't
3342 hardcopy() b/c of a strange bug: often the ps files simply don't
3334 get created, and require a repeat of the command (often several
3343 get created, and require a repeat of the command (often several
3335 times).
3344 times).
3336
3345
3337 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3346 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3338 resolve output channel at call time, so that if sys.stderr has
3347 resolve output channel at call time, so that if sys.stderr has
3339 been redirected by user this gets honored.
3348 been redirected by user this gets honored.
3340
3349
3341 2002-06-13 Fernando Perez <fperez@colorado.edu>
3350 2002-06-13 Fernando Perez <fperez@colorado.edu>
3342
3351
3343 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3352 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3344 IPShell. Kept a copy with the old names to avoid breaking people's
3353 IPShell. Kept a copy with the old names to avoid breaking people's
3345 embedded code.
3354 embedded code.
3346
3355
3347 * IPython/ipython: simplified it to the bare minimum after
3356 * IPython/ipython: simplified it to the bare minimum after
3348 Holger's suggestions. Added info about how to use it in
3357 Holger's suggestions. Added info about how to use it in
3349 PYTHONSTARTUP.
3358 PYTHONSTARTUP.
3350
3359
3351 * IPython/Shell.py (IPythonShell): changed the options passing
3360 * IPython/Shell.py (IPythonShell): changed the options passing
3352 from a string with funky %s replacements to a straight list. Maybe
3361 from a string with funky %s replacements to a straight list. Maybe
3353 a bit more typing, but it follows sys.argv conventions, so there's
3362 a bit more typing, but it follows sys.argv conventions, so there's
3354 less special-casing to remember.
3363 less special-casing to remember.
3355
3364
3356 2002-06-12 Fernando Perez <fperez@colorado.edu>
3365 2002-06-12 Fernando Perez <fperez@colorado.edu>
3357
3366
3358 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3367 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3359 command. Thanks to a suggestion by Mike Heeter.
3368 command. Thanks to a suggestion by Mike Heeter.
3360 (Magic.magic_pfile): added behavior to look at filenames if given
3369 (Magic.magic_pfile): added behavior to look at filenames if given
3361 arg is not a defined object.
3370 arg is not a defined object.
3362 (Magic.magic_save): New @save function to save code snippets. Also
3371 (Magic.magic_save): New @save function to save code snippets. Also
3363 a Mike Heeter idea.
3372 a Mike Heeter idea.
3364
3373
3365 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3374 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3366 plot() and replot(). Much more convenient now, especially for
3375 plot() and replot(). Much more convenient now, especially for
3367 interactive use.
3376 interactive use.
3368
3377
3369 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3378 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3370 filenames.
3379 filenames.
3371
3380
3372 2002-06-02 Fernando Perez <fperez@colorado.edu>
3381 2002-06-02 Fernando Perez <fperez@colorado.edu>
3373
3382
3374 * IPython/Struct.py (Struct.__init__): modified to admit
3383 * IPython/Struct.py (Struct.__init__): modified to admit
3375 initialization via another struct.
3384 initialization via another struct.
3376
3385
3377 * IPython/genutils.py (SystemExec.__init__): New stateful
3386 * IPython/genutils.py (SystemExec.__init__): New stateful
3378 interface to xsys and bq. Useful for writing system scripts.
3387 interface to xsys and bq. Useful for writing system scripts.
3379
3388
3380 2002-05-30 Fernando Perez <fperez@colorado.edu>
3389 2002-05-30 Fernando Perez <fperez@colorado.edu>
3381
3390
3382 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3391 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3383 documents. This will make the user download smaller (it's getting
3392 documents. This will make the user download smaller (it's getting
3384 too big).
3393 too big).
3385
3394
3386 2002-05-29 Fernando Perez <fperez@colorado.edu>
3395 2002-05-29 Fernando Perez <fperez@colorado.edu>
3387
3396
3388 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3397 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3389 fix problems with shelve and pickle. Seems to work, but I don't
3398 fix problems with shelve and pickle. Seems to work, but I don't
3390 know if corner cases break it. Thanks to Mike Heeter
3399 know if corner cases break it. Thanks to Mike Heeter
3391 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3400 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3392
3401
3393 2002-05-24 Fernando Perez <fperez@colorado.edu>
3402 2002-05-24 Fernando Perez <fperez@colorado.edu>
3394
3403
3395 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3404 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3396 macros having broken.
3405 macros having broken.
3397
3406
3398 2002-05-21 Fernando Perez <fperez@colorado.edu>
3407 2002-05-21 Fernando Perez <fperez@colorado.edu>
3399
3408
3400 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3409 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3401 introduced logging bug: all history before logging started was
3410 introduced logging bug: all history before logging started was
3402 being written one character per line! This came from the redesign
3411 being written one character per line! This came from the redesign
3403 of the input history as a special list which slices to strings,
3412 of the input history as a special list which slices to strings,
3404 not to lists.
3413 not to lists.
3405
3414
3406 2002-05-20 Fernando Perez <fperez@colorado.edu>
3415 2002-05-20 Fernando Perez <fperez@colorado.edu>
3407
3416
3408 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3417 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3409 be an attribute of all classes in this module. The design of these
3418 be an attribute of all classes in this module. The design of these
3410 classes needs some serious overhauling.
3419 classes needs some serious overhauling.
3411
3420
3412 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3421 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3413 which was ignoring '_' in option names.
3422 which was ignoring '_' in option names.
3414
3423
3415 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3424 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3416 'Verbose_novars' to 'Context' and made it the new default. It's a
3425 'Verbose_novars' to 'Context' and made it the new default. It's a
3417 bit more readable and also safer than verbose.
3426 bit more readable and also safer than verbose.
3418
3427
3419 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3428 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3420 triple-quoted strings.
3429 triple-quoted strings.
3421
3430
3422 * IPython/OInspect.py (__all__): new module exposing the object
3431 * IPython/OInspect.py (__all__): new module exposing the object
3423 introspection facilities. Now the corresponding magics are dummy
3432 introspection facilities. Now the corresponding magics are dummy
3424 wrappers around this. Having this module will make it much easier
3433 wrappers around this. Having this module will make it much easier
3425 to put these functions into our modified pdb.
3434 to put these functions into our modified pdb.
3426 This new object inspector system uses the new colorizing module,
3435 This new object inspector system uses the new colorizing module,
3427 so source code and other things are nicely syntax highlighted.
3436 so source code and other things are nicely syntax highlighted.
3428
3437
3429 2002-05-18 Fernando Perez <fperez@colorado.edu>
3438 2002-05-18 Fernando Perez <fperez@colorado.edu>
3430
3439
3431 * IPython/ColorANSI.py: Split the coloring tools into a separate
3440 * IPython/ColorANSI.py: Split the coloring tools into a separate
3432 module so I can use them in other code easier (they were part of
3441 module so I can use them in other code easier (they were part of
3433 ultraTB).
3442 ultraTB).
3434
3443
3435 2002-05-17 Fernando Perez <fperez@colorado.edu>
3444 2002-05-17 Fernando Perez <fperez@colorado.edu>
3436
3445
3437 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3446 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3438 fixed it to set the global 'g' also to the called instance, as
3447 fixed it to set the global 'g' also to the called instance, as
3439 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3448 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3440 user's 'g' variables).
3449 user's 'g' variables).
3441
3450
3442 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3451 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3443 global variables (aliases to _ih,_oh) so that users which expect
3452 global variables (aliases to _ih,_oh) so that users which expect
3444 In[5] or Out[7] to work aren't unpleasantly surprised.
3453 In[5] or Out[7] to work aren't unpleasantly surprised.
3445 (InputList.__getslice__): new class to allow executing slices of
3454 (InputList.__getslice__): new class to allow executing slices of
3446 input history directly. Very simple class, complements the use of
3455 input history directly. Very simple class, complements the use of
3447 macros.
3456 macros.
3448
3457
3449 2002-05-16 Fernando Perez <fperez@colorado.edu>
3458 2002-05-16 Fernando Perez <fperez@colorado.edu>
3450
3459
3451 * setup.py (docdirbase): make doc directory be just doc/IPython
3460 * setup.py (docdirbase): make doc directory be just doc/IPython
3452 without version numbers, it will reduce clutter for users.
3461 without version numbers, it will reduce clutter for users.
3453
3462
3454 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3463 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3455 execfile call to prevent possible memory leak. See for details:
3464 execfile call to prevent possible memory leak. See for details:
3456 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3465 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3457
3466
3458 2002-05-15 Fernando Perez <fperez@colorado.edu>
3467 2002-05-15 Fernando Perez <fperez@colorado.edu>
3459
3468
3460 * IPython/Magic.py (Magic.magic_psource): made the object
3469 * IPython/Magic.py (Magic.magic_psource): made the object
3461 introspection names be more standard: pdoc, pdef, pfile and
3470 introspection names be more standard: pdoc, pdef, pfile and
3462 psource. They all print/page their output, and it makes
3471 psource. They all print/page their output, and it makes
3463 remembering them easier. Kept old names for compatibility as
3472 remembering them easier. Kept old names for compatibility as
3464 aliases.
3473 aliases.
3465
3474
3466 2002-05-14 Fernando Perez <fperez@colorado.edu>
3475 2002-05-14 Fernando Perez <fperez@colorado.edu>
3467
3476
3468 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3477 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3469 what the mouse problem was. The trick is to use gnuplot with temp
3478 what the mouse problem was. The trick is to use gnuplot with temp
3470 files and NOT with pipes (for data communication), because having
3479 files and NOT with pipes (for data communication), because having
3471 both pipes and the mouse on is bad news.
3480 both pipes and the mouse on is bad news.
3472
3481
3473 2002-05-13 Fernando Perez <fperez@colorado.edu>
3482 2002-05-13 Fernando Perez <fperez@colorado.edu>
3474
3483
3475 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3484 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3476 bug. Information would be reported about builtins even when
3485 bug. Information would be reported about builtins even when
3477 user-defined functions overrode them.
3486 user-defined functions overrode them.
3478
3487
3479 2002-05-11 Fernando Perez <fperez@colorado.edu>
3488 2002-05-11 Fernando Perez <fperez@colorado.edu>
3480
3489
3481 * IPython/__init__.py (__all__): removed FlexCompleter from
3490 * IPython/__init__.py (__all__): removed FlexCompleter from
3482 __all__ so that things don't fail in platforms without readline.
3491 __all__ so that things don't fail in platforms without readline.
3483
3492
3484 2002-05-10 Fernando Perez <fperez@colorado.edu>
3493 2002-05-10 Fernando Perez <fperez@colorado.edu>
3485
3494
3486 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3495 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3487 it requires Numeric, effectively making Numeric a dependency for
3496 it requires Numeric, effectively making Numeric a dependency for
3488 IPython.
3497 IPython.
3489
3498
3490 * Released 0.2.13
3499 * Released 0.2.13
3491
3500
3492 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3501 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3493 profiler interface. Now all the major options from the profiler
3502 profiler interface. Now all the major options from the profiler
3494 module are directly supported in IPython, both for single
3503 module are directly supported in IPython, both for single
3495 expressions (@prun) and for full programs (@run -p).
3504 expressions (@prun) and for full programs (@run -p).
3496
3505
3497 2002-05-09 Fernando Perez <fperez@colorado.edu>
3506 2002-05-09 Fernando Perez <fperez@colorado.edu>
3498
3507
3499 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3508 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3500 magic properly formatted for screen.
3509 magic properly formatted for screen.
3501
3510
3502 * setup.py (make_shortcut): Changed things to put pdf version in
3511 * setup.py (make_shortcut): Changed things to put pdf version in
3503 doc/ instead of doc/manual (had to change lyxport a bit).
3512 doc/ instead of doc/manual (had to change lyxport a bit).
3504
3513
3505 * IPython/Magic.py (Profile.string_stats): made profile runs go
3514 * IPython/Magic.py (Profile.string_stats): made profile runs go
3506 through pager (they are long and a pager allows searching, saving,
3515 through pager (they are long and a pager allows searching, saving,
3507 etc.)
3516 etc.)
3508
3517
3509 2002-05-08 Fernando Perez <fperez@colorado.edu>
3518 2002-05-08 Fernando Perez <fperez@colorado.edu>
3510
3519
3511 * Released 0.2.12
3520 * Released 0.2.12
3512
3521
3513 2002-05-06 Fernando Perez <fperez@colorado.edu>
3522 2002-05-06 Fernando Perez <fperez@colorado.edu>
3514
3523
3515 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3524 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3516 introduced); 'hist n1 n2' was broken.
3525 introduced); 'hist n1 n2' was broken.
3517 (Magic.magic_pdb): added optional on/off arguments to @pdb
3526 (Magic.magic_pdb): added optional on/off arguments to @pdb
3518 (Magic.magic_run): added option -i to @run, which executes code in
3527 (Magic.magic_run): added option -i to @run, which executes code in
3519 the IPython namespace instead of a clean one. Also added @irun as
3528 the IPython namespace instead of a clean one. Also added @irun as
3520 an alias to @run -i.
3529 an alias to @run -i.
3521
3530
3522 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3531 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3523 fixed (it didn't really do anything, the namespaces were wrong).
3532 fixed (it didn't really do anything, the namespaces were wrong).
3524
3533
3525 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3534 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3526
3535
3527 * IPython/__init__.py (__all__): Fixed package namespace, now
3536 * IPython/__init__.py (__all__): Fixed package namespace, now
3528 'import IPython' does give access to IPython.<all> as
3537 'import IPython' does give access to IPython.<all> as
3529 expected. Also renamed __release__ to Release.
3538 expected. Also renamed __release__ to Release.
3530
3539
3531 * IPython/Debugger.py (__license__): created new Pdb class which
3540 * IPython/Debugger.py (__license__): created new Pdb class which
3532 functions like a drop-in for the normal pdb.Pdb but does NOT
3541 functions like a drop-in for the normal pdb.Pdb but does NOT
3533 import readline by default. This way it doesn't muck up IPython's
3542 import readline by default. This way it doesn't muck up IPython's
3534 readline handling, and now tab-completion finally works in the
3543 readline handling, and now tab-completion finally works in the
3535 debugger -- sort of. It completes things globally visible, but the
3544 debugger -- sort of. It completes things globally visible, but the
3536 completer doesn't track the stack as pdb walks it. That's a bit
3545 completer doesn't track the stack as pdb walks it. That's a bit
3537 tricky, and I'll have to implement it later.
3546 tricky, and I'll have to implement it later.
3538
3547
3539 2002-05-05 Fernando Perez <fperez@colorado.edu>
3548 2002-05-05 Fernando Perez <fperez@colorado.edu>
3540
3549
3541 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3550 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3542 magic docstrings when printed via ? (explicit \'s were being
3551 magic docstrings when printed via ? (explicit \'s were being
3543 printed).
3552 printed).
3544
3553
3545 * IPython/ipmaker.py (make_IPython): fixed namespace
3554 * IPython/ipmaker.py (make_IPython): fixed namespace
3546 identification bug. Now variables loaded via logs or command-line
3555 identification bug. Now variables loaded via logs or command-line
3547 files are recognized in the interactive namespace by @who.
3556 files are recognized in the interactive namespace by @who.
3548
3557
3549 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3558 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3550 log replay system stemming from the string form of Structs.
3559 log replay system stemming from the string form of Structs.
3551
3560
3552 * IPython/Magic.py (Macro.__init__): improved macros to properly
3561 * IPython/Magic.py (Macro.__init__): improved macros to properly
3553 handle magic commands in them.
3562 handle magic commands in them.
3554 (Magic.magic_logstart): usernames are now expanded so 'logstart
3563 (Magic.magic_logstart): usernames are now expanded so 'logstart
3555 ~/mylog' now works.
3564 ~/mylog' now works.
3556
3565
3557 * IPython/iplib.py (complete): fixed bug where paths starting with
3566 * IPython/iplib.py (complete): fixed bug where paths starting with
3558 '/' would be completed as magic names.
3567 '/' would be completed as magic names.
3559
3568
3560 2002-05-04 Fernando Perez <fperez@colorado.edu>
3569 2002-05-04 Fernando Perez <fperez@colorado.edu>
3561
3570
3562 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3571 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3563 allow running full programs under the profiler's control.
3572 allow running full programs under the profiler's control.
3564
3573
3565 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3574 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3566 mode to report exceptions verbosely but without formatting
3575 mode to report exceptions verbosely but without formatting
3567 variables. This addresses the issue of ipython 'freezing' (it's
3576 variables. This addresses the issue of ipython 'freezing' (it's
3568 not frozen, but caught in an expensive formatting loop) when huge
3577 not frozen, but caught in an expensive formatting loop) when huge
3569 variables are in the context of an exception.
3578 variables are in the context of an exception.
3570 (VerboseTB.text): Added '--->' markers at line where exception was
3579 (VerboseTB.text): Added '--->' markers at line where exception was
3571 triggered. Much clearer to read, especially in NoColor modes.
3580 triggered. Much clearer to read, especially in NoColor modes.
3572
3581
3573 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3582 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3574 implemented in reverse when changing to the new parse_options().
3583 implemented in reverse when changing to the new parse_options().
3575
3584
3576 2002-05-03 Fernando Perez <fperez@colorado.edu>
3585 2002-05-03 Fernando Perez <fperez@colorado.edu>
3577
3586
3578 * IPython/Magic.py (Magic.parse_options): new function so that
3587 * IPython/Magic.py (Magic.parse_options): new function so that
3579 magics can parse options easier.
3588 magics can parse options easier.
3580 (Magic.magic_prun): new function similar to profile.run(),
3589 (Magic.magic_prun): new function similar to profile.run(),
3581 suggested by Chris Hart.
3590 suggested by Chris Hart.
3582 (Magic.magic_cd): fixed behavior so that it only changes if
3591 (Magic.magic_cd): fixed behavior so that it only changes if
3583 directory actually is in history.
3592 directory actually is in history.
3584
3593
3585 * IPython/usage.py (__doc__): added information about potential
3594 * IPython/usage.py (__doc__): added information about potential
3586 slowness of Verbose exception mode when there are huge data
3595 slowness of Verbose exception mode when there are huge data
3587 structures to be formatted (thanks to Archie Paulson).
3596 structures to be formatted (thanks to Archie Paulson).
3588
3597
3589 * IPython/ipmaker.py (make_IPython): Changed default logging
3598 * IPython/ipmaker.py (make_IPython): Changed default logging
3590 (when simply called with -log) to use curr_dir/ipython.log in
3599 (when simply called with -log) to use curr_dir/ipython.log in
3591 rotate mode. Fixed crash which was occuring with -log before
3600 rotate mode. Fixed crash which was occuring with -log before
3592 (thanks to Jim Boyle).
3601 (thanks to Jim Boyle).
3593
3602
3594 2002-05-01 Fernando Perez <fperez@colorado.edu>
3603 2002-05-01 Fernando Perez <fperez@colorado.edu>
3595
3604
3596 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3605 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3597 was nasty -- though somewhat of a corner case).
3606 was nasty -- though somewhat of a corner case).
3598
3607
3599 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3608 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3600 text (was a bug).
3609 text (was a bug).
3601
3610
3602 2002-04-30 Fernando Perez <fperez@colorado.edu>
3611 2002-04-30 Fernando Perez <fperez@colorado.edu>
3603
3612
3604 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3613 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3605 a print after ^D or ^C from the user so that the In[] prompt
3614 a print after ^D or ^C from the user so that the In[] prompt
3606 doesn't over-run the gnuplot one.
3615 doesn't over-run the gnuplot one.
3607
3616
3608 2002-04-29 Fernando Perez <fperez@colorado.edu>
3617 2002-04-29 Fernando Perez <fperez@colorado.edu>
3609
3618
3610 * Released 0.2.10
3619 * Released 0.2.10
3611
3620
3612 * IPython/__release__.py (version): get date dynamically.
3621 * IPython/__release__.py (version): get date dynamically.
3613
3622
3614 * Misc. documentation updates thanks to Arnd's comments. Also ran
3623 * Misc. documentation updates thanks to Arnd's comments. Also ran
3615 a full spellcheck on the manual (hadn't been done in a while).
3624 a full spellcheck on the manual (hadn't been done in a while).
3616
3625
3617 2002-04-27 Fernando Perez <fperez@colorado.edu>
3626 2002-04-27 Fernando Perez <fperez@colorado.edu>
3618
3627
3619 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3628 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3620 starting a log in mid-session would reset the input history list.
3629 starting a log in mid-session would reset the input history list.
3621
3630
3622 2002-04-26 Fernando Perez <fperez@colorado.edu>
3631 2002-04-26 Fernando Perez <fperez@colorado.edu>
3623
3632
3624 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3633 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3625 all files were being included in an update. Now anything in
3634 all files were being included in an update. Now anything in
3626 UserConfig that matches [A-Za-z]*.py will go (this excludes
3635 UserConfig that matches [A-Za-z]*.py will go (this excludes
3627 __init__.py)
3636 __init__.py)
3628
3637
3629 2002-04-25 Fernando Perez <fperez@colorado.edu>
3638 2002-04-25 Fernando Perez <fperez@colorado.edu>
3630
3639
3631 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3640 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3632 to __builtins__ so that any form of embedded or imported code can
3641 to __builtins__ so that any form of embedded or imported code can
3633 test for being inside IPython.
3642 test for being inside IPython.
3634
3643
3635 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3644 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3636 changed to GnuplotMagic because it's now an importable module,
3645 changed to GnuplotMagic because it's now an importable module,
3637 this makes the name follow that of the standard Gnuplot module.
3646 this makes the name follow that of the standard Gnuplot module.
3638 GnuplotMagic can now be loaded at any time in mid-session.
3647 GnuplotMagic can now be loaded at any time in mid-session.
3639
3648
3640 2002-04-24 Fernando Perez <fperez@colorado.edu>
3649 2002-04-24 Fernando Perez <fperez@colorado.edu>
3641
3650
3642 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3651 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3643 the globals (IPython has its own namespace) and the
3652 the globals (IPython has its own namespace) and the
3644 PhysicalQuantity stuff is much better anyway.
3653 PhysicalQuantity stuff is much better anyway.
3645
3654
3646 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3655 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3647 embedding example to standard user directory for
3656 embedding example to standard user directory for
3648 distribution. Also put it in the manual.
3657 distribution. Also put it in the manual.
3649
3658
3650 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3659 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3651 instance as first argument (so it doesn't rely on some obscure
3660 instance as first argument (so it doesn't rely on some obscure
3652 hidden global).
3661 hidden global).
3653
3662
3654 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3663 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3655 delimiters. While it prevents ().TAB from working, it allows
3664 delimiters. While it prevents ().TAB from working, it allows
3656 completions in open (... expressions. This is by far a more common
3665 completions in open (... expressions. This is by far a more common
3657 case.
3666 case.
3658
3667
3659 2002-04-23 Fernando Perez <fperez@colorado.edu>
3668 2002-04-23 Fernando Perez <fperez@colorado.edu>
3660
3669
3661 * IPython/Extensions/InterpreterPasteInput.py: new
3670 * IPython/Extensions/InterpreterPasteInput.py: new
3662 syntax-processing module for pasting lines with >>> or ... at the
3671 syntax-processing module for pasting lines with >>> or ... at the
3663 start.
3672 start.
3664
3673
3665 * IPython/Extensions/PhysicalQ_Interactive.py
3674 * IPython/Extensions/PhysicalQ_Interactive.py
3666 (PhysicalQuantityInteractive.__int__): fixed to work with either
3675 (PhysicalQuantityInteractive.__int__): fixed to work with either
3667 Numeric or math.
3676 Numeric or math.
3668
3677
3669 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3678 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3670 provided profiles. Now we have:
3679 provided profiles. Now we have:
3671 -math -> math module as * and cmath with its own namespace.
3680 -math -> math module as * and cmath with its own namespace.
3672 -numeric -> Numeric as *, plus gnuplot & grace
3681 -numeric -> Numeric as *, plus gnuplot & grace
3673 -physics -> same as before
3682 -physics -> same as before
3674
3683
3675 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3684 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3676 user-defined magics wouldn't be found by @magic if they were
3685 user-defined magics wouldn't be found by @magic if they were
3677 defined as class methods. Also cleaned up the namespace search
3686 defined as class methods. Also cleaned up the namespace search
3678 logic and the string building (to use %s instead of many repeated
3687 logic and the string building (to use %s instead of many repeated
3679 string adds).
3688 string adds).
3680
3689
3681 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3690 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3682 of user-defined magics to operate with class methods (cleaner, in
3691 of user-defined magics to operate with class methods (cleaner, in
3683 line with the gnuplot code).
3692 line with the gnuplot code).
3684
3693
3685 2002-04-22 Fernando Perez <fperez@colorado.edu>
3694 2002-04-22 Fernando Perez <fperez@colorado.edu>
3686
3695
3687 * setup.py: updated dependency list so that manual is updated when
3696 * setup.py: updated dependency list so that manual is updated when
3688 all included files change.
3697 all included files change.
3689
3698
3690 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3699 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3691 the delimiter removal option (the fix is ugly right now).
3700 the delimiter removal option (the fix is ugly right now).
3692
3701
3693 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3702 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3694 all of the math profile (quicker loading, no conflict between
3703 all of the math profile (quicker loading, no conflict between
3695 g-9.8 and g-gnuplot).
3704 g-9.8 and g-gnuplot).
3696
3705
3697 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3706 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3698 name of post-mortem files to IPython_crash_report.txt.
3707 name of post-mortem files to IPython_crash_report.txt.
3699
3708
3700 * Cleanup/update of the docs. Added all the new readline info and
3709 * Cleanup/update of the docs. Added all the new readline info and
3701 formatted all lists as 'real lists'.
3710 formatted all lists as 'real lists'.
3702
3711
3703 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3712 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3704 tab-completion options, since the full readline parse_and_bind is
3713 tab-completion options, since the full readline parse_and_bind is
3705 now accessible.
3714 now accessible.
3706
3715
3707 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3716 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3708 handling of readline options. Now users can specify any string to
3717 handling of readline options. Now users can specify any string to
3709 be passed to parse_and_bind(), as well as the delimiters to be
3718 be passed to parse_and_bind(), as well as the delimiters to be
3710 removed.
3719 removed.
3711 (InteractiveShell.__init__): Added __name__ to the global
3720 (InteractiveShell.__init__): Added __name__ to the global
3712 namespace so that things like Itpl which rely on its existence
3721 namespace so that things like Itpl which rely on its existence
3713 don't crash.
3722 don't crash.
3714 (InteractiveShell._prefilter): Defined the default with a _ so
3723 (InteractiveShell._prefilter): Defined the default with a _ so
3715 that prefilter() is easier to override, while the default one
3724 that prefilter() is easier to override, while the default one
3716 remains available.
3725 remains available.
3717
3726
3718 2002-04-18 Fernando Perez <fperez@colorado.edu>
3727 2002-04-18 Fernando Perez <fperez@colorado.edu>
3719
3728
3720 * Added information about pdb in the docs.
3729 * Added information about pdb in the docs.
3721
3730
3722 2002-04-17 Fernando Perez <fperez@colorado.edu>
3731 2002-04-17 Fernando Perez <fperez@colorado.edu>
3723
3732
3724 * IPython/ipmaker.py (make_IPython): added rc_override option to
3733 * IPython/ipmaker.py (make_IPython): added rc_override option to
3725 allow passing config options at creation time which may override
3734 allow passing config options at creation time which may override
3726 anything set in the config files or command line. This is
3735 anything set in the config files or command line. This is
3727 particularly useful for configuring embedded instances.
3736 particularly useful for configuring embedded instances.
3728
3737
3729 2002-04-15 Fernando Perez <fperez@colorado.edu>
3738 2002-04-15 Fernando Perez <fperez@colorado.edu>
3730
3739
3731 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3740 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3732 crash embedded instances because of the input cache falling out of
3741 crash embedded instances because of the input cache falling out of
3733 sync with the output counter.
3742 sync with the output counter.
3734
3743
3735 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3744 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3736 mode which calls pdb after an uncaught exception in IPython itself.
3745 mode which calls pdb after an uncaught exception in IPython itself.
3737
3746
3738 2002-04-14 Fernando Perez <fperez@colorado.edu>
3747 2002-04-14 Fernando Perez <fperez@colorado.edu>
3739
3748
3740 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3749 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3741 readline, fix it back after each call.
3750 readline, fix it back after each call.
3742
3751
3743 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3752 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3744 method to force all access via __call__(), which guarantees that
3753 method to force all access via __call__(), which guarantees that
3745 traceback references are properly deleted.
3754 traceback references are properly deleted.
3746
3755
3747 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3756 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3748 improve printing when pprint is in use.
3757 improve printing when pprint is in use.
3749
3758
3750 2002-04-13 Fernando Perez <fperez@colorado.edu>
3759 2002-04-13 Fernando Perez <fperez@colorado.edu>
3751
3760
3752 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3761 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3753 exceptions aren't caught anymore. If the user triggers one, he
3762 exceptions aren't caught anymore. If the user triggers one, he
3754 should know why he's doing it and it should go all the way up,
3763 should know why he's doing it and it should go all the way up,
3755 just like any other exception. So now @abort will fully kill the
3764 just like any other exception. So now @abort will fully kill the
3756 embedded interpreter and the embedding code (unless that happens
3765 embedded interpreter and the embedding code (unless that happens
3757 to catch SystemExit).
3766 to catch SystemExit).
3758
3767
3759 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3768 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3760 and a debugger() method to invoke the interactive pdb debugger
3769 and a debugger() method to invoke the interactive pdb debugger
3761 after printing exception information. Also added the corresponding
3770 after printing exception information. Also added the corresponding
3762 -pdb option and @pdb magic to control this feature, and updated
3771 -pdb option and @pdb magic to control this feature, and updated
3763 the docs. After a suggestion from Christopher Hart
3772 the docs. After a suggestion from Christopher Hart
3764 (hart-AT-caltech.edu).
3773 (hart-AT-caltech.edu).
3765
3774
3766 2002-04-12 Fernando Perez <fperez@colorado.edu>
3775 2002-04-12 Fernando Perez <fperez@colorado.edu>
3767
3776
3768 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3777 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3769 the exception handlers defined by the user (not the CrashHandler)
3778 the exception handlers defined by the user (not the CrashHandler)
3770 so that user exceptions don't trigger an ipython bug report.
3779 so that user exceptions don't trigger an ipython bug report.
3771
3780
3772 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3781 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3773 configurable (it should have always been so).
3782 configurable (it should have always been so).
3774
3783
3775 2002-03-26 Fernando Perez <fperez@colorado.edu>
3784 2002-03-26 Fernando Perez <fperez@colorado.edu>
3776
3785
3777 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3786 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3778 and there to fix embedding namespace issues. This should all be
3787 and there to fix embedding namespace issues. This should all be
3779 done in a more elegant way.
3788 done in a more elegant way.
3780
3789
3781 2002-03-25 Fernando Perez <fperez@colorado.edu>
3790 2002-03-25 Fernando Perez <fperez@colorado.edu>
3782
3791
3783 * IPython/genutils.py (get_home_dir): Try to make it work under
3792 * IPython/genutils.py (get_home_dir): Try to make it work under
3784 win9x also.
3793 win9x also.
3785
3794
3786 2002-03-20 Fernando Perez <fperez@colorado.edu>
3795 2002-03-20 Fernando Perez <fperez@colorado.edu>
3787
3796
3788 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3797 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3789 sys.displayhook untouched upon __init__.
3798 sys.displayhook untouched upon __init__.
3790
3799
3791 2002-03-19 Fernando Perez <fperez@colorado.edu>
3800 2002-03-19 Fernando Perez <fperez@colorado.edu>
3792
3801
3793 * Released 0.2.9 (for embedding bug, basically).
3802 * Released 0.2.9 (for embedding bug, basically).
3794
3803
3795 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3804 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3796 exceptions so that enclosing shell's state can be restored.
3805 exceptions so that enclosing shell's state can be restored.
3797
3806
3798 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3807 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3799 naming conventions in the .ipython/ dir.
3808 naming conventions in the .ipython/ dir.
3800
3809
3801 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3810 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3802 from delimiters list so filenames with - in them get expanded.
3811 from delimiters list so filenames with - in them get expanded.
3803
3812
3804 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3813 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3805 sys.displayhook not being properly restored after an embedded call.
3814 sys.displayhook not being properly restored after an embedded call.
3806
3815
3807 2002-03-18 Fernando Perez <fperez@colorado.edu>
3816 2002-03-18 Fernando Perez <fperez@colorado.edu>
3808
3817
3809 * Released 0.2.8
3818 * Released 0.2.8
3810
3819
3811 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3820 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3812 some files weren't being included in a -upgrade.
3821 some files weren't being included in a -upgrade.
3813 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3822 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3814 on' so that the first tab completes.
3823 on' so that the first tab completes.
3815 (InteractiveShell.handle_magic): fixed bug with spaces around
3824 (InteractiveShell.handle_magic): fixed bug with spaces around
3816 quotes breaking many magic commands.
3825 quotes breaking many magic commands.
3817
3826
3818 * setup.py: added note about ignoring the syntax error messages at
3827 * setup.py: added note about ignoring the syntax error messages at
3819 installation.
3828 installation.
3820
3829
3821 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3830 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3822 streamlining the gnuplot interface, now there's only one magic @gp.
3831 streamlining the gnuplot interface, now there's only one magic @gp.
3823
3832
3824 2002-03-17 Fernando Perez <fperez@colorado.edu>
3833 2002-03-17 Fernando Perez <fperez@colorado.edu>
3825
3834
3826 * IPython/UserConfig/magic_gnuplot.py: new name for the
3835 * IPython/UserConfig/magic_gnuplot.py: new name for the
3827 example-magic_pm.py file. Much enhanced system, now with a shell
3836 example-magic_pm.py file. Much enhanced system, now with a shell
3828 for communicating directly with gnuplot, one command at a time.
3837 for communicating directly with gnuplot, one command at a time.
3829
3838
3830 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3839 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3831 setting __name__=='__main__'.
3840 setting __name__=='__main__'.
3832
3841
3833 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3842 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3834 mini-shell for accessing gnuplot from inside ipython. Should
3843 mini-shell for accessing gnuplot from inside ipython. Should
3835 extend it later for grace access too. Inspired by Arnd's
3844 extend it later for grace access too. Inspired by Arnd's
3836 suggestion.
3845 suggestion.
3837
3846
3838 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3847 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3839 calling magic functions with () in their arguments. Thanks to Arnd
3848 calling magic functions with () in their arguments. Thanks to Arnd
3840 Baecker for pointing this to me.
3849 Baecker for pointing this to me.
3841
3850
3842 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3851 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3843 infinitely for integer or complex arrays (only worked with floats).
3852 infinitely for integer or complex arrays (only worked with floats).
3844
3853
3845 2002-03-16 Fernando Perez <fperez@colorado.edu>
3854 2002-03-16 Fernando Perez <fperez@colorado.edu>
3846
3855
3847 * setup.py: Merged setup and setup_windows into a single script
3856 * setup.py: Merged setup and setup_windows into a single script
3848 which properly handles things for windows users.
3857 which properly handles things for windows users.
3849
3858
3850 2002-03-15 Fernando Perez <fperez@colorado.edu>
3859 2002-03-15 Fernando Perez <fperez@colorado.edu>
3851
3860
3852 * Big change to the manual: now the magics are all automatically
3861 * Big change to the manual: now the magics are all automatically
3853 documented. This information is generated from their docstrings
3862 documented. This information is generated from their docstrings
3854 and put in a latex file included by the manual lyx file. This way
3863 and put in a latex file included by the manual lyx file. This way
3855 we get always up to date information for the magics. The manual
3864 we get always up to date information for the magics. The manual
3856 now also has proper version information, also auto-synced.
3865 now also has proper version information, also auto-synced.
3857
3866
3858 For this to work, an undocumented --magic_docstrings option was added.
3867 For this to work, an undocumented --magic_docstrings option was added.
3859
3868
3860 2002-03-13 Fernando Perez <fperez@colorado.edu>
3869 2002-03-13 Fernando Perez <fperez@colorado.edu>
3861
3870
3862 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3871 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3863 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3872 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3864
3873
3865 2002-03-12 Fernando Perez <fperez@colorado.edu>
3874 2002-03-12 Fernando Perez <fperez@colorado.edu>
3866
3875
3867 * IPython/ultraTB.py (TermColors): changed color escapes again to
3876 * IPython/ultraTB.py (TermColors): changed color escapes again to
3868 fix the (old, reintroduced) line-wrapping bug. Basically, if
3877 fix the (old, reintroduced) line-wrapping bug. Basically, if
3869 \001..\002 aren't given in the color escapes, lines get wrapped
3878 \001..\002 aren't given in the color escapes, lines get wrapped
3870 weirdly. But giving those screws up old xterms and emacs terms. So
3879 weirdly. But giving those screws up old xterms and emacs terms. So
3871 I added some logic for emacs terms to be ok, but I can't identify old
3880 I added some logic for emacs terms to be ok, but I can't identify old
3872 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3881 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3873
3882
3874 2002-03-10 Fernando Perez <fperez@colorado.edu>
3883 2002-03-10 Fernando Perez <fperez@colorado.edu>
3875
3884
3876 * IPython/usage.py (__doc__): Various documentation cleanups and
3885 * IPython/usage.py (__doc__): Various documentation cleanups and
3877 updates, both in usage docstrings and in the manual.
3886 updates, both in usage docstrings and in the manual.
3878
3887
3879 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3888 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3880 handling of caching. Set minimum acceptabe value for having a
3889 handling of caching. Set minimum acceptabe value for having a
3881 cache at 20 values.
3890 cache at 20 values.
3882
3891
3883 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3892 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3884 install_first_time function to a method, renamed it and added an
3893 install_first_time function to a method, renamed it and added an
3885 'upgrade' mode. Now people can update their config directory with
3894 'upgrade' mode. Now people can update their config directory with
3886 a simple command line switch (-upgrade, also new).
3895 a simple command line switch (-upgrade, also new).
3887
3896
3888 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3897 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3889 @file (convenient for automagic users under Python >= 2.2).
3898 @file (convenient for automagic users under Python >= 2.2).
3890 Removed @files (it seemed more like a plural than an abbrev. of
3899 Removed @files (it seemed more like a plural than an abbrev. of
3891 'file show').
3900 'file show').
3892
3901
3893 * IPython/iplib.py (install_first_time): Fixed crash if there were
3902 * IPython/iplib.py (install_first_time): Fixed crash if there were
3894 backup files ('~') in .ipython/ install directory.
3903 backup files ('~') in .ipython/ install directory.
3895
3904
3896 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3905 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3897 system. Things look fine, but these changes are fairly
3906 system. Things look fine, but these changes are fairly
3898 intrusive. Test them for a few days.
3907 intrusive. Test them for a few days.
3899
3908
3900 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3909 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3901 the prompts system. Now all in/out prompt strings are user
3910 the prompts system. Now all in/out prompt strings are user
3902 controllable. This is particularly useful for embedding, as one
3911 controllable. This is particularly useful for embedding, as one
3903 can tag embedded instances with particular prompts.
3912 can tag embedded instances with particular prompts.
3904
3913
3905 Also removed global use of sys.ps1/2, which now allows nested
3914 Also removed global use of sys.ps1/2, which now allows nested
3906 embeddings without any problems. Added command-line options for
3915 embeddings without any problems. Added command-line options for
3907 the prompt strings.
3916 the prompt strings.
3908
3917
3909 2002-03-08 Fernando Perez <fperez@colorado.edu>
3918 2002-03-08 Fernando Perez <fperez@colorado.edu>
3910
3919
3911 * IPython/UserConfig/example-embed-short.py (ipshell): added
3920 * IPython/UserConfig/example-embed-short.py (ipshell): added
3912 example file with the bare minimum code for embedding.
3921 example file with the bare minimum code for embedding.
3913
3922
3914 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3923 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3915 functionality for the embeddable shell to be activated/deactivated
3924 functionality for the embeddable shell to be activated/deactivated
3916 either globally or at each call.
3925 either globally or at each call.
3917
3926
3918 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3927 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3919 rewriting the prompt with '--->' for auto-inputs with proper
3928 rewriting the prompt with '--->' for auto-inputs with proper
3920 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3929 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3921 this is handled by the prompts class itself, as it should.
3930 this is handled by the prompts class itself, as it should.
3922
3931
3923 2002-03-05 Fernando Perez <fperez@colorado.edu>
3932 2002-03-05 Fernando Perez <fperez@colorado.edu>
3924
3933
3925 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3934 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3926 @logstart to avoid name clashes with the math log function.
3935 @logstart to avoid name clashes with the math log function.
3927
3936
3928 * Big updates to X/Emacs section of the manual.
3937 * Big updates to X/Emacs section of the manual.
3929
3938
3930 * Removed ipython_emacs. Milan explained to me how to pass
3939 * Removed ipython_emacs. Milan explained to me how to pass
3931 arguments to ipython through Emacs. Some day I'm going to end up
3940 arguments to ipython through Emacs. Some day I'm going to end up
3932 learning some lisp...
3941 learning some lisp...
3933
3942
3934 2002-03-04 Fernando Perez <fperez@colorado.edu>
3943 2002-03-04 Fernando Perez <fperez@colorado.edu>
3935
3944
3936 * IPython/ipython_emacs: Created script to be used as the
3945 * IPython/ipython_emacs: Created script to be used as the
3937 py-python-command Emacs variable so we can pass IPython
3946 py-python-command Emacs variable so we can pass IPython
3938 parameters. I can't figure out how to tell Emacs directly to pass
3947 parameters. I can't figure out how to tell Emacs directly to pass
3939 parameters to IPython, so a dummy shell script will do it.
3948 parameters to IPython, so a dummy shell script will do it.
3940
3949
3941 Other enhancements made for things to work better under Emacs'
3950 Other enhancements made for things to work better under Emacs'
3942 various types of terminals. Many thanks to Milan Zamazal
3951 various types of terminals. Many thanks to Milan Zamazal
3943 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3952 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3944
3953
3945 2002-03-01 Fernando Perez <fperez@colorado.edu>
3954 2002-03-01 Fernando Perez <fperez@colorado.edu>
3946
3955
3947 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3956 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3948 that loading of readline is now optional. This gives better
3957 that loading of readline is now optional. This gives better
3949 control to emacs users.
3958 control to emacs users.
3950
3959
3951 * IPython/ultraTB.py (__date__): Modified color escape sequences
3960 * IPython/ultraTB.py (__date__): Modified color escape sequences
3952 and now things work fine under xterm and in Emacs' term buffers
3961 and now things work fine under xterm and in Emacs' term buffers
3953 (though not shell ones). Well, in emacs you get colors, but all
3962 (though not shell ones). Well, in emacs you get colors, but all
3954 seem to be 'light' colors (no difference between dark and light
3963 seem to be 'light' colors (no difference between dark and light
3955 ones). But the garbage chars are gone, and also in xterms. It
3964 ones). But the garbage chars are gone, and also in xterms. It
3956 seems that now I'm using 'cleaner' ansi sequences.
3965 seems that now I'm using 'cleaner' ansi sequences.
3957
3966
3958 2002-02-21 Fernando Perez <fperez@colorado.edu>
3967 2002-02-21 Fernando Perez <fperez@colorado.edu>
3959
3968
3960 * Released 0.2.7 (mainly to publish the scoping fix).
3969 * Released 0.2.7 (mainly to publish the scoping fix).
3961
3970
3962 * IPython/Logger.py (Logger.logstate): added. A corresponding
3971 * IPython/Logger.py (Logger.logstate): added. A corresponding
3963 @logstate magic was created.
3972 @logstate magic was created.
3964
3973
3965 * IPython/Magic.py: fixed nested scoping problem under Python
3974 * IPython/Magic.py: fixed nested scoping problem under Python
3966 2.1.x (automagic wasn't working).
3975 2.1.x (automagic wasn't working).
3967
3976
3968 2002-02-20 Fernando Perez <fperez@colorado.edu>
3977 2002-02-20 Fernando Perez <fperez@colorado.edu>
3969
3978
3970 * Released 0.2.6.
3979 * Released 0.2.6.
3971
3980
3972 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3981 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3973 option so that logs can come out without any headers at all.
3982 option so that logs can come out without any headers at all.
3974
3983
3975 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3984 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3976 SciPy.
3985 SciPy.
3977
3986
3978 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3987 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3979 that embedded IPython calls don't require vars() to be explicitly
3988 that embedded IPython calls don't require vars() to be explicitly
3980 passed. Now they are extracted from the caller's frame (code
3989 passed. Now they are extracted from the caller's frame (code
3981 snatched from Eric Jones' weave). Added better documentation to
3990 snatched from Eric Jones' weave). Added better documentation to
3982 the section on embedding and the example file.
3991 the section on embedding and the example file.
3983
3992
3984 * IPython/genutils.py (page): Changed so that under emacs, it just
3993 * IPython/genutils.py (page): Changed so that under emacs, it just
3985 prints the string. You can then page up and down in the emacs
3994 prints the string. You can then page up and down in the emacs
3986 buffer itself. This is how the builtin help() works.
3995 buffer itself. This is how the builtin help() works.
3987
3996
3988 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3997 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3989 macro scoping: macros need to be executed in the user's namespace
3998 macro scoping: macros need to be executed in the user's namespace
3990 to work as if they had been typed by the user.
3999 to work as if they had been typed by the user.
3991
4000
3992 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4001 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3993 execute automatically (no need to type 'exec...'). They then
4002 execute automatically (no need to type 'exec...'). They then
3994 behave like 'true macros'. The printing system was also modified
4003 behave like 'true macros'. The printing system was also modified
3995 for this to work.
4004 for this to work.
3996
4005
3997 2002-02-19 Fernando Perez <fperez@colorado.edu>
4006 2002-02-19 Fernando Perez <fperez@colorado.edu>
3998
4007
3999 * IPython/genutils.py (page_file): new function for paging files
4008 * IPython/genutils.py (page_file): new function for paging files
4000 in an OS-independent way. Also necessary for file viewing to work
4009 in an OS-independent way. Also necessary for file viewing to work
4001 well inside Emacs buffers.
4010 well inside Emacs buffers.
4002 (page): Added checks for being in an emacs buffer.
4011 (page): Added checks for being in an emacs buffer.
4003 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4012 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4004 same bug in iplib.
4013 same bug in iplib.
4005
4014
4006 2002-02-18 Fernando Perez <fperez@colorado.edu>
4015 2002-02-18 Fernando Perez <fperez@colorado.edu>
4007
4016
4008 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4017 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4009 of readline so that IPython can work inside an Emacs buffer.
4018 of readline so that IPython can work inside an Emacs buffer.
4010
4019
4011 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4020 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4012 method signatures (they weren't really bugs, but it looks cleaner
4021 method signatures (they weren't really bugs, but it looks cleaner
4013 and keeps PyChecker happy).
4022 and keeps PyChecker happy).
4014
4023
4015 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4024 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4016 for implementing various user-defined hooks. Currently only
4025 for implementing various user-defined hooks. Currently only
4017 display is done.
4026 display is done.
4018
4027
4019 * IPython/Prompts.py (CachedOutput._display): changed display
4028 * IPython/Prompts.py (CachedOutput._display): changed display
4020 functions so that they can be dynamically changed by users easily.
4029 functions so that they can be dynamically changed by users easily.
4021
4030
4022 * IPython/Extensions/numeric_formats.py (num_display): added an
4031 * IPython/Extensions/numeric_formats.py (num_display): added an
4023 extension for printing NumPy arrays in flexible manners. It
4032 extension for printing NumPy arrays in flexible manners. It
4024 doesn't do anything yet, but all the structure is in
4033 doesn't do anything yet, but all the structure is in
4025 place. Ultimately the plan is to implement output format control
4034 place. Ultimately the plan is to implement output format control
4026 like in Octave.
4035 like in Octave.
4027
4036
4028 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4037 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4029 methods are found at run-time by all the automatic machinery.
4038 methods are found at run-time by all the automatic machinery.
4030
4039
4031 2002-02-17 Fernando Perez <fperez@colorado.edu>
4040 2002-02-17 Fernando Perez <fperez@colorado.edu>
4032
4041
4033 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4042 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4034 whole file a little.
4043 whole file a little.
4035
4044
4036 * ToDo: closed this document. Now there's a new_design.lyx
4045 * ToDo: closed this document. Now there's a new_design.lyx
4037 document for all new ideas. Added making a pdf of it for the
4046 document for all new ideas. Added making a pdf of it for the
4038 end-user distro.
4047 end-user distro.
4039
4048
4040 * IPython/Logger.py (Logger.switch_log): Created this to replace
4049 * IPython/Logger.py (Logger.switch_log): Created this to replace
4041 logon() and logoff(). It also fixes a nasty crash reported by
4050 logon() and logoff(). It also fixes a nasty crash reported by
4042 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4051 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4043
4052
4044 * IPython/iplib.py (complete): got auto-completion to work with
4053 * IPython/iplib.py (complete): got auto-completion to work with
4045 automagic (I had wanted this for a long time).
4054 automagic (I had wanted this for a long time).
4046
4055
4047 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4056 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4048 to @file, since file() is now a builtin and clashes with automagic
4057 to @file, since file() is now a builtin and clashes with automagic
4049 for @file.
4058 for @file.
4050
4059
4051 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4060 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4052 of this was previously in iplib, which had grown to more than 2000
4061 of this was previously in iplib, which had grown to more than 2000
4053 lines, way too long. No new functionality, but it makes managing
4062 lines, way too long. No new functionality, but it makes managing
4054 the code a bit easier.
4063 the code a bit easier.
4055
4064
4056 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4065 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4057 information to crash reports.
4066 information to crash reports.
4058
4067
4059 2002-02-12 Fernando Perez <fperez@colorado.edu>
4068 2002-02-12 Fernando Perez <fperez@colorado.edu>
4060
4069
4061 * Released 0.2.5.
4070 * Released 0.2.5.
4062
4071
4063 2002-02-11 Fernando Perez <fperez@colorado.edu>
4072 2002-02-11 Fernando Perez <fperez@colorado.edu>
4064
4073
4065 * Wrote a relatively complete Windows installer. It puts
4074 * Wrote a relatively complete Windows installer. It puts
4066 everything in place, creates Start Menu entries and fixes the
4075 everything in place, creates Start Menu entries and fixes the
4067 color issues. Nothing fancy, but it works.
4076 color issues. Nothing fancy, but it works.
4068
4077
4069 2002-02-10 Fernando Perez <fperez@colorado.edu>
4078 2002-02-10 Fernando Perez <fperez@colorado.edu>
4070
4079
4071 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4080 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4072 os.path.expanduser() call so that we can type @run ~/myfile.py and
4081 os.path.expanduser() call so that we can type @run ~/myfile.py and
4073 have thigs work as expected.
4082 have thigs work as expected.
4074
4083
4075 * IPython/genutils.py (page): fixed exception handling so things
4084 * IPython/genutils.py (page): fixed exception handling so things
4076 work both in Unix and Windows correctly. Quitting a pager triggers
4085 work both in Unix and Windows correctly. Quitting a pager triggers
4077 an IOError/broken pipe in Unix, and in windows not finding a pager
4086 an IOError/broken pipe in Unix, and in windows not finding a pager
4078 is also an IOError, so I had to actually look at the return value
4087 is also an IOError, so I had to actually look at the return value
4079 of the exception, not just the exception itself. Should be ok now.
4088 of the exception, not just the exception itself. Should be ok now.
4080
4089
4081 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4090 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4082 modified to allow case-insensitive color scheme changes.
4091 modified to allow case-insensitive color scheme changes.
4083
4092
4084 2002-02-09 Fernando Perez <fperez@colorado.edu>
4093 2002-02-09 Fernando Perez <fperez@colorado.edu>
4085
4094
4086 * IPython/genutils.py (native_line_ends): new function to leave
4095 * IPython/genutils.py (native_line_ends): new function to leave
4087 user config files with os-native line-endings.
4096 user config files with os-native line-endings.
4088
4097
4089 * README and manual updates.
4098 * README and manual updates.
4090
4099
4091 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4100 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4092 instead of StringType to catch Unicode strings.
4101 instead of StringType to catch Unicode strings.
4093
4102
4094 * IPython/genutils.py (filefind): fixed bug for paths with
4103 * IPython/genutils.py (filefind): fixed bug for paths with
4095 embedded spaces (very common in Windows).
4104 embedded spaces (very common in Windows).
4096
4105
4097 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4106 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4098 files under Windows, so that they get automatically associated
4107 files under Windows, so that they get automatically associated
4099 with a text editor. Windows makes it a pain to handle
4108 with a text editor. Windows makes it a pain to handle
4100 extension-less files.
4109 extension-less files.
4101
4110
4102 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4111 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4103 warning about readline only occur for Posix. In Windows there's no
4112 warning about readline only occur for Posix. In Windows there's no
4104 way to get readline, so why bother with the warning.
4113 way to get readline, so why bother with the warning.
4105
4114
4106 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4115 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4107 for __str__ instead of dir(self), since dir() changed in 2.2.
4116 for __str__ instead of dir(self), since dir() changed in 2.2.
4108
4117
4109 * Ported to Windows! Tested on XP, I suspect it should work fine
4118 * Ported to Windows! Tested on XP, I suspect it should work fine
4110 on NT/2000, but I don't think it will work on 98 et al. That
4119 on NT/2000, but I don't think it will work on 98 et al. That
4111 series of Windows is such a piece of junk anyway that I won't try
4120 series of Windows is such a piece of junk anyway that I won't try
4112 porting it there. The XP port was straightforward, showed a few
4121 porting it there. The XP port was straightforward, showed a few
4113 bugs here and there (fixed all), in particular some string
4122 bugs here and there (fixed all), in particular some string
4114 handling stuff which required considering Unicode strings (which
4123 handling stuff which required considering Unicode strings (which
4115 Windows uses). This is good, but hasn't been too tested :) No
4124 Windows uses). This is good, but hasn't been too tested :) No
4116 fancy installer yet, I'll put a note in the manual so people at
4125 fancy installer yet, I'll put a note in the manual so people at
4117 least make manually a shortcut.
4126 least make manually a shortcut.
4118
4127
4119 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4128 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4120 into a single one, "colors". This now controls both prompt and
4129 into a single one, "colors". This now controls both prompt and
4121 exception color schemes, and can be changed both at startup
4130 exception color schemes, and can be changed both at startup
4122 (either via command-line switches or via ipythonrc files) and at
4131 (either via command-line switches or via ipythonrc files) and at
4123 runtime, with @colors.
4132 runtime, with @colors.
4124 (Magic.magic_run): renamed @prun to @run and removed the old
4133 (Magic.magic_run): renamed @prun to @run and removed the old
4125 @run. The two were too similar to warrant keeping both.
4134 @run. The two were too similar to warrant keeping both.
4126
4135
4127 2002-02-03 Fernando Perez <fperez@colorado.edu>
4136 2002-02-03 Fernando Perez <fperez@colorado.edu>
4128
4137
4129 * IPython/iplib.py (install_first_time): Added comment on how to
4138 * IPython/iplib.py (install_first_time): Added comment on how to
4130 configure the color options for first-time users. Put a <return>
4139 configure the color options for first-time users. Put a <return>
4131 request at the end so that small-terminal users get a chance to
4140 request at the end so that small-terminal users get a chance to
4132 read the startup info.
4141 read the startup info.
4133
4142
4134 2002-01-23 Fernando Perez <fperez@colorado.edu>
4143 2002-01-23 Fernando Perez <fperez@colorado.edu>
4135
4144
4136 * IPython/iplib.py (CachedOutput.update): Changed output memory
4145 * IPython/iplib.py (CachedOutput.update): Changed output memory
4137 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4146 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4138 input history we still use _i. Did this b/c these variable are
4147 input history we still use _i. Did this b/c these variable are
4139 very commonly used in interactive work, so the less we need to
4148 very commonly used in interactive work, so the less we need to
4140 type the better off we are.
4149 type the better off we are.
4141 (Magic.magic_prun): updated @prun to better handle the namespaces
4150 (Magic.magic_prun): updated @prun to better handle the namespaces
4142 the file will run in, including a fix for __name__ not being set
4151 the file will run in, including a fix for __name__ not being set
4143 before.
4152 before.
4144
4153
4145 2002-01-20 Fernando Perez <fperez@colorado.edu>
4154 2002-01-20 Fernando Perez <fperez@colorado.edu>
4146
4155
4147 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4156 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4148 extra garbage for Python 2.2. Need to look more carefully into
4157 extra garbage for Python 2.2. Need to look more carefully into
4149 this later.
4158 this later.
4150
4159
4151 2002-01-19 Fernando Perez <fperez@colorado.edu>
4160 2002-01-19 Fernando Perez <fperez@colorado.edu>
4152
4161
4153 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4162 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4154 display SyntaxError exceptions properly formatted when they occur
4163 display SyntaxError exceptions properly formatted when they occur
4155 (they can be triggered by imported code).
4164 (they can be triggered by imported code).
4156
4165
4157 2002-01-18 Fernando Perez <fperez@colorado.edu>
4166 2002-01-18 Fernando Perez <fperez@colorado.edu>
4158
4167
4159 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4168 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4160 SyntaxError exceptions are reported nicely formatted, instead of
4169 SyntaxError exceptions are reported nicely formatted, instead of
4161 spitting out only offset information as before.
4170 spitting out only offset information as before.
4162 (Magic.magic_prun): Added the @prun function for executing
4171 (Magic.magic_prun): Added the @prun function for executing
4163 programs with command line args inside IPython.
4172 programs with command line args inside IPython.
4164
4173
4165 2002-01-16 Fernando Perez <fperez@colorado.edu>
4174 2002-01-16 Fernando Perez <fperez@colorado.edu>
4166
4175
4167 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4176 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4168 to *not* include the last item given in a range. This brings their
4177 to *not* include the last item given in a range. This brings their
4169 behavior in line with Python's slicing:
4178 behavior in line with Python's slicing:
4170 a[n1:n2] -> a[n1]...a[n2-1]
4179 a[n1:n2] -> a[n1]...a[n2-1]
4171 It may be a bit less convenient, but I prefer to stick to Python's
4180 It may be a bit less convenient, but I prefer to stick to Python's
4172 conventions *everywhere*, so users never have to wonder.
4181 conventions *everywhere*, so users never have to wonder.
4173 (Magic.magic_macro): Added @macro function to ease the creation of
4182 (Magic.magic_macro): Added @macro function to ease the creation of
4174 macros.
4183 macros.
4175
4184
4176 2002-01-05 Fernando Perez <fperez@colorado.edu>
4185 2002-01-05 Fernando Perez <fperez@colorado.edu>
4177
4186
4178 * Released 0.2.4.
4187 * Released 0.2.4.
4179
4188
4180 * IPython/iplib.py (Magic.magic_pdef):
4189 * IPython/iplib.py (Magic.magic_pdef):
4181 (InteractiveShell.safe_execfile): report magic lines and error
4190 (InteractiveShell.safe_execfile): report magic lines and error
4182 lines without line numbers so one can easily copy/paste them for
4191 lines without line numbers so one can easily copy/paste them for
4183 re-execution.
4192 re-execution.
4184
4193
4185 * Updated manual with recent changes.
4194 * Updated manual with recent changes.
4186
4195
4187 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4196 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4188 docstring printing when class? is called. Very handy for knowing
4197 docstring printing when class? is called. Very handy for knowing
4189 how to create class instances (as long as __init__ is well
4198 how to create class instances (as long as __init__ is well
4190 documented, of course :)
4199 documented, of course :)
4191 (Magic.magic_doc): print both class and constructor docstrings.
4200 (Magic.magic_doc): print both class and constructor docstrings.
4192 (Magic.magic_pdef): give constructor info if passed a class and
4201 (Magic.magic_pdef): give constructor info if passed a class and
4193 __call__ info for callable object instances.
4202 __call__ info for callable object instances.
4194
4203
4195 2002-01-04 Fernando Perez <fperez@colorado.edu>
4204 2002-01-04 Fernando Perez <fperez@colorado.edu>
4196
4205
4197 * Made deep_reload() off by default. It doesn't always work
4206 * Made deep_reload() off by default. It doesn't always work
4198 exactly as intended, so it's probably safer to have it off. It's
4207 exactly as intended, so it's probably safer to have it off. It's
4199 still available as dreload() anyway, so nothing is lost.
4208 still available as dreload() anyway, so nothing is lost.
4200
4209
4201 2002-01-02 Fernando Perez <fperez@colorado.edu>
4210 2002-01-02 Fernando Perez <fperez@colorado.edu>
4202
4211
4203 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4212 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4204 so I wanted an updated release).
4213 so I wanted an updated release).
4205
4214
4206 2001-12-27 Fernando Perez <fperez@colorado.edu>
4215 2001-12-27 Fernando Perez <fperez@colorado.edu>
4207
4216
4208 * IPython/iplib.py (InteractiveShell.interact): Added the original
4217 * IPython/iplib.py (InteractiveShell.interact): Added the original
4209 code from 'code.py' for this module in order to change the
4218 code from 'code.py' for this module in order to change the
4210 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4219 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4211 the history cache would break when the user hit Ctrl-C, and
4220 the history cache would break when the user hit Ctrl-C, and
4212 interact() offers no way to add any hooks to it.
4221 interact() offers no way to add any hooks to it.
4213
4222
4214 2001-12-23 Fernando Perez <fperez@colorado.edu>
4223 2001-12-23 Fernando Perez <fperez@colorado.edu>
4215
4224
4216 * setup.py: added check for 'MANIFEST' before trying to remove
4225 * setup.py: added check for 'MANIFEST' before trying to remove
4217 it. Thanks to Sean Reifschneider.
4226 it. Thanks to Sean Reifschneider.
4218
4227
4219 2001-12-22 Fernando Perez <fperez@colorado.edu>
4228 2001-12-22 Fernando Perez <fperez@colorado.edu>
4220
4229
4221 * Released 0.2.2.
4230 * Released 0.2.2.
4222
4231
4223 * Finished (reasonably) writing the manual. Later will add the
4232 * Finished (reasonably) writing the manual. Later will add the
4224 python-standard navigation stylesheets, but for the time being
4233 python-standard navigation stylesheets, but for the time being
4225 it's fairly complete. Distribution will include html and pdf
4234 it's fairly complete. Distribution will include html and pdf
4226 versions.
4235 versions.
4227
4236
4228 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4237 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4229 (MayaVi author).
4238 (MayaVi author).
4230
4239
4231 2001-12-21 Fernando Perez <fperez@colorado.edu>
4240 2001-12-21 Fernando Perez <fperez@colorado.edu>
4232
4241
4233 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4242 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4234 good public release, I think (with the manual and the distutils
4243 good public release, I think (with the manual and the distutils
4235 installer). The manual can use some work, but that can go
4244 installer). The manual can use some work, but that can go
4236 slowly. Otherwise I think it's quite nice for end users. Next
4245 slowly. Otherwise I think it's quite nice for end users. Next
4237 summer, rewrite the guts of it...
4246 summer, rewrite the guts of it...
4238
4247
4239 * Changed format of ipythonrc files to use whitespace as the
4248 * Changed format of ipythonrc files to use whitespace as the
4240 separator instead of an explicit '='. Cleaner.
4249 separator instead of an explicit '='. Cleaner.
4241
4250
4242 2001-12-20 Fernando Perez <fperez@colorado.edu>
4251 2001-12-20 Fernando Perez <fperez@colorado.edu>
4243
4252
4244 * Started a manual in LyX. For now it's just a quick merge of the
4253 * Started a manual in LyX. For now it's just a quick merge of the
4245 various internal docstrings and READMEs. Later it may grow into a
4254 various internal docstrings and READMEs. Later it may grow into a
4246 nice, full-blown manual.
4255 nice, full-blown manual.
4247
4256
4248 * Set up a distutils based installer. Installation should now be
4257 * Set up a distutils based installer. Installation should now be
4249 trivially simple for end-users.
4258 trivially simple for end-users.
4250
4259
4251 2001-12-11 Fernando Perez <fperez@colorado.edu>
4260 2001-12-11 Fernando Perez <fperez@colorado.edu>
4252
4261
4253 * Released 0.2.0. First public release, announced it at
4262 * Released 0.2.0. First public release, announced it at
4254 comp.lang.python. From now on, just bugfixes...
4263 comp.lang.python. From now on, just bugfixes...
4255
4264
4256 * Went through all the files, set copyright/license notices and
4265 * Went through all the files, set copyright/license notices and
4257 cleaned up things. Ready for release.
4266 cleaned up things. Ready for release.
4258
4267
4259 2001-12-10 Fernando Perez <fperez@colorado.edu>
4268 2001-12-10 Fernando Perez <fperez@colorado.edu>
4260
4269
4261 * Changed the first-time installer not to use tarfiles. It's more
4270 * Changed the first-time installer not to use tarfiles. It's more
4262 robust now and less unix-dependent. Also makes it easier for
4271 robust now and less unix-dependent. Also makes it easier for
4263 people to later upgrade versions.
4272 people to later upgrade versions.
4264
4273
4265 * Changed @exit to @abort to reflect the fact that it's pretty
4274 * Changed @exit to @abort to reflect the fact that it's pretty
4266 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4275 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4267 becomes significant only when IPyhton is embedded: in that case,
4276 becomes significant only when IPyhton is embedded: in that case,
4268 C-D closes IPython only, but @abort kills the enclosing program
4277 C-D closes IPython only, but @abort kills the enclosing program
4269 too (unless it had called IPython inside a try catching
4278 too (unless it had called IPython inside a try catching
4270 SystemExit).
4279 SystemExit).
4271
4280
4272 * Created Shell module which exposes the actuall IPython Shell
4281 * Created Shell module which exposes the actuall IPython Shell
4273 classes, currently the normal and the embeddable one. This at
4282 classes, currently the normal and the embeddable one. This at
4274 least offers a stable interface we won't need to change when
4283 least offers a stable interface we won't need to change when
4275 (later) the internals are rewritten. That rewrite will be confined
4284 (later) the internals are rewritten. That rewrite will be confined
4276 to iplib and ipmaker, but the Shell interface should remain as is.
4285 to iplib and ipmaker, but the Shell interface should remain as is.
4277
4286
4278 * Added embed module which offers an embeddable IPShell object,
4287 * Added embed module which offers an embeddable IPShell object,
4279 useful to fire up IPython *inside* a running program. Great for
4288 useful to fire up IPython *inside* a running program. Great for
4280 debugging or dynamical data analysis.
4289 debugging or dynamical data analysis.
4281
4290
4282 2001-12-08 Fernando Perez <fperez@colorado.edu>
4291 2001-12-08 Fernando Perez <fperez@colorado.edu>
4283
4292
4284 * Fixed small bug preventing seeing info from methods of defined
4293 * Fixed small bug preventing seeing info from methods of defined
4285 objects (incorrect namespace in _ofind()).
4294 objects (incorrect namespace in _ofind()).
4286
4295
4287 * Documentation cleanup. Moved the main usage docstrings to a
4296 * Documentation cleanup. Moved the main usage docstrings to a
4288 separate file, usage.py (cleaner to maintain, and hopefully in the
4297 separate file, usage.py (cleaner to maintain, and hopefully in the
4289 future some perlpod-like way of producing interactive, man and
4298 future some perlpod-like way of producing interactive, man and
4290 html docs out of it will be found).
4299 html docs out of it will be found).
4291
4300
4292 * Added @profile to see your profile at any time.
4301 * Added @profile to see your profile at any time.
4293
4302
4294 * Added @p as an alias for 'print'. It's especially convenient if
4303 * Added @p as an alias for 'print'. It's especially convenient if
4295 using automagic ('p x' prints x).
4304 using automagic ('p x' prints x).
4296
4305
4297 * Small cleanups and fixes after a pychecker run.
4306 * Small cleanups and fixes after a pychecker run.
4298
4307
4299 * Changed the @cd command to handle @cd - and @cd -<n> for
4308 * Changed the @cd command to handle @cd - and @cd -<n> for
4300 visiting any directory in _dh.
4309 visiting any directory in _dh.
4301
4310
4302 * Introduced _dh, a history of visited directories. @dhist prints
4311 * Introduced _dh, a history of visited directories. @dhist prints
4303 it out with numbers.
4312 it out with numbers.
4304
4313
4305 2001-12-07 Fernando Perez <fperez@colorado.edu>
4314 2001-12-07 Fernando Perez <fperez@colorado.edu>
4306
4315
4307 * Released 0.1.22
4316 * Released 0.1.22
4308
4317
4309 * Made initialization a bit more robust against invalid color
4318 * Made initialization a bit more robust against invalid color
4310 options in user input (exit, not traceback-crash).
4319 options in user input (exit, not traceback-crash).
4311
4320
4312 * Changed the bug crash reporter to write the report only in the
4321 * Changed the bug crash reporter to write the report only in the
4313 user's .ipython directory. That way IPython won't litter people's
4322 user's .ipython directory. That way IPython won't litter people's
4314 hard disks with crash files all over the place. Also print on
4323 hard disks with crash files all over the place. Also print on
4315 screen the necessary mail command.
4324 screen the necessary mail command.
4316
4325
4317 * With the new ultraTB, implemented LightBG color scheme for light
4326 * With the new ultraTB, implemented LightBG color scheme for light
4318 background terminals. A lot of people like white backgrounds, so I
4327 background terminals. A lot of people like white backgrounds, so I
4319 guess we should at least give them something readable.
4328 guess we should at least give them something readable.
4320
4329
4321 2001-12-06 Fernando Perez <fperez@colorado.edu>
4330 2001-12-06 Fernando Perez <fperez@colorado.edu>
4322
4331
4323 * Modified the structure of ultraTB. Now there's a proper class
4332 * Modified the structure of ultraTB. Now there's a proper class
4324 for tables of color schemes which allow adding schemes easily and
4333 for tables of color schemes which allow adding schemes easily and
4325 switching the active scheme without creating a new instance every
4334 switching the active scheme without creating a new instance every
4326 time (which was ridiculous). The syntax for creating new schemes
4335 time (which was ridiculous). The syntax for creating new schemes
4327 is also cleaner. I think ultraTB is finally done, with a clean
4336 is also cleaner. I think ultraTB is finally done, with a clean
4328 class structure. Names are also much cleaner (now there's proper
4337 class structure. Names are also much cleaner (now there's proper
4329 color tables, no need for every variable to also have 'color' in
4338 color tables, no need for every variable to also have 'color' in
4330 its name).
4339 its name).
4331
4340
4332 * Broke down genutils into separate files. Now genutils only
4341 * Broke down genutils into separate files. Now genutils only
4333 contains utility functions, and classes have been moved to their
4342 contains utility functions, and classes have been moved to their
4334 own files (they had enough independent functionality to warrant
4343 own files (they had enough independent functionality to warrant
4335 it): ConfigLoader, OutputTrap, Struct.
4344 it): ConfigLoader, OutputTrap, Struct.
4336
4345
4337 2001-12-05 Fernando Perez <fperez@colorado.edu>
4346 2001-12-05 Fernando Perez <fperez@colorado.edu>
4338
4347
4339 * IPython turns 21! Released version 0.1.21, as a candidate for
4348 * IPython turns 21! Released version 0.1.21, as a candidate for
4340 public consumption. If all goes well, release in a few days.
4349 public consumption. If all goes well, release in a few days.
4341
4350
4342 * Fixed path bug (files in Extensions/ directory wouldn't be found
4351 * Fixed path bug (files in Extensions/ directory wouldn't be found
4343 unless IPython/ was explicitly in sys.path).
4352 unless IPython/ was explicitly in sys.path).
4344
4353
4345 * Extended the FlexCompleter class as MagicCompleter to allow
4354 * Extended the FlexCompleter class as MagicCompleter to allow
4346 completion of @-starting lines.
4355 completion of @-starting lines.
4347
4356
4348 * Created __release__.py file as a central repository for release
4357 * Created __release__.py file as a central repository for release
4349 info that other files can read from.
4358 info that other files can read from.
4350
4359
4351 * Fixed small bug in logging: when logging was turned on in
4360 * Fixed small bug in logging: when logging was turned on in
4352 mid-session, old lines with special meanings (!@?) were being
4361 mid-session, old lines with special meanings (!@?) were being
4353 logged without the prepended comment, which is necessary since
4362 logged without the prepended comment, which is necessary since
4354 they are not truly valid python syntax. This should make session
4363 they are not truly valid python syntax. This should make session
4355 restores produce less errors.
4364 restores produce less errors.
4356
4365
4357 * The namespace cleanup forced me to make a FlexCompleter class
4366 * The namespace cleanup forced me to make a FlexCompleter class
4358 which is nothing but a ripoff of rlcompleter, but with selectable
4367 which is nothing but a ripoff of rlcompleter, but with selectable
4359 namespace (rlcompleter only works in __main__.__dict__). I'll try
4368 namespace (rlcompleter only works in __main__.__dict__). I'll try
4360 to submit a note to the authors to see if this change can be
4369 to submit a note to the authors to see if this change can be
4361 incorporated in future rlcompleter releases (Dec.6: done)
4370 incorporated in future rlcompleter releases (Dec.6: done)
4362
4371
4363 * More fixes to namespace handling. It was a mess! Now all
4372 * More fixes to namespace handling. It was a mess! Now all
4364 explicit references to __main__.__dict__ are gone (except when
4373 explicit references to __main__.__dict__ are gone (except when
4365 really needed) and everything is handled through the namespace
4374 really needed) and everything is handled through the namespace
4366 dicts in the IPython instance. We seem to be getting somewhere
4375 dicts in the IPython instance. We seem to be getting somewhere
4367 with this, finally...
4376 with this, finally...
4368
4377
4369 * Small documentation updates.
4378 * Small documentation updates.
4370
4379
4371 * Created the Extensions directory under IPython (with an
4380 * Created the Extensions directory under IPython (with an
4372 __init__.py). Put the PhysicalQ stuff there. This directory should
4381 __init__.py). Put the PhysicalQ stuff there. This directory should
4373 be used for all special-purpose extensions.
4382 be used for all special-purpose extensions.
4374
4383
4375 * File renaming:
4384 * File renaming:
4376 ipythonlib --> ipmaker
4385 ipythonlib --> ipmaker
4377 ipplib --> iplib
4386 ipplib --> iplib
4378 This makes a bit more sense in terms of what these files actually do.
4387 This makes a bit more sense in terms of what these files actually do.
4379
4388
4380 * Moved all the classes and functions in ipythonlib to ipplib, so
4389 * Moved all the classes and functions in ipythonlib to ipplib, so
4381 now ipythonlib only has make_IPython(). This will ease up its
4390 now ipythonlib only has make_IPython(). This will ease up its
4382 splitting in smaller functional chunks later.
4391 splitting in smaller functional chunks later.
4383
4392
4384 * Cleaned up (done, I think) output of @whos. Better column
4393 * Cleaned up (done, I think) output of @whos. Better column
4385 formatting, and now shows str(var) for as much as it can, which is
4394 formatting, and now shows str(var) for as much as it can, which is
4386 typically what one gets with a 'print var'.
4395 typically what one gets with a 'print var'.
4387
4396
4388 2001-12-04 Fernando Perez <fperez@colorado.edu>
4397 2001-12-04 Fernando Perez <fperez@colorado.edu>
4389
4398
4390 * Fixed namespace problems. Now builtin/IPyhton/user names get
4399 * Fixed namespace problems. Now builtin/IPyhton/user names get
4391 properly reported in their namespace. Internal namespace handling
4400 properly reported in their namespace. Internal namespace handling
4392 is finally getting decent (not perfect yet, but much better than
4401 is finally getting decent (not perfect yet, but much better than
4393 the ad-hoc mess we had).
4402 the ad-hoc mess we had).
4394
4403
4395 * Removed -exit option. If people just want to run a python
4404 * Removed -exit option. If people just want to run a python
4396 script, that's what the normal interpreter is for. Less
4405 script, that's what the normal interpreter is for. Less
4397 unnecessary options, less chances for bugs.
4406 unnecessary options, less chances for bugs.
4398
4407
4399 * Added a crash handler which generates a complete post-mortem if
4408 * Added a crash handler which generates a complete post-mortem if
4400 IPython crashes. This will help a lot in tracking bugs down the
4409 IPython crashes. This will help a lot in tracking bugs down the
4401 road.
4410 road.
4402
4411
4403 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4412 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4404 which were boud to functions being reassigned would bypass the
4413 which were boud to functions being reassigned would bypass the
4405 logger, breaking the sync of _il with the prompt counter. This
4414 logger, breaking the sync of _il with the prompt counter. This
4406 would then crash IPython later when a new line was logged.
4415 would then crash IPython later when a new line was logged.
4407
4416
4408 2001-12-02 Fernando Perez <fperez@colorado.edu>
4417 2001-12-02 Fernando Perez <fperez@colorado.edu>
4409
4418
4410 * Made IPython a package. This means people don't have to clutter
4419 * Made IPython a package. This means people don't have to clutter
4411 their sys.path with yet another directory. Changed the INSTALL
4420 their sys.path with yet another directory. Changed the INSTALL
4412 file accordingly.
4421 file accordingly.
4413
4422
4414 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4423 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4415 sorts its output (so @who shows it sorted) and @whos formats the
4424 sorts its output (so @who shows it sorted) and @whos formats the
4416 table according to the width of the first column. Nicer, easier to
4425 table according to the width of the first column. Nicer, easier to
4417 read. Todo: write a generic table_format() which takes a list of
4426 read. Todo: write a generic table_format() which takes a list of
4418 lists and prints it nicely formatted, with optional row/column
4427 lists and prints it nicely formatted, with optional row/column
4419 separators and proper padding and justification.
4428 separators and proper padding and justification.
4420
4429
4421 * Released 0.1.20
4430 * Released 0.1.20
4422
4431
4423 * Fixed bug in @log which would reverse the inputcache list (a
4432 * Fixed bug in @log which would reverse the inputcache list (a
4424 copy operation was missing).
4433 copy operation was missing).
4425
4434
4426 * Code cleanup. @config was changed to use page(). Better, since
4435 * Code cleanup. @config was changed to use page(). Better, since
4427 its output is always quite long.
4436 its output is always quite long.
4428
4437
4429 * Itpl is back as a dependency. I was having too many problems
4438 * Itpl is back as a dependency. I was having too many problems
4430 getting the parametric aliases to work reliably, and it's just
4439 getting the parametric aliases to work reliably, and it's just
4431 easier to code weird string operations with it than playing %()s
4440 easier to code weird string operations with it than playing %()s
4432 games. It's only ~6k, so I don't think it's too big a deal.
4441 games. It's only ~6k, so I don't think it's too big a deal.
4433
4442
4434 * Found (and fixed) a very nasty bug with history. !lines weren't
4443 * Found (and fixed) a very nasty bug with history. !lines weren't
4435 getting cached, and the out of sync caches would crash
4444 getting cached, and the out of sync caches would crash
4436 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4445 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4437 division of labor a bit better. Bug fixed, cleaner structure.
4446 division of labor a bit better. Bug fixed, cleaner structure.
4438
4447
4439 2001-12-01 Fernando Perez <fperez@colorado.edu>
4448 2001-12-01 Fernando Perez <fperez@colorado.edu>
4440
4449
4441 * Released 0.1.19
4450 * Released 0.1.19
4442
4451
4443 * Added option -n to @hist to prevent line number printing. Much
4452 * Added option -n to @hist to prevent line number printing. Much
4444 easier to copy/paste code this way.
4453 easier to copy/paste code this way.
4445
4454
4446 * Created global _il to hold the input list. Allows easy
4455 * Created global _il to hold the input list. Allows easy
4447 re-execution of blocks of code by slicing it (inspired by Janko's
4456 re-execution of blocks of code by slicing it (inspired by Janko's
4448 comment on 'macros').
4457 comment on 'macros').
4449
4458
4450 * Small fixes and doc updates.
4459 * Small fixes and doc updates.
4451
4460
4452 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4461 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4453 much too fragile with automagic. Handles properly multi-line
4462 much too fragile with automagic. Handles properly multi-line
4454 statements and takes parameters.
4463 statements and takes parameters.
4455
4464
4456 2001-11-30 Fernando Perez <fperez@colorado.edu>
4465 2001-11-30 Fernando Perez <fperez@colorado.edu>
4457
4466
4458 * Version 0.1.18 released.
4467 * Version 0.1.18 released.
4459
4468
4460 * Fixed nasty namespace bug in initial module imports.
4469 * Fixed nasty namespace bug in initial module imports.
4461
4470
4462 * Added copyright/license notes to all code files (except
4471 * Added copyright/license notes to all code files (except
4463 DPyGetOpt). For the time being, LGPL. That could change.
4472 DPyGetOpt). For the time being, LGPL. That could change.
4464
4473
4465 * Rewrote a much nicer README, updated INSTALL, cleaned up
4474 * Rewrote a much nicer README, updated INSTALL, cleaned up
4466 ipythonrc-* samples.
4475 ipythonrc-* samples.
4467
4476
4468 * Overall code/documentation cleanup. Basically ready for
4477 * Overall code/documentation cleanup. Basically ready for
4469 release. Only remaining thing: licence decision (LGPL?).
4478 release. Only remaining thing: licence decision (LGPL?).
4470
4479
4471 * Converted load_config to a class, ConfigLoader. Now recursion
4480 * Converted load_config to a class, ConfigLoader. Now recursion
4472 control is better organized. Doesn't include the same file twice.
4481 control is better organized. Doesn't include the same file twice.
4473
4482
4474 2001-11-29 Fernando Perez <fperez@colorado.edu>
4483 2001-11-29 Fernando Perez <fperez@colorado.edu>
4475
4484
4476 * Got input history working. Changed output history variables from
4485 * Got input history working. Changed output history variables from
4477 _p to _o so that _i is for input and _o for output. Just cleaner
4486 _p to _o so that _i is for input and _o for output. Just cleaner
4478 convention.
4487 convention.
4479
4488
4480 * Implemented parametric aliases. This pretty much allows the
4489 * Implemented parametric aliases. This pretty much allows the
4481 alias system to offer full-blown shell convenience, I think.
4490 alias system to offer full-blown shell convenience, I think.
4482
4491
4483 * Version 0.1.17 released, 0.1.18 opened.
4492 * Version 0.1.17 released, 0.1.18 opened.
4484
4493
4485 * dot_ipython/ipythonrc (alias): added documentation.
4494 * dot_ipython/ipythonrc (alias): added documentation.
4486 (xcolor): Fixed small bug (xcolors -> xcolor)
4495 (xcolor): Fixed small bug (xcolors -> xcolor)
4487
4496
4488 * Changed the alias system. Now alias is a magic command to define
4497 * Changed the alias system. Now alias is a magic command to define
4489 aliases just like the shell. Rationale: the builtin magics should
4498 aliases just like the shell. Rationale: the builtin magics should
4490 be there for things deeply connected to IPython's
4499 be there for things deeply connected to IPython's
4491 architecture. And this is a much lighter system for what I think
4500 architecture. And this is a much lighter system for what I think
4492 is the really important feature: allowing users to define quickly
4501 is the really important feature: allowing users to define quickly
4493 magics that will do shell things for them, so they can customize
4502 magics that will do shell things for them, so they can customize
4494 IPython easily to match their work habits. If someone is really
4503 IPython easily to match their work habits. If someone is really
4495 desperate to have another name for a builtin alias, they can
4504 desperate to have another name for a builtin alias, they can
4496 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4505 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4497 works.
4506 works.
4498
4507
4499 2001-11-28 Fernando Perez <fperez@colorado.edu>
4508 2001-11-28 Fernando Perez <fperez@colorado.edu>
4500
4509
4501 * Changed @file so that it opens the source file at the proper
4510 * Changed @file so that it opens the source file at the proper
4502 line. Since it uses less, if your EDITOR environment is
4511 line. Since it uses less, if your EDITOR environment is
4503 configured, typing v will immediately open your editor of choice
4512 configured, typing v will immediately open your editor of choice
4504 right at the line where the object is defined. Not as quick as
4513 right at the line where the object is defined. Not as quick as
4505 having a direct @edit command, but for all intents and purposes it
4514 having a direct @edit command, but for all intents and purposes it
4506 works. And I don't have to worry about writing @edit to deal with
4515 works. And I don't have to worry about writing @edit to deal with
4507 all the editors, less does that.
4516 all the editors, less does that.
4508
4517
4509 * Version 0.1.16 released, 0.1.17 opened.
4518 * Version 0.1.16 released, 0.1.17 opened.
4510
4519
4511 * Fixed some nasty bugs in the page/page_dumb combo that could
4520 * Fixed some nasty bugs in the page/page_dumb combo that could
4512 crash IPython.
4521 crash IPython.
4513
4522
4514 2001-11-27 Fernando Perez <fperez@colorado.edu>
4523 2001-11-27 Fernando Perez <fperez@colorado.edu>
4515
4524
4516 * Version 0.1.15 released, 0.1.16 opened.
4525 * Version 0.1.15 released, 0.1.16 opened.
4517
4526
4518 * Finally got ? and ?? to work for undefined things: now it's
4527 * Finally got ? and ?? to work for undefined things: now it's
4519 possible to type {}.get? and get information about the get method
4528 possible to type {}.get? and get information about the get method
4520 of dicts, or os.path? even if only os is defined (so technically
4529 of dicts, or os.path? even if only os is defined (so technically
4521 os.path isn't). Works at any level. For example, after import os,
4530 os.path isn't). Works at any level. For example, after import os,
4522 os?, os.path?, os.path.abspath? all work. This is great, took some
4531 os?, os.path?, os.path.abspath? all work. This is great, took some
4523 work in _ofind.
4532 work in _ofind.
4524
4533
4525 * Fixed more bugs with logging. The sanest way to do it was to add
4534 * Fixed more bugs with logging. The sanest way to do it was to add
4526 to @log a 'mode' parameter. Killed two in one shot (this mode
4535 to @log a 'mode' parameter. Killed two in one shot (this mode
4527 option was a request of Janko's). I think it's finally clean
4536 option was a request of Janko's). I think it's finally clean
4528 (famous last words).
4537 (famous last words).
4529
4538
4530 * Added a page_dumb() pager which does a decent job of paging on
4539 * Added a page_dumb() pager which does a decent job of paging on
4531 screen, if better things (like less) aren't available. One less
4540 screen, if better things (like less) aren't available. One less
4532 unix dependency (someday maybe somebody will port this to
4541 unix dependency (someday maybe somebody will port this to
4533 windows).
4542 windows).
4534
4543
4535 * Fixed problem in magic_log: would lock of logging out if log
4544 * Fixed problem in magic_log: would lock of logging out if log
4536 creation failed (because it would still think it had succeeded).
4545 creation failed (because it would still think it had succeeded).
4537
4546
4538 * Improved the page() function using curses to auto-detect screen
4547 * Improved the page() function using curses to auto-detect screen
4539 size. Now it can make a much better decision on whether to print
4548 size. Now it can make a much better decision on whether to print
4540 or page a string. Option screen_length was modified: a value 0
4549 or page a string. Option screen_length was modified: a value 0
4541 means auto-detect, and that's the default now.
4550 means auto-detect, and that's the default now.
4542
4551
4543 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4552 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4544 go out. I'll test it for a few days, then talk to Janko about
4553 go out. I'll test it for a few days, then talk to Janko about
4545 licences and announce it.
4554 licences and announce it.
4546
4555
4547 * Fixed the length of the auto-generated ---> prompt which appears
4556 * Fixed the length of the auto-generated ---> prompt which appears
4548 for auto-parens and auto-quotes. Getting this right isn't trivial,
4557 for auto-parens and auto-quotes. Getting this right isn't trivial,
4549 with all the color escapes, different prompt types and optional
4558 with all the color escapes, different prompt types and optional
4550 separators. But it seems to be working in all the combinations.
4559 separators. But it seems to be working in all the combinations.
4551
4560
4552 2001-11-26 Fernando Perez <fperez@colorado.edu>
4561 2001-11-26 Fernando Perez <fperez@colorado.edu>
4553
4562
4554 * Wrote a regexp filter to get option types from the option names
4563 * Wrote a regexp filter to get option types from the option names
4555 string. This eliminates the need to manually keep two duplicate
4564 string. This eliminates the need to manually keep two duplicate
4556 lists.
4565 lists.
4557
4566
4558 * Removed the unneeded check_option_names. Now options are handled
4567 * Removed the unneeded check_option_names. Now options are handled
4559 in a much saner manner and it's easy to visually check that things
4568 in a much saner manner and it's easy to visually check that things
4560 are ok.
4569 are ok.
4561
4570
4562 * Updated version numbers on all files I modified to carry a
4571 * Updated version numbers on all files I modified to carry a
4563 notice so Janko and Nathan have clear version markers.
4572 notice so Janko and Nathan have clear version markers.
4564
4573
4565 * Updated docstring for ultraTB with my changes. I should send
4574 * Updated docstring for ultraTB with my changes. I should send
4566 this to Nathan.
4575 this to Nathan.
4567
4576
4568 * Lots of small fixes. Ran everything through pychecker again.
4577 * Lots of small fixes. Ran everything through pychecker again.
4569
4578
4570 * Made loading of deep_reload an cmd line option. If it's not too
4579 * Made loading of deep_reload an cmd line option. If it's not too
4571 kosher, now people can just disable it. With -nodeep_reload it's
4580 kosher, now people can just disable it. With -nodeep_reload it's
4572 still available as dreload(), it just won't overwrite reload().
4581 still available as dreload(), it just won't overwrite reload().
4573
4582
4574 * Moved many options to the no| form (-opt and -noopt
4583 * Moved many options to the no| form (-opt and -noopt
4575 accepted). Cleaner.
4584 accepted). Cleaner.
4576
4585
4577 * Changed magic_log so that if called with no parameters, it uses
4586 * Changed magic_log so that if called with no parameters, it uses
4578 'rotate' mode. That way auto-generated logs aren't automatically
4587 'rotate' mode. That way auto-generated logs aren't automatically
4579 over-written. For normal logs, now a backup is made if it exists
4588 over-written. For normal logs, now a backup is made if it exists
4580 (only 1 level of backups). A new 'backup' mode was added to the
4589 (only 1 level of backups). A new 'backup' mode was added to the
4581 Logger class to support this. This was a request by Janko.
4590 Logger class to support this. This was a request by Janko.
4582
4591
4583 * Added @logoff/@logon to stop/restart an active log.
4592 * Added @logoff/@logon to stop/restart an active log.
4584
4593
4585 * Fixed a lot of bugs in log saving/replay. It was pretty
4594 * Fixed a lot of bugs in log saving/replay. It was pretty
4586 broken. Now special lines (!@,/) appear properly in the command
4595 broken. Now special lines (!@,/) appear properly in the command
4587 history after a log replay.
4596 history after a log replay.
4588
4597
4589 * Tried and failed to implement full session saving via pickle. My
4598 * Tried and failed to implement full session saving via pickle. My
4590 idea was to pickle __main__.__dict__, but modules can't be
4599 idea was to pickle __main__.__dict__, but modules can't be
4591 pickled. This would be a better alternative to replaying logs, but
4600 pickled. This would be a better alternative to replaying logs, but
4592 seems quite tricky to get to work. Changed -session to be called
4601 seems quite tricky to get to work. Changed -session to be called
4593 -logplay, which more accurately reflects what it does. And if we
4602 -logplay, which more accurately reflects what it does. And if we
4594 ever get real session saving working, -session is now available.
4603 ever get real session saving working, -session is now available.
4595
4604
4596 * Implemented color schemes for prompts also. As for tracebacks,
4605 * Implemented color schemes for prompts also. As for tracebacks,
4597 currently only NoColor and Linux are supported. But now the
4606 currently only NoColor and Linux are supported. But now the
4598 infrastructure is in place, based on a generic ColorScheme
4607 infrastructure is in place, based on a generic ColorScheme
4599 class. So writing and activating new schemes both for the prompts
4608 class. So writing and activating new schemes both for the prompts
4600 and the tracebacks should be straightforward.
4609 and the tracebacks should be straightforward.
4601
4610
4602 * Version 0.1.13 released, 0.1.14 opened.
4611 * Version 0.1.13 released, 0.1.14 opened.
4603
4612
4604 * Changed handling of options for output cache. Now counter is
4613 * Changed handling of options for output cache. Now counter is
4605 hardwired starting at 1 and one specifies the maximum number of
4614 hardwired starting at 1 and one specifies the maximum number of
4606 entries *in the outcache* (not the max prompt counter). This is
4615 entries *in the outcache* (not the max prompt counter). This is
4607 much better, since many statements won't increase the cache
4616 much better, since many statements won't increase the cache
4608 count. It also eliminated some confusing options, now there's only
4617 count. It also eliminated some confusing options, now there's only
4609 one: cache_size.
4618 one: cache_size.
4610
4619
4611 * Added 'alias' magic function and magic_alias option in the
4620 * Added 'alias' magic function and magic_alias option in the
4612 ipythonrc file. Now the user can easily define whatever names he
4621 ipythonrc file. Now the user can easily define whatever names he
4613 wants for the magic functions without having to play weird
4622 wants for the magic functions without having to play weird
4614 namespace games. This gives IPython a real shell-like feel.
4623 namespace games. This gives IPython a real shell-like feel.
4615
4624
4616 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4625 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4617 @ or not).
4626 @ or not).
4618
4627
4619 This was one of the last remaining 'visible' bugs (that I know
4628 This was one of the last remaining 'visible' bugs (that I know
4620 of). I think if I can clean up the session loading so it works
4629 of). I think if I can clean up the session loading so it works
4621 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4630 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4622 about licensing).
4631 about licensing).
4623
4632
4624 2001-11-25 Fernando Perez <fperez@colorado.edu>
4633 2001-11-25 Fernando Perez <fperez@colorado.edu>
4625
4634
4626 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4635 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4627 there's a cleaner distinction between what ? and ?? show.
4636 there's a cleaner distinction between what ? and ?? show.
4628
4637
4629 * Added screen_length option. Now the user can define his own
4638 * Added screen_length option. Now the user can define his own
4630 screen size for page() operations.
4639 screen size for page() operations.
4631
4640
4632 * Implemented magic shell-like functions with automatic code
4641 * Implemented magic shell-like functions with automatic code
4633 generation. Now adding another function is just a matter of adding
4642 generation. Now adding another function is just a matter of adding
4634 an entry to a dict, and the function is dynamically generated at
4643 an entry to a dict, and the function is dynamically generated at
4635 run-time. Python has some really cool features!
4644 run-time. Python has some really cool features!
4636
4645
4637 * Renamed many options to cleanup conventions a little. Now all
4646 * Renamed many options to cleanup conventions a little. Now all
4638 are lowercase, and only underscores where needed. Also in the code
4647 are lowercase, and only underscores where needed. Also in the code
4639 option name tables are clearer.
4648 option name tables are clearer.
4640
4649
4641 * Changed prompts a little. Now input is 'In [n]:' instead of
4650 * Changed prompts a little. Now input is 'In [n]:' instead of
4642 'In[n]:='. This allows it the numbers to be aligned with the
4651 'In[n]:='. This allows it the numbers to be aligned with the
4643 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4652 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4644 Python (it was a Mathematica thing). The '...' continuation prompt
4653 Python (it was a Mathematica thing). The '...' continuation prompt
4645 was also changed a little to align better.
4654 was also changed a little to align better.
4646
4655
4647 * Fixed bug when flushing output cache. Not all _p<n> variables
4656 * Fixed bug when flushing output cache. Not all _p<n> variables
4648 exist, so their deletion needs to be wrapped in a try:
4657 exist, so their deletion needs to be wrapped in a try:
4649
4658
4650 * Figured out how to properly use inspect.formatargspec() (it
4659 * Figured out how to properly use inspect.formatargspec() (it
4651 requires the args preceded by *). So I removed all the code from
4660 requires the args preceded by *). So I removed all the code from
4652 _get_pdef in Magic, which was just replicating that.
4661 _get_pdef in Magic, which was just replicating that.
4653
4662
4654 * Added test to prefilter to allow redefining magic function names
4663 * Added test to prefilter to allow redefining magic function names
4655 as variables. This is ok, since the @ form is always available,
4664 as variables. This is ok, since the @ form is always available,
4656 but whe should allow the user to define a variable called 'ls' if
4665 but whe should allow the user to define a variable called 'ls' if
4657 he needs it.
4666 he needs it.
4658
4667
4659 * Moved the ToDo information from README into a separate ToDo.
4668 * Moved the ToDo information from README into a separate ToDo.
4660
4669
4661 * General code cleanup and small bugfixes. I think it's close to a
4670 * General code cleanup and small bugfixes. I think it's close to a
4662 state where it can be released, obviously with a big 'beta'
4671 state where it can be released, obviously with a big 'beta'
4663 warning on it.
4672 warning on it.
4664
4673
4665 * Got the magic function split to work. Now all magics are defined
4674 * Got the magic function split to work. Now all magics are defined
4666 in a separate class. It just organizes things a bit, and now
4675 in a separate class. It just organizes things a bit, and now
4667 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4676 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4668 was too long).
4677 was too long).
4669
4678
4670 * Changed @clear to @reset to avoid potential confusions with
4679 * Changed @clear to @reset to avoid potential confusions with
4671 the shell command clear. Also renamed @cl to @clear, which does
4680 the shell command clear. Also renamed @cl to @clear, which does
4672 exactly what people expect it to from their shell experience.
4681 exactly what people expect it to from their shell experience.
4673
4682
4674 Added a check to the @reset command (since it's so
4683 Added a check to the @reset command (since it's so
4675 destructive, it's probably a good idea to ask for confirmation).
4684 destructive, it's probably a good idea to ask for confirmation).
4676 But now reset only works for full namespace resetting. Since the
4685 But now reset only works for full namespace resetting. Since the
4677 del keyword is already there for deleting a few specific
4686 del keyword is already there for deleting a few specific
4678 variables, I don't see the point of having a redundant magic
4687 variables, I don't see the point of having a redundant magic
4679 function for the same task.
4688 function for the same task.
4680
4689
4681 2001-11-24 Fernando Perez <fperez@colorado.edu>
4690 2001-11-24 Fernando Perez <fperez@colorado.edu>
4682
4691
4683 * Updated the builtin docs (esp. the ? ones).
4692 * Updated the builtin docs (esp. the ? ones).
4684
4693
4685 * Ran all the code through pychecker. Not terribly impressed with
4694 * Ran all the code through pychecker. Not terribly impressed with
4686 it: lots of spurious warnings and didn't really find anything of
4695 it: lots of spurious warnings and didn't really find anything of
4687 substance (just a few modules being imported and not used).
4696 substance (just a few modules being imported and not used).
4688
4697
4689 * Implemented the new ultraTB functionality into IPython. New
4698 * Implemented the new ultraTB functionality into IPython. New
4690 option: xcolors. This chooses color scheme. xmode now only selects
4699 option: xcolors. This chooses color scheme. xmode now only selects
4691 between Plain and Verbose. Better orthogonality.
4700 between Plain and Verbose. Better orthogonality.
4692
4701
4693 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4702 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4694 mode and color scheme for the exception handlers. Now it's
4703 mode and color scheme for the exception handlers. Now it's
4695 possible to have the verbose traceback with no coloring.
4704 possible to have the verbose traceback with no coloring.
4696
4705
4697 2001-11-23 Fernando Perez <fperez@colorado.edu>
4706 2001-11-23 Fernando Perez <fperez@colorado.edu>
4698
4707
4699 * Version 0.1.12 released, 0.1.13 opened.
4708 * Version 0.1.12 released, 0.1.13 opened.
4700
4709
4701 * Removed option to set auto-quote and auto-paren escapes by
4710 * Removed option to set auto-quote and auto-paren escapes by
4702 user. The chances of breaking valid syntax are just too high. If
4711 user. The chances of breaking valid syntax are just too high. If
4703 someone *really* wants, they can always dig into the code.
4712 someone *really* wants, they can always dig into the code.
4704
4713
4705 * Made prompt separators configurable.
4714 * Made prompt separators configurable.
4706
4715
4707 2001-11-22 Fernando Perez <fperez@colorado.edu>
4716 2001-11-22 Fernando Perez <fperez@colorado.edu>
4708
4717
4709 * Small bugfixes in many places.
4718 * Small bugfixes in many places.
4710
4719
4711 * Removed the MyCompleter class from ipplib. It seemed redundant
4720 * Removed the MyCompleter class from ipplib. It seemed redundant
4712 with the C-p,C-n history search functionality. Less code to
4721 with the C-p,C-n history search functionality. Less code to
4713 maintain.
4722 maintain.
4714
4723
4715 * Moved all the original ipython.py code into ipythonlib.py. Right
4724 * Moved all the original ipython.py code into ipythonlib.py. Right
4716 now it's just one big dump into a function called make_IPython, so
4725 now it's just one big dump into a function called make_IPython, so
4717 no real modularity has been gained. But at least it makes the
4726 no real modularity has been gained. But at least it makes the
4718 wrapper script tiny, and since ipythonlib is a module, it gets
4727 wrapper script tiny, and since ipythonlib is a module, it gets
4719 compiled and startup is much faster.
4728 compiled and startup is much faster.
4720
4729
4721 This is a reasobably 'deep' change, so we should test it for a
4730 This is a reasobably 'deep' change, so we should test it for a
4722 while without messing too much more with the code.
4731 while without messing too much more with the code.
4723
4732
4724 2001-11-21 Fernando Perez <fperez@colorado.edu>
4733 2001-11-21 Fernando Perez <fperez@colorado.edu>
4725
4734
4726 * Version 0.1.11 released, 0.1.12 opened for further work.
4735 * Version 0.1.11 released, 0.1.12 opened for further work.
4727
4736
4728 * Removed dependency on Itpl. It was only needed in one place. It
4737 * Removed dependency on Itpl. It was only needed in one place. It
4729 would be nice if this became part of python, though. It makes life
4738 would be nice if this became part of python, though. It makes life
4730 *a lot* easier in some cases.
4739 *a lot* easier in some cases.
4731
4740
4732 * Simplified the prefilter code a bit. Now all handlers are
4741 * Simplified the prefilter code a bit. Now all handlers are
4733 expected to explicitly return a value (at least a blank string).
4742 expected to explicitly return a value (at least a blank string).
4734
4743
4735 * Heavy edits in ipplib. Removed the help system altogether. Now
4744 * Heavy edits in ipplib. Removed the help system altogether. Now
4736 obj?/?? is used for inspecting objects, a magic @doc prints
4745 obj?/?? is used for inspecting objects, a magic @doc prints
4737 docstrings, and full-blown Python help is accessed via the 'help'
4746 docstrings, and full-blown Python help is accessed via the 'help'
4738 keyword. This cleans up a lot of code (less to maintain) and does
4747 keyword. This cleans up a lot of code (less to maintain) and does
4739 the job. Since 'help' is now a standard Python component, might as
4748 the job. Since 'help' is now a standard Python component, might as
4740 well use it and remove duplicate functionality.
4749 well use it and remove duplicate functionality.
4741
4750
4742 Also removed the option to use ipplib as a standalone program. By
4751 Also removed the option to use ipplib as a standalone program. By
4743 now it's too dependent on other parts of IPython to function alone.
4752 now it's too dependent on other parts of IPython to function alone.
4744
4753
4745 * Fixed bug in genutils.pager. It would crash if the pager was
4754 * Fixed bug in genutils.pager. It would crash if the pager was
4746 exited immediately after opening (broken pipe).
4755 exited immediately after opening (broken pipe).
4747
4756
4748 * Trimmed down the VerboseTB reporting a little. The header is
4757 * Trimmed down the VerboseTB reporting a little. The header is
4749 much shorter now and the repeated exception arguments at the end
4758 much shorter now and the repeated exception arguments at the end
4750 have been removed. For interactive use the old header seemed a bit
4759 have been removed. For interactive use the old header seemed a bit
4751 excessive.
4760 excessive.
4752
4761
4753 * Fixed small bug in output of @whos for variables with multi-word
4762 * Fixed small bug in output of @whos for variables with multi-word
4754 types (only first word was displayed).
4763 types (only first word was displayed).
4755
4764
4756 2001-11-17 Fernando Perez <fperez@colorado.edu>
4765 2001-11-17 Fernando Perez <fperez@colorado.edu>
4757
4766
4758 * Version 0.1.10 released, 0.1.11 opened for further work.
4767 * Version 0.1.10 released, 0.1.11 opened for further work.
4759
4768
4760 * Modified dirs and friends. dirs now *returns* the stack (not
4769 * Modified dirs and friends. dirs now *returns* the stack (not
4761 prints), so one can manipulate it as a variable. Convenient to
4770 prints), so one can manipulate it as a variable. Convenient to
4762 travel along many directories.
4771 travel along many directories.
4763
4772
4764 * Fixed bug in magic_pdef: would only work with functions with
4773 * Fixed bug in magic_pdef: would only work with functions with
4765 arguments with default values.
4774 arguments with default values.
4766
4775
4767 2001-11-14 Fernando Perez <fperez@colorado.edu>
4776 2001-11-14 Fernando Perez <fperez@colorado.edu>
4768
4777
4769 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4778 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4770 example with IPython. Various other minor fixes and cleanups.
4779 example with IPython. Various other minor fixes and cleanups.
4771
4780
4772 * Version 0.1.9 released, 0.1.10 opened for further work.
4781 * Version 0.1.9 released, 0.1.10 opened for further work.
4773
4782
4774 * Added sys.path to the list of directories searched in the
4783 * Added sys.path to the list of directories searched in the
4775 execfile= option. It used to be the current directory and the
4784 execfile= option. It used to be the current directory and the
4776 user's IPYTHONDIR only.
4785 user's IPYTHONDIR only.
4777
4786
4778 2001-11-13 Fernando Perez <fperez@colorado.edu>
4787 2001-11-13 Fernando Perez <fperez@colorado.edu>
4779
4788
4780 * Reinstated the raw_input/prefilter separation that Janko had
4789 * Reinstated the raw_input/prefilter separation that Janko had
4781 initially. This gives a more convenient setup for extending the
4790 initially. This gives a more convenient setup for extending the
4782 pre-processor from the outside: raw_input always gets a string,
4791 pre-processor from the outside: raw_input always gets a string,
4783 and prefilter has to process it. We can then redefine prefilter
4792 and prefilter has to process it. We can then redefine prefilter
4784 from the outside and implement extensions for special
4793 from the outside and implement extensions for special
4785 purposes.
4794 purposes.
4786
4795
4787 Today I got one for inputting PhysicalQuantity objects
4796 Today I got one for inputting PhysicalQuantity objects
4788 (from Scientific) without needing any function calls at
4797 (from Scientific) without needing any function calls at
4789 all. Extremely convenient, and it's all done as a user-level
4798 all. Extremely convenient, and it's all done as a user-level
4790 extension (no IPython code was touched). Now instead of:
4799 extension (no IPython code was touched). Now instead of:
4791 a = PhysicalQuantity(4.2,'m/s**2')
4800 a = PhysicalQuantity(4.2,'m/s**2')
4792 one can simply say
4801 one can simply say
4793 a = 4.2 m/s**2
4802 a = 4.2 m/s**2
4794 or even
4803 or even
4795 a = 4.2 m/s^2
4804 a = 4.2 m/s^2
4796
4805
4797 I use this, but it's also a proof of concept: IPython really is
4806 I use this, but it's also a proof of concept: IPython really is
4798 fully user-extensible, even at the level of the parsing of the
4807 fully user-extensible, even at the level of the parsing of the
4799 command line. It's not trivial, but it's perfectly doable.
4808 command line. It's not trivial, but it's perfectly doable.
4800
4809
4801 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4810 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4802 the problem of modules being loaded in the inverse order in which
4811 the problem of modules being loaded in the inverse order in which
4803 they were defined in
4812 they were defined in
4804
4813
4805 * Version 0.1.8 released, 0.1.9 opened for further work.
4814 * Version 0.1.8 released, 0.1.9 opened for further work.
4806
4815
4807 * Added magics pdef, source and file. They respectively show the
4816 * Added magics pdef, source and file. They respectively show the
4808 definition line ('prototype' in C), source code and full python
4817 definition line ('prototype' in C), source code and full python
4809 file for any callable object. The object inspector oinfo uses
4818 file for any callable object. The object inspector oinfo uses
4810 these to show the same information.
4819 these to show the same information.
4811
4820
4812 * Version 0.1.7 released, 0.1.8 opened for further work.
4821 * Version 0.1.7 released, 0.1.8 opened for further work.
4813
4822
4814 * Separated all the magic functions into a class called Magic. The
4823 * Separated all the magic functions into a class called Magic. The
4815 InteractiveShell class was becoming too big for Xemacs to handle
4824 InteractiveShell class was becoming too big for Xemacs to handle
4816 (de-indenting a line would lock it up for 10 seconds while it
4825 (de-indenting a line would lock it up for 10 seconds while it
4817 backtracked on the whole class!)
4826 backtracked on the whole class!)
4818
4827
4819 FIXME: didn't work. It can be done, but right now namespaces are
4828 FIXME: didn't work. It can be done, but right now namespaces are
4820 all messed up. Do it later (reverted it for now, so at least
4829 all messed up. Do it later (reverted it for now, so at least
4821 everything works as before).
4830 everything works as before).
4822
4831
4823 * Got the object introspection system (magic_oinfo) working! I
4832 * Got the object introspection system (magic_oinfo) working! I
4824 think this is pretty much ready for release to Janko, so he can
4833 think this is pretty much ready for release to Janko, so he can
4825 test it for a while and then announce it. Pretty much 100% of what
4834 test it for a while and then announce it. Pretty much 100% of what
4826 I wanted for the 'phase 1' release is ready. Happy, tired.
4835 I wanted for the 'phase 1' release is ready. Happy, tired.
4827
4836
4828 2001-11-12 Fernando Perez <fperez@colorado.edu>
4837 2001-11-12 Fernando Perez <fperez@colorado.edu>
4829
4838
4830 * Version 0.1.6 released, 0.1.7 opened for further work.
4839 * Version 0.1.6 released, 0.1.7 opened for further work.
4831
4840
4832 * Fixed bug in printing: it used to test for truth before
4841 * Fixed bug in printing: it used to test for truth before
4833 printing, so 0 wouldn't print. Now checks for None.
4842 printing, so 0 wouldn't print. Now checks for None.
4834
4843
4835 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4844 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4836 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4845 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4837 reaches by hand into the outputcache. Think of a better way to do
4846 reaches by hand into the outputcache. Think of a better way to do
4838 this later.
4847 this later.
4839
4848
4840 * Various small fixes thanks to Nathan's comments.
4849 * Various small fixes thanks to Nathan's comments.
4841
4850
4842 * Changed magic_pprint to magic_Pprint. This way it doesn't
4851 * Changed magic_pprint to magic_Pprint. This way it doesn't
4843 collide with pprint() and the name is consistent with the command
4852 collide with pprint() and the name is consistent with the command
4844 line option.
4853 line option.
4845
4854
4846 * Changed prompt counter behavior to be fully like
4855 * Changed prompt counter behavior to be fully like
4847 Mathematica's. That is, even input that doesn't return a result
4856 Mathematica's. That is, even input that doesn't return a result
4848 raises the prompt counter. The old behavior was kind of confusing
4857 raises the prompt counter. The old behavior was kind of confusing
4849 (getting the same prompt number several times if the operation
4858 (getting the same prompt number several times if the operation
4850 didn't return a result).
4859 didn't return a result).
4851
4860
4852 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4861 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4853
4862
4854 * Fixed -Classic mode (wasn't working anymore).
4863 * Fixed -Classic mode (wasn't working anymore).
4855
4864
4856 * Added colored prompts using Nathan's new code. Colors are
4865 * Added colored prompts using Nathan's new code. Colors are
4857 currently hardwired, they can be user-configurable. For
4866 currently hardwired, they can be user-configurable. For
4858 developers, they can be chosen in file ipythonlib.py, at the
4867 developers, they can be chosen in file ipythonlib.py, at the
4859 beginning of the CachedOutput class def.
4868 beginning of the CachedOutput class def.
4860
4869
4861 2001-11-11 Fernando Perez <fperez@colorado.edu>
4870 2001-11-11 Fernando Perez <fperez@colorado.edu>
4862
4871
4863 * Version 0.1.5 released, 0.1.6 opened for further work.
4872 * Version 0.1.5 released, 0.1.6 opened for further work.
4864
4873
4865 * Changed magic_env to *return* the environment as a dict (not to
4874 * Changed magic_env to *return* the environment as a dict (not to
4866 print it). This way it prints, but it can also be processed.
4875 print it). This way it prints, but it can also be processed.
4867
4876
4868 * Added Verbose exception reporting to interactive
4877 * Added Verbose exception reporting to interactive
4869 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4878 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4870 traceback. Had to make some changes to the ultraTB file. This is
4879 traceback. Had to make some changes to the ultraTB file. This is
4871 probably the last 'big' thing in my mental todo list. This ties
4880 probably the last 'big' thing in my mental todo list. This ties
4872 in with the next entry:
4881 in with the next entry:
4873
4882
4874 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4883 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4875 has to specify is Plain, Color or Verbose for all exception
4884 has to specify is Plain, Color or Verbose for all exception
4876 handling.
4885 handling.
4877
4886
4878 * Removed ShellServices option. All this can really be done via
4887 * Removed ShellServices option. All this can really be done via
4879 the magic system. It's easier to extend, cleaner and has automatic
4888 the magic system. It's easier to extend, cleaner and has automatic
4880 namespace protection and documentation.
4889 namespace protection and documentation.
4881
4890
4882 2001-11-09 Fernando Perez <fperez@colorado.edu>
4891 2001-11-09 Fernando Perez <fperez@colorado.edu>
4883
4892
4884 * Fixed bug in output cache flushing (missing parameter to
4893 * Fixed bug in output cache flushing (missing parameter to
4885 __init__). Other small bugs fixed (found using pychecker).
4894 __init__). Other small bugs fixed (found using pychecker).
4886
4895
4887 * Version 0.1.4 opened for bugfixing.
4896 * Version 0.1.4 opened for bugfixing.
4888
4897
4889 2001-11-07 Fernando Perez <fperez@colorado.edu>
4898 2001-11-07 Fernando Perez <fperez@colorado.edu>
4890
4899
4891 * Version 0.1.3 released, mainly because of the raw_input bug.
4900 * Version 0.1.3 released, mainly because of the raw_input bug.
4892
4901
4893 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4902 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4894 and when testing for whether things were callable, a call could
4903 and when testing for whether things were callable, a call could
4895 actually be made to certain functions. They would get called again
4904 actually be made to certain functions. They would get called again
4896 once 'really' executed, with a resulting double call. A disaster
4905 once 'really' executed, with a resulting double call. A disaster
4897 in many cases (list.reverse() would never work!).
4906 in many cases (list.reverse() would never work!).
4898
4907
4899 * Removed prefilter() function, moved its code to raw_input (which
4908 * Removed prefilter() function, moved its code to raw_input (which
4900 after all was just a near-empty caller for prefilter). This saves
4909 after all was just a near-empty caller for prefilter). This saves
4901 a function call on every prompt, and simplifies the class a tiny bit.
4910 a function call on every prompt, and simplifies the class a tiny bit.
4902
4911
4903 * Fix _ip to __ip name in magic example file.
4912 * Fix _ip to __ip name in magic example file.
4904
4913
4905 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4914 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4906 work with non-gnu versions of tar.
4915 work with non-gnu versions of tar.
4907
4916
4908 2001-11-06 Fernando Perez <fperez@colorado.edu>
4917 2001-11-06 Fernando Perez <fperez@colorado.edu>
4909
4918
4910 * Version 0.1.2. Just to keep track of the recent changes.
4919 * Version 0.1.2. Just to keep track of the recent changes.
4911
4920
4912 * Fixed nasty bug in output prompt routine. It used to check 'if
4921 * Fixed nasty bug in output prompt routine. It used to check 'if
4913 arg != None...'. Problem is, this fails if arg implements a
4922 arg != None...'. Problem is, this fails if arg implements a
4914 special comparison (__cmp__) which disallows comparing to
4923 special comparison (__cmp__) which disallows comparing to
4915 None. Found it when trying to use the PhysicalQuantity module from
4924 None. Found it when trying to use the PhysicalQuantity module from
4916 ScientificPython.
4925 ScientificPython.
4917
4926
4918 2001-11-05 Fernando Perez <fperez@colorado.edu>
4927 2001-11-05 Fernando Perez <fperez@colorado.edu>
4919
4928
4920 * Also added dirs. Now the pushd/popd/dirs family functions
4929 * Also added dirs. Now the pushd/popd/dirs family functions
4921 basically like the shell, with the added convenience of going home
4930 basically like the shell, with the added convenience of going home
4922 when called with no args.
4931 when called with no args.
4923
4932
4924 * pushd/popd slightly modified to mimic shell behavior more
4933 * pushd/popd slightly modified to mimic shell behavior more
4925 closely.
4934 closely.
4926
4935
4927 * Added env,pushd,popd from ShellServices as magic functions. I
4936 * Added env,pushd,popd from ShellServices as magic functions. I
4928 think the cleanest will be to port all desired functions from
4937 think the cleanest will be to port all desired functions from
4929 ShellServices as magics and remove ShellServices altogether. This
4938 ShellServices as magics and remove ShellServices altogether. This
4930 will provide a single, clean way of adding functionality
4939 will provide a single, clean way of adding functionality
4931 (shell-type or otherwise) to IP.
4940 (shell-type or otherwise) to IP.
4932
4941
4933 2001-11-04 Fernando Perez <fperez@colorado.edu>
4942 2001-11-04 Fernando Perez <fperez@colorado.edu>
4934
4943
4935 * Added .ipython/ directory to sys.path. This way users can keep
4944 * Added .ipython/ directory to sys.path. This way users can keep
4936 customizations there and access them via import.
4945 customizations there and access them via import.
4937
4946
4938 2001-11-03 Fernando Perez <fperez@colorado.edu>
4947 2001-11-03 Fernando Perez <fperez@colorado.edu>
4939
4948
4940 * Opened version 0.1.1 for new changes.
4949 * Opened version 0.1.1 for new changes.
4941
4950
4942 * Changed version number to 0.1.0: first 'public' release, sent to
4951 * Changed version number to 0.1.0: first 'public' release, sent to
4943 Nathan and Janko.
4952 Nathan and Janko.
4944
4953
4945 * Lots of small fixes and tweaks.
4954 * Lots of small fixes and tweaks.
4946
4955
4947 * Minor changes to whos format. Now strings are shown, snipped if
4956 * Minor changes to whos format. Now strings are shown, snipped if
4948 too long.
4957 too long.
4949
4958
4950 * Changed ShellServices to work on __main__ so they show up in @who
4959 * Changed ShellServices to work on __main__ so they show up in @who
4951
4960
4952 * Help also works with ? at the end of a line:
4961 * Help also works with ? at the end of a line:
4953 ?sin and sin?
4962 ?sin and sin?
4954 both produce the same effect. This is nice, as often I use the
4963 both produce the same effect. This is nice, as often I use the
4955 tab-complete to find the name of a method, but I used to then have
4964 tab-complete to find the name of a method, but I used to then have
4956 to go to the beginning of the line to put a ? if I wanted more
4965 to go to the beginning of the line to put a ? if I wanted more
4957 info. Now I can just add the ? and hit return. Convenient.
4966 info. Now I can just add the ? and hit return. Convenient.
4958
4967
4959 2001-11-02 Fernando Perez <fperez@colorado.edu>
4968 2001-11-02 Fernando Perez <fperez@colorado.edu>
4960
4969
4961 * Python version check (>=2.1) added.
4970 * Python version check (>=2.1) added.
4962
4971
4963 * Added LazyPython documentation. At this point the docs are quite
4972 * Added LazyPython documentation. At this point the docs are quite
4964 a mess. A cleanup is in order.
4973 a mess. A cleanup is in order.
4965
4974
4966 * Auto-installer created. For some bizarre reason, the zipfiles
4975 * Auto-installer created. For some bizarre reason, the zipfiles
4967 module isn't working on my system. So I made a tar version
4976 module isn't working on my system. So I made a tar version
4968 (hopefully the command line options in various systems won't kill
4977 (hopefully the command line options in various systems won't kill
4969 me).
4978 me).
4970
4979
4971 * Fixes to Struct in genutils. Now all dictionary-like methods are
4980 * Fixes to Struct in genutils. Now all dictionary-like methods are
4972 protected (reasonably).
4981 protected (reasonably).
4973
4982
4974 * Added pager function to genutils and changed ? to print usage
4983 * Added pager function to genutils and changed ? to print usage
4975 note through it (it was too long).
4984 note through it (it was too long).
4976
4985
4977 * Added the LazyPython functionality. Works great! I changed the
4986 * Added the LazyPython functionality. Works great! I changed the
4978 auto-quote escape to ';', it's on home row and next to '. But
4987 auto-quote escape to ';', it's on home row and next to '. But
4979 both auto-quote and auto-paren (still /) escapes are command-line
4988 both auto-quote and auto-paren (still /) escapes are command-line
4980 parameters.
4989 parameters.
4981
4990
4982
4991
4983 2001-11-01 Fernando Perez <fperez@colorado.edu>
4992 2001-11-01 Fernando Perez <fperez@colorado.edu>
4984
4993
4985 * Version changed to 0.0.7. Fairly large change: configuration now
4994 * Version changed to 0.0.7. Fairly large change: configuration now
4986 is all stored in a directory, by default .ipython. There, all
4995 is all stored in a directory, by default .ipython. There, all
4987 config files have normal looking names (not .names)
4996 config files have normal looking names (not .names)
4988
4997
4989 * Version 0.0.6 Released first to Lucas and Archie as a test
4998 * Version 0.0.6 Released first to Lucas and Archie as a test
4990 run. Since it's the first 'semi-public' release, change version to
4999 run. Since it's the first 'semi-public' release, change version to
4991 > 0.0.6 for any changes now.
5000 > 0.0.6 for any changes now.
4992
5001
4993 * Stuff I had put in the ipplib.py changelog:
5002 * Stuff I had put in the ipplib.py changelog:
4994
5003
4995 Changes to InteractiveShell:
5004 Changes to InteractiveShell:
4996
5005
4997 - Made the usage message a parameter.
5006 - Made the usage message a parameter.
4998
5007
4999 - Require the name of the shell variable to be given. It's a bit
5008 - Require the name of the shell variable to be given. It's a bit
5000 of a hack, but allows the name 'shell' not to be hardwire in the
5009 of a hack, but allows the name 'shell' not to be hardwire in the
5001 magic (@) handler, which is problematic b/c it requires
5010 magic (@) handler, which is problematic b/c it requires
5002 polluting the global namespace with 'shell'. This in turn is
5011 polluting the global namespace with 'shell'. This in turn is
5003 fragile: if a user redefines a variable called shell, things
5012 fragile: if a user redefines a variable called shell, things
5004 break.
5013 break.
5005
5014
5006 - magic @: all functions available through @ need to be defined
5015 - magic @: all functions available through @ need to be defined
5007 as magic_<name>, even though they can be called simply as
5016 as magic_<name>, even though they can be called simply as
5008 @<name>. This allows the special command @magic to gather
5017 @<name>. This allows the special command @magic to gather
5009 information automatically about all existing magic functions,
5018 information automatically about all existing magic functions,
5010 even if they are run-time user extensions, by parsing the shell
5019 even if they are run-time user extensions, by parsing the shell
5011 instance __dict__ looking for special magic_ names.
5020 instance __dict__ looking for special magic_ names.
5012
5021
5013 - mainloop: added *two* local namespace parameters. This allows
5022 - mainloop: added *two* local namespace parameters. This allows
5014 the class to differentiate between parameters which were there
5023 the class to differentiate between parameters which were there
5015 before and after command line initialization was processed. This
5024 before and after command line initialization was processed. This
5016 way, later @who can show things loaded at startup by the
5025 way, later @who can show things loaded at startup by the
5017 user. This trick was necessary to make session saving/reloading
5026 user. This trick was necessary to make session saving/reloading
5018 really work: ideally after saving/exiting/reloading a session,
5027 really work: ideally after saving/exiting/reloading a session,
5019 *everythin* should look the same, including the output of @who. I
5028 *everythin* should look the same, including the output of @who. I
5020 was only able to make this work with this double namespace
5029 was only able to make this work with this double namespace
5021 trick.
5030 trick.
5022
5031
5023 - added a header to the logfile which allows (almost) full
5032 - added a header to the logfile which allows (almost) full
5024 session restoring.
5033 session restoring.
5025
5034
5026 - prepend lines beginning with @ or !, with a and log
5035 - prepend lines beginning with @ or !, with a and log
5027 them. Why? !lines: may be useful to know what you did @lines:
5036 them. Why? !lines: may be useful to know what you did @lines:
5028 they may affect session state. So when restoring a session, at
5037 they may affect session state. So when restoring a session, at
5029 least inform the user of their presence. I couldn't quite get
5038 least inform the user of their presence. I couldn't quite get
5030 them to properly re-execute, but at least the user is warned.
5039 them to properly re-execute, but at least the user is warned.
5031
5040
5032 * Started ChangeLog.
5041 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now