##// END OF EJS Templates
-Expose IPApi is _ip in user namespace....
vivainio -
Show More
@@ -1,66 +1,66 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """ IPython extension: new prefilters for output grabbing
2 """ IPython extension: new prefilters for output grabbing
3
3
4 Provides
4 Provides
5
5
6 var = %magic blah blah
6 var = %magic blah blah
7
7
8 var = !ls
8 var = !ls
9
9
10 $Id: genutils.py 1077 2006-01-24 18:15:27Z vivainio $
10 $Id: genutils.py 1077 2006-01-24 18:15:27Z vivainio $
11
11
12 """
12 """
13
13
14 import IPython.ipapi
14 import IPython.ipapi
15 from IPython.genutils import *
15 from IPython.genutils import *
16
16
17 ip = IPython.ipapi.get()
17 ip = IPython.ipapi.get()
18
18
19 import re
19 import re
20
20
21 def hnd_magic(line,mo):
21 def hnd_magic(line,mo):
22 """ Handle a = %mymagic blah blah """
22 """ Handle a = %mymagic blah blah """
23 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
23 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
24 #mag = 'ipmagic
24 #mag = 'ipmagic
25 #return "%s = %s"
25 #return "%s = %s"
26 var = mo.group('varname')
26 var = mo.group('varname')
27 cmd = mo.group('cmd')
27 cmd = mo.group('cmd')
28 expr = make_quoted_expr(cmd)
28 expr = make_quoted_expr(cmd)
29 return itpl('$var = ipmagic($expr)')
29 return itpl('$var = _ip.magic($expr)')
30
30
31 def hnd_syscmd(line,mo):
31 def hnd_syscmd(line,mo):
32 """ Handle a = !ls """
32 """ Handle a = !ls """
33 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
33 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
34 #mag = 'ipmagic
34 #mag = 'ipmagic
35 #return "%s = %s"
35 #return "%s = %s"
36 var = mo.group('varname')
36 var = mo.group('varname')
37 cmd = mo.group('cmd')
37 cmd = mo.group('cmd')
38 expr = make_quoted_expr(itpl("sc -l =$cmd"))
38 expr = make_quoted_expr(itpl("sc -l =$cmd"))
39 return itpl('$var = ipmagic($expr)')
39 return itpl('$var = _ip.magic($expr)')
40
40
41 def install_re_handler(pat, hnd):
41 def install_re_handler(pat, hnd):
42 ip.meta().re_prefilters.append((re.compile(pat), hnd))
42 ip.meta().re_prefilters.append((re.compile(pat), hnd))
43
43
44 def init_handlers():
44 def init_handlers():
45
45
46 ip.meta().re_prefilters = []
46 ip.meta().re_prefilters = []
47
47
48 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*%(?P<cmd>.*)',
48 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*%(?P<cmd>.*)',
49 hnd_magic
49 hnd_magic
50 )
50 )
51
51
52 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*!(?P<cmd>.*)',
52 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*!(?P<cmd>.*)',
53 hnd_syscmd
53 hnd_syscmd
54 )
54 )
55
55
56 init_handlers()
56 init_handlers()
57
57
58 def regex_prefilter_f(self,line):
58 def regex_prefilter_f(self,line):
59 for pat, handler in ip.meta().re_prefilters:
59 for pat, handler in ip.meta().re_prefilters:
60 mo = pat.match(line)
60 mo = pat.match(line)
61 if mo:
61 if mo:
62 return handler(line,mo)
62 return handler(line,mo)
63
63
64 raise IPython.ipapi.TryNext
64 raise IPython.ipapi.TryNext
65
65
66 ip.set_hook('input_prefilter', regex_prefilter_f) No newline at end of file
66 ip.set_hook('input_prefilter', regex_prefilter_f)
@@ -1,2873 +1,2872 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 1094 2006-01-28 00:47:41Z vivainio $"""
4 $Id: Magic.py 1096 2006-01-28 20:08:02Z 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,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54
55 #***************************************************************************
55 #***************************************************************************
56 # Utility functions
56 # Utility functions
57 def on_off(tag):
57 def on_off(tag):
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
60
60
61 class Bunch: pass
61 class Bunch: pass
62
62
63 #***************************************************************************
63 #***************************************************************************
64 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
65 class Magic:
65 class Magic:
66 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
67
67
68 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
69 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
70 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
71 vs. `%cd("../")`
71 vs. `%cd("../")`
72
72
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
75
75
76 # class globals
76 # class globals
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
79
79
80 #......................................................................
80 #......................................................................
81 # some utility functions
81 # some utility functions
82
82
83 def __init__(self,shell):
83 def __init__(self,shell):
84
84
85 self.options_table = {}
85 self.options_table = {}
86 if profile is None:
86 if profile is None:
87 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
88 self.shell = shell
88 self.shell = shell
89
89
90 # namespace for holding state we may need
90 # namespace for holding state we may need
91 self._magic_state = Bunch()
91 self._magic_state = Bunch()
92
92
93 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
94 error("""\
94 error("""\
95 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
96 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98
98
99 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
100 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
101
101
102 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
103 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
104 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
105
105
106 def lsmagic(self):
106 def lsmagic(self):
107 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
108
108
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
111
111
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
113
113
114 # magics in class definition
114 # magics in class definition
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
116 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
117 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
120 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 out = []
126 out = []
127 for fn in magics:
127 for fn in magics:
128 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
129 out.sort()
129 out.sort()
130 return out
130 return out
131
131
132 def extract_input_slices(self,slices):
132 def extract_input_slices(self,slices):
133 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
134
134
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
136 since this function is for use by magic functions which get their
136 since this function is for use by magic functions which get their
137 arguments as strings.
137 arguments as strings.
138
138
139 Note that slices can be called with two notations:
139 Note that slices can be called with two notations:
140
140
141 N:M -> standard python form, means including items N...(M-1).
141 N:M -> standard python form, means including items N...(M-1).
142
142
143 N-M -> include items N..M (closed endpoint)."""
143 N-M -> include items N..M (closed endpoint)."""
144
144
145 cmds = []
145 cmds = []
146 for chunk in slices:
146 for chunk in slices:
147 if ':' in chunk:
147 if ':' in chunk:
148 ini,fin = map(int,chunk.split(':'))
148 ini,fin = map(int,chunk.split(':'))
149 elif '-' in chunk:
149 elif '-' in chunk:
150 ini,fin = map(int,chunk.split('-'))
150 ini,fin = map(int,chunk.split('-'))
151 fin += 1
151 fin += 1
152 else:
152 else:
153 ini = int(chunk)
153 ini = int(chunk)
154 fin = ini+1
154 fin = ini+1
155 cmds.append(self.shell.input_hist[ini:fin])
155 cmds.append(self.shell.input_hist[ini:fin])
156 return cmds
156 return cmds
157
157
158 def _ofind(self,oname):
158 def _ofind(self,oname):
159 """Find an object in the available namespaces.
159 """Find an object in the available namespaces.
160
160
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
162
162
163 Has special code to detect magic functions.
163 Has special code to detect magic functions.
164 """
164 """
165
165
166 oname = oname.strip()
166 oname = oname.strip()
167
167
168 # Namespaces to search in:
168 # Namespaces to search in:
169 user_ns = self.shell.user_ns
169 user_ns = self.shell.user_ns
170 internal_ns = self.shell.internal_ns
170 internal_ns = self.shell.internal_ns
171 builtin_ns = __builtin__.__dict__
171 builtin_ns = __builtin__.__dict__
172 alias_ns = self.shell.alias_table
172 alias_ns = self.shell.alias_table
173
173
174 # Put them in a list. The order is important so that we find things in
174 # Put them in a list. The order is important so that we find things in
175 # the same order that Python finds them.
175 # the same order that Python finds them.
176 namespaces = [ ('Interactive',user_ns),
176 namespaces = [ ('Interactive',user_ns),
177 ('IPython internal',internal_ns),
177 ('IPython internal',internal_ns),
178 ('Python builtin',builtin_ns),
178 ('Python builtin',builtin_ns),
179 ('Alias',alias_ns),
179 ('Alias',alias_ns),
180 ]
180 ]
181
181
182 # initialize results to 'null'
182 # initialize results to 'null'
183 found = 0; obj = None; ospace = None; ds = None;
183 found = 0; obj = None; ospace = None; ds = None;
184 ismagic = 0; isalias = 0
184 ismagic = 0; isalias = 0
185
185
186 # Look for the given name by splitting it in parts. If the head is
186 # Look for the given name by splitting it in parts. If the head is
187 # found, then we look for all the remaining parts as members, and only
187 # found, then we look for all the remaining parts as members, and only
188 # declare success if we can find them all.
188 # declare success if we can find them all.
189 oname_parts = oname.split('.')
189 oname_parts = oname.split('.')
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
191 for nsname,ns in namespaces:
191 for nsname,ns in namespaces:
192 try:
192 try:
193 obj = ns[oname_head]
193 obj = ns[oname_head]
194 except KeyError:
194 except KeyError:
195 continue
195 continue
196 else:
196 else:
197 for part in oname_rest:
197 for part in oname_rest:
198 try:
198 try:
199 obj = getattr(obj,part)
199 obj = getattr(obj,part)
200 except:
200 except:
201 # Blanket except b/c some badly implemented objects
201 # Blanket except b/c some badly implemented objects
202 # allow __getattr__ to raise exceptions other than
202 # allow __getattr__ to raise exceptions other than
203 # AttributeError, which then crashes IPython.
203 # AttributeError, which then crashes IPython.
204 break
204 break
205 else:
205 else:
206 # If we finish the for loop (no break), we got all members
206 # If we finish the for loop (no break), we got all members
207 found = 1
207 found = 1
208 ospace = nsname
208 ospace = nsname
209 if ns == alias_ns:
209 if ns == alias_ns:
210 isalias = 1
210 isalias = 1
211 break # namespace loop
211 break # namespace loop
212
212
213 # Try to see if it's magic
213 # Try to see if it's magic
214 if not found:
214 if not found:
215 if oname.startswith(self.shell.ESC_MAGIC):
215 if oname.startswith(self.shell.ESC_MAGIC):
216 oname = oname[1:]
216 oname = oname[1:]
217 obj = getattr(self,'magic_'+oname,None)
217 obj = getattr(self,'magic_'+oname,None)
218 if obj is not None:
218 if obj is not None:
219 found = 1
219 found = 1
220 ospace = 'IPython internal'
220 ospace = 'IPython internal'
221 ismagic = 1
221 ismagic = 1
222
222
223 # Last try: special-case some literals like '', [], {}, etc:
223 # Last try: special-case some literals like '', [], {}, etc:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
225 obj = eval(oname_head)
225 obj = eval(oname_head)
226 found = 1
226 found = 1
227 ospace = 'Interactive'
227 ospace = 'Interactive'
228
228
229 return {'found':found, 'obj':obj, 'namespace':ospace,
229 return {'found':found, 'obj':obj, 'namespace':ospace,
230 'ismagic':ismagic, 'isalias':isalias}
230 'ismagic':ismagic, 'isalias':isalias}
231
231
232 def arg_err(self,func):
232 def arg_err(self,func):
233 """Print docstring if incorrect arguments were passed"""
233 """Print docstring if incorrect arguments were passed"""
234 print 'Error in arguments:'
234 print 'Error in arguments:'
235 print OInspect.getdoc(func)
235 print OInspect.getdoc(func)
236
236
237 def format_latex(self,strng):
237 def format_latex(self,strng):
238 """Format a string for latex inclusion."""
238 """Format a string for latex inclusion."""
239
239
240 # Characters that need to be escaped for latex:
240 # Characters that need to be escaped for latex:
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
242 # Magic command names as headers:
242 # Magic command names as headers:
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
244 re.MULTILINE)
244 re.MULTILINE)
245 # Magic commands
245 # Magic commands
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
247 re.MULTILINE)
247 re.MULTILINE)
248 # Paragraph continue
248 # Paragraph continue
249 par_re = re.compile(r'\\$',re.MULTILINE)
249 par_re = re.compile(r'\\$',re.MULTILINE)
250
250
251 # The "\n" symbol
251 # The "\n" symbol
252 newline_re = re.compile(r'\\n')
252 newline_re = re.compile(r'\\n')
253
253
254 # Now build the string for output:
254 # Now build the string for output:
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
257 strng)
257 strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
259 strng = par_re.sub(r'\\\\',strng)
259 strng = par_re.sub(r'\\\\',strng)
260 strng = escape_re.sub(r'\\\1',strng)
260 strng = escape_re.sub(r'\\\1',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
262 return strng
262 return strng
263
263
264 def format_screen(self,strng):
264 def format_screen(self,strng):
265 """Format a string for screen printing.
265 """Format a string for screen printing.
266
266
267 This removes some latex-type format codes."""
267 This removes some latex-type format codes."""
268 # Paragraph continue
268 # Paragraph continue
269 par_re = re.compile(r'\\$',re.MULTILINE)
269 par_re = re.compile(r'\\$',re.MULTILINE)
270 strng = par_re.sub('',strng)
270 strng = par_re.sub('',strng)
271 return strng
271 return strng
272
272
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
274 """Parse options passed to an argument string.
274 """Parse options passed to an argument string.
275
275
276 The interface is similar to that of getopt(), but it returns back a
276 The interface is similar to that of getopt(), but it returns back a
277 Struct with the options as keys and the stripped argument string still
277 Struct with the options as keys and the stripped argument string still
278 as a string.
278 as a string.
279
279
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
281 This allows us to easily expand variables, glob files, quote
281 This allows us to easily expand variables, glob files, quote
282 arguments, etc.
282 arguments, etc.
283
283
284 Options:
284 Options:
285 -mode: default 'string'. If given as 'list', the argument string is
285 -mode: default 'string'. If given as 'list', the argument string is
286 returned as a list (split on whitespace) instead of a string.
286 returned as a list (split on whitespace) instead of a string.
287
287
288 -list_all: put all option values in lists. Normally only options
288 -list_all: put all option values in lists. Normally only options
289 appearing more than once are put in a list."""
289 appearing more than once are put in a list."""
290
290
291 # inject default options at the beginning of the input line
291 # inject default options at the beginning of the input line
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
294
294
295 mode = kw.get('mode','string')
295 mode = kw.get('mode','string')
296 if mode not in ['string','list']:
296 if mode not in ['string','list']:
297 raise ValueError,'incorrect mode given: %s' % mode
297 raise ValueError,'incorrect mode given: %s' % mode
298 # Get options
298 # Get options
299 list_all = kw.get('list_all',0)
299 list_all = kw.get('list_all',0)
300
300
301 # Check if we have more than one argument to warrant extra processing:
301 # Check if we have more than one argument to warrant extra processing:
302 odict = {} # Dictionary with options
302 odict = {} # Dictionary with options
303 args = arg_str.split()
303 args = arg_str.split()
304 if len(args) >= 1:
304 if len(args) >= 1:
305 # If the list of inputs only has 0 or 1 thing in it, there's no
305 # If the list of inputs only has 0 or 1 thing in it, there's no
306 # need to look for options
306 # need to look for options
307 argv = shlex_split(arg_str)
307 argv = shlex_split(arg_str)
308 # Do regular option processing
308 # Do regular option processing
309 try:
309 try:
310 opts,args = getopt(argv,opt_str,*long_opts)
310 opts,args = getopt(argv,opt_str,*long_opts)
311 except GetoptError,e:
311 except GetoptError,e:
312 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
312 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
313 " ".join(long_opts)))
313 " ".join(long_opts)))
314 for o,a in opts:
314 for o,a in opts:
315 if o.startswith('--'):
315 if o.startswith('--'):
316 o = o[2:]
316 o = o[2:]
317 else:
317 else:
318 o = o[1:]
318 o = o[1:]
319 try:
319 try:
320 odict[o].append(a)
320 odict[o].append(a)
321 except AttributeError:
321 except AttributeError:
322 odict[o] = [odict[o],a]
322 odict[o] = [odict[o],a]
323 except KeyError:
323 except KeyError:
324 if list_all:
324 if list_all:
325 odict[o] = [a]
325 odict[o] = [a]
326 else:
326 else:
327 odict[o] = a
327 odict[o] = a
328
328
329 # Prepare opts,args for return
329 # Prepare opts,args for return
330 opts = Struct(odict)
330 opts = Struct(odict)
331 if mode == 'string':
331 if mode == 'string':
332 args = ' '.join(args)
332 args = ' '.join(args)
333
333
334 return opts,args
334 return opts,args
335
335
336 #......................................................................
336 #......................................................................
337 # And now the actual magic functions
337 # And now the actual magic functions
338
338
339 # Functions for IPython shell work (vars,funcs, config, etc)
339 # Functions for IPython shell work (vars,funcs, config, etc)
340 def magic_lsmagic(self, parameter_s = ''):
340 def magic_lsmagic(self, parameter_s = ''):
341 """List currently available magic functions."""
341 """List currently available magic functions."""
342 mesc = self.shell.ESC_MAGIC
342 mesc = self.shell.ESC_MAGIC
343 print 'Available magic functions:\n'+mesc+\
343 print 'Available magic functions:\n'+mesc+\
344 (' '+mesc).join(self.lsmagic())
344 (' '+mesc).join(self.lsmagic())
345 print '\n' + Magic.auto_status[self.shell.rc.automagic]
345 print '\n' + Magic.auto_status[self.shell.rc.automagic]
346 return None
346 return None
347
347
348 def magic_magic(self, parameter_s = ''):
348 def magic_magic(self, parameter_s = ''):
349 """Print information about the magic function system."""
349 """Print information about the magic function system."""
350
350
351 mode = ''
351 mode = ''
352 try:
352 try:
353 if parameter_s.split()[0] == '-latex':
353 if parameter_s.split()[0] == '-latex':
354 mode = 'latex'
354 mode = 'latex'
355 except:
355 except:
356 pass
356 pass
357
357
358 magic_docs = []
358 magic_docs = []
359 for fname in self.lsmagic():
359 for fname in self.lsmagic():
360 mname = 'magic_' + fname
360 mname = 'magic_' + fname
361 for space in (Magic,self,self.__class__):
361 for space in (Magic,self,self.__class__):
362 try:
362 try:
363 fn = space.__dict__[mname]
363 fn = space.__dict__[mname]
364 except KeyError:
364 except KeyError:
365 pass
365 pass
366 else:
366 else:
367 break
367 break
368 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
368 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
369 fname,fn.__doc__))
369 fname,fn.__doc__))
370 magic_docs = ''.join(magic_docs)
370 magic_docs = ''.join(magic_docs)
371
371
372 if mode == 'latex':
372 if mode == 'latex':
373 print self.format_latex(magic_docs)
373 print self.format_latex(magic_docs)
374 return
374 return
375 else:
375 else:
376 magic_docs = self.format_screen(magic_docs)
376 magic_docs = self.format_screen(magic_docs)
377
377
378 outmsg = """
378 outmsg = """
379 IPython's 'magic' functions
379 IPython's 'magic' functions
380 ===========================
380 ===========================
381
381
382 The magic function system provides a series of functions which allow you to
382 The magic function system provides a series of functions which allow you to
383 control the behavior of IPython itself, plus a lot of system-type
383 control the behavior of IPython itself, plus a lot of system-type
384 features. All these functions are prefixed with a % character, but parameters
384 features. All these functions are prefixed with a % character, but parameters
385 are given without parentheses or quotes.
385 are given without parentheses or quotes.
386
386
387 NOTE: If you have 'automagic' enabled (via the command line option or with the
387 NOTE: If you have 'automagic' enabled (via the command line option or with the
388 %automagic function), you don't need to type in the % explicitly. By default,
388 %automagic function), you don't need to type in the % explicitly. By default,
389 IPython ships with automagic on, so you should only rarely need the % escape.
389 IPython ships with automagic on, so you should only rarely need the % escape.
390
390
391 Example: typing '%cd mydir' (without the quotes) changes you working directory
391 Example: typing '%cd mydir' (without the quotes) changes you working directory
392 to 'mydir', if it exists.
392 to 'mydir', if it exists.
393
393
394 You can define your own magic functions to extend the system. See the supplied
394 You can define your own magic functions to extend the system. See the supplied
395 ipythonrc and example-magic.py files for details (in your ipython
395 ipythonrc and example-magic.py files for details (in your ipython
396 configuration directory, typically $HOME/.ipython/).
396 configuration directory, typically $HOME/.ipython/).
397
397
398 You can also define your own aliased names for magic functions. In your
398 You can also define your own aliased names for magic functions. In your
399 ipythonrc file, placing a line like:
399 ipythonrc file, placing a line like:
400
400
401 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
401 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
402
402
403 will define %pf as a new name for %profile.
403 will define %pf as a new name for %profile.
404
404
405 You can also call magics in code using the ipmagic() function, which IPython
405 You can also call magics in code using the ipmagic() function, which IPython
406 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
406 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
407
407
408 For a list of the available magic functions, use %lsmagic. For a description
408 For a list of the available magic functions, use %lsmagic. For a description
409 of any of them, type %magic_name?, e.g. '%cd?'.
409 of any of them, type %magic_name?, e.g. '%cd?'.
410
410
411 Currently the magic system has the following functions:\n"""
411 Currently the magic system has the following functions:\n"""
412
412
413 mesc = self.shell.ESC_MAGIC
413 mesc = self.shell.ESC_MAGIC
414 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
414 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
415 "\n\n%s%s\n\n%s" % (outmsg,
415 "\n\n%s%s\n\n%s" % (outmsg,
416 magic_docs,mesc,mesc,
416 magic_docs,mesc,mesc,
417 (' '+mesc).join(self.lsmagic()),
417 (' '+mesc).join(self.lsmagic()),
418 Magic.auto_status[self.shell.rc.automagic] ) )
418 Magic.auto_status[self.shell.rc.automagic] ) )
419
419
420 page(outmsg,screen_lines=self.shell.rc.screen_length)
420 page(outmsg,screen_lines=self.shell.rc.screen_length)
421
421
422 def magic_automagic(self, parameter_s = ''):
422 def magic_automagic(self, parameter_s = ''):
423 """Make magic functions callable without having to type the initial %.
423 """Make magic functions callable without having to type the initial %.
424
424
425 Toggles on/off (when off, you must call it as %automagic, of
425 Toggles on/off (when off, you must call it as %automagic, of
426 course). Note that magic functions have lowest priority, so if there's
426 course). Note that magic functions have lowest priority, so if there's
427 a variable whose name collides with that of a magic fn, automagic
427 a variable whose name collides with that of a magic fn, automagic
428 won't work for that function (you get the variable instead). However,
428 won't work for that function (you get the variable instead). However,
429 if you delete the variable (del var), the previously shadowed magic
429 if you delete the variable (del var), the previously shadowed magic
430 function becomes visible to automagic again."""
430 function becomes visible to automagic again."""
431
431
432 rc = self.shell.rc
432 rc = self.shell.rc
433 rc.automagic = not rc.automagic
433 rc.automagic = not rc.automagic
434 print '\n' + Magic.auto_status[rc.automagic]
434 print '\n' + Magic.auto_status[rc.automagic]
435
435
436 def magic_autocall(self, parameter_s = ''):
436 def magic_autocall(self, parameter_s = ''):
437 """Make functions callable without having to type parentheses.
437 """Make functions callable without having to type parentheses.
438
438
439 Usage:
439 Usage:
440
440
441 %autocall [mode]
441 %autocall [mode]
442
442
443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
444 value is toggled on and off (remembering the previous state)."""
444 value is toggled on and off (remembering the previous state)."""
445
445
446 rc = self.shell.rc
446 rc = self.shell.rc
447
447
448 if parameter_s:
448 if parameter_s:
449 arg = int(parameter_s)
449 arg = int(parameter_s)
450 else:
450 else:
451 arg = 'toggle'
451 arg = 'toggle'
452
452
453 if not arg in (0,1,2,'toggle'):
453 if not arg in (0,1,2,'toggle'):
454 error('Valid modes: (0->Off, 1->Smart, 2->Full')
454 error('Valid modes: (0->Off, 1->Smart, 2->Full')
455 return
455 return
456
456
457 if arg in (0,1,2):
457 if arg in (0,1,2):
458 rc.autocall = arg
458 rc.autocall = arg
459 else: # toggle
459 else: # toggle
460 if rc.autocall:
460 if rc.autocall:
461 self._magic_state.autocall_save = rc.autocall
461 self._magic_state.autocall_save = rc.autocall
462 rc.autocall = 0
462 rc.autocall = 0
463 else:
463 else:
464 try:
464 try:
465 rc.autocall = self._magic_state.autocall_save
465 rc.autocall = self._magic_state.autocall_save
466 except AttributeError:
466 except AttributeError:
467 rc.autocall = self._magic_state.autocall_save = 1
467 rc.autocall = self._magic_state.autocall_save = 1
468
468
469 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
469 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
470
470
471 def magic_autoindent(self, parameter_s = ''):
471 def magic_autoindent(self, parameter_s = ''):
472 """Toggle autoindent on/off (if available)."""
472 """Toggle autoindent on/off (if available)."""
473
473
474 self.shell.set_autoindent()
474 self.shell.set_autoindent()
475 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
475 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
476
476
477 def magic_system_verbose(self, parameter_s = ''):
477 def magic_system_verbose(self, parameter_s = ''):
478 """Toggle verbose printing of system calls on/off."""
478 """Toggle verbose printing of system calls on/off."""
479
479
480 self.shell.rc_set_toggle('system_verbose')
480 self.shell.rc_set_toggle('system_verbose')
481 print "System verbose printing is:",\
481 print "System verbose printing is:",\
482 ['OFF','ON'][self.shell.rc.system_verbose]
482 ['OFF','ON'][self.shell.rc.system_verbose]
483
483
484 def magic_history(self, parameter_s = ''):
484 def magic_history(self, parameter_s = ''):
485 """Print input history (_i<n> variables), with most recent last.
485 """Print input history (_i<n> variables), with most recent last.
486
486
487 %history -> print at most 40 inputs (some may be multi-line)\\
487 %history -> print at most 40 inputs (some may be multi-line)\\
488 %history n -> print at most n inputs\\
488 %history n -> print at most n inputs\\
489 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
489 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
490
490
491 Each input's number <n> is shown, and is accessible as the
491 Each input's number <n> is shown, and is accessible as the
492 automatically generated variable _i<n>. Multi-line statements are
492 automatically generated variable _i<n>. Multi-line statements are
493 printed starting at a new line for easy copy/paste.
493 printed starting at a new line for easy copy/paste.
494
494
495
495
496 Options:
496 Options:
497
497
498 -n: do NOT print line numbers. This is useful if you want to get a
498 -n: do NOT print line numbers. This is useful if you want to get a
499 printout of many lines which can be directly pasted into a text
499 printout of many lines which can be directly pasted into a text
500 editor.
500 editor.
501
501
502 This feature is only available if numbered prompts are in use.
502 This feature is only available if numbered prompts are in use.
503
503
504 -r: print the 'raw' history. IPython filters your input and
504 -r: print the 'raw' history. IPython filters your input and
505 converts it all into valid Python source before executing it (things
505 converts it all into valid Python source before executing it (things
506 like magics or aliases are turned into function calls, for
506 like magics or aliases are turned into function calls, for
507 example). With this option, you'll see the unfiltered history
507 example). With this option, you'll see the unfiltered history
508 instead of the filtered version: '%cd /' will be seen as '%cd /'
508 instead of the filtered version: '%cd /' will be seen as '%cd /'
509 instead of 'ipmagic("%cd /")'.
509 instead of '_ip.magic("%cd /")'.
510 """
510 """
511
511
512 shell = self.shell
512 shell = self.shell
513 if not shell.outputcache.do_full_cache:
513 if not shell.outputcache.do_full_cache:
514 print 'This feature is only available if numbered prompts are in use.'
514 print 'This feature is only available if numbered prompts are in use.'
515 return
515 return
516 opts,args = self.parse_options(parameter_s,'nr',mode='list')
516 opts,args = self.parse_options(parameter_s,'nr',mode='list')
517
517
518 if opts.has_key('r'):
518 if opts.has_key('r'):
519 input_hist = shell.input_hist_raw
519 input_hist = shell.input_hist_raw
520 else:
520 else:
521 input_hist = shell.input_hist
521 input_hist = shell.input_hist
522
522
523 default_length = 40
523 default_length = 40
524 if len(args) == 0:
524 if len(args) == 0:
525 final = len(input_hist)
525 final = len(input_hist)
526 init = max(1,final-default_length)
526 init = max(1,final-default_length)
527 elif len(args) == 1:
527 elif len(args) == 1:
528 final = len(input_hist)
528 final = len(input_hist)
529 init = max(1,final-int(args[0]))
529 init = max(1,final-int(args[0]))
530 elif len(args) == 2:
530 elif len(args) == 2:
531 init,final = map(int,args)
531 init,final = map(int,args)
532 else:
532 else:
533 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
533 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
534 print self.magic_hist.__doc__
534 print self.magic_hist.__doc__
535 return
535 return
536 width = len(str(final))
536 width = len(str(final))
537 line_sep = ['','\n']
537 line_sep = ['','\n']
538 print_nums = not opts.has_key('n')
538 print_nums = not opts.has_key('n')
539 for in_num in range(init,final):
539 for in_num in range(init,final):
540 inline = input_hist[in_num]
540 inline = input_hist[in_num]
541 multiline = int(inline.count('\n') > 1)
541 multiline = int(inline.count('\n') > 1)
542 if print_nums:
542 if print_nums:
543 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
543 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
544 print inline,
544 print inline,
545
545
546 def magic_hist(self, parameter_s=''):
546 def magic_hist(self, parameter_s=''):
547 """Alternate name for %history."""
547 """Alternate name for %history."""
548 return self.magic_history(parameter_s)
548 return self.magic_history(parameter_s)
549
549
550 def magic_p(self, parameter_s=''):
550 def magic_p(self, parameter_s=''):
551 """Just a short alias for Python's 'print'."""
551 """Just a short alias for Python's 'print'."""
552 exec 'print ' + parameter_s in self.shell.user_ns
552 exec 'print ' + parameter_s in self.shell.user_ns
553
553
554 def magic_r(self, parameter_s=''):
554 def magic_r(self, parameter_s=''):
555 """Repeat previous input.
555 """Repeat previous input.
556
556
557 If given an argument, repeats the previous command which starts with
557 If given an argument, repeats the previous command which starts with
558 the same string, otherwise it just repeats the previous input.
558 the same string, otherwise it just repeats the previous input.
559
559
560 Shell escaped commands (with ! as first character) are not recognized
560 Shell escaped commands (with ! as first character) are not recognized
561 by this system, only pure python code and magic commands.
561 by this system, only pure python code and magic commands.
562 """
562 """
563
563
564 start = parameter_s.strip()
564 start = parameter_s.strip()
565 esc_magic = self.shell.ESC_MAGIC
565 esc_magic = self.shell.ESC_MAGIC
566 # Identify magic commands even if automagic is on (which means
566 # Identify magic commands even if automagic is on (which means
567 # the in-memory version is different from that typed by the user).
567 # the in-memory version is different from that typed by the user).
568 if self.shell.rc.automagic:
568 if self.shell.rc.automagic:
569 start_magic = esc_magic+start
569 start_magic = esc_magic+start
570 else:
570 else:
571 start_magic = start
571 start_magic = start
572 # Look through the input history in reverse
572 # Look through the input history in reverse
573 for n in range(len(self.shell.input_hist)-2,0,-1):
573 for n in range(len(self.shell.input_hist)-2,0,-1):
574 input = self.shell.input_hist[n]
574 input = self.shell.input_hist[n]
575 # skip plain 'r' lines so we don't recurse to infinity
575 # skip plain 'r' lines so we don't recurse to infinity
576 if input != 'ipmagic("r")\n' and \
576 if input != '_ip.magic("r")\n' and \
577 (input.startswith(start) or input.startswith(start_magic)):
577 (input.startswith(start) or input.startswith(start_magic)):
578 #print 'match',`input` # dbg
578 #print 'match',`input` # dbg
579 print 'Executing:',input,
579 print 'Executing:',input,
580 self.shell.runlines(input)
580 self.shell.runlines(input)
581 return
581 return
582 print 'No previous input matching `%s` found.' % start
582 print 'No previous input matching `%s` found.' % start
583
583
584 def magic_page(self, parameter_s=''):
584 def magic_page(self, parameter_s=''):
585 """Pretty print the object and display it through a pager.
585 """Pretty print the object and display it through a pager.
586
586
587 If no parameter is given, use _ (last output)."""
587 If no parameter is given, use _ (last output)."""
588 # After a function contributed by Olivier Aubert, slightly modified.
588 # After a function contributed by Olivier Aubert, slightly modified.
589
589
590 oname = parameter_s and parameter_s or '_'
590 oname = parameter_s and parameter_s or '_'
591 info = self._ofind(oname)
591 info = self._ofind(oname)
592 if info['found']:
592 if info['found']:
593 page(pformat(info['obj']))
593 page(pformat(info['obj']))
594 else:
594 else:
595 print 'Object `%s` not found' % oname
595 print 'Object `%s` not found' % oname
596
596
597 def magic_profile(self, parameter_s=''):
597 def magic_profile(self, parameter_s=''):
598 """Print your currently active IPyhton profile."""
598 """Print your currently active IPyhton profile."""
599 if self.shell.rc.profile:
599 if self.shell.rc.profile:
600 printpl('Current IPython profile: $self.shell.rc.profile.')
600 printpl('Current IPython profile: $self.shell.rc.profile.')
601 else:
601 else:
602 print 'No profile active.'
602 print 'No profile active.'
603
603
604 def _inspect(self,meth,oname,**kw):
604 def _inspect(self,meth,oname,**kw):
605 """Generic interface to the inspector system.
605 """Generic interface to the inspector system.
606
606
607 This function is meant to be called by pdef, pdoc & friends."""
607 This function is meant to be called by pdef, pdoc & friends."""
608
608
609 oname = oname.strip()
609 oname = oname.strip()
610 info = Struct(self._ofind(oname))
610 info = Struct(self._ofind(oname))
611 if info.found:
611 if info.found:
612 pmethod = getattr(self.shell.inspector,meth)
612 pmethod = getattr(self.shell.inspector,meth)
613 formatter = info.ismagic and self.format_screen or None
613 formatter = info.ismagic and self.format_screen or None
614 if meth == 'pdoc':
614 if meth == 'pdoc':
615 pmethod(info.obj,oname,formatter)
615 pmethod(info.obj,oname,formatter)
616 elif meth == 'pinfo':
616 elif meth == 'pinfo':
617 pmethod(info.obj,oname,formatter,info,**kw)
617 pmethod(info.obj,oname,formatter,info,**kw)
618 else:
618 else:
619 pmethod(info.obj,oname)
619 pmethod(info.obj,oname)
620 else:
620 else:
621 print 'Object `%s` not found.' % oname
621 print 'Object `%s` not found.' % oname
622 return 'not found' # so callers can take other action
622 return 'not found' # so callers can take other action
623
623
624 def magic_pdef(self, parameter_s=''):
624 def magic_pdef(self, parameter_s=''):
625 """Print the definition header for any callable object.
625 """Print the definition header for any callable object.
626
626
627 If the object is a class, print the constructor information."""
627 If the object is a class, print the constructor information."""
628 self._inspect('pdef',parameter_s)
628 self._inspect('pdef',parameter_s)
629
629
630 def magic_pdoc(self, parameter_s=''):
630 def magic_pdoc(self, parameter_s=''):
631 """Print the docstring for an object.
631 """Print the docstring for an object.
632
632
633 If the given object is a class, it will print both the class and the
633 If the given object is a class, it will print both the class and the
634 constructor docstrings."""
634 constructor docstrings."""
635 self._inspect('pdoc',parameter_s)
635 self._inspect('pdoc',parameter_s)
636
636
637 def magic_psource(self, parameter_s=''):
637 def magic_psource(self, parameter_s=''):
638 """Print (or run through pager) the source code for an object."""
638 """Print (or run through pager) the source code for an object."""
639 self._inspect('psource',parameter_s)
639 self._inspect('psource',parameter_s)
640
640
641 def magic_pfile(self, parameter_s=''):
641 def magic_pfile(self, parameter_s=''):
642 """Print (or run through pager) the file where an object is defined.
642 """Print (or run through pager) the file where an object is defined.
643
643
644 The file opens at the line where the object definition begins. IPython
644 The file opens at the line where the object definition begins. IPython
645 will honor the environment variable PAGER if set, and otherwise will
645 will honor the environment variable PAGER if set, and otherwise will
646 do its best to print the file in a convenient form.
646 do its best to print the file in a convenient form.
647
647
648 If the given argument is not an object currently defined, IPython will
648 If the given argument is not an object currently defined, IPython will
649 try to interpret it as a filename (automatically adding a .py extension
649 try to interpret it as a filename (automatically adding a .py extension
650 if needed). You can thus use %pfile as a syntax highlighting code
650 if needed). You can thus use %pfile as a syntax highlighting code
651 viewer."""
651 viewer."""
652
652
653 # first interpret argument as an object name
653 # first interpret argument as an object name
654 out = self._inspect('pfile',parameter_s)
654 out = self._inspect('pfile',parameter_s)
655 # if not, try the input as a filename
655 # if not, try the input as a filename
656 if out == 'not found':
656 if out == 'not found':
657 try:
657 try:
658 filename = get_py_filename(parameter_s)
658 filename = get_py_filename(parameter_s)
659 except IOError,msg:
659 except IOError,msg:
660 print msg
660 print msg
661 return
661 return
662 page(self.shell.inspector.format(file(filename).read()))
662 page(self.shell.inspector.format(file(filename).read()))
663
663
664 def magic_pinfo(self, parameter_s=''):
664 def magic_pinfo(self, parameter_s=''):
665 """Provide detailed information about an object.
665 """Provide detailed information about an object.
666
666
667 '%pinfo object' is just a synonym for object? or ?object."""
667 '%pinfo object' is just a synonym for object? or ?object."""
668
668
669 #print 'pinfo par: <%s>' % parameter_s # dbg
669 #print 'pinfo par: <%s>' % parameter_s # dbg
670
670
671 # detail_level: 0 -> obj? , 1 -> obj??
671 # detail_level: 0 -> obj? , 1 -> obj??
672 detail_level = 0
672 detail_level = 0
673 # We need to detect if we got called as 'pinfo pinfo foo', which can
673 # We need to detect if we got called as 'pinfo pinfo foo', which can
674 # happen if the user types 'pinfo foo?' at the cmd line.
674 # happen if the user types 'pinfo foo?' at the cmd line.
675 pinfo,qmark1,oname,qmark2 = \
675 pinfo,qmark1,oname,qmark2 = \
676 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
676 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
677 if pinfo or qmark1 or qmark2:
677 if pinfo or qmark1 or qmark2:
678 detail_level = 1
678 detail_level = 1
679 if "*" in oname:
679 if "*" in oname:
680 self.magic_psearch(oname)
680 self.magic_psearch(oname)
681 else:
681 else:
682 self._inspect('pinfo',oname,detail_level=detail_level)
682 self._inspect('pinfo',oname,detail_level=detail_level)
683
683
684 def magic_psearch(self, parameter_s=''):
684 def magic_psearch(self, parameter_s=''):
685 """Search for object in namespaces by wildcard.
685 """Search for object in namespaces by wildcard.
686
686
687 %psearch [options] PATTERN [OBJECT TYPE]
687 %psearch [options] PATTERN [OBJECT TYPE]
688
688
689 Note: ? can be used as a synonym for %psearch, at the beginning or at
689 Note: ? can be used as a synonym for %psearch, at the beginning or at
690 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
690 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
691 rest of the command line must be unchanged (options come first), so
691 rest of the command line must be unchanged (options come first), so
692 for example the following forms are equivalent
692 for example the following forms are equivalent
693
693
694 %psearch -i a* function
694 %psearch -i a* function
695 -i a* function?
695 -i a* function?
696 ?-i a* function
696 ?-i a* function
697
697
698 Arguments:
698 Arguments:
699
699
700 PATTERN
700 PATTERN
701
701
702 where PATTERN is a string containing * as a wildcard similar to its
702 where PATTERN is a string containing * as a wildcard similar to its
703 use in a shell. The pattern is matched in all namespaces on the
703 use in a shell. The pattern is matched in all namespaces on the
704 search path. By default objects starting with a single _ are not
704 search path. By default objects starting with a single _ are not
705 matched, many IPython generated objects have a single
705 matched, many IPython generated objects have a single
706 underscore. The default is case insensitive matching. Matching is
706 underscore. The default is case insensitive matching. Matching is
707 also done on the attributes of objects and not only on the objects
707 also done on the attributes of objects and not only on the objects
708 in a module.
708 in a module.
709
709
710 [OBJECT TYPE]
710 [OBJECT TYPE]
711
711
712 Is the name of a python type from the types module. The name is
712 Is the name of a python type from the types module. The name is
713 given in lowercase without the ending type, ex. StringType is
713 given in lowercase without the ending type, ex. StringType is
714 written string. By adding a type here only objects matching the
714 written string. By adding a type here only objects matching the
715 given type are matched. Using all here makes the pattern match all
715 given type are matched. Using all here makes the pattern match all
716 types (this is the default).
716 types (this is the default).
717
717
718 Options:
718 Options:
719
719
720 -a: makes the pattern match even objects whose names start with a
720 -a: makes the pattern match even objects whose names start with a
721 single underscore. These names are normally ommitted from the
721 single underscore. These names are normally ommitted from the
722 search.
722 search.
723
723
724 -i/-c: make the pattern case insensitive/sensitive. If neither of
724 -i/-c: make the pattern case insensitive/sensitive. If neither of
725 these options is given, the default is read from your ipythonrc
725 these options is given, the default is read from your ipythonrc
726 file. The option name which sets this value is
726 file. The option name which sets this value is
727 'wildcards_case_sensitive'. If this option is not specified in your
727 'wildcards_case_sensitive'. If this option is not specified in your
728 ipythonrc file, IPython's internal default is to do a case sensitive
728 ipythonrc file, IPython's internal default is to do a case sensitive
729 search.
729 search.
730
730
731 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
731 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
732 specifiy can be searched in any of the following namespaces:
732 specifiy can be searched in any of the following namespaces:
733 'builtin', 'user', 'user_global','internal', 'alias', where
733 'builtin', 'user', 'user_global','internal', 'alias', where
734 'builtin' and 'user' are the search defaults. Note that you should
734 'builtin' and 'user' are the search defaults. Note that you should
735 not use quotes when specifying namespaces.
735 not use quotes when specifying namespaces.
736
736
737 'Builtin' contains the python module builtin, 'user' contains all
737 'Builtin' contains the python module builtin, 'user' contains all
738 user data, 'alias' only contain the shell aliases and no python
738 user data, 'alias' only contain the shell aliases and no python
739 objects, 'internal' contains objects used by IPython. The
739 objects, 'internal' contains objects used by IPython. The
740 'user_global' namespace is only used by embedded IPython instances,
740 'user_global' namespace is only used by embedded IPython instances,
741 and it contains module-level globals. You can add namespaces to the
741 and it contains module-level globals. You can add namespaces to the
742 search with -s or exclude them with -e (these options can be given
742 search with -s or exclude them with -e (these options can be given
743 more than once).
743 more than once).
744
744
745 Examples:
745 Examples:
746
746
747 %psearch a* -> objects beginning with an a
747 %psearch a* -> objects beginning with an a
748 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
748 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
749 %psearch a* function -> all functions beginning with an a
749 %psearch a* function -> all functions beginning with an a
750 %psearch re.e* -> objects beginning with an e in module re
750 %psearch re.e* -> objects beginning with an e in module re
751 %psearch r*.e* -> objects that start with e in modules starting in r
751 %psearch r*.e* -> objects that start with e in modules starting in r
752 %psearch r*.* string -> all strings in modules beginning with r
752 %psearch r*.* string -> all strings in modules beginning with r
753
753
754 Case sensitve search:
754 Case sensitve search:
755
755
756 %psearch -c a* list all object beginning with lower case a
756 %psearch -c a* list all object beginning with lower case a
757
757
758 Show objects beginning with a single _:
758 Show objects beginning with a single _:
759
759
760 %psearch -a _* list objects beginning with a single underscore"""
760 %psearch -a _* list objects beginning with a single underscore"""
761
761
762 # default namespaces to be searched
762 # default namespaces to be searched
763 def_search = ['user','builtin']
763 def_search = ['user','builtin']
764
764
765 # Process options/args
765 # Process options/args
766 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
766 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
767 opt = opts.get
767 opt = opts.get
768 shell = self.shell
768 shell = self.shell
769 psearch = shell.inspector.psearch
769 psearch = shell.inspector.psearch
770
770
771 # select case options
771 # select case options
772 if opts.has_key('i'):
772 if opts.has_key('i'):
773 ignore_case = True
773 ignore_case = True
774 elif opts.has_key('c'):
774 elif opts.has_key('c'):
775 ignore_case = False
775 ignore_case = False
776 else:
776 else:
777 ignore_case = not shell.rc.wildcards_case_sensitive
777 ignore_case = not shell.rc.wildcards_case_sensitive
778
778
779 # Build list of namespaces to search from user options
779 # Build list of namespaces to search from user options
780 def_search.extend(opt('s',[]))
780 def_search.extend(opt('s',[]))
781 ns_exclude = ns_exclude=opt('e',[])
781 ns_exclude = ns_exclude=opt('e',[])
782 ns_search = [nm for nm in def_search if nm not in ns_exclude]
782 ns_search = [nm for nm in def_search if nm not in ns_exclude]
783
783
784 # Call the actual search
784 # Call the actual search
785 try:
785 try:
786 psearch(args,shell.ns_table,ns_search,
786 psearch(args,shell.ns_table,ns_search,
787 show_all=opt('a'),ignore_case=ignore_case)
787 show_all=opt('a'),ignore_case=ignore_case)
788 except:
788 except:
789 shell.showtraceback()
789 shell.showtraceback()
790
790
791 def magic_who_ls(self, parameter_s=''):
791 def magic_who_ls(self, parameter_s=''):
792 """Return a sorted list of all interactive variables.
792 """Return a sorted list of all interactive variables.
793
793
794 If arguments are given, only variables of types matching these
794 If arguments are given, only variables of types matching these
795 arguments are returned."""
795 arguments are returned."""
796
796
797 user_ns = self.shell.user_ns
797 user_ns = self.shell.user_ns
798 internal_ns = self.shell.internal_ns
798 internal_ns = self.shell.internal_ns
799 user_config_ns = self.shell.user_config_ns
799 user_config_ns = self.shell.user_config_ns
800 out = []
800 out = []
801 typelist = parameter_s.split()
801 typelist = parameter_s.split()
802
802
803 for i in user_ns:
803 for i in user_ns:
804 if not (i.startswith('_') or i.startswith('_i')) \
804 if not (i.startswith('_') or i.startswith('_i')) \
805 and not (i in internal_ns or i in user_config_ns):
805 and not (i in internal_ns or i in user_config_ns):
806 if typelist:
806 if typelist:
807 if type(user_ns[i]).__name__ in typelist:
807 if type(user_ns[i]).__name__ in typelist:
808 out.append(i)
808 out.append(i)
809 else:
809 else:
810 out.append(i)
810 out.append(i)
811 out.sort()
811 out.sort()
812 return out
812 return out
813
813
814 def magic_who(self, parameter_s=''):
814 def magic_who(self, parameter_s=''):
815 """Print all interactive variables, with some minimal formatting.
815 """Print all interactive variables, with some minimal formatting.
816
816
817 If any arguments are given, only variables whose type matches one of
817 If any arguments are given, only variables whose type matches one of
818 these are printed. For example:
818 these are printed. For example:
819
819
820 %who function str
820 %who function str
821
821
822 will only list functions and strings, excluding all other types of
822 will only list functions and strings, excluding all other types of
823 variables. To find the proper type names, simply use type(var) at a
823 variables. To find the proper type names, simply use type(var) at a
824 command line to see how python prints type names. For example:
824 command line to see how python prints type names. For example:
825
825
826 In [1]: type('hello')\\
826 In [1]: type('hello')\\
827 Out[1]: <type 'str'>
827 Out[1]: <type 'str'>
828
828
829 indicates that the type name for strings is 'str'.
829 indicates that the type name for strings is 'str'.
830
830
831 %who always excludes executed names loaded through your configuration
831 %who always excludes executed names loaded through your configuration
832 file and things which are internal to IPython.
832 file and things which are internal to IPython.
833
833
834 This is deliberate, as typically you may load many modules and the
834 This is deliberate, as typically you may load many modules and the
835 purpose of %who is to show you only what you've manually defined."""
835 purpose of %who is to show you only what you've manually defined."""
836
836
837 varlist = self.magic_who_ls(parameter_s)
837 varlist = self.magic_who_ls(parameter_s)
838 if not varlist:
838 if not varlist:
839 print 'Interactive namespace is empty.'
839 print 'Interactive namespace is empty.'
840 return
840 return
841
841
842 # if we have variables, move on...
842 # if we have variables, move on...
843
843
844 # stupid flushing problem: when prompts have no separators, stdout is
844 # stupid flushing problem: when prompts have no separators, stdout is
845 # getting lost. I'm starting to think this is a python bug. I'm having
845 # getting lost. I'm starting to think this is a python bug. I'm having
846 # to force a flush with a print because even a sys.stdout.flush
846 # to force a flush with a print because even a sys.stdout.flush
847 # doesn't seem to do anything!
847 # doesn't seem to do anything!
848
848
849 count = 0
849 count = 0
850 for i in varlist:
850 for i in varlist:
851 print i+'\t',
851 print i+'\t',
852 count += 1
852 count += 1
853 if count > 8:
853 if count > 8:
854 count = 0
854 count = 0
855 print
855 print
856 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
856 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
857
857
858 print # well, this does force a flush at the expense of an extra \n
858 print # well, this does force a flush at the expense of an extra \n
859
859
860 def magic_whos(self, parameter_s=''):
860 def magic_whos(self, parameter_s=''):
861 """Like %who, but gives some extra information about each variable.
861 """Like %who, but gives some extra information about each variable.
862
862
863 The same type filtering of %who can be applied here.
863 The same type filtering of %who can be applied here.
864
864
865 For all variables, the type is printed. Additionally it prints:
865 For all variables, the type is printed. Additionally it prints:
866
866
867 - For {},[],(): their length.
867 - For {},[],(): their length.
868
868
869 - For Numeric arrays, a summary with shape, number of elements,
869 - For Numeric arrays, a summary with shape, number of elements,
870 typecode and size in memory.
870 typecode and size in memory.
871
871
872 - Everything else: a string representation, snipping their middle if
872 - Everything else: a string representation, snipping their middle if
873 too long."""
873 too long."""
874
874
875 varnames = self.magic_who_ls(parameter_s)
875 varnames = self.magic_who_ls(parameter_s)
876 if not varnames:
876 if not varnames:
877 print 'Interactive namespace is empty.'
877 print 'Interactive namespace is empty.'
878 return
878 return
879
879
880 # if we have variables, move on...
880 # if we have variables, move on...
881
881
882 # for these types, show len() instead of data:
882 # for these types, show len() instead of data:
883 seq_types = [types.DictType,types.ListType,types.TupleType]
883 seq_types = [types.DictType,types.ListType,types.TupleType]
884
884
885 # for Numeric arrays, display summary info
885 # for Numeric arrays, display summary info
886 try:
886 try:
887 import Numeric
887 import Numeric
888 except ImportError:
888 except ImportError:
889 array_type = None
889 array_type = None
890 else:
890 else:
891 array_type = Numeric.ArrayType.__name__
891 array_type = Numeric.ArrayType.__name__
892
892
893 # Find all variable names and types so we can figure out column sizes
893 # Find all variable names and types so we can figure out column sizes
894 get_vars = lambda i: self.shell.user_ns[i]
894 get_vars = lambda i: self.shell.user_ns[i]
895 type_name = lambda v: type(v).__name__
895 type_name = lambda v: type(v).__name__
896 varlist = map(get_vars,varnames)
896 varlist = map(get_vars,varnames)
897
897
898 typelist = []
898 typelist = []
899 for vv in varlist:
899 for vv in varlist:
900 tt = type_name(vv)
900 tt = type_name(vv)
901 if tt=='instance':
901 if tt=='instance':
902 typelist.append(str(vv.__class__))
902 typelist.append(str(vv.__class__))
903 else:
903 else:
904 typelist.append(tt)
904 typelist.append(tt)
905
905
906 # column labels and # of spaces as separator
906 # column labels and # of spaces as separator
907 varlabel = 'Variable'
907 varlabel = 'Variable'
908 typelabel = 'Type'
908 typelabel = 'Type'
909 datalabel = 'Data/Info'
909 datalabel = 'Data/Info'
910 colsep = 3
910 colsep = 3
911 # variable format strings
911 # variable format strings
912 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
912 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
913 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
913 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
914 aformat = "%s: %s elems, type `%s`, %s bytes"
914 aformat = "%s: %s elems, type `%s`, %s bytes"
915 # find the size of the columns to format the output nicely
915 # find the size of the columns to format the output nicely
916 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
916 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
917 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
917 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
918 # table header
918 # table header
919 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
919 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
920 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
920 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
921 # and the table itself
921 # and the table itself
922 kb = 1024
922 kb = 1024
923 Mb = 1048576 # kb**2
923 Mb = 1048576 # kb**2
924 for vname,var,vtype in zip(varnames,varlist,typelist):
924 for vname,var,vtype in zip(varnames,varlist,typelist):
925 print itpl(vformat),
925 print itpl(vformat),
926 if vtype in seq_types:
926 if vtype in seq_types:
927 print len(var)
927 print len(var)
928 elif vtype==array_type:
928 elif vtype==array_type:
929 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
929 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
930 vsize = Numeric.size(var)
930 vsize = Numeric.size(var)
931 vbytes = vsize*var.itemsize()
931 vbytes = vsize*var.itemsize()
932 if vbytes < 100000:
932 if vbytes < 100000:
933 print aformat % (vshape,vsize,var.typecode(),vbytes)
933 print aformat % (vshape,vsize,var.typecode(),vbytes)
934 else:
934 else:
935 print aformat % (vshape,vsize,var.typecode(),vbytes),
935 print aformat % (vshape,vsize,var.typecode(),vbytes),
936 if vbytes < Mb:
936 if vbytes < Mb:
937 print '(%s kb)' % (vbytes/kb,)
937 print '(%s kb)' % (vbytes/kb,)
938 else:
938 else:
939 print '(%s Mb)' % (vbytes/Mb,)
939 print '(%s Mb)' % (vbytes/Mb,)
940 else:
940 else:
941 vstr = str(var).replace('\n','\\n')
941 vstr = str(var).replace('\n','\\n')
942 if len(vstr) < 50:
942 if len(vstr) < 50:
943 print vstr
943 print vstr
944 else:
944 else:
945 printpl(vfmt_short)
945 printpl(vfmt_short)
946
946
947 def magic_reset(self, parameter_s=''):
947 def magic_reset(self, parameter_s=''):
948 """Resets the namespace by removing all names defined by the user.
948 """Resets the namespace by removing all names defined by the user.
949
949
950 Input/Output history are left around in case you need them."""
950 Input/Output history are left around in case you need them."""
951
951
952 ans = raw_input(
952 ans = raw_input(
953 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
953 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
954 if not ans.lower() == 'y':
954 if not ans.lower() == 'y':
955 print 'Nothing done.'
955 print 'Nothing done.'
956 return
956 return
957 user_ns = self.shell.user_ns
957 user_ns = self.shell.user_ns
958 for i in self.magic_who_ls():
958 for i in self.magic_who_ls():
959 del(user_ns[i])
959 del(user_ns[i])
960
960
961 def magic_config(self,parameter_s=''):
961 def magic_config(self,parameter_s=''):
962 """Show IPython's internal configuration."""
962 """Show IPython's internal configuration."""
963
963
964 page('Current configuration structure:\n'+
964 page('Current configuration structure:\n'+
965 pformat(self.shell.rc.dict()))
965 pformat(self.shell.rc.dict()))
966
966
967 def magic_logstart(self,parameter_s=''):
967 def magic_logstart(self,parameter_s=''):
968 """Start logging anywhere in a session.
968 """Start logging anywhere in a session.
969
969
970 %logstart [-o|-t] [log_name [log_mode]]
970 %logstart [-o|-t] [log_name [log_mode]]
971
971
972 If no name is given, it defaults to a file named 'ipython_log.py' in your
972 If no name is given, it defaults to a file named 'ipython_log.py' in your
973 current directory, in 'rotate' mode (see below).
973 current directory, in 'rotate' mode (see below).
974
974
975 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
975 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
976 history up to that point and then continues logging.
976 history up to that point and then continues logging.
977
977
978 %logstart takes a second optional parameter: logging mode. This can be one
978 %logstart takes a second optional parameter: logging mode. This can be one
979 of (note that the modes are given unquoted):\\
979 of (note that the modes are given unquoted):\\
980 append: well, that says it.\\
980 append: well, that says it.\\
981 backup: rename (if exists) to name~ and start name.\\
981 backup: rename (if exists) to name~ and start name.\\
982 global: single logfile in your home dir, appended to.\\
982 global: single logfile in your home dir, appended to.\\
983 over : overwrite existing log.\\
983 over : overwrite existing log.\\
984 rotate: create rotating logs name.1~, name.2~, etc.
984 rotate: create rotating logs name.1~, name.2~, etc.
985
985
986 Options:
986 Options:
987
987
988 -o: log also IPython's output. In this mode, all commands which
988 -o: log also IPython's output. In this mode, all commands which
989 generate an Out[NN] prompt are recorded to the logfile, right after
989 generate an Out[NN] prompt are recorded to the logfile, right after
990 their corresponding input line. The output lines are always
990 their corresponding input line. The output lines are always
991 prepended with a '#[Out]# ' marker, so that the log remains valid
991 prepended with a '#[Out]# ' marker, so that the log remains valid
992 Python code.
992 Python code.
993
993
994 Since this marker is always the same, filtering only the output from
994 Since this marker is always the same, filtering only the output from
995 a log is very easy, using for example a simple awk call:
995 a log is very easy, using for example a simple awk call:
996
996
997 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
997 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
998
998
999 -t: put timestamps before each input line logged (these are put in
999 -t: put timestamps before each input line logged (these are put in
1000 comments)."""
1000 comments)."""
1001
1001
1002 opts,par = self.parse_options(parameter_s,'ot')
1002 opts,par = self.parse_options(parameter_s,'ot')
1003 log_output = 'o' in opts
1003 log_output = 'o' in opts
1004 timestamp = 't' in opts
1004 timestamp = 't' in opts
1005
1005
1006 rc = self.shell.rc
1006 rc = self.shell.rc
1007 logger = self.shell.logger
1007 logger = self.shell.logger
1008
1008
1009 # if no args are given, the defaults set in the logger constructor by
1009 # if no args are given, the defaults set in the logger constructor by
1010 # ipytohn remain valid
1010 # ipytohn remain valid
1011 if par:
1011 if par:
1012 try:
1012 try:
1013 logfname,logmode = par.split()
1013 logfname,logmode = par.split()
1014 except:
1014 except:
1015 logfname = par
1015 logfname = par
1016 logmode = 'backup'
1016 logmode = 'backup'
1017 else:
1017 else:
1018 logfname = logger.logfname
1018 logfname = logger.logfname
1019 logmode = logger.logmode
1019 logmode = logger.logmode
1020 # put logfname into rc struct as if it had been called on the command
1020 # put logfname into rc struct as if it had been called on the command
1021 # line, so it ends up saved in the log header Save it in case we need
1021 # line, so it ends up saved in the log header Save it in case we need
1022 # to restore it...
1022 # to restore it...
1023 old_logfile = rc.opts.get('logfile','')
1023 old_logfile = rc.opts.get('logfile','')
1024 if logfname:
1024 if logfname:
1025 logfname = os.path.expanduser(logfname)
1025 logfname = os.path.expanduser(logfname)
1026 rc.opts.logfile = logfname
1026 rc.opts.logfile = logfname
1027 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1027 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1028 try:
1028 try:
1029 started = logger.logstart(logfname,loghead,logmode,
1029 started = logger.logstart(logfname,loghead,logmode,
1030 log_output,timestamp)
1030 log_output,timestamp)
1031 except:
1031 except:
1032 rc.opts.logfile = old_logfile
1032 rc.opts.logfile = old_logfile
1033 warn("Couldn't start log: %s" % sys.exc_info()[1])
1033 warn("Couldn't start log: %s" % sys.exc_info()[1])
1034 else:
1034 else:
1035 # log input history up to this point, optionally interleaving
1035 # log input history up to this point, optionally interleaving
1036 # output if requested
1036 # output if requested
1037
1037
1038 if timestamp:
1038 if timestamp:
1039 # disable timestamping for the previous history, since we've
1039 # disable timestamping for the previous history, since we've
1040 # lost those already (no time machine here).
1040 # lost those already (no time machine here).
1041 logger.timestamp = False
1041 logger.timestamp = False
1042 if log_output:
1042 if log_output:
1043 log_write = logger.log_write
1043 log_write = logger.log_write
1044 input_hist = self.shell.input_hist
1044 input_hist = self.shell.input_hist
1045 output_hist = self.shell.output_hist
1045 output_hist = self.shell.output_hist
1046 for n in range(1,len(input_hist)-1):
1046 for n in range(1,len(input_hist)-1):
1047 log_write(input_hist[n].rstrip())
1047 log_write(input_hist[n].rstrip())
1048 if n in output_hist:
1048 if n in output_hist:
1049 log_write(repr(output_hist[n]),'output')
1049 log_write(repr(output_hist[n]),'output')
1050 else:
1050 else:
1051 logger.log_write(self.shell.input_hist[1:])
1051 logger.log_write(self.shell.input_hist[1:])
1052 if timestamp:
1052 if timestamp:
1053 # re-enable timestamping
1053 # re-enable timestamping
1054 logger.timestamp = True
1054 logger.timestamp = True
1055
1055
1056 print ('Activating auto-logging. '
1056 print ('Activating auto-logging. '
1057 'Current session state plus future input saved.')
1057 'Current session state plus future input saved.')
1058 logger.logstate()
1058 logger.logstate()
1059
1059
1060 def magic_logoff(self,parameter_s=''):
1060 def magic_logoff(self,parameter_s=''):
1061 """Temporarily stop logging.
1061 """Temporarily stop logging.
1062
1062
1063 You must have previously started logging."""
1063 You must have previously started logging."""
1064 self.shell.logger.switch_log(0)
1064 self.shell.logger.switch_log(0)
1065
1065
1066 def magic_logon(self,parameter_s=''):
1066 def magic_logon(self,parameter_s=''):
1067 """Restart logging.
1067 """Restart logging.
1068
1068
1069 This function is for restarting logging which you've temporarily
1069 This function is for restarting logging which you've temporarily
1070 stopped with %logoff. For starting logging for the first time, you
1070 stopped with %logoff. For starting logging for the first time, you
1071 must use the %logstart function, which allows you to specify an
1071 must use the %logstart function, which allows you to specify an
1072 optional log filename."""
1072 optional log filename."""
1073
1073
1074 self.shell.logger.switch_log(1)
1074 self.shell.logger.switch_log(1)
1075
1075
1076 def magic_logstate(self,parameter_s=''):
1076 def magic_logstate(self,parameter_s=''):
1077 """Print the status of the logging system."""
1077 """Print the status of the logging system."""
1078
1078
1079 self.shell.logger.logstate()
1079 self.shell.logger.logstate()
1080
1080
1081 def magic_pdb(self, parameter_s=''):
1081 def magic_pdb(self, parameter_s=''):
1082 """Control the calling of the pdb interactive debugger.
1082 """Control the calling of the pdb interactive debugger.
1083
1083
1084 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1084 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1085 argument it works as a toggle.
1085 argument it works as a toggle.
1086
1086
1087 When an exception is triggered, IPython can optionally call the
1087 When an exception is triggered, IPython can optionally call the
1088 interactive pdb debugger after the traceback printout. %pdb toggles
1088 interactive pdb debugger after the traceback printout. %pdb toggles
1089 this feature on and off."""
1089 this feature on and off."""
1090
1090
1091 par = parameter_s.strip().lower()
1091 par = parameter_s.strip().lower()
1092
1092
1093 if par:
1093 if par:
1094 try:
1094 try:
1095 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1095 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1096 except KeyError:
1096 except KeyError:
1097 print ('Incorrect argument. Use on/1, off/0, '
1097 print ('Incorrect argument. Use on/1, off/0, '
1098 'or nothing for a toggle.')
1098 'or nothing for a toggle.')
1099 return
1099 return
1100 else:
1100 else:
1101 # toggle
1101 # toggle
1102 new_pdb = not self.shell.InteractiveTB.call_pdb
1102 new_pdb = not self.shell.InteractiveTB.call_pdb
1103
1103
1104 # set on the shell
1104 # set on the shell
1105 self.shell.call_pdb = new_pdb
1105 self.shell.call_pdb = new_pdb
1106 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1106 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1107
1107
1108 def magic_prun(self, parameter_s ='',user_mode=1,
1108 def magic_prun(self, parameter_s ='',user_mode=1,
1109 opts=None,arg_lst=None,prog_ns=None):
1109 opts=None,arg_lst=None,prog_ns=None):
1110
1110
1111 """Run a statement through the python code profiler.
1111 """Run a statement through the python code profiler.
1112
1112
1113 Usage:\\
1113 Usage:\\
1114 %prun [options] statement
1114 %prun [options] statement
1115
1115
1116 The given statement (which doesn't require quote marks) is run via the
1116 The given statement (which doesn't require quote marks) is run via the
1117 python profiler in a manner similar to the profile.run() function.
1117 python profiler in a manner similar to the profile.run() function.
1118 Namespaces are internally managed to work correctly; profile.run
1118 Namespaces are internally managed to work correctly; profile.run
1119 cannot be used in IPython because it makes certain assumptions about
1119 cannot be used in IPython because it makes certain assumptions about
1120 namespaces which do not hold under IPython.
1120 namespaces which do not hold under IPython.
1121
1121
1122 Options:
1122 Options:
1123
1123
1124 -l <limit>: you can place restrictions on what or how much of the
1124 -l <limit>: you can place restrictions on what or how much of the
1125 profile gets printed. The limit value can be:
1125 profile gets printed. The limit value can be:
1126
1126
1127 * A string: only information for function names containing this string
1127 * A string: only information for function names containing this string
1128 is printed.
1128 is printed.
1129
1129
1130 * An integer: only these many lines are printed.
1130 * An integer: only these many lines are printed.
1131
1131
1132 * A float (between 0 and 1): this fraction of the report is printed
1132 * A float (between 0 and 1): this fraction of the report is printed
1133 (for example, use a limit of 0.4 to see the topmost 40% only).
1133 (for example, use a limit of 0.4 to see the topmost 40% only).
1134
1134
1135 You can combine several limits with repeated use of the option. For
1135 You can combine several limits with repeated use of the option. For
1136 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1136 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1137 information about class constructors.
1137 information about class constructors.
1138
1138
1139 -r: return the pstats.Stats object generated by the profiling. This
1139 -r: return the pstats.Stats object generated by the profiling. This
1140 object has all the information about the profile in it, and you can
1140 object has all the information about the profile in it, and you can
1141 later use it for further analysis or in other functions.
1141 later use it for further analysis or in other functions.
1142
1142
1143 Since magic functions have a particular form of calling which prevents
1143 Since magic functions have a particular form of calling which prevents
1144 you from writing something like:\\
1144 you from writing something like:\\
1145 In [1]: p = %prun -r print 4 # invalid!\\
1145 In [1]: p = %prun -r print 4 # invalid!\\
1146 you must instead use IPython's automatic variables to assign this:\\
1146 you must instead use IPython's automatic variables to assign this:\\
1147 In [1]: %prun -r print 4 \\
1147 In [1]: %prun -r print 4 \\
1148 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1148 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1149 In [2]: stats = _
1149 In [2]: stats = _
1150
1150
1151 If you really need to assign this value via an explicit function call,
1151 If you really need to assign this value via an explicit function call,
1152 you can always tap directly into the true name of the magic function
1152 you can always tap directly into the true name of the magic function
1153 by using the ipmagic function (which IPython automatically adds to the
1153 by using the _ip.magic function:\\
1154 builtins):\\
1154 In [3]: stats = _ip.magic('prun','-r print 4')
1155 In [3]: stats = ipmagic('prun','-r print 4')
1156
1155
1157 You can type ipmagic? for more details on ipmagic.
1156 You can type _ip.magic? for more details.
1158
1157
1159 -s <key>: sort profile by given key. You can provide more than one key
1158 -s <key>: sort profile by given key. You can provide more than one key
1160 by using the option several times: '-s key1 -s key2 -s key3...'. The
1159 by using the option several times: '-s key1 -s key2 -s key3...'. The
1161 default sorting key is 'time'.
1160 default sorting key is 'time'.
1162
1161
1163 The following is copied verbatim from the profile documentation
1162 The following is copied verbatim from the profile documentation
1164 referenced below:
1163 referenced below:
1165
1164
1166 When more than one key is provided, additional keys are used as
1165 When more than one key is provided, additional keys are used as
1167 secondary criteria when the there is equality in all keys selected
1166 secondary criteria when the there is equality in all keys selected
1168 before them.
1167 before them.
1169
1168
1170 Abbreviations can be used for any key names, as long as the
1169 Abbreviations can be used for any key names, as long as the
1171 abbreviation is unambiguous. The following are the keys currently
1170 abbreviation is unambiguous. The following are the keys currently
1172 defined:
1171 defined:
1173
1172
1174 Valid Arg Meaning\\
1173 Valid Arg Meaning\\
1175 "calls" call count\\
1174 "calls" call count\\
1176 "cumulative" cumulative time\\
1175 "cumulative" cumulative time\\
1177 "file" file name\\
1176 "file" file name\\
1178 "module" file name\\
1177 "module" file name\\
1179 "pcalls" primitive call count\\
1178 "pcalls" primitive call count\\
1180 "line" line number\\
1179 "line" line number\\
1181 "name" function name\\
1180 "name" function name\\
1182 "nfl" name/file/line\\
1181 "nfl" name/file/line\\
1183 "stdname" standard name\\
1182 "stdname" standard name\\
1184 "time" internal time
1183 "time" internal time
1185
1184
1186 Note that all sorts on statistics are in descending order (placing
1185 Note that all sorts on statistics are in descending order (placing
1187 most time consuming items first), where as name, file, and line number
1186 most time consuming items first), where as name, file, and line number
1188 searches are in ascending order (i.e., alphabetical). The subtle
1187 searches are in ascending order (i.e., alphabetical). The subtle
1189 distinction between "nfl" and "stdname" is that the standard name is a
1188 distinction between "nfl" and "stdname" is that the standard name is a
1190 sort of the name as printed, which means that the embedded line
1189 sort of the name as printed, which means that the embedded line
1191 numbers get compared in an odd way. For example, lines 3, 20, and 40
1190 numbers get compared in an odd way. For example, lines 3, 20, and 40
1192 would (if the file names were the same) appear in the string order
1191 would (if the file names were the same) appear in the string order
1193 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1192 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1194 line numbers. In fact, sort_stats("nfl") is the same as
1193 line numbers. In fact, sort_stats("nfl") is the same as
1195 sort_stats("name", "file", "line").
1194 sort_stats("name", "file", "line").
1196
1195
1197 -T <filename>: save profile results as shown on screen to a text
1196 -T <filename>: save profile results as shown on screen to a text
1198 file. The profile is still shown on screen.
1197 file. The profile is still shown on screen.
1199
1198
1200 -D <filename>: save (via dump_stats) profile statistics to given
1199 -D <filename>: save (via dump_stats) profile statistics to given
1201 filename. This data is in a format understod by the pstats module, and
1200 filename. This data is in a format understod by the pstats module, and
1202 is generated by a call to the dump_stats() method of profile
1201 is generated by a call to the dump_stats() method of profile
1203 objects. The profile is still shown on screen.
1202 objects. The profile is still shown on screen.
1204
1203
1205 If you want to run complete programs under the profiler's control, use
1204 If you want to run complete programs under the profiler's control, use
1206 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1205 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1207 contains profiler specific options as described here.
1206 contains profiler specific options as described here.
1208
1207
1209 You can read the complete documentation for the profile module with:\\
1208 You can read the complete documentation for the profile module with:\\
1210 In [1]: import profile; profile.help() """
1209 In [1]: import profile; profile.help() """
1211
1210
1212 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1211 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1213 # protect user quote marks
1212 # protect user quote marks
1214 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1213 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1215
1214
1216 if user_mode: # regular user call
1215 if user_mode: # regular user call
1217 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1216 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1218 list_all=1)
1217 list_all=1)
1219 namespace = self.shell.user_ns
1218 namespace = self.shell.user_ns
1220 else: # called to run a program by %run -p
1219 else: # called to run a program by %run -p
1221 try:
1220 try:
1222 filename = get_py_filename(arg_lst[0])
1221 filename = get_py_filename(arg_lst[0])
1223 except IOError,msg:
1222 except IOError,msg:
1224 error(msg)
1223 error(msg)
1225 return
1224 return
1226
1225
1227 arg_str = 'execfile(filename,prog_ns)'
1226 arg_str = 'execfile(filename,prog_ns)'
1228 namespace = locals()
1227 namespace = locals()
1229
1228
1230 opts.merge(opts_def)
1229 opts.merge(opts_def)
1231
1230
1232 prof = profile.Profile()
1231 prof = profile.Profile()
1233 try:
1232 try:
1234 prof = prof.runctx(arg_str,namespace,namespace)
1233 prof = prof.runctx(arg_str,namespace,namespace)
1235 sys_exit = ''
1234 sys_exit = ''
1236 except SystemExit:
1235 except SystemExit:
1237 sys_exit = """*** SystemExit exception caught in code being profiled."""
1236 sys_exit = """*** SystemExit exception caught in code being profiled."""
1238
1237
1239 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1238 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1240
1239
1241 lims = opts.l
1240 lims = opts.l
1242 if lims:
1241 if lims:
1243 lims = [] # rebuild lims with ints/floats/strings
1242 lims = [] # rebuild lims with ints/floats/strings
1244 for lim in opts.l:
1243 for lim in opts.l:
1245 try:
1244 try:
1246 lims.append(int(lim))
1245 lims.append(int(lim))
1247 except ValueError:
1246 except ValueError:
1248 try:
1247 try:
1249 lims.append(float(lim))
1248 lims.append(float(lim))
1250 except ValueError:
1249 except ValueError:
1251 lims.append(lim)
1250 lims.append(lim)
1252
1251
1253 # trap output
1252 # trap output
1254 sys_stdout = sys.stdout
1253 sys_stdout = sys.stdout
1255 stdout_trap = StringIO()
1254 stdout_trap = StringIO()
1256 try:
1255 try:
1257 sys.stdout = stdout_trap
1256 sys.stdout = stdout_trap
1258 stats.print_stats(*lims)
1257 stats.print_stats(*lims)
1259 finally:
1258 finally:
1260 sys.stdout = sys_stdout
1259 sys.stdout = sys_stdout
1261 output = stdout_trap.getvalue()
1260 output = stdout_trap.getvalue()
1262 output = output.rstrip()
1261 output = output.rstrip()
1263
1262
1264 page(output,screen_lines=self.shell.rc.screen_length)
1263 page(output,screen_lines=self.shell.rc.screen_length)
1265 print sys_exit,
1264 print sys_exit,
1266
1265
1267 dump_file = opts.D[0]
1266 dump_file = opts.D[0]
1268 text_file = opts.T[0]
1267 text_file = opts.T[0]
1269 if dump_file:
1268 if dump_file:
1270 prof.dump_stats(dump_file)
1269 prof.dump_stats(dump_file)
1271 print '\n*** Profile stats marshalled to file',\
1270 print '\n*** Profile stats marshalled to file',\
1272 `dump_file`+'.',sys_exit
1271 `dump_file`+'.',sys_exit
1273 if text_file:
1272 if text_file:
1274 file(text_file,'w').write(output)
1273 file(text_file,'w').write(output)
1275 print '\n*** Profile printout saved to text file',\
1274 print '\n*** Profile printout saved to text file',\
1276 `text_file`+'.',sys_exit
1275 `text_file`+'.',sys_exit
1277
1276
1278 if opts.has_key('r'):
1277 if opts.has_key('r'):
1279 return stats
1278 return stats
1280 else:
1279 else:
1281 return None
1280 return None
1282
1281
1283 def magic_run(self, parameter_s ='',runner=None):
1282 def magic_run(self, parameter_s ='',runner=None):
1284 """Run the named file inside IPython as a program.
1283 """Run the named file inside IPython as a program.
1285
1284
1286 Usage:\\
1285 Usage:\\
1287 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1286 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1288
1287
1289 Parameters after the filename are passed as command-line arguments to
1288 Parameters after the filename are passed as command-line arguments to
1290 the program (put in sys.argv). Then, control returns to IPython's
1289 the program (put in sys.argv). Then, control returns to IPython's
1291 prompt.
1290 prompt.
1292
1291
1293 This is similar to running at a system prompt:\\
1292 This is similar to running at a system prompt:\\
1294 $ python file args\\
1293 $ python file args\\
1295 but with the advantage of giving you IPython's tracebacks, and of
1294 but with the advantage of giving you IPython's tracebacks, and of
1296 loading all variables into your interactive namespace for further use
1295 loading all variables into your interactive namespace for further use
1297 (unless -p is used, see below).
1296 (unless -p is used, see below).
1298
1297
1299 The file is executed in a namespace initially consisting only of
1298 The file is executed in a namespace initially consisting only of
1300 __name__=='__main__' and sys.argv constructed as indicated. It thus
1299 __name__=='__main__' and sys.argv constructed as indicated. It thus
1301 sees its environment as if it were being run as a stand-alone
1300 sees its environment as if it were being run as a stand-alone
1302 program. But after execution, the IPython interactive namespace gets
1301 program. But after execution, the IPython interactive namespace gets
1303 updated with all variables defined in the program (except for __name__
1302 updated with all variables defined in the program (except for __name__
1304 and sys.argv). This allows for very convenient loading of code for
1303 and sys.argv). This allows for very convenient loading of code for
1305 interactive work, while giving each program a 'clean sheet' to run in.
1304 interactive work, while giving each program a 'clean sheet' to run in.
1306
1305
1307 Options:
1306 Options:
1308
1307
1309 -n: __name__ is NOT set to '__main__', but to the running file's name
1308 -n: __name__ is NOT set to '__main__', but to the running file's name
1310 without extension (as python does under import). This allows running
1309 without extension (as python does under import). This allows running
1311 scripts and reloading the definitions in them without calling code
1310 scripts and reloading the definitions in them without calling code
1312 protected by an ' if __name__ == "__main__" ' clause.
1311 protected by an ' if __name__ == "__main__" ' clause.
1313
1312
1314 -i: run the file in IPython's namespace instead of an empty one. This
1313 -i: run the file in IPython's namespace instead of an empty one. This
1315 is useful if you are experimenting with code written in a text editor
1314 is useful if you are experimenting with code written in a text editor
1316 which depends on variables defined interactively.
1315 which depends on variables defined interactively.
1317
1316
1318 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1317 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1319 being run. This is particularly useful if IPython is being used to
1318 being run. This is particularly useful if IPython is being used to
1320 run unittests, which always exit with a sys.exit() call. In such
1319 run unittests, which always exit with a sys.exit() call. In such
1321 cases you are interested in the output of the test results, not in
1320 cases you are interested in the output of the test results, not in
1322 seeing a traceback of the unittest module.
1321 seeing a traceback of the unittest module.
1323
1322
1324 -t: print timing information at the end of the run. IPython will give
1323 -t: print timing information at the end of the run. IPython will give
1325 you an estimated CPU time consumption for your script, which under
1324 you an estimated CPU time consumption for your script, which under
1326 Unix uses the resource module to avoid the wraparound problems of
1325 Unix uses the resource module to avoid the wraparound problems of
1327 time.clock(). Under Unix, an estimate of time spent on system tasks
1326 time.clock(). Under Unix, an estimate of time spent on system tasks
1328 is also given (for Windows platforms this is reported as 0.0).
1327 is also given (for Windows platforms this is reported as 0.0).
1329
1328
1330 If -t is given, an additional -N<N> option can be given, where <N>
1329 If -t is given, an additional -N<N> option can be given, where <N>
1331 must be an integer indicating how many times you want the script to
1330 must be an integer indicating how many times you want the script to
1332 run. The final timing report will include total and per run results.
1331 run. The final timing report will include total and per run results.
1333
1332
1334 For example (testing the script uniq_stable.py):
1333 For example (testing the script uniq_stable.py):
1335
1334
1336 In [1]: run -t uniq_stable
1335 In [1]: run -t uniq_stable
1337
1336
1338 IPython CPU timings (estimated):\\
1337 IPython CPU timings (estimated):\\
1339 User : 0.19597 s.\\
1338 User : 0.19597 s.\\
1340 System: 0.0 s.\\
1339 System: 0.0 s.\\
1341
1340
1342 In [2]: run -t -N5 uniq_stable
1341 In [2]: run -t -N5 uniq_stable
1343
1342
1344 IPython CPU timings (estimated):\\
1343 IPython CPU timings (estimated):\\
1345 Total runs performed: 5\\
1344 Total runs performed: 5\\
1346 Times : Total Per run\\
1345 Times : Total Per run\\
1347 User : 0.910862 s, 0.1821724 s.\\
1346 User : 0.910862 s, 0.1821724 s.\\
1348 System: 0.0 s, 0.0 s.
1347 System: 0.0 s, 0.0 s.
1349
1348
1350 -d: run your program under the control of pdb, the Python debugger.
1349 -d: run your program under the control of pdb, the Python debugger.
1351 This allows you to execute your program step by step, watch variables,
1350 This allows you to execute your program step by step, watch variables,
1352 etc. Internally, what IPython does is similar to calling:
1351 etc. Internally, what IPython does is similar to calling:
1353
1352
1354 pdb.run('execfile("YOURFILENAME")')
1353 pdb.run('execfile("YOURFILENAME")')
1355
1354
1356 with a breakpoint set on line 1 of your file. You can change the line
1355 with a breakpoint set on line 1 of your file. You can change the line
1357 number for this automatic breakpoint to be <N> by using the -bN option
1356 number for this automatic breakpoint to be <N> by using the -bN option
1358 (where N must be an integer). For example:
1357 (where N must be an integer). For example:
1359
1358
1360 %run -d -b40 myscript
1359 %run -d -b40 myscript
1361
1360
1362 will set the first breakpoint at line 40 in myscript.py. Note that
1361 will set the first breakpoint at line 40 in myscript.py. Note that
1363 the first breakpoint must be set on a line which actually does
1362 the first breakpoint must be set on a line which actually does
1364 something (not a comment or docstring) for it to stop execution.
1363 something (not a comment or docstring) for it to stop execution.
1365
1364
1366 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1365 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1367 first enter 'c' (without qoutes) to start execution up to the first
1366 first enter 'c' (without qoutes) to start execution up to the first
1368 breakpoint.
1367 breakpoint.
1369
1368
1370 Entering 'help' gives information about the use of the debugger. You
1369 Entering 'help' gives information about the use of the debugger. You
1371 can easily see pdb's full documentation with "import pdb;pdb.help()"
1370 can easily see pdb's full documentation with "import pdb;pdb.help()"
1372 at a prompt.
1371 at a prompt.
1373
1372
1374 -p: run program under the control of the Python profiler module (which
1373 -p: run program under the control of the Python profiler module (which
1375 prints a detailed report of execution times, function calls, etc).
1374 prints a detailed report of execution times, function calls, etc).
1376
1375
1377 You can pass other options after -p which affect the behavior of the
1376 You can pass other options after -p which affect the behavior of the
1378 profiler itself. See the docs for %prun for details.
1377 profiler itself. See the docs for %prun for details.
1379
1378
1380 In this mode, the program's variables do NOT propagate back to the
1379 In this mode, the program's variables do NOT propagate back to the
1381 IPython interactive namespace (because they remain in the namespace
1380 IPython interactive namespace (because they remain in the namespace
1382 where the profiler executes them).
1381 where the profiler executes them).
1383
1382
1384 Internally this triggers a call to %prun, see its documentation for
1383 Internally this triggers a call to %prun, see its documentation for
1385 details on the options available specifically for profiling."""
1384 details on the options available specifically for profiling."""
1386
1385
1387 # get arguments and set sys.argv for program to be run.
1386 # get arguments and set sys.argv for program to be run.
1388 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1387 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1389 mode='list',list_all=1)
1388 mode='list',list_all=1)
1390
1389
1391 try:
1390 try:
1392 filename = get_py_filename(arg_lst[0])
1391 filename = get_py_filename(arg_lst[0])
1393 except IndexError:
1392 except IndexError:
1394 warn('you must provide at least a filename.')
1393 warn('you must provide at least a filename.')
1395 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1394 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1396 return
1395 return
1397 except IOError,msg:
1396 except IOError,msg:
1398 error(msg)
1397 error(msg)
1399 return
1398 return
1400
1399
1401 # Control the response to exit() calls made by the script being run
1400 # Control the response to exit() calls made by the script being run
1402 exit_ignore = opts.has_key('e')
1401 exit_ignore = opts.has_key('e')
1403
1402
1404 # Make sure that the running script gets a proper sys.argv as if it
1403 # Make sure that the running script gets a proper sys.argv as if it
1405 # were run from a system shell.
1404 # were run from a system shell.
1406 save_argv = sys.argv # save it for later restoring
1405 save_argv = sys.argv # save it for later restoring
1407 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1406 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1408
1407
1409 if opts.has_key('i'):
1408 if opts.has_key('i'):
1410 prog_ns = self.shell.user_ns
1409 prog_ns = self.shell.user_ns
1411 __name__save = self.shell.user_ns['__name__']
1410 __name__save = self.shell.user_ns['__name__']
1412 prog_ns['__name__'] = '__main__'
1411 prog_ns['__name__'] = '__main__'
1413 else:
1412 else:
1414 if opts.has_key('n'):
1413 if opts.has_key('n'):
1415 name = os.path.splitext(os.path.basename(filename))[0]
1414 name = os.path.splitext(os.path.basename(filename))[0]
1416 else:
1415 else:
1417 name = '__main__'
1416 name = '__main__'
1418 prog_ns = {'__name__':name}
1417 prog_ns = {'__name__':name}
1419
1418
1420 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1419 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1421 # set the __file__ global in the script's namespace
1420 # set the __file__ global in the script's namespace
1422 prog_ns['__file__'] = filename
1421 prog_ns['__file__'] = filename
1423
1422
1424 # pickle fix. See iplib for an explanation. But we need to make sure
1423 # pickle fix. See iplib for an explanation. But we need to make sure
1425 # that, if we overwrite __main__, we replace it at the end
1424 # that, if we overwrite __main__, we replace it at the end
1426 if prog_ns['__name__'] == '__main__':
1425 if prog_ns['__name__'] == '__main__':
1427 restore_main = sys.modules['__main__']
1426 restore_main = sys.modules['__main__']
1428 else:
1427 else:
1429 restore_main = False
1428 restore_main = False
1430
1429
1431 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1430 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1432
1431
1433 stats = None
1432 stats = None
1434 try:
1433 try:
1435 if opts.has_key('p'):
1434 if opts.has_key('p'):
1436 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1435 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1437 else:
1436 else:
1438 if opts.has_key('d'):
1437 if opts.has_key('d'):
1439 deb = Debugger.Pdb(self.shell.rc.colors)
1438 deb = Debugger.Pdb(self.shell.rc.colors)
1440 # reset Breakpoint state, which is moronically kept
1439 # reset Breakpoint state, which is moronically kept
1441 # in a class
1440 # in a class
1442 bdb.Breakpoint.next = 1
1441 bdb.Breakpoint.next = 1
1443 bdb.Breakpoint.bplist = {}
1442 bdb.Breakpoint.bplist = {}
1444 bdb.Breakpoint.bpbynumber = [None]
1443 bdb.Breakpoint.bpbynumber = [None]
1445 # Set an initial breakpoint to stop execution
1444 # Set an initial breakpoint to stop execution
1446 maxtries = 10
1445 maxtries = 10
1447 bp = int(opts.get('b',[1])[0])
1446 bp = int(opts.get('b',[1])[0])
1448 checkline = deb.checkline(filename,bp)
1447 checkline = deb.checkline(filename,bp)
1449 if not checkline:
1448 if not checkline:
1450 for bp in range(bp+1,bp+maxtries+1):
1449 for bp in range(bp+1,bp+maxtries+1):
1451 if deb.checkline(filename,bp):
1450 if deb.checkline(filename,bp):
1452 break
1451 break
1453 else:
1452 else:
1454 msg = ("\nI failed to find a valid line to set "
1453 msg = ("\nI failed to find a valid line to set "
1455 "a breakpoint\n"
1454 "a breakpoint\n"
1456 "after trying up to line: %s.\n"
1455 "after trying up to line: %s.\n"
1457 "Please set a valid breakpoint manually "
1456 "Please set a valid breakpoint manually "
1458 "with the -b option." % bp)
1457 "with the -b option." % bp)
1459 error(msg)
1458 error(msg)
1460 return
1459 return
1461 # if we find a good linenumber, set the breakpoint
1460 # if we find a good linenumber, set the breakpoint
1462 deb.do_break('%s:%s' % (filename,bp))
1461 deb.do_break('%s:%s' % (filename,bp))
1463 # Start file run
1462 # Start file run
1464 print "NOTE: Enter 'c' at the",
1463 print "NOTE: Enter 'c' at the",
1465 print "ipdb> prompt to start your script."
1464 print "ipdb> prompt to start your script."
1466 try:
1465 try:
1467 deb.run('execfile("%s")' % filename,prog_ns)
1466 deb.run('execfile("%s")' % filename,prog_ns)
1468 except:
1467 except:
1469 etype, value, tb = sys.exc_info()
1468 etype, value, tb = sys.exc_info()
1470 # Skip three frames in the traceback: the %run one,
1469 # Skip three frames in the traceback: the %run one,
1471 # one inside bdb.py, and the command-line typed by the
1470 # one inside bdb.py, and the command-line typed by the
1472 # user (run by exec in pdb itself).
1471 # user (run by exec in pdb itself).
1473 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1472 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1474 else:
1473 else:
1475 if runner is None:
1474 if runner is None:
1476 runner = self.shell.safe_execfile
1475 runner = self.shell.safe_execfile
1477 if opts.has_key('t'):
1476 if opts.has_key('t'):
1478 try:
1477 try:
1479 nruns = int(opts['N'][0])
1478 nruns = int(opts['N'][0])
1480 if nruns < 1:
1479 if nruns < 1:
1481 error('Number of runs must be >=1')
1480 error('Number of runs must be >=1')
1482 return
1481 return
1483 except (KeyError):
1482 except (KeyError):
1484 nruns = 1
1483 nruns = 1
1485 if nruns == 1:
1484 if nruns == 1:
1486 t0 = clock2()
1485 t0 = clock2()
1487 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1486 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1488 t1 = clock2()
1487 t1 = clock2()
1489 t_usr = t1[0]-t0[0]
1488 t_usr = t1[0]-t0[0]
1490 t_sys = t1[1]-t1[1]
1489 t_sys = t1[1]-t1[1]
1491 print "\nIPython CPU timings (estimated):"
1490 print "\nIPython CPU timings (estimated):"
1492 print " User : %10s s." % t_usr
1491 print " User : %10s s." % t_usr
1493 print " System: %10s s." % t_sys
1492 print " System: %10s s." % t_sys
1494 else:
1493 else:
1495 runs = range(nruns)
1494 runs = range(nruns)
1496 t0 = clock2()
1495 t0 = clock2()
1497 for nr in runs:
1496 for nr in runs:
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1497 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1499 t1 = clock2()
1498 t1 = clock2()
1500 t_usr = t1[0]-t0[0]
1499 t_usr = t1[0]-t0[0]
1501 t_sys = t1[1]-t1[1]
1500 t_sys = t1[1]-t1[1]
1502 print "\nIPython CPU timings (estimated):"
1501 print "\nIPython CPU timings (estimated):"
1503 print "Total runs performed:",nruns
1502 print "Total runs performed:",nruns
1504 print " Times : %10s %10s" % ('Total','Per run')
1503 print " Times : %10s %10s" % ('Total','Per run')
1505 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1504 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1506 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1505 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1507
1506
1508 else:
1507 else:
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1508 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1510 if opts.has_key('i'):
1509 if opts.has_key('i'):
1511 self.shell.user_ns['__name__'] = __name__save
1510 self.shell.user_ns['__name__'] = __name__save
1512 else:
1511 else:
1513 # update IPython interactive namespace
1512 # update IPython interactive namespace
1514 del prog_ns['__name__']
1513 del prog_ns['__name__']
1515 self.shell.user_ns.update(prog_ns)
1514 self.shell.user_ns.update(prog_ns)
1516 finally:
1515 finally:
1517 sys.argv = save_argv
1516 sys.argv = save_argv
1518 if restore_main:
1517 if restore_main:
1519 sys.modules['__main__'] = restore_main
1518 sys.modules['__main__'] = restore_main
1520 return stats
1519 return stats
1521
1520
1522 def magic_runlog(self, parameter_s =''):
1521 def magic_runlog(self, parameter_s =''):
1523 """Run files as logs.
1522 """Run files as logs.
1524
1523
1525 Usage:\\
1524 Usage:\\
1526 %runlog file1 file2 ...
1525 %runlog file1 file2 ...
1527
1526
1528 Run the named files (treating them as log files) in sequence inside
1527 Run the named files (treating them as log files) in sequence inside
1529 the interpreter, and return to the prompt. This is much slower than
1528 the interpreter, and return to the prompt. This is much slower than
1530 %run because each line is executed in a try/except block, but it
1529 %run because each line is executed in a try/except block, but it
1531 allows running files with syntax errors in them.
1530 allows running files with syntax errors in them.
1532
1531
1533 Normally IPython will guess when a file is one of its own logfiles, so
1532 Normally IPython will guess when a file is one of its own logfiles, so
1534 you can typically use %run even for logs. This shorthand allows you to
1533 you can typically use %run even for logs. This shorthand allows you to
1535 force any file to be treated as a log file."""
1534 force any file to be treated as a log file."""
1536
1535
1537 for f in parameter_s.split():
1536 for f in parameter_s.split():
1538 self.shell.safe_execfile(f,self.shell.user_ns,
1537 self.shell.safe_execfile(f,self.shell.user_ns,
1539 self.shell.user_ns,islog=1)
1538 self.shell.user_ns,islog=1)
1540
1539
1541 def magic_time(self,parameter_s = ''):
1540 def magic_time(self,parameter_s = ''):
1542 """Time execution of a Python statement or expression.
1541 """Time execution of a Python statement or expression.
1543
1542
1544 The CPU and wall clock times are printed, and the value of the
1543 The CPU and wall clock times are printed, and the value of the
1545 expression (if any) is returned. Note that under Win32, system time
1544 expression (if any) is returned. Note that under Win32, system time
1546 is always reported as 0, since it can not be measured.
1545 is always reported as 0, since it can not be measured.
1547
1546
1548 This function provides very basic timing functionality. In Python
1547 This function provides very basic timing functionality. In Python
1549 2.3, the timeit module offers more control and sophistication, but for
1548 2.3, the timeit module offers more control and sophistication, but for
1550 now IPython supports Python 2.2, so we can not rely on timeit being
1549 now IPython supports Python 2.2, so we can not rely on timeit being
1551 present.
1550 present.
1552
1551
1553 Some examples:
1552 Some examples:
1554
1553
1555 In [1]: time 2**128
1554 In [1]: time 2**128
1556 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1555 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1557 Wall time: 0.00
1556 Wall time: 0.00
1558 Out[1]: 340282366920938463463374607431768211456L
1557 Out[1]: 340282366920938463463374607431768211456L
1559
1558
1560 In [2]: n = 1000000
1559 In [2]: n = 1000000
1561
1560
1562 In [3]: time sum(range(n))
1561 In [3]: time sum(range(n))
1563 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1562 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1564 Wall time: 1.37
1563 Wall time: 1.37
1565 Out[3]: 499999500000L
1564 Out[3]: 499999500000L
1566
1565
1567 In [4]: time print 'hello world'
1566 In [4]: time print 'hello world'
1568 hello world
1567 hello world
1569 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1568 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1570 Wall time: 0.00
1569 Wall time: 0.00
1571 """
1570 """
1572
1571
1573 # fail immediately if the given expression can't be compiled
1572 # fail immediately if the given expression can't be compiled
1574 try:
1573 try:
1575 mode = 'eval'
1574 mode = 'eval'
1576 code = compile(parameter_s,'<timed eval>',mode)
1575 code = compile(parameter_s,'<timed eval>',mode)
1577 except SyntaxError:
1576 except SyntaxError:
1578 mode = 'exec'
1577 mode = 'exec'
1579 code = compile(parameter_s,'<timed exec>',mode)
1578 code = compile(parameter_s,'<timed exec>',mode)
1580 # skew measurement as little as possible
1579 # skew measurement as little as possible
1581 glob = self.shell.user_ns
1580 glob = self.shell.user_ns
1582 clk = clock2
1581 clk = clock2
1583 wtime = time.time
1582 wtime = time.time
1584 # time execution
1583 # time execution
1585 wall_st = wtime()
1584 wall_st = wtime()
1586 if mode=='eval':
1585 if mode=='eval':
1587 st = clk()
1586 st = clk()
1588 out = eval(code,glob)
1587 out = eval(code,glob)
1589 end = clk()
1588 end = clk()
1590 else:
1589 else:
1591 st = clk()
1590 st = clk()
1592 exec code in glob
1591 exec code in glob
1593 end = clk()
1592 end = clk()
1594 out = None
1593 out = None
1595 wall_end = wtime()
1594 wall_end = wtime()
1596 # Compute actual times and report
1595 # Compute actual times and report
1597 wall_time = wall_end-wall_st
1596 wall_time = wall_end-wall_st
1598 cpu_user = end[0]-st[0]
1597 cpu_user = end[0]-st[0]
1599 cpu_sys = end[1]-st[1]
1598 cpu_sys = end[1]-st[1]
1600 cpu_tot = cpu_user+cpu_sys
1599 cpu_tot = cpu_user+cpu_sys
1601 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1600 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1602 (cpu_user,cpu_sys,cpu_tot)
1601 (cpu_user,cpu_sys,cpu_tot)
1603 print "Wall time: %.2f" % wall_time
1602 print "Wall time: %.2f" % wall_time
1604 return out
1603 return out
1605
1604
1606 def magic_macro(self,parameter_s = ''):
1605 def magic_macro(self,parameter_s = ''):
1607 """Define a set of input lines as a macro for future re-execution.
1606 """Define a set of input lines as a macro for future re-execution.
1608
1607
1609 Usage:\\
1608 Usage:\\
1610 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1609 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1611
1610
1612 This will define a global variable called `name` which is a string
1611 This will define a global variable called `name` which is a string
1613 made of joining the slices and lines you specify (n1,n2,... numbers
1612 made of joining the slices and lines you specify (n1,n2,... numbers
1614 above) from your input history into a single string. This variable
1613 above) from your input history into a single string. This variable
1615 acts like an automatic function which re-executes those lines as if
1614 acts like an automatic function which re-executes those lines as if
1616 you had typed them. You just type 'name' at the prompt and the code
1615 you had typed them. You just type 'name' at the prompt and the code
1617 executes.
1616 executes.
1618
1617
1619 The notation for indicating number ranges is: n1-n2 means 'use line
1618 The notation for indicating number ranges is: n1-n2 means 'use line
1620 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1619 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1621 using the lines numbered 5,6 and 7.
1620 using the lines numbered 5,6 and 7.
1622
1621
1623 Note: as a 'hidden' feature, you can also use traditional python slice
1622 Note: as a 'hidden' feature, you can also use traditional python slice
1624 notation, where N:M means numbers N through M-1.
1623 notation, where N:M means numbers N through M-1.
1625
1624
1626 For example, if your history contains (%hist prints it):
1625 For example, if your history contains (%hist prints it):
1627
1626
1628 44: x=1\\
1627 44: x=1\\
1629 45: y=3\\
1628 45: y=3\\
1630 46: z=x+y\\
1629 46: z=x+y\\
1631 47: print x\\
1630 47: print x\\
1632 48: a=5\\
1631 48: a=5\\
1633 49: print 'x',x,'y',y\\
1632 49: print 'x',x,'y',y\\
1634
1633
1635 you can create a macro with lines 44 through 47 (included) and line 49
1634 you can create a macro with lines 44 through 47 (included) and line 49
1636 called my_macro with:
1635 called my_macro with:
1637
1636
1638 In [51]: %macro my_macro 44-47 49
1637 In [51]: %macro my_macro 44-47 49
1639
1638
1640 Now, typing `my_macro` (without quotes) will re-execute all this code
1639 Now, typing `my_macro` (without quotes) will re-execute all this code
1641 in one pass.
1640 in one pass.
1642
1641
1643 You don't need to give the line-numbers in order, and any given line
1642 You don't need to give the line-numbers in order, and any given line
1644 number can appear multiple times. You can assemble macros with any
1643 number can appear multiple times. You can assemble macros with any
1645 lines from your input history in any order.
1644 lines from your input history in any order.
1646
1645
1647 The macro is a simple object which holds its value in an attribute,
1646 The macro is a simple object which holds its value in an attribute,
1648 but IPython's display system checks for macros and executes them as
1647 but IPython's display system checks for macros and executes them as
1649 code instead of printing them when you type their name.
1648 code instead of printing them when you type their name.
1650
1649
1651 You can view a macro's contents by explicitly printing it with:
1650 You can view a macro's contents by explicitly printing it with:
1652
1651
1653 'print macro_name'.
1652 'print macro_name'.
1654
1653
1655 For one-off cases which DON'T contain magic function calls in them you
1654 For one-off cases which DON'T contain magic function calls in them you
1656 can obtain similar results by explicitly executing slices from your
1655 can obtain similar results by explicitly executing slices from your
1657 input history with:
1656 input history with:
1658
1657
1659 In [60]: exec In[44:48]+In[49]"""
1658 In [60]: exec In[44:48]+In[49]"""
1660
1659
1661 args = parameter_s.split()
1660 args = parameter_s.split()
1662 name,ranges = args[0], args[1:]
1661 name,ranges = args[0], args[1:]
1663 #print 'rng',ranges # dbg
1662 #print 'rng',ranges # dbg
1664 lines = self.extract_input_slices(ranges)
1663 lines = self.extract_input_slices(ranges)
1665 macro = Macro(lines)
1664 macro = Macro(lines)
1666 self.shell.user_ns.update({name:macro})
1665 self.shell.user_ns.update({name:macro})
1667 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1666 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1668 print 'Macro contents:'
1667 print 'Macro contents:'
1669 print macro,
1668 print macro,
1670
1669
1671 def magic_save(self,parameter_s = ''):
1670 def magic_save(self,parameter_s = ''):
1672 """Save a set of lines to a given filename.
1671 """Save a set of lines to a given filename.
1673
1672
1674 Usage:\\
1673 Usage:\\
1675 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1674 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1676
1675
1677 This function uses the same syntax as %macro for line extraction, but
1676 This function uses the same syntax as %macro for line extraction, but
1678 instead of creating a macro it saves the resulting string to the
1677 instead of creating a macro it saves the resulting string to the
1679 filename you specify.
1678 filename you specify.
1680
1679
1681 It adds a '.py' extension to the file if you don't do so yourself, and
1680 It adds a '.py' extension to the file if you don't do so yourself, and
1682 it asks for confirmation before overwriting existing files."""
1681 it asks for confirmation before overwriting existing files."""
1683
1682
1684 args = parameter_s.split()
1683 args = parameter_s.split()
1685 fname,ranges = args[0], args[1:]
1684 fname,ranges = args[0], args[1:]
1686 if not fname.endswith('.py'):
1685 if not fname.endswith('.py'):
1687 fname += '.py'
1686 fname += '.py'
1688 if os.path.isfile(fname):
1687 if os.path.isfile(fname):
1689 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1688 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1690 if ans.lower() not in ['y','yes']:
1689 if ans.lower() not in ['y','yes']:
1691 print 'Operation cancelled.'
1690 print 'Operation cancelled.'
1692 return
1691 return
1693 cmds = ''.join(self.extract_input_slices(ranges))
1692 cmds = ''.join(self.extract_input_slices(ranges))
1694 f = file(fname,'w')
1693 f = file(fname,'w')
1695 f.write(cmds)
1694 f.write(cmds)
1696 f.close()
1695 f.close()
1697 print 'The following commands were written to file `%s`:' % fname
1696 print 'The following commands were written to file `%s`:' % fname
1698 print cmds
1697 print cmds
1699
1698
1700 def _edit_macro(self,mname,macro):
1699 def _edit_macro(self,mname,macro):
1701 """open an editor with the macro data in a file"""
1700 """open an editor with the macro data in a file"""
1702 filename = self.shell.mktempfile(macro.value)
1701 filename = self.shell.mktempfile(macro.value)
1703 self.shell.hooks.editor(filename)
1702 self.shell.hooks.editor(filename)
1704
1703
1705 # and make a new macro object, to replace the old one
1704 # and make a new macro object, to replace the old one
1706 mfile = open(filename)
1705 mfile = open(filename)
1707 mvalue = mfile.read()
1706 mvalue = mfile.read()
1708 mfile.close()
1707 mfile.close()
1709 self.shell.user_ns[mname] = Macro(mvalue)
1708 self.shell.user_ns[mname] = Macro(mvalue)
1710
1709
1711 def magic_ed(self,parameter_s=''):
1710 def magic_ed(self,parameter_s=''):
1712 """Alias to %edit."""
1711 """Alias to %edit."""
1713 return self.magic_edit(parameter_s)
1712 return self.magic_edit(parameter_s)
1714
1713
1715 def magic_edit(self,parameter_s='',last_call=['','']):
1714 def magic_edit(self,parameter_s='',last_call=['','']):
1716 """Bring up an editor and execute the resulting code.
1715 """Bring up an editor and execute the resulting code.
1717
1716
1718 Usage:
1717 Usage:
1719 %edit [options] [args]
1718 %edit [options] [args]
1720
1719
1721 %edit runs IPython's editor hook. The default version of this hook is
1720 %edit runs IPython's editor hook. The default version of this hook is
1722 set to call the __IPYTHON__.rc.editor command. This is read from your
1721 set to call the __IPYTHON__.rc.editor command. This is read from your
1723 environment variable $EDITOR. If this isn't found, it will default to
1722 environment variable $EDITOR. If this isn't found, it will default to
1724 vi under Linux/Unix and to notepad under Windows. See the end of this
1723 vi under Linux/Unix and to notepad under Windows. See the end of this
1725 docstring for how to change the editor hook.
1724 docstring for how to change the editor hook.
1726
1725
1727 You can also set the value of this editor via the command line option
1726 You can also set the value of this editor via the command line option
1728 '-editor' or in your ipythonrc file. This is useful if you wish to use
1727 '-editor' or in your ipythonrc file. This is useful if you wish to use
1729 specifically for IPython an editor different from your typical default
1728 specifically for IPython an editor different from your typical default
1730 (and for Windows users who typically don't set environment variables).
1729 (and for Windows users who typically don't set environment variables).
1731
1730
1732 This command allows you to conveniently edit multi-line code right in
1731 This command allows you to conveniently edit multi-line code right in
1733 your IPython session.
1732 your IPython session.
1734
1733
1735 If called without arguments, %edit opens up an empty editor with a
1734 If called without arguments, %edit opens up an empty editor with a
1736 temporary file and will execute the contents of this file when you
1735 temporary file and will execute the contents of this file when you
1737 close it (don't forget to save it!).
1736 close it (don't forget to save it!).
1738
1737
1739
1738
1740 Options:
1739 Options:
1741
1740
1742 -p: this will call the editor with the same data as the previous time
1741 -p: this will call the editor with the same data as the previous time
1743 it was used, regardless of how long ago (in your current session) it
1742 it was used, regardless of how long ago (in your current session) it
1744 was.
1743 was.
1745
1744
1746 -x: do not execute the edited code immediately upon exit. This is
1745 -x: do not execute the edited code immediately upon exit. This is
1747 mainly useful if you are editing programs which need to be called with
1746 mainly useful if you are editing programs which need to be called with
1748 command line arguments, which you can then do using %run.
1747 command line arguments, which you can then do using %run.
1749
1748
1750
1749
1751 Arguments:
1750 Arguments:
1752
1751
1753 If arguments are given, the following possibilites exist:
1752 If arguments are given, the following possibilites exist:
1754
1753
1755 - The arguments are numbers or pairs of colon-separated numbers (like
1754 - The arguments are numbers or pairs of colon-separated numbers (like
1756 1 4:8 9). These are interpreted as lines of previous input to be
1755 1 4:8 9). These are interpreted as lines of previous input to be
1757 loaded into the editor. The syntax is the same of the %macro command.
1756 loaded into the editor. The syntax is the same of the %macro command.
1758
1757
1759 - If the argument doesn't start with a number, it is evaluated as a
1758 - If the argument doesn't start with a number, it is evaluated as a
1760 variable and its contents loaded into the editor. You can thus edit
1759 variable and its contents loaded into the editor. You can thus edit
1761 any string which contains python code (including the result of
1760 any string which contains python code (including the result of
1762 previous edits).
1761 previous edits).
1763
1762
1764 - If the argument is the name of an object (other than a string),
1763 - If the argument is the name of an object (other than a string),
1765 IPython will try to locate the file where it was defined and open the
1764 IPython will try to locate the file where it was defined and open the
1766 editor at the point where it is defined. You can use `%edit function`
1765 editor at the point where it is defined. You can use `%edit function`
1767 to load an editor exactly at the point where 'function' is defined,
1766 to load an editor exactly at the point where 'function' is defined,
1768 edit it and have the file be executed automatically.
1767 edit it and have the file be executed automatically.
1769
1768
1770 If the object is a macro (see %macro for details), this opens up your
1769 If the object is a macro (see %macro for details), this opens up your
1771 specified editor with a temporary file containing the macro's data.
1770 specified editor with a temporary file containing the macro's data.
1772 Upon exit, the macro is reloaded with the contents of the file.
1771 Upon exit, the macro is reloaded with the contents of the file.
1773
1772
1774 Note: opening at an exact line is only supported under Unix, and some
1773 Note: opening at an exact line is only supported under Unix, and some
1775 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1774 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1776 '+NUMBER' parameter necessary for this feature. Good editors like
1775 '+NUMBER' parameter necessary for this feature. Good editors like
1777 (X)Emacs, vi, jed, pico and joe all do.
1776 (X)Emacs, vi, jed, pico and joe all do.
1778
1777
1779 - If the argument is not found as a variable, IPython will look for a
1778 - If the argument is not found as a variable, IPython will look for a
1780 file with that name (adding .py if necessary) and load it into the
1779 file with that name (adding .py if necessary) and load it into the
1781 editor. It will execute its contents with execfile() when you exit,
1780 editor. It will execute its contents with execfile() when you exit,
1782 loading any code in the file into your interactive namespace.
1781 loading any code in the file into your interactive namespace.
1783
1782
1784 After executing your code, %edit will return as output the code you
1783 After executing your code, %edit will return as output the code you
1785 typed in the editor (except when it was an existing file). This way
1784 typed in the editor (except when it was an existing file). This way
1786 you can reload the code in further invocations of %edit as a variable,
1785 you can reload the code in further invocations of %edit as a variable,
1787 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1786 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1788 the output.
1787 the output.
1789
1788
1790 Note that %edit is also available through the alias %ed.
1789 Note that %edit is also available through the alias %ed.
1791
1790
1792 This is an example of creating a simple function inside the editor and
1791 This is an example of creating a simple function inside the editor and
1793 then modifying it. First, start up the editor:
1792 then modifying it. First, start up the editor:
1794
1793
1795 In [1]: ed\\
1794 In [1]: ed\\
1796 Editing... done. Executing edited code...\\
1795 Editing... done. Executing edited code...\\
1797 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1796 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1798
1797
1799 We can then call the function foo():
1798 We can then call the function foo():
1800
1799
1801 In [2]: foo()\\
1800 In [2]: foo()\\
1802 foo() was defined in an editing session
1801 foo() was defined in an editing session
1803
1802
1804 Now we edit foo. IPython automatically loads the editor with the
1803 Now we edit foo. IPython automatically loads the editor with the
1805 (temporary) file where foo() was previously defined:
1804 (temporary) file where foo() was previously defined:
1806
1805
1807 In [3]: ed foo\\
1806 In [3]: ed foo\\
1808 Editing... done. Executing edited code...
1807 Editing... done. Executing edited code...
1809
1808
1810 And if we call foo() again we get the modified version:
1809 And if we call foo() again we get the modified version:
1811
1810
1812 In [4]: foo()\\
1811 In [4]: foo()\\
1813 foo() has now been changed!
1812 foo() has now been changed!
1814
1813
1815 Here is an example of how to edit a code snippet successive
1814 Here is an example of how to edit a code snippet successive
1816 times. First we call the editor:
1815 times. First we call the editor:
1817
1816
1818 In [8]: ed\\
1817 In [8]: ed\\
1819 Editing... done. Executing edited code...\\
1818 Editing... done. Executing edited code...\\
1820 hello\\
1819 hello\\
1821 Out[8]: "print 'hello'\\n"
1820 Out[8]: "print 'hello'\\n"
1822
1821
1823 Now we call it again with the previous output (stored in _):
1822 Now we call it again with the previous output (stored in _):
1824
1823
1825 In [9]: ed _\\
1824 In [9]: ed _\\
1826 Editing... done. Executing edited code...\\
1825 Editing... done. Executing edited code...\\
1827 hello world\\
1826 hello world\\
1828 Out[9]: "print 'hello world'\\n"
1827 Out[9]: "print 'hello world'\\n"
1829
1828
1830 Now we call it with the output #8 (stored in _8, also as Out[8]):
1829 Now we call it with the output #8 (stored in _8, also as Out[8]):
1831
1830
1832 In [10]: ed _8\\
1831 In [10]: ed _8\\
1833 Editing... done. Executing edited code...\\
1832 Editing... done. Executing edited code...\\
1834 hello again\\
1833 hello again\\
1835 Out[10]: "print 'hello again'\\n"
1834 Out[10]: "print 'hello again'\\n"
1836
1835
1837
1836
1838 Changing the default editor hook:
1837 Changing the default editor hook:
1839
1838
1840 If you wish to write your own editor hook, you can put it in a
1839 If you wish to write your own editor hook, you can put it in a
1841 configuration file which you load at startup time. The default hook
1840 configuration file which you load at startup time. The default hook
1842 is defined in the IPython.hooks module, and you can use that as a
1841 is defined in the IPython.hooks module, and you can use that as a
1843 starting example for further modifications. That file also has
1842 starting example for further modifications. That file also has
1844 general instructions on how to set a new hook for use once you've
1843 general instructions on how to set a new hook for use once you've
1845 defined it."""
1844 defined it."""
1846
1845
1847 # FIXME: This function has become a convoluted mess. It needs a
1846 # FIXME: This function has become a convoluted mess. It needs a
1848 # ground-up rewrite with clean, simple logic.
1847 # ground-up rewrite with clean, simple logic.
1849
1848
1850 def make_filename(arg):
1849 def make_filename(arg):
1851 "Make a filename from the given args"
1850 "Make a filename from the given args"
1852 try:
1851 try:
1853 filename = get_py_filename(arg)
1852 filename = get_py_filename(arg)
1854 except IOError:
1853 except IOError:
1855 if args.endswith('.py'):
1854 if args.endswith('.py'):
1856 filename = arg
1855 filename = arg
1857 else:
1856 else:
1858 filename = None
1857 filename = None
1859 return filename
1858 return filename
1860
1859
1861 # custom exceptions
1860 # custom exceptions
1862 class DataIsObject(Exception): pass
1861 class DataIsObject(Exception): pass
1863
1862
1864 opts,args = self.parse_options(parameter_s,'px')
1863 opts,args = self.parse_options(parameter_s,'px')
1865
1864
1866 # Default line number value
1865 # Default line number value
1867 lineno = None
1866 lineno = None
1868 if opts.has_key('p'):
1867 if opts.has_key('p'):
1869 args = '_%s' % last_call[0]
1868 args = '_%s' % last_call[0]
1870 if not self.shell.user_ns.has_key(args):
1869 if not self.shell.user_ns.has_key(args):
1871 args = last_call[1]
1870 args = last_call[1]
1872
1871
1873 # use last_call to remember the state of the previous call, but don't
1872 # use last_call to remember the state of the previous call, but don't
1874 # let it be clobbered by successive '-p' calls.
1873 # let it be clobbered by successive '-p' calls.
1875 try:
1874 try:
1876 last_call[0] = self.shell.outputcache.prompt_count
1875 last_call[0] = self.shell.outputcache.prompt_count
1877 if not opts.has_key('p'):
1876 if not opts.has_key('p'):
1878 last_call[1] = parameter_s
1877 last_call[1] = parameter_s
1879 except:
1878 except:
1880 pass
1879 pass
1881
1880
1882 # by default this is done with temp files, except when the given
1881 # by default this is done with temp files, except when the given
1883 # arg is a filename
1882 # arg is a filename
1884 use_temp = 1
1883 use_temp = 1
1885
1884
1886 if re.match(r'\d',args):
1885 if re.match(r'\d',args):
1887 # Mode where user specifies ranges of lines, like in %macro.
1886 # Mode where user specifies ranges of lines, like in %macro.
1888 # This means that you can't edit files whose names begin with
1887 # This means that you can't edit files whose names begin with
1889 # numbers this way. Tough.
1888 # numbers this way. Tough.
1890 ranges = args.split()
1889 ranges = args.split()
1891 data = ''.join(self.extract_input_slices(ranges))
1890 data = ''.join(self.extract_input_slices(ranges))
1892 elif args.endswith('.py'):
1891 elif args.endswith('.py'):
1893 filename = make_filename(args)
1892 filename = make_filename(args)
1894 data = ''
1893 data = ''
1895 use_temp = 0
1894 use_temp = 0
1896 elif args:
1895 elif args:
1897 try:
1896 try:
1898 # Load the parameter given as a variable. If not a string,
1897 # Load the parameter given as a variable. If not a string,
1899 # process it as an object instead (below)
1898 # process it as an object instead (below)
1900
1899
1901 #print '*** args',args,'type',type(args) # dbg
1900 #print '*** args',args,'type',type(args) # dbg
1902 data = eval(args,self.shell.user_ns)
1901 data = eval(args,self.shell.user_ns)
1903 if not type(data) in StringTypes:
1902 if not type(data) in StringTypes:
1904 raise DataIsObject
1903 raise DataIsObject
1905
1904
1906 except (NameError,SyntaxError):
1905 except (NameError,SyntaxError):
1907 # given argument is not a variable, try as a filename
1906 # given argument is not a variable, try as a filename
1908 filename = make_filename(args)
1907 filename = make_filename(args)
1909 if filename is None:
1908 if filename is None:
1910 warn("Argument given (%s) can't be found as a variable "
1909 warn("Argument given (%s) can't be found as a variable "
1911 "or as a filename." % args)
1910 "or as a filename." % args)
1912 return
1911 return
1913
1912
1914 data = ''
1913 data = ''
1915 use_temp = 0
1914 use_temp = 0
1916 except DataIsObject:
1915 except DataIsObject:
1917
1916
1918 # macros have a special edit function
1917 # macros have a special edit function
1919 if isinstance(data,Macro):
1918 if isinstance(data,Macro):
1920 self._edit_macro(args,data)
1919 self._edit_macro(args,data)
1921 return
1920 return
1922
1921
1923 # For objects, try to edit the file where they are defined
1922 # For objects, try to edit the file where they are defined
1924 try:
1923 try:
1925 filename = inspect.getabsfile(data)
1924 filename = inspect.getabsfile(data)
1926 datafile = 1
1925 datafile = 1
1927 except TypeError:
1926 except TypeError:
1928 filename = make_filename(args)
1927 filename = make_filename(args)
1929 datafile = 1
1928 datafile = 1
1930 warn('Could not find file where `%s` is defined.\n'
1929 warn('Could not find file where `%s` is defined.\n'
1931 'Opening a file named `%s`' % (args,filename))
1930 'Opening a file named `%s`' % (args,filename))
1932 # Now, make sure we can actually read the source (if it was in
1931 # Now, make sure we can actually read the source (if it was in
1933 # a temp file it's gone by now).
1932 # a temp file it's gone by now).
1934 if datafile:
1933 if datafile:
1935 try:
1934 try:
1936 lineno = inspect.getsourcelines(data)[1]
1935 lineno = inspect.getsourcelines(data)[1]
1937 except IOError:
1936 except IOError:
1938 filename = make_filename(args)
1937 filename = make_filename(args)
1939 if filename is None:
1938 if filename is None:
1940 warn('The file `%s` where `%s` was defined cannot '
1939 warn('The file `%s` where `%s` was defined cannot '
1941 'be read.' % (filename,data))
1940 'be read.' % (filename,data))
1942 return
1941 return
1943 use_temp = 0
1942 use_temp = 0
1944 else:
1943 else:
1945 data = ''
1944 data = ''
1946
1945
1947 if use_temp:
1946 if use_temp:
1948 filename = self.shell.mktempfile(data)
1947 filename = self.shell.mktempfile(data)
1949 print 'IPython will make a temporary file named:',filename
1948 print 'IPython will make a temporary file named:',filename
1950
1949
1951 # do actual editing here
1950 # do actual editing here
1952 print 'Editing...',
1951 print 'Editing...',
1953 sys.stdout.flush()
1952 sys.stdout.flush()
1954 self.shell.hooks.editor(filename,lineno)
1953 self.shell.hooks.editor(filename,lineno)
1955 if opts.has_key('x'): # -x prevents actual execution
1954 if opts.has_key('x'): # -x prevents actual execution
1956 print
1955 print
1957 else:
1956 else:
1958 print 'done. Executing edited code...'
1957 print 'done. Executing edited code...'
1959 self.shell.safe_execfile(filename,self.shell.user_ns)
1958 self.shell.safe_execfile(filename,self.shell.user_ns)
1960 if use_temp:
1959 if use_temp:
1961 try:
1960 try:
1962 return open(filename).read()
1961 return open(filename).read()
1963 except IOError,msg:
1962 except IOError,msg:
1964 if msg.filename == filename:
1963 if msg.filename == filename:
1965 warn('File not found. Did you forget to save?')
1964 warn('File not found. Did you forget to save?')
1966 return
1965 return
1967 else:
1966 else:
1968 self.shell.showtraceback()
1967 self.shell.showtraceback()
1969
1968
1970 def magic_xmode(self,parameter_s = ''):
1969 def magic_xmode(self,parameter_s = ''):
1971 """Switch modes for the exception handlers.
1970 """Switch modes for the exception handlers.
1972
1971
1973 Valid modes: Plain, Context and Verbose.
1972 Valid modes: Plain, Context and Verbose.
1974
1973
1975 If called without arguments, acts as a toggle."""
1974 If called without arguments, acts as a toggle."""
1976
1975
1977 def xmode_switch_err(name):
1976 def xmode_switch_err(name):
1978 warn('Error changing %s exception modes.\n%s' %
1977 warn('Error changing %s exception modes.\n%s' %
1979 (name,sys.exc_info()[1]))
1978 (name,sys.exc_info()[1]))
1980
1979
1981 shell = self.shell
1980 shell = self.shell
1982 new_mode = parameter_s.strip().capitalize()
1981 new_mode = parameter_s.strip().capitalize()
1983 try:
1982 try:
1984 shell.InteractiveTB.set_mode(mode=new_mode)
1983 shell.InteractiveTB.set_mode(mode=new_mode)
1985 print 'Exception reporting mode:',shell.InteractiveTB.mode
1984 print 'Exception reporting mode:',shell.InteractiveTB.mode
1986 except:
1985 except:
1987 xmode_switch_err('user')
1986 xmode_switch_err('user')
1988
1987
1989 # threaded shells use a special handler in sys.excepthook
1988 # threaded shells use a special handler in sys.excepthook
1990 if shell.isthreaded:
1989 if shell.isthreaded:
1991 try:
1990 try:
1992 shell.sys_excepthook.set_mode(mode=new_mode)
1991 shell.sys_excepthook.set_mode(mode=new_mode)
1993 except:
1992 except:
1994 xmode_switch_err('threaded')
1993 xmode_switch_err('threaded')
1995
1994
1996 def magic_colors(self,parameter_s = ''):
1995 def magic_colors(self,parameter_s = ''):
1997 """Switch color scheme for prompts, info system and exception handlers.
1996 """Switch color scheme for prompts, info system and exception handlers.
1998
1997
1999 Currently implemented schemes: NoColor, Linux, LightBG.
1998 Currently implemented schemes: NoColor, Linux, LightBG.
2000
1999
2001 Color scheme names are not case-sensitive."""
2000 Color scheme names are not case-sensitive."""
2002
2001
2003 def color_switch_err(name):
2002 def color_switch_err(name):
2004 warn('Error changing %s color schemes.\n%s' %
2003 warn('Error changing %s color schemes.\n%s' %
2005 (name,sys.exc_info()[1]))
2004 (name,sys.exc_info()[1]))
2006
2005
2007
2006
2008 new_scheme = parameter_s.strip()
2007 new_scheme = parameter_s.strip()
2009 if not new_scheme:
2008 if not new_scheme:
2010 print 'You must specify a color scheme.'
2009 print 'You must specify a color scheme.'
2011 return
2010 return
2012 # Under Windows, check for Gary Bishop's readline, which is necessary
2011 # Under Windows, check for Gary Bishop's readline, which is necessary
2013 # for ANSI coloring
2012 # for ANSI coloring
2014 if os.name in ['nt','dos']:
2013 if os.name in ['nt','dos']:
2015 try:
2014 try:
2016 import readline
2015 import readline
2017 except ImportError:
2016 except ImportError:
2018 has_readline = 0
2017 has_readline = 0
2019 else:
2018 else:
2020 try:
2019 try:
2021 readline.GetOutputFile()
2020 readline.GetOutputFile()
2022 except AttributeError:
2021 except AttributeError:
2023 has_readline = 0
2022 has_readline = 0
2024 else:
2023 else:
2025 has_readline = 1
2024 has_readline = 1
2026 if not has_readline:
2025 if not has_readline:
2027 msg = """\
2026 msg = """\
2028 Proper color support under MS Windows requires Gary Bishop's readline library.
2027 Proper color support under MS Windows requires Gary Bishop's readline library.
2029 You can find it at:
2028 You can find it at:
2030 http://sourceforge.net/projects/uncpythontools
2029 http://sourceforge.net/projects/uncpythontools
2031 Gary's readline needs the ctypes module, from:
2030 Gary's readline needs the ctypes module, from:
2032 http://starship.python.net/crew/theller/ctypes
2031 http://starship.python.net/crew/theller/ctypes
2033
2032
2034 Defaulting color scheme to 'NoColor'"""
2033 Defaulting color scheme to 'NoColor'"""
2035 new_scheme = 'NoColor'
2034 new_scheme = 'NoColor'
2036 warn(msg)
2035 warn(msg)
2037 # local shortcut
2036 # local shortcut
2038 shell = self.shell
2037 shell = self.shell
2039
2038
2040 # Set prompt colors
2039 # Set prompt colors
2041 try:
2040 try:
2042 shell.outputcache.set_colors(new_scheme)
2041 shell.outputcache.set_colors(new_scheme)
2043 except:
2042 except:
2044 color_switch_err('prompt')
2043 color_switch_err('prompt')
2045 else:
2044 else:
2046 shell.rc.colors = \
2045 shell.rc.colors = \
2047 shell.outputcache.color_table.active_scheme_name
2046 shell.outputcache.color_table.active_scheme_name
2048 # Set exception colors
2047 # Set exception colors
2049 try:
2048 try:
2050 shell.InteractiveTB.set_colors(scheme = new_scheme)
2049 shell.InteractiveTB.set_colors(scheme = new_scheme)
2051 shell.SyntaxTB.set_colors(scheme = new_scheme)
2050 shell.SyntaxTB.set_colors(scheme = new_scheme)
2052 except:
2051 except:
2053 color_switch_err('exception')
2052 color_switch_err('exception')
2054
2053
2055 # threaded shells use a verbose traceback in sys.excepthook
2054 # threaded shells use a verbose traceback in sys.excepthook
2056 if shell.isthreaded:
2055 if shell.isthreaded:
2057 try:
2056 try:
2058 shell.sys_excepthook.set_colors(scheme=new_scheme)
2057 shell.sys_excepthook.set_colors(scheme=new_scheme)
2059 except:
2058 except:
2060 color_switch_err('system exception handler')
2059 color_switch_err('system exception handler')
2061
2060
2062 # Set info (for 'object?') colors
2061 # Set info (for 'object?') colors
2063 if shell.rc.color_info:
2062 if shell.rc.color_info:
2064 try:
2063 try:
2065 shell.inspector.set_active_scheme(new_scheme)
2064 shell.inspector.set_active_scheme(new_scheme)
2066 except:
2065 except:
2067 color_switch_err('object inspector')
2066 color_switch_err('object inspector')
2068 else:
2067 else:
2069 shell.inspector.set_active_scheme('NoColor')
2068 shell.inspector.set_active_scheme('NoColor')
2070
2069
2071 def magic_color_info(self,parameter_s = ''):
2070 def magic_color_info(self,parameter_s = ''):
2072 """Toggle color_info.
2071 """Toggle color_info.
2073
2072
2074 The color_info configuration parameter controls whether colors are
2073 The color_info configuration parameter controls whether colors are
2075 used for displaying object details (by things like %psource, %pfile or
2074 used for displaying object details (by things like %psource, %pfile or
2076 the '?' system). This function toggles this value with each call.
2075 the '?' system). This function toggles this value with each call.
2077
2076
2078 Note that unless you have a fairly recent pager (less works better
2077 Note that unless you have a fairly recent pager (less works better
2079 than more) in your system, using colored object information displays
2078 than more) in your system, using colored object information displays
2080 will not work properly. Test it and see."""
2079 will not work properly. Test it and see."""
2081
2080
2082 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2081 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2083 self.magic_colors(self.shell.rc.colors)
2082 self.magic_colors(self.shell.rc.colors)
2084 print 'Object introspection functions have now coloring:',
2083 print 'Object introspection functions have now coloring:',
2085 print ['OFF','ON'][self.shell.rc.color_info]
2084 print ['OFF','ON'][self.shell.rc.color_info]
2086
2085
2087 def magic_Pprint(self, parameter_s=''):
2086 def magic_Pprint(self, parameter_s=''):
2088 """Toggle pretty printing on/off."""
2087 """Toggle pretty printing on/off."""
2089
2088
2090 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2089 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2091 print 'Pretty printing has been turned', \
2090 print 'Pretty printing has been turned', \
2092 ['OFF','ON'][self.shell.outputcache.Pprint]
2091 ['OFF','ON'][self.shell.outputcache.Pprint]
2093
2092
2094 def magic_exit(self, parameter_s=''):
2093 def magic_exit(self, parameter_s=''):
2095 """Exit IPython, confirming if configured to do so.
2094 """Exit IPython, confirming if configured to do so.
2096
2095
2097 You can configure whether IPython asks for confirmation upon exit by
2096 You can configure whether IPython asks for confirmation upon exit by
2098 setting the confirm_exit flag in the ipythonrc file."""
2097 setting the confirm_exit flag in the ipythonrc file."""
2099
2098
2100 self.shell.exit()
2099 self.shell.exit()
2101
2100
2102 def magic_quit(self, parameter_s=''):
2101 def magic_quit(self, parameter_s=''):
2103 """Exit IPython, confirming if configured to do so (like %exit)"""
2102 """Exit IPython, confirming if configured to do so (like %exit)"""
2104
2103
2105 self.shell.exit()
2104 self.shell.exit()
2106
2105
2107 def magic_Exit(self, parameter_s=''):
2106 def magic_Exit(self, parameter_s=''):
2108 """Exit IPython without confirmation."""
2107 """Exit IPython without confirmation."""
2109
2108
2110 self.shell.exit_now = True
2109 self.shell.exit_now = True
2111
2110
2112 def magic_Quit(self, parameter_s=''):
2111 def magic_Quit(self, parameter_s=''):
2113 """Exit IPython without confirmation (like %Exit)."""
2112 """Exit IPython without confirmation (like %Exit)."""
2114
2113
2115 self.shell.exit_now = True
2114 self.shell.exit_now = True
2116
2115
2117 #......................................................................
2116 #......................................................................
2118 # Functions to implement unix shell-type things
2117 # Functions to implement unix shell-type things
2119
2118
2120 def magic_alias(self, parameter_s = ''):
2119 def magic_alias(self, parameter_s = ''):
2121 """Define an alias for a system command.
2120 """Define an alias for a system command.
2122
2121
2123 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2122 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2124
2123
2125 Then, typing 'alias_name params' will execute the system command 'cmd
2124 Then, typing 'alias_name params' will execute the system command 'cmd
2126 params' (from your underlying operating system).
2125 params' (from your underlying operating system).
2127
2126
2128 Aliases have lower precedence than magic functions and Python normal
2127 Aliases have lower precedence than magic functions and Python normal
2129 variables, so if 'foo' is both a Python variable and an alias, the
2128 variables, so if 'foo' is both a Python variable and an alias, the
2130 alias can not be executed until 'del foo' removes the Python variable.
2129 alias can not be executed until 'del foo' removes the Python variable.
2131
2130
2132 You can use the %l specifier in an alias definition to represent the
2131 You can use the %l specifier in an alias definition to represent the
2133 whole line when the alias is called. For example:
2132 whole line when the alias is called. For example:
2134
2133
2135 In [2]: alias all echo "Input in brackets: <%l>"\\
2134 In [2]: alias all echo "Input in brackets: <%l>"\\
2136 In [3]: all hello world\\
2135 In [3]: all hello world\\
2137 Input in brackets: <hello world>
2136 Input in brackets: <hello world>
2138
2137
2139 You can also define aliases with parameters using %s specifiers (one
2138 You can also define aliases with parameters using %s specifiers (one
2140 per parameter):
2139 per parameter):
2141
2140
2142 In [1]: alias parts echo first %s second %s\\
2141 In [1]: alias parts echo first %s second %s\\
2143 In [2]: %parts A B\\
2142 In [2]: %parts A B\\
2144 first A second B\\
2143 first A second B\\
2145 In [3]: %parts A\\
2144 In [3]: %parts A\\
2146 Incorrect number of arguments: 2 expected.\\
2145 Incorrect number of arguments: 2 expected.\\
2147 parts is an alias to: 'echo first %s second %s'
2146 parts is an alias to: 'echo first %s second %s'
2148
2147
2149 Note that %l and %s are mutually exclusive. You can only use one or
2148 Note that %l and %s are mutually exclusive. You can only use one or
2150 the other in your aliases.
2149 the other in your aliases.
2151
2150
2152 Aliases expand Python variables just like system calls using ! or !!
2151 Aliases expand Python variables just like system calls using ! or !!
2153 do: all expressions prefixed with '$' get expanded. For details of
2152 do: all expressions prefixed with '$' get expanded. For details of
2154 the semantic rules, see PEP-215:
2153 the semantic rules, see PEP-215:
2155 http://www.python.org/peps/pep-0215.html. This is the library used by
2154 http://www.python.org/peps/pep-0215.html. This is the library used by
2156 IPython for variable expansion. If you want to access a true shell
2155 IPython for variable expansion. If you want to access a true shell
2157 variable, an extra $ is necessary to prevent its expansion by IPython:
2156 variable, an extra $ is necessary to prevent its expansion by IPython:
2158
2157
2159 In [6]: alias show echo\\
2158 In [6]: alias show echo\\
2160 In [7]: PATH='A Python string'\\
2159 In [7]: PATH='A Python string'\\
2161 In [8]: show $PATH\\
2160 In [8]: show $PATH\\
2162 A Python string\\
2161 A Python string\\
2163 In [9]: show $$PATH\\
2162 In [9]: show $$PATH\\
2164 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2163 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2165
2164
2166 You can use the alias facility to acess all of $PATH. See the %rehash
2165 You can use the alias facility to acess all of $PATH. See the %rehash
2167 and %rehashx functions, which automatically create aliases for the
2166 and %rehashx functions, which automatically create aliases for the
2168 contents of your $PATH.
2167 contents of your $PATH.
2169
2168
2170 If called with no parameters, %alias prints the current alias table."""
2169 If called with no parameters, %alias prints the current alias table."""
2171
2170
2172 par = parameter_s.strip()
2171 par = parameter_s.strip()
2173 if not par:
2172 if not par:
2174 if self.shell.rc.automagic:
2173 if self.shell.rc.automagic:
2175 prechar = ''
2174 prechar = ''
2176 else:
2175 else:
2177 prechar = self.shell.ESC_MAGIC
2176 prechar = self.shell.ESC_MAGIC
2178 #print 'Alias\t\tSystem Command\n'+'-'*30
2177 #print 'Alias\t\tSystem Command\n'+'-'*30
2179 atab = self.shell.alias_table
2178 atab = self.shell.alias_table
2180 aliases = atab.keys()
2179 aliases = atab.keys()
2181 aliases.sort()
2180 aliases.sort()
2182 res = []
2181 res = []
2183 for alias in aliases:
2182 for alias in aliases:
2184 res.append((alias, atab[alias][1]))
2183 res.append((alias, atab[alias][1]))
2185 print "Total number of aliases:",len(aliases)
2184 print "Total number of aliases:",len(aliases)
2186 return res
2185 return res
2187 try:
2186 try:
2188 alias,cmd = par.split(None,1)
2187 alias,cmd = par.split(None,1)
2189 except:
2188 except:
2190 print OInspect.getdoc(self.magic_alias)
2189 print OInspect.getdoc(self.magic_alias)
2191 else:
2190 else:
2192 nargs = cmd.count('%s')
2191 nargs = cmd.count('%s')
2193 if nargs>0 and cmd.find('%l')>=0:
2192 if nargs>0 and cmd.find('%l')>=0:
2194 error('The %s and %l specifiers are mutually exclusive '
2193 error('The %s and %l specifiers are mutually exclusive '
2195 'in alias definitions.')
2194 'in alias definitions.')
2196 else: # all looks OK
2195 else: # all looks OK
2197 self.shell.alias_table[alias] = (nargs,cmd)
2196 self.shell.alias_table[alias] = (nargs,cmd)
2198 self.shell.alias_table_validate(verbose=1)
2197 self.shell.alias_table_validate(verbose=1)
2199 # end magic_alias
2198 # end magic_alias
2200
2199
2201 def magic_unalias(self, parameter_s = ''):
2200 def magic_unalias(self, parameter_s = ''):
2202 """Remove an alias"""
2201 """Remove an alias"""
2203
2202
2204 aname = parameter_s.strip()
2203 aname = parameter_s.strip()
2205 if aname in self.shell.alias_table:
2204 if aname in self.shell.alias_table:
2206 del self.shell.alias_table[aname]
2205 del self.shell.alias_table[aname]
2207
2206
2208 def magic_rehash(self, parameter_s = ''):
2207 def magic_rehash(self, parameter_s = ''):
2209 """Update the alias table with all entries in $PATH.
2208 """Update the alias table with all entries in $PATH.
2210
2209
2211 This version does no checks on execute permissions or whether the
2210 This version does no checks on execute permissions or whether the
2212 contents of $PATH are truly files (instead of directories or something
2211 contents of $PATH are truly files (instead of directories or something
2213 else). For such a safer (but slower) version, use %rehashx."""
2212 else). For such a safer (but slower) version, use %rehashx."""
2214
2213
2215 # This function (and rehashx) manipulate the alias_table directly
2214 # This function (and rehashx) manipulate the alias_table directly
2216 # rather than calling magic_alias, for speed reasons. A rehash on a
2215 # rather than calling magic_alias, for speed reasons. A rehash on a
2217 # typical Linux box involves several thousand entries, so efficiency
2216 # typical Linux box involves several thousand entries, so efficiency
2218 # here is a top concern.
2217 # here is a top concern.
2219
2218
2220 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2219 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2221 alias_table = self.shell.alias_table
2220 alias_table = self.shell.alias_table
2222 for pdir in path:
2221 for pdir in path:
2223 for ff in os.listdir(pdir):
2222 for ff in os.listdir(pdir):
2224 # each entry in the alias table must be (N,name), where
2223 # each entry in the alias table must be (N,name), where
2225 # N is the number of positional arguments of the alias.
2224 # N is the number of positional arguments of the alias.
2226 alias_table[ff] = (0,ff)
2225 alias_table[ff] = (0,ff)
2227 # Make sure the alias table doesn't contain keywords or builtins
2226 # Make sure the alias table doesn't contain keywords or builtins
2228 self.shell.alias_table_validate()
2227 self.shell.alias_table_validate()
2229 # Call again init_auto_alias() so we get 'rm -i' and other modified
2228 # Call again init_auto_alias() so we get 'rm -i' and other modified
2230 # aliases since %rehash will probably clobber them
2229 # aliases since %rehash will probably clobber them
2231 self.shell.init_auto_alias()
2230 self.shell.init_auto_alias()
2232
2231
2233 def magic_rehashx(self, parameter_s = ''):
2232 def magic_rehashx(self, parameter_s = ''):
2234 """Update the alias table with all executable files in $PATH.
2233 """Update the alias table with all executable files in $PATH.
2235
2234
2236 This version explicitly checks that every entry in $PATH is a file
2235 This version explicitly checks that every entry in $PATH is a file
2237 with execute access (os.X_OK), so it is much slower than %rehash.
2236 with execute access (os.X_OK), so it is much slower than %rehash.
2238
2237
2239 Under Windows, it checks executability as a match agains a
2238 Under Windows, it checks executability as a match agains a
2240 '|'-separated string of extensions, stored in the IPython config
2239 '|'-separated string of extensions, stored in the IPython config
2241 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2240 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2242
2241
2243 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2242 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2244 alias_table = self.shell.alias_table
2243 alias_table = self.shell.alias_table
2245
2244
2246 if os.name == 'posix':
2245 if os.name == 'posix':
2247 isexec = lambda fname:os.path.isfile(fname) and \
2246 isexec = lambda fname:os.path.isfile(fname) and \
2248 os.access(fname,os.X_OK)
2247 os.access(fname,os.X_OK)
2249 else:
2248 else:
2250
2249
2251 try:
2250 try:
2252 winext = os.environ['pathext'].replace(';','|').replace('.','')
2251 winext = os.environ['pathext'].replace(';','|').replace('.','')
2253 except KeyError:
2252 except KeyError:
2254 winext = 'exe|com|bat'
2253 winext = 'exe|com|bat'
2255
2254
2256 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2255 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2257 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2256 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2258 savedir = os.getcwd()
2257 savedir = os.getcwd()
2259 try:
2258 try:
2260 # write the whole loop for posix/Windows so we don't have an if in
2259 # write the whole loop for posix/Windows so we don't have an if in
2261 # the innermost part
2260 # the innermost part
2262 if os.name == 'posix':
2261 if os.name == 'posix':
2263 for pdir in path:
2262 for pdir in path:
2264 os.chdir(pdir)
2263 os.chdir(pdir)
2265 for ff in os.listdir(pdir):
2264 for ff in os.listdir(pdir):
2266 if isexec(ff):
2265 if isexec(ff):
2267 # each entry in the alias table must be (N,name),
2266 # each entry in the alias table must be (N,name),
2268 # where N is the number of positional arguments of the
2267 # where N is the number of positional arguments of the
2269 # alias.
2268 # alias.
2270 alias_table[ff] = (0,ff)
2269 alias_table[ff] = (0,ff)
2271 else:
2270 else:
2272 for pdir in path:
2271 for pdir in path:
2273 os.chdir(pdir)
2272 os.chdir(pdir)
2274 for ff in os.listdir(pdir):
2273 for ff in os.listdir(pdir):
2275 if isexec(ff):
2274 if isexec(ff):
2276 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2275 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2277 # Make sure the alias table doesn't contain keywords or builtins
2276 # Make sure the alias table doesn't contain keywords or builtins
2278 self.shell.alias_table_validate()
2277 self.shell.alias_table_validate()
2279 # Call again init_auto_alias() so we get 'rm -i' and other
2278 # Call again init_auto_alias() so we get 'rm -i' and other
2280 # modified aliases since %rehashx will probably clobber them
2279 # modified aliases since %rehashx will probably clobber them
2281 self.shell.init_auto_alias()
2280 self.shell.init_auto_alias()
2282 finally:
2281 finally:
2283 os.chdir(savedir)
2282 os.chdir(savedir)
2284
2283
2285 def magic_pwd(self, parameter_s = ''):
2284 def magic_pwd(self, parameter_s = ''):
2286 """Return the current working directory path."""
2285 """Return the current working directory path."""
2287 return os.getcwd()
2286 return os.getcwd()
2288
2287
2289 def magic_cd(self, parameter_s=''):
2288 def magic_cd(self, parameter_s=''):
2290 """Change the current working directory.
2289 """Change the current working directory.
2291
2290
2292 This command automatically maintains an internal list of directories
2291 This command automatically maintains an internal list of directories
2293 you visit during your IPython session, in the variable _dh. The
2292 you visit during your IPython session, in the variable _dh. The
2294 command %dhist shows this history nicely formatted.
2293 command %dhist shows this history nicely formatted.
2295
2294
2296 Usage:
2295 Usage:
2297
2296
2298 cd 'dir': changes to directory 'dir'.
2297 cd 'dir': changes to directory 'dir'.
2299
2298
2300 cd -: changes to the last visited directory.
2299 cd -: changes to the last visited directory.
2301
2300
2302 cd -<n>: changes to the n-th directory in the directory history.
2301 cd -<n>: changes to the n-th directory in the directory history.
2303
2302
2304 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2303 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2305 (note: cd <bookmark_name> is enough if there is no
2304 (note: cd <bookmark_name> is enough if there is no
2306 directory <bookmark_name>, but a bookmark with the name exists.)
2305 directory <bookmark_name>, but a bookmark with the name exists.)
2307
2306
2308 Options:
2307 Options:
2309
2308
2310 -q: quiet. Do not print the working directory after the cd command is
2309 -q: quiet. Do not print the working directory after the cd command is
2311 executed. By default IPython's cd command does print this directory,
2310 executed. By default IPython's cd command does print this directory,
2312 since the default prompts do not display path information.
2311 since the default prompts do not display path information.
2313
2312
2314 Note that !cd doesn't work for this purpose because the shell where
2313 Note that !cd doesn't work for this purpose because the shell where
2315 !command runs is immediately discarded after executing 'command'."""
2314 !command runs is immediately discarded after executing 'command'."""
2316
2315
2317 parameter_s = parameter_s.strip()
2316 parameter_s = parameter_s.strip()
2318 bkms = self.shell.persist.get("bookmarks",{})
2317 bkms = self.shell.persist.get("bookmarks",{})
2319
2318
2320 numcd = re.match(r'(-)(\d+)$',parameter_s)
2319 numcd = re.match(r'(-)(\d+)$',parameter_s)
2321 # jump in directory history by number
2320 # jump in directory history by number
2322 if numcd:
2321 if numcd:
2323 nn = int(numcd.group(2))
2322 nn = int(numcd.group(2))
2324 try:
2323 try:
2325 ps = self.shell.user_ns['_dh'][nn]
2324 ps = self.shell.user_ns['_dh'][nn]
2326 except IndexError:
2325 except IndexError:
2327 print 'The requested directory does not exist in history.'
2326 print 'The requested directory does not exist in history.'
2328 return
2327 return
2329 else:
2328 else:
2330 opts = {}
2329 opts = {}
2331 else:
2330 else:
2332 #turn all non-space-escaping backslashes to slashes,
2331 #turn all non-space-escaping backslashes to slashes,
2333 # for c:\windows\directory\names\
2332 # for c:\windows\directory\names\
2334 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2333 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2335 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2334 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2336 # jump to previous
2335 # jump to previous
2337 if ps == '-':
2336 if ps == '-':
2338 try:
2337 try:
2339 ps = self.shell.user_ns['_dh'][-2]
2338 ps = self.shell.user_ns['_dh'][-2]
2340 except IndexError:
2339 except IndexError:
2341 print 'No previous directory to change to.'
2340 print 'No previous directory to change to.'
2342 return
2341 return
2343 # jump to bookmark
2342 # jump to bookmark
2344 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2343 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2345 if bkms.has_key(ps):
2344 if bkms.has_key(ps):
2346 target = bkms[ps]
2345 target = bkms[ps]
2347 print '(bookmark:%s) -> %s' % (ps,target)
2346 print '(bookmark:%s) -> %s' % (ps,target)
2348 ps = target
2347 ps = target
2349 else:
2348 else:
2350 if bkms:
2349 if bkms:
2351 error("Bookmark '%s' not found. "
2350 error("Bookmark '%s' not found. "
2352 "Use '%%bookmark -l' to see your bookmarks." % ps)
2351 "Use '%%bookmark -l' to see your bookmarks." % ps)
2353 else:
2352 else:
2354 print "Bookmarks not set - use %bookmark <bookmarkname>"
2353 print "Bookmarks not set - use %bookmark <bookmarkname>"
2355 return
2354 return
2356
2355
2357 # at this point ps should point to the target dir
2356 # at this point ps should point to the target dir
2358 if ps:
2357 if ps:
2359 try:
2358 try:
2360 os.chdir(os.path.expanduser(ps))
2359 os.chdir(os.path.expanduser(ps))
2361 ttitle = ("IPy:" + (
2360 ttitle = ("IPy:" + (
2362 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2361 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2363 platutils.set_term_title(ttitle)
2362 platutils.set_term_title(ttitle)
2364 except OSError:
2363 except OSError:
2365 print sys.exc_info()[1]
2364 print sys.exc_info()[1]
2366 else:
2365 else:
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2366 self.shell.user_ns['_dh'].append(os.getcwd())
2368 else:
2367 else:
2369 os.chdir(self.shell.home_dir)
2368 os.chdir(self.shell.home_dir)
2370 platutils.set_term_title("IPy:~")
2369 platutils.set_term_title("IPy:~")
2371 self.shell.user_ns['_dh'].append(os.getcwd())
2370 self.shell.user_ns['_dh'].append(os.getcwd())
2372 if not 'q' in opts:
2371 if not 'q' in opts:
2373 print self.shell.user_ns['_dh'][-1]
2372 print self.shell.user_ns['_dh'][-1]
2374
2373
2375 def magic_dhist(self, parameter_s=''):
2374 def magic_dhist(self, parameter_s=''):
2376 """Print your history of visited directories.
2375 """Print your history of visited directories.
2377
2376
2378 %dhist -> print full history\\
2377 %dhist -> print full history\\
2379 %dhist n -> print last n entries only\\
2378 %dhist n -> print last n entries only\\
2380 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2379 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2381
2380
2382 This history is automatically maintained by the %cd command, and
2381 This history is automatically maintained by the %cd command, and
2383 always available as the global list variable _dh. You can use %cd -<n>
2382 always available as the global list variable _dh. You can use %cd -<n>
2384 to go to directory number <n>."""
2383 to go to directory number <n>."""
2385
2384
2386 dh = self.shell.user_ns['_dh']
2385 dh = self.shell.user_ns['_dh']
2387 if parameter_s:
2386 if parameter_s:
2388 try:
2387 try:
2389 args = map(int,parameter_s.split())
2388 args = map(int,parameter_s.split())
2390 except:
2389 except:
2391 self.arg_err(Magic.magic_dhist)
2390 self.arg_err(Magic.magic_dhist)
2392 return
2391 return
2393 if len(args) == 1:
2392 if len(args) == 1:
2394 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2393 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2395 elif len(args) == 2:
2394 elif len(args) == 2:
2396 ini,fin = args
2395 ini,fin = args
2397 else:
2396 else:
2398 self.arg_err(Magic.magic_dhist)
2397 self.arg_err(Magic.magic_dhist)
2399 return
2398 return
2400 else:
2399 else:
2401 ini,fin = 0,len(dh)
2400 ini,fin = 0,len(dh)
2402 nlprint(dh,
2401 nlprint(dh,
2403 header = 'Directory history (kept in _dh)',
2402 header = 'Directory history (kept in _dh)',
2404 start=ini,stop=fin)
2403 start=ini,stop=fin)
2405
2404
2406 def magic_env(self, parameter_s=''):
2405 def magic_env(self, parameter_s=''):
2407 """List environment variables."""
2406 """List environment variables."""
2408
2407
2409 return os.environ.data
2408 return os.environ.data
2410
2409
2411 def magic_pushd(self, parameter_s=''):
2410 def magic_pushd(self, parameter_s=''):
2412 """Place the current dir on stack and change directory.
2411 """Place the current dir on stack and change directory.
2413
2412
2414 Usage:\\
2413 Usage:\\
2415 %pushd ['dirname']
2414 %pushd ['dirname']
2416
2415
2417 %pushd with no arguments does a %pushd to your home directory.
2416 %pushd with no arguments does a %pushd to your home directory.
2418 """
2417 """
2419 if parameter_s == '': parameter_s = '~'
2418 if parameter_s == '': parameter_s = '~'
2420 dir_s = self.shell.dir_stack
2419 dir_s = self.shell.dir_stack
2421 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2420 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2422 os.path.expanduser(self.shell.dir_stack[0]):
2421 os.path.expanduser(self.shell.dir_stack[0]):
2423 try:
2422 try:
2424 self.magic_cd(parameter_s)
2423 self.magic_cd(parameter_s)
2425 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2424 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2426 self.magic_dirs()
2425 self.magic_dirs()
2427 except:
2426 except:
2428 print 'Invalid directory'
2427 print 'Invalid directory'
2429 else:
2428 else:
2430 print 'You are already there!'
2429 print 'You are already there!'
2431
2430
2432 def magic_popd(self, parameter_s=''):
2431 def magic_popd(self, parameter_s=''):
2433 """Change to directory popped off the top of the stack.
2432 """Change to directory popped off the top of the stack.
2434 """
2433 """
2435 if len (self.shell.dir_stack) > 1:
2434 if len (self.shell.dir_stack) > 1:
2436 self.shell.dir_stack.pop(0)
2435 self.shell.dir_stack.pop(0)
2437 self.magic_cd(self.shell.dir_stack[0])
2436 self.magic_cd(self.shell.dir_stack[0])
2438 print self.shell.dir_stack[0]
2437 print self.shell.dir_stack[0]
2439 else:
2438 else:
2440 print "You can't remove the starting directory from the stack:",\
2439 print "You can't remove the starting directory from the stack:",\
2441 self.shell.dir_stack
2440 self.shell.dir_stack
2442
2441
2443 def magic_dirs(self, parameter_s=''):
2442 def magic_dirs(self, parameter_s=''):
2444 """Return the current directory stack."""
2443 """Return the current directory stack."""
2445
2444
2446 return self.shell.dir_stack[:]
2445 return self.shell.dir_stack[:]
2447
2446
2448 def magic_sc(self, parameter_s=''):
2447 def magic_sc(self, parameter_s=''):
2449 """Shell capture - execute a shell command and capture its output.
2448 """Shell capture - execute a shell command and capture its output.
2450
2449
2451 DEPRECATED. Suboptimal, retained for backwards compatibility.
2450 DEPRECATED. Suboptimal, retained for backwards compatibility.
2452
2451
2453 You should use the form 'var = !command' instead. Example:
2452 You should use the form 'var = !command' instead. Example:
2454
2453
2455 "%sc -l myfiles = ls ~" should now be written as
2454 "%sc -l myfiles = ls ~" should now be written as
2456
2455
2457 "myfiles = !ls ~"
2456 "myfiles = !ls ~"
2458
2457
2459 myfiles.s, myfiles.l and myfiles.n still apply as documented
2458 myfiles.s, myfiles.l and myfiles.n still apply as documented
2460 below.
2459 below.
2461
2460
2462 --
2461 --
2463 %sc [options] varname=command
2462 %sc [options] varname=command
2464
2463
2465 IPython will run the given command using commands.getoutput(), and
2464 IPython will run the given command using commands.getoutput(), and
2466 will then update the user's interactive namespace with a variable
2465 will then update the user's interactive namespace with a variable
2467 called varname, containing the value of the call. Your command can
2466 called varname, containing the value of the call. Your command can
2468 contain shell wildcards, pipes, etc.
2467 contain shell wildcards, pipes, etc.
2469
2468
2470 The '=' sign in the syntax is mandatory, and the variable name you
2469 The '=' sign in the syntax is mandatory, and the variable name you
2471 supply must follow Python's standard conventions for valid names.
2470 supply must follow Python's standard conventions for valid names.
2472
2471
2473 (A special format without variable name exists for internal use)
2472 (A special format without variable name exists for internal use)
2474
2473
2475 Options:
2474 Options:
2476
2475
2477 -l: list output. Split the output on newlines into a list before
2476 -l: list output. Split the output on newlines into a list before
2478 assigning it to the given variable. By default the output is stored
2477 assigning it to the given variable. By default the output is stored
2479 as a single string.
2478 as a single string.
2480
2479
2481 -v: verbose. Print the contents of the variable.
2480 -v: verbose. Print the contents of the variable.
2482
2481
2483 In most cases you should not need to split as a list, because the
2482 In most cases you should not need to split as a list, because the
2484 returned value is a special type of string which can automatically
2483 returned value is a special type of string which can automatically
2485 provide its contents either as a list (split on newlines) or as a
2484 provide its contents either as a list (split on newlines) or as a
2486 space-separated string. These are convenient, respectively, either
2485 space-separated string. These are convenient, respectively, either
2487 for sequential processing or to be passed to a shell command.
2486 for sequential processing or to be passed to a shell command.
2488
2487
2489 For example:
2488 For example:
2490
2489
2491 # Capture into variable a
2490 # Capture into variable a
2492 In [9]: sc a=ls *py
2491 In [9]: sc a=ls *py
2493
2492
2494 # a is a string with embedded newlines
2493 # a is a string with embedded newlines
2495 In [10]: a
2494 In [10]: a
2496 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2495 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2497
2496
2498 # which can be seen as a list:
2497 # which can be seen as a list:
2499 In [11]: a.l
2498 In [11]: a.l
2500 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2499 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2501
2500
2502 # or as a whitespace-separated string:
2501 # or as a whitespace-separated string:
2503 In [12]: a.s
2502 In [12]: a.s
2504 Out[12]: 'setup.py win32_manual_post_install.py'
2503 Out[12]: 'setup.py win32_manual_post_install.py'
2505
2504
2506 # a.s is useful to pass as a single command line:
2505 # a.s is useful to pass as a single command line:
2507 In [13]: !wc -l $a.s
2506 In [13]: !wc -l $a.s
2508 146 setup.py
2507 146 setup.py
2509 130 win32_manual_post_install.py
2508 130 win32_manual_post_install.py
2510 276 total
2509 276 total
2511
2510
2512 # while the list form is useful to loop over:
2511 # while the list form is useful to loop over:
2513 In [14]: for f in a.l:
2512 In [14]: for f in a.l:
2514 ....: !wc -l $f
2513 ....: !wc -l $f
2515 ....:
2514 ....:
2516 146 setup.py
2515 146 setup.py
2517 130 win32_manual_post_install.py
2516 130 win32_manual_post_install.py
2518
2517
2519 Similiarly, the lists returned by the -l option are also special, in
2518 Similiarly, the lists returned by the -l option are also special, in
2520 the sense that you can equally invoke the .s attribute on them to
2519 the sense that you can equally invoke the .s attribute on them to
2521 automatically get a whitespace-separated string from their contents:
2520 automatically get a whitespace-separated string from their contents:
2522
2521
2523 In [1]: sc -l b=ls *py
2522 In [1]: sc -l b=ls *py
2524
2523
2525 In [2]: b
2524 In [2]: b
2526 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2525 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2527
2526
2528 In [3]: b.s
2527 In [3]: b.s
2529 Out[3]: 'setup.py win32_manual_post_install.py'
2528 Out[3]: 'setup.py win32_manual_post_install.py'
2530
2529
2531 In summary, both the lists and strings used for ouptut capture have
2530 In summary, both the lists and strings used for ouptut capture have
2532 the following special attributes:
2531 the following special attributes:
2533
2532
2534 .l (or .list) : value as list.
2533 .l (or .list) : value as list.
2535 .n (or .nlstr): value as newline-separated string.
2534 .n (or .nlstr): value as newline-separated string.
2536 .s (or .spstr): value as space-separated string.
2535 .s (or .spstr): value as space-separated string.
2537 """
2536 """
2538
2537
2539 opts,args = self.parse_options(parameter_s,'lv')
2538 opts,args = self.parse_options(parameter_s,'lv')
2540 # Try to get a variable name and command to run
2539 # Try to get a variable name and command to run
2541 try:
2540 try:
2542 # the variable name must be obtained from the parse_options
2541 # the variable name must be obtained from the parse_options
2543 # output, which uses shlex.split to strip options out.
2542 # output, which uses shlex.split to strip options out.
2544 var,_ = args.split('=',1)
2543 var,_ = args.split('=',1)
2545 var = var.strip()
2544 var = var.strip()
2546 # But the the command has to be extracted from the original input
2545 # But the the command has to be extracted from the original input
2547 # parameter_s, not on what parse_options returns, to avoid the
2546 # parameter_s, not on what parse_options returns, to avoid the
2548 # quote stripping which shlex.split performs on it.
2547 # quote stripping which shlex.split performs on it.
2549 _,cmd = parameter_s.split('=',1)
2548 _,cmd = parameter_s.split('=',1)
2550 except ValueError:
2549 except ValueError:
2551 var,cmd = '',''
2550 var,cmd = '',''
2552 # If all looks ok, proceed
2551 # If all looks ok, proceed
2553 out,err = self.shell.getoutputerror(cmd)
2552 out,err = self.shell.getoutputerror(cmd)
2554 if err:
2553 if err:
2555 print >> Term.cerr,err
2554 print >> Term.cerr,err
2556 if opts.has_key('l'):
2555 if opts.has_key('l'):
2557 out = SList(out.split('\n'))
2556 out = SList(out.split('\n'))
2558 else:
2557 else:
2559 out = LSString(out)
2558 out = LSString(out)
2560 if opts.has_key('v'):
2559 if opts.has_key('v'):
2561 print '%s ==\n%s' % (var,pformat(out))
2560 print '%s ==\n%s' % (var,pformat(out))
2562 if var:
2561 if var:
2563 self.shell.user_ns.update({var:out})
2562 self.shell.user_ns.update({var:out})
2564 else:
2563 else:
2565 return out
2564 return out
2566
2565
2567 def magic_sx(self, parameter_s=''):
2566 def magic_sx(self, parameter_s=''):
2568 """Shell execute - run a shell command and capture its output.
2567 """Shell execute - run a shell command and capture its output.
2569
2568
2570 %sx command
2569 %sx command
2571
2570
2572 IPython will run the given command using commands.getoutput(), and
2571 IPython will run the given command using commands.getoutput(), and
2573 return the result formatted as a list (split on '\\n'). Since the
2572 return the result formatted as a list (split on '\\n'). Since the
2574 output is _returned_, it will be stored in ipython's regular output
2573 output is _returned_, it will be stored in ipython's regular output
2575 cache Out[N] and in the '_N' automatic variables.
2574 cache Out[N] and in the '_N' automatic variables.
2576
2575
2577 Notes:
2576 Notes:
2578
2577
2579 1) If an input line begins with '!!', then %sx is automatically
2578 1) If an input line begins with '!!', then %sx is automatically
2580 invoked. That is, while:
2579 invoked. That is, while:
2581 !ls
2580 !ls
2582 causes ipython to simply issue system('ls'), typing
2581 causes ipython to simply issue system('ls'), typing
2583 !!ls
2582 !!ls
2584 is a shorthand equivalent to:
2583 is a shorthand equivalent to:
2585 %sx ls
2584 %sx ls
2586
2585
2587 2) %sx differs from %sc in that %sx automatically splits into a list,
2586 2) %sx differs from %sc in that %sx automatically splits into a list,
2588 like '%sc -l'. The reason for this is to make it as easy as possible
2587 like '%sc -l'. The reason for this is to make it as easy as possible
2589 to process line-oriented shell output via further python commands.
2588 to process line-oriented shell output via further python commands.
2590 %sc is meant to provide much finer control, but requires more
2589 %sc is meant to provide much finer control, but requires more
2591 typing.
2590 typing.
2592
2591
2593 3) Just like %sc -l, this is a list with special attributes:
2592 3) Just like %sc -l, this is a list with special attributes:
2594
2593
2595 .l (or .list) : value as list.
2594 .l (or .list) : value as list.
2596 .n (or .nlstr): value as newline-separated string.
2595 .n (or .nlstr): value as newline-separated string.
2597 .s (or .spstr): value as whitespace-separated string.
2596 .s (or .spstr): value as whitespace-separated string.
2598
2597
2599 This is very useful when trying to use such lists as arguments to
2598 This is very useful when trying to use such lists as arguments to
2600 system commands."""
2599 system commands."""
2601
2600
2602 if parameter_s:
2601 if parameter_s:
2603 out,err = self.shell.getoutputerror(parameter_s)
2602 out,err = self.shell.getoutputerror(parameter_s)
2604 if err:
2603 if err:
2605 print >> Term.cerr,err
2604 print >> Term.cerr,err
2606 return SList(out.split('\n'))
2605 return SList(out.split('\n'))
2607
2606
2608 def magic_bg(self, parameter_s=''):
2607 def magic_bg(self, parameter_s=''):
2609 """Run a job in the background, in a separate thread.
2608 """Run a job in the background, in a separate thread.
2610
2609
2611 For example,
2610 For example,
2612
2611
2613 %bg myfunc(x,y,z=1)
2612 %bg myfunc(x,y,z=1)
2614
2613
2615 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2614 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2616 execution starts, a message will be printed indicating the job
2615 execution starts, a message will be printed indicating the job
2617 number. If your job number is 5, you can use
2616 number. If your job number is 5, you can use
2618
2617
2619 myvar = jobs.result(5) or myvar = jobs[5].result
2618 myvar = jobs.result(5) or myvar = jobs[5].result
2620
2619
2621 to assign this result to variable 'myvar'.
2620 to assign this result to variable 'myvar'.
2622
2621
2623 IPython has a job manager, accessible via the 'jobs' object. You can
2622 IPython has a job manager, accessible via the 'jobs' object. You can
2624 type jobs? to get more information about it, and use jobs.<TAB> to see
2623 type jobs? to get more information about it, and use jobs.<TAB> to see
2625 its attributes. All attributes not starting with an underscore are
2624 its attributes. All attributes not starting with an underscore are
2626 meant for public use.
2625 meant for public use.
2627
2626
2628 In particular, look at the jobs.new() method, which is used to create
2627 In particular, look at the jobs.new() method, which is used to create
2629 new jobs. This magic %bg function is just a convenience wrapper
2628 new jobs. This magic %bg function is just a convenience wrapper
2630 around jobs.new(), for expression-based jobs. If you want to create a
2629 around jobs.new(), for expression-based jobs. If you want to create a
2631 new job with an explicit function object and arguments, you must call
2630 new job with an explicit function object and arguments, you must call
2632 jobs.new() directly.
2631 jobs.new() directly.
2633
2632
2634 The jobs.new docstring also describes in detail several important
2633 The jobs.new docstring also describes in detail several important
2635 caveats associated with a thread-based model for background job
2634 caveats associated with a thread-based model for background job
2636 execution. Type jobs.new? for details.
2635 execution. Type jobs.new? for details.
2637
2636
2638 You can check the status of all jobs with jobs.status().
2637 You can check the status of all jobs with jobs.status().
2639
2638
2640 The jobs variable is set by IPython into the Python builtin namespace.
2639 The jobs variable is set by IPython into the Python builtin namespace.
2641 If you ever declare a variable named 'jobs', you will shadow this
2640 If you ever declare a variable named 'jobs', you will shadow this
2642 name. You can either delete your global jobs variable to regain
2641 name. You can either delete your global jobs variable to regain
2643 access to the job manager, or make a new name and assign it manually
2642 access to the job manager, or make a new name and assign it manually
2644 to the manager (stored in IPython's namespace). For example, to
2643 to the manager (stored in IPython's namespace). For example, to
2645 assign the job manager to the Jobs name, use:
2644 assign the job manager to the Jobs name, use:
2646
2645
2647 Jobs = __builtins__.jobs"""
2646 Jobs = __builtins__.jobs"""
2648
2647
2649 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2648 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2650
2649
2651 def magic_store(self, parameter_s=''):
2650 def magic_store(self, parameter_s=''):
2652 """Lightweight persistence for python variables.
2651 """Lightweight persistence for python variables.
2653
2652
2654 Example:
2653 Example:
2655
2654
2656 ville@badger[~]|1> A = ['hello',10,'world']\\
2655 ville@badger[~]|1> A = ['hello',10,'world']\\
2657 ville@badger[~]|2> %store A\\
2656 ville@badger[~]|2> %store A\\
2658 ville@badger[~]|3> Exit
2657 ville@badger[~]|3> Exit
2659
2658
2660 (IPython session is closed and started again...)
2659 (IPython session is closed and started again...)
2661
2660
2662 ville@badger:~$ ipython -p pysh\\
2661 ville@badger:~$ ipython -p pysh\\
2663 ville@badger[~]|1> print A
2662 ville@badger[~]|1> print A
2664
2663
2665 ['hello', 10, 'world']
2664 ['hello', 10, 'world']
2666
2665
2667 Usage:
2666 Usage:
2668
2667
2669 %store - Show list of all variables and their current values\\
2668 %store - Show list of all variables and their current values\\
2670 %store <var> - Store the *current* value of the variable to disk\\
2669 %store <var> - Store the *current* value of the variable to disk\\
2671 %store -d <var> - Remove the variable and its value from storage\\
2670 %store -d <var> - Remove the variable and its value from storage\\
2672 %store -r - Remove all variables from storage\\
2671 %store -r - Remove all variables from storage\\
2673 %store foo >a.txt - Store value of foo to new file a.txt\\
2672 %store foo >a.txt - Store value of foo to new file a.txt\\
2674 %store foo >>a.txt - Append value of foo to file a.txt\\
2673 %store foo >>a.txt - Append value of foo to file a.txt\\
2675
2674
2676 It should be noted that if you change the value of a variable, you
2675 It should be noted that if you change the value of a variable, you
2677 need to %store it again if you want to persist the new value.
2676 need to %store it again if you want to persist the new value.
2678
2677
2679 Note also that the variables will need to be pickleable; most basic
2678 Note also that the variables will need to be pickleable; most basic
2680 python types can be safely %stored.
2679 python types can be safely %stored.
2681 """
2680 """
2682
2681
2683 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2682 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2684 args = argsl.split(None,1)
2683 args = argsl.split(None,1)
2685 ip = self.getapi()
2684 ip = self.getapi()
2686 # delete
2685 # delete
2687 if opts.has_key('d'):
2686 if opts.has_key('d'):
2688 try:
2687 try:
2689 todel = args[0]
2688 todel = args[0]
2690 except IndexError:
2689 except IndexError:
2691 error('You must provide the variable to forget')
2690 error('You must provide the variable to forget')
2692 else:
2691 else:
2693 try:
2692 try:
2694 del self.shell.persist['S:' + todel]
2693 del self.shell.persist['S:' + todel]
2695 except:
2694 except:
2696 error("Can't delete variable '%s'" % todel)
2695 error("Can't delete variable '%s'" % todel)
2697 # reset
2696 # reset
2698 elif opts.has_key('r'):
2697 elif opts.has_key('r'):
2699 for k in self.shell.persist.keys():
2698 for k in self.shell.persist.keys():
2700 if k.startswith('S:'):
2699 if k.startswith('S:'):
2701 del self.shell.persist[k]
2700 del self.shell.persist[k]
2702
2701
2703 # run without arguments -> list variables & values
2702 # run without arguments -> list variables & values
2704 elif not args:
2703 elif not args:
2705 vars = [v[2:] for v in self.shell.persist.keys()
2704 vars = [v[2:] for v in self.shell.persist.keys()
2706 if v.startswith('S:')]
2705 if v.startswith('S:')]
2707 vars.sort()
2706 vars.sort()
2708 if vars:
2707 if vars:
2709 size = max(map(len,vars))
2708 size = max(map(len,vars))
2710 else:
2709 else:
2711 size = 0
2710 size = 0
2712
2711
2713 print 'Stored variables and their in-memory values:'
2712 print 'Stored variables and their in-memory values:'
2714 fmt = '%-'+str(size)+'s -> %s'
2713 fmt = '%-'+str(size)+'s -> %s'
2715 get = self.shell.user_ns.get
2714 get = self.shell.user_ns.get
2716 for var in vars:
2715 for var in vars:
2717 # print 30 first characters from every var
2716 # print 30 first characters from every var
2718 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2717 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2719
2718
2720 # default action - store the variable
2719 # default action - store the variable
2721 else:
2720 else:
2722 # %store foo >file.txt or >>file.txt
2721 # %store foo >file.txt or >>file.txt
2723 if len(args) > 1 and args[1].startswith('>'):
2722 if len(args) > 1 and args[1].startswith('>'):
2724 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2723 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2725 if args[1].startswith('>>'):
2724 if args[1].startswith('>>'):
2726 fil = open(fnam,'a')
2725 fil = open(fnam,'a')
2727 else:
2726 else:
2728 fil = open(fnam,'w')
2727 fil = open(fnam,'w')
2729 obj = ip.ev(args[0])
2728 obj = ip.ev(args[0])
2730 print "Writing '%s' (%s) to file '%s'." % (args[0],
2729 print "Writing '%s' (%s) to file '%s'." % (args[0],
2731 obj.__class__.__name__, fnam)
2730 obj.__class__.__name__, fnam)
2732
2731
2733
2732
2734 if not isinstance (obj,basestring):
2733 if not isinstance (obj,basestring):
2735 pprint(obj,fil)
2734 pprint(obj,fil)
2736 else:
2735 else:
2737 fil.write(obj)
2736 fil.write(obj)
2738 if not obj.endswith('\n'):
2737 if not obj.endswith('\n'):
2739 fil.write('\n')
2738 fil.write('\n')
2740
2739
2741 fil.close()
2740 fil.close()
2742 return
2741 return
2743
2742
2744 # %store foo
2743 # %store foo
2745 obj = self.shell.user_ns[args[0] ]
2744 obj = self.shell.user_ns[args[0] ]
2746 if isinstance(inspect.getmodule(obj), FakeModule):
2745 if isinstance(inspect.getmodule(obj), FakeModule):
2747 print textwrap.dedent("""\
2746 print textwrap.dedent("""\
2748 Warning:%s is %s
2747 Warning:%s is %s
2749 Proper storage of interactively declared classes (or instances
2748 Proper storage of interactively declared classes (or instances
2750 of those classes) is not possible! Only instances
2749 of those classes) is not possible! Only instances
2751 of classes in real modules on file system can be %%store'd.
2750 of classes in real modules on file system can be %%store'd.
2752 """ % (args[0], obj) )
2751 """ % (args[0], obj) )
2753 return
2752 return
2754 pickled = pickle.dumps(obj)
2753 pickled = pickle.dumps(obj)
2755 self.shell.persist[ 'S:' + args[0] ] = pickled
2754 self.shell.persist[ 'S:' + args[0] ] = pickled
2756 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2755 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2757
2756
2758 def magic_bookmark(self, parameter_s=''):
2757 def magic_bookmark(self, parameter_s=''):
2759 """Manage IPython's bookmark system.
2758 """Manage IPython's bookmark system.
2760
2759
2761 %bookmark <name> - set bookmark to current dir
2760 %bookmark <name> - set bookmark to current dir
2762 %bookmark <name> <dir> - set bookmark to <dir>
2761 %bookmark <name> <dir> - set bookmark to <dir>
2763 %bookmark -l - list all bookmarks
2762 %bookmark -l - list all bookmarks
2764 %bookmark -d <name> - remove bookmark
2763 %bookmark -d <name> - remove bookmark
2765 %bookmark -r - remove all bookmarks
2764 %bookmark -r - remove all bookmarks
2766
2765
2767 You can later on access a bookmarked folder with:
2766 You can later on access a bookmarked folder with:
2768 %cd -b <name>
2767 %cd -b <name>
2769 or simply '%cd <name>' if there is no directory called <name> AND
2768 or simply '%cd <name>' if there is no directory called <name> AND
2770 there is such a bookmark defined.
2769 there is such a bookmark defined.
2771
2770
2772 Your bookmarks persist through IPython sessions, but they are
2771 Your bookmarks persist through IPython sessions, but they are
2773 associated with each profile."""
2772 associated with each profile."""
2774
2773
2775 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2774 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2776 if len(args) > 2:
2775 if len(args) > 2:
2777 error('You can only give at most two arguments')
2776 error('You can only give at most two arguments')
2778 return
2777 return
2779
2778
2780 bkms = self.shell.persist.get('bookmarks',{})
2779 bkms = self.shell.persist.get('bookmarks',{})
2781
2780
2782 if opts.has_key('d'):
2781 if opts.has_key('d'):
2783 try:
2782 try:
2784 todel = args[0]
2783 todel = args[0]
2785 except IndexError:
2784 except IndexError:
2786 error('You must provide a bookmark to delete')
2785 error('You must provide a bookmark to delete')
2787 else:
2786 else:
2788 try:
2787 try:
2789 del bkms[todel]
2788 del bkms[todel]
2790 except:
2789 except:
2791 error("Can't delete bookmark '%s'" % todel)
2790 error("Can't delete bookmark '%s'" % todel)
2792 elif opts.has_key('r'):
2791 elif opts.has_key('r'):
2793 bkms = {}
2792 bkms = {}
2794 elif opts.has_key('l'):
2793 elif opts.has_key('l'):
2795 bks = bkms.keys()
2794 bks = bkms.keys()
2796 bks.sort()
2795 bks.sort()
2797 if bks:
2796 if bks:
2798 size = max(map(len,bks))
2797 size = max(map(len,bks))
2799 else:
2798 else:
2800 size = 0
2799 size = 0
2801 fmt = '%-'+str(size)+'s -> %s'
2800 fmt = '%-'+str(size)+'s -> %s'
2802 print 'Current bookmarks:'
2801 print 'Current bookmarks:'
2803 for bk in bks:
2802 for bk in bks:
2804 print fmt % (bk,bkms[bk])
2803 print fmt % (bk,bkms[bk])
2805 else:
2804 else:
2806 if not args:
2805 if not args:
2807 error("You must specify the bookmark name")
2806 error("You must specify the bookmark name")
2808 elif len(args)==1:
2807 elif len(args)==1:
2809 bkms[args[0]] = os.getcwd()
2808 bkms[args[0]] = os.getcwd()
2810 elif len(args)==2:
2809 elif len(args)==2:
2811 bkms[args[0]] = args[1]
2810 bkms[args[0]] = args[1]
2812 self.shell.persist['bookmarks'] = bkms
2811 self.shell.persist['bookmarks'] = bkms
2813
2812
2814 def magic_pycat(self, parameter_s=''):
2813 def magic_pycat(self, parameter_s=''):
2815 """Show a syntax-highlighted file through a pager.
2814 """Show a syntax-highlighted file through a pager.
2816
2815
2817 This magic is similar to the cat utility, but it will assume the file
2816 This magic is similar to the cat utility, but it will assume the file
2818 to be Python source and will show it with syntax highlighting. """
2817 to be Python source and will show it with syntax highlighting. """
2819
2818
2820 filename = get_py_filename(parameter_s)
2819 filename = get_py_filename(parameter_s)
2821 page(self.shell.pycolorize(file_read(filename)),
2820 page(self.shell.pycolorize(file_read(filename)),
2822 screen_lines=self.shell.rc.screen_length)
2821 screen_lines=self.shell.rc.screen_length)
2823
2822
2824 def magic_cpaste(self, parameter_s=''):
2823 def magic_cpaste(self, parameter_s=''):
2825 """Allows you to paste & execute a pre-formatted code block from
2824 """Allows you to paste & execute a pre-formatted code block from
2826 clipboard.
2825 clipboard.
2827
2826
2828 You must terminate the block with '--' (two minus-signs) alone on the
2827 You must terminate the block with '--' (two minus-signs) alone on the
2829 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2828 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2830 is the new sentinel for this operation)
2829 is the new sentinel for this operation)
2831
2830
2832 The block is dedented prior to execution to enable execution of
2831 The block is dedented prior to execution to enable execution of
2833 method definitions. The executed block is also assigned to variable
2832 method definitions. The executed block is also assigned to variable
2834 named 'pasted_block' for later editing with '%edit pasted_block'.
2833 named 'pasted_block' for later editing with '%edit pasted_block'.
2835
2834
2836 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2835 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2837 This assigns the pasted block to variable 'foo' as string, without
2836 This assigns the pasted block to variable 'foo' as string, without
2838 dedenting or executing it.
2837 dedenting or executing it.
2839
2838
2840 Do not be alarmed by garbled output on Windows (it's a readline bug).
2839 Do not be alarmed by garbled output on Windows (it's a readline bug).
2841 Just press enter and type -- (and press enter again) and the block
2840 Just press enter and type -- (and press enter again) and the block
2842 will be what was just pasted.
2841 will be what was just pasted.
2843
2842
2844 IPython statements (magics, shell escapes) are not supported (yet).
2843 IPython statements (magics, shell escapes) are not supported (yet).
2845 """
2844 """
2846 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2845 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2847 par = args.strip()
2846 par = args.strip()
2848 sentinel = opts.get('s','--')
2847 sentinel = opts.get('s','--')
2849
2848
2850 from IPython import iplib
2849 from IPython import iplib
2851 lines = []
2850 lines = []
2852 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2851 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2853 while 1:
2852 while 1:
2854 l = iplib.raw_input_original(':')
2853 l = iplib.raw_input_original(':')
2855 if l ==sentinel:
2854 if l ==sentinel:
2856 break
2855 break
2857 lines.append(l)
2856 lines.append(l)
2858 block = "\n".join(lines) + '\n'
2857 block = "\n".join(lines) + '\n'
2859 #print "block:\n",block
2858 #print "block:\n",block
2860 if not par:
2859 if not par:
2861 b = textwrap.dedent(block)
2860 b = textwrap.dedent(block)
2862 exec b in self.user_ns
2861 exec b in self.user_ns
2863 self.user_ns['pasted_block'] = b
2862 self.user_ns['pasted_block'] = b
2864 else:
2863 else:
2865 self.user_ns[par] = block
2864 self.user_ns[par] = block
2866 print "Block assigned to '%s'" % par
2865 print "Block assigned to '%s'" % par
2867 def magic_quickref(self,arg):
2866 def magic_quickref(self,arg):
2868 import IPython.usage
2867 import IPython.usage
2869 page(IPython.usage.quick_reference)
2868 page(IPython.usage.quick_reference)
2870 del IPython.usage
2869 del IPython.usage
2871
2870
2872
2871
2873 # end Magic
2872 # end Magic
@@ -1,2267 +1,2271 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1093 2006-01-28 00:18:49Z vivainio $
9 $Id: iplib.py 1096 2006-01-28 20:08:02Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77 import IPython.ipapi
78
78
79 # Globals
79 # Globals
80
80
81 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
82 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
83 raw_input_original = raw_input
83 raw_input_original = raw_input
84
84
85 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
93
93
94 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
95 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
96
96
97 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
98 if ini_spaces:
98 if ini_spaces:
99 return ini_spaces.end()
99 return ini_spaces.end()
100 else:
100 else:
101 return 0
101 return 0
102
102
103 def softspace(file, newvalue):
103 def softspace(file, newvalue):
104 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
105
105
106 oldvalue = 0
106 oldvalue = 0
107 try:
107 try:
108 oldvalue = file.softspace
108 oldvalue = file.softspace
109 except AttributeError:
109 except AttributeError:
110 pass
110 pass
111 try:
111 try:
112 file.softspace = newvalue
112 file.softspace = newvalue
113 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
114 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
115 pass
115 pass
116 return oldvalue
116 return oldvalue
117
117
118
118
119 #****************************************************************************
119 #****************************************************************************
120 # Local use exceptions
120 # Local use exceptions
121 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
122
122
123
123
124 #****************************************************************************
124 #****************************************************************************
125 # Local use classes
125 # Local use classes
126 class Bunch: pass
126 class Bunch: pass
127
127
128 class Undefined: pass
128 class Undefined: pass
129
129
130 class InputList(list):
130 class InputList(list):
131 """Class to store user input.
131 """Class to store user input.
132
132
133 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
134 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
135
135
136 exec In[4:7]
136 exec In[4:7]
137
137
138 or
138 or
139
139
140 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
141
141
142 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
143 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
144
144
145 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
146 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
147
147
148 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
149 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
150 self.last_syntax_error = None
150 self.last_syntax_error = None
151
151
152 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
153 self.last_syntax_error = value
153 self.last_syntax_error = value
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
155
155
156 def clear_err_state(self):
156 def clear_err_state(self):
157 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
158 e = self.last_syntax_error
158 e = self.last_syntax_error
159 self.last_syntax_error = None
159 self.last_syntax_error = None
160 return e
160 return e
161
161
162 #****************************************************************************
162 #****************************************************************************
163 # Main IPython class
163 # Main IPython class
164
164
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 #
169 #
170 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
171 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
172 # chainsaw branch.
172 # chainsaw branch.
173
173
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class, to prevent clashes.
176 # class, to prevent clashes.
177
177
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.value']
181 # 'self.value']
182
182
183 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
184 """An enhanced console for Python."""
184 """An enhanced console for Python."""
185
185
186 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
187 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
188 isthreaded = False
188 isthreaded = False
189
189
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
192 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
193
193
194 # log system
194 # log system
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
196
196
197 # Produce a public API instance
197 # Produce a public API instance
198
198
199 self.api = IPython.ipapi.IPApi(self)
199 self.api = IPython.ipapi.IPApi(self)
200
200
201 # some minimal strict typechecks. For some core data structures, I
201 # some minimal strict typechecks. For some core data structures, I
202 # want actual basic python types, not just anything that looks like
202 # want actual basic python types, not just anything that looks like
203 # one. This is especially true for namespaces.
203 # one. This is especially true for namespaces.
204 for ns in (user_ns,user_global_ns):
204 for ns in (user_ns,user_global_ns):
205 if ns is not None and type(ns) != types.DictType:
205 if ns is not None and type(ns) != types.DictType:
206 raise TypeError,'namespace must be a dictionary'
206 raise TypeError,'namespace must be a dictionary'
207
207
208 # Job manager (for jobs run as background threads)
208 # Job manager (for jobs run as background threads)
209 self.jobs = BackgroundJobManager()
209 self.jobs = BackgroundJobManager()
210
210
211 # track which builtins we add, so we can clean up later
211 # track which builtins we add, so we can clean up later
212 self.builtins_added = {}
212 self.builtins_added = {}
213 # This method will add the necessary builtins for operation, but
213 # This method will add the necessary builtins for operation, but
214 # tracking what it did via the builtins_added dict.
214 # tracking what it did via the builtins_added dict.
215 self.add_builtins()
215 self.add_builtins()
216
216
217 # Do the intuitively correct thing for quit/exit: we remove the
217 # Do the intuitively correct thing for quit/exit: we remove the
218 # builtins if they exist, and our own magics will deal with this
218 # builtins if they exist, and our own magics will deal with this
219 try:
219 try:
220 del __builtin__.exit, __builtin__.quit
220 del __builtin__.exit, __builtin__.quit
221 except AttributeError:
221 except AttributeError:
222 pass
222 pass
223
223
224 # Store the actual shell's name
224 # Store the actual shell's name
225 self.name = name
225 self.name = name
226
226
227 # We need to know whether the instance is meant for embedding, since
227 # We need to know whether the instance is meant for embedding, since
228 # global/local namespaces need to be handled differently in that case
228 # global/local namespaces need to be handled differently in that case
229 self.embedded = embedded
229 self.embedded = embedded
230
230
231 # command compiler
231 # command compiler
232 self.compile = codeop.CommandCompiler()
232 self.compile = codeop.CommandCompiler()
233
233
234 # User input buffer
234 # User input buffer
235 self.buffer = []
235 self.buffer = []
236
236
237 # Default name given in compilation of code
237 # Default name given in compilation of code
238 self.filename = '<ipython console>'
238 self.filename = '<ipython console>'
239
239
240 # Make an empty namespace, which extension writers can rely on both
240 # Make an empty namespace, which extension writers can rely on both
241 # existing and NEVER being used by ipython itself. This gives them a
241 # existing and NEVER being used by ipython itself. This gives them a
242 # convenient location for storing additional information and state
242 # convenient location for storing additional information and state
243 # their extensions may require, without fear of collisions with other
243 # their extensions may require, without fear of collisions with other
244 # ipython names that may develop later.
244 # ipython names that may develop later.
245 self.meta = Struct()
245 self.meta = Struct()
246
246
247 # Create the namespace where the user will operate. user_ns is
247 # Create the namespace where the user will operate. user_ns is
248 # normally the only one used, and it is passed to the exec calls as
248 # normally the only one used, and it is passed to the exec calls as
249 # the locals argument. But we do carry a user_global_ns namespace
249 # the locals argument. But we do carry a user_global_ns namespace
250 # given as the exec 'globals' argument, This is useful in embedding
250 # given as the exec 'globals' argument, This is useful in embedding
251 # situations where the ipython shell opens in a context where the
251 # situations where the ipython shell opens in a context where the
252 # distinction between locals and globals is meaningful.
252 # distinction between locals and globals is meaningful.
253
253
254 # FIXME. For some strange reason, __builtins__ is showing up at user
254 # FIXME. For some strange reason, __builtins__ is showing up at user
255 # level as a dict instead of a module. This is a manual fix, but I
255 # level as a dict instead of a module. This is a manual fix, but I
256 # should really track down where the problem is coming from. Alex
256 # should really track down where the problem is coming from. Alex
257 # Schmolck reported this problem first.
257 # Schmolck reported this problem first.
258
258
259 # A useful post by Alex Martelli on this topic:
259 # A useful post by Alex Martelli on this topic:
260 # Re: inconsistent value from __builtins__
260 # Re: inconsistent value from __builtins__
261 # Von: Alex Martelli <aleaxit@yahoo.com>
261 # Von: Alex Martelli <aleaxit@yahoo.com>
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
263 # Gruppen: comp.lang.python
263 # Gruppen: comp.lang.python
264
264
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
267 # > <type 'dict'>
267 # > <type 'dict'>
268 # > >>> print type(__builtins__)
268 # > >>> print type(__builtins__)
269 # > <type 'module'>
269 # > <type 'module'>
270 # > Is this difference in return value intentional?
270 # > Is this difference in return value intentional?
271
271
272 # Well, it's documented that '__builtins__' can be either a dictionary
272 # Well, it's documented that '__builtins__' can be either a dictionary
273 # or a module, and it's been that way for a long time. Whether it's
273 # or a module, and it's been that way for a long time. Whether it's
274 # intentional (or sensible), I don't know. In any case, the idea is
274 # intentional (or sensible), I don't know. In any case, the idea is
275 # that if you need to access the built-in namespace directly, you
275 # that if you need to access the built-in namespace directly, you
276 # should start with "import __builtin__" (note, no 's') which will
276 # should start with "import __builtin__" (note, no 's') which will
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
278
278
279 if user_ns is None:
279 if user_ns is None:
280 # Set __name__ to __main__ to better match the behavior of the
280 # Set __name__ to __main__ to better match the behavior of the
281 # normal interpreter.
281 # normal interpreter.
282 user_ns = {'__name__' :'__main__',
282 user_ns = {'__name__' :'__main__',
283 '__builtins__' : __builtin__,
283 '__builtins__' : __builtin__,
284 }
284 }
285
285
286 if user_global_ns is None:
286 if user_global_ns is None:
287 user_global_ns = {}
287 user_global_ns = {}
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 # Set all default hooks, defined in the IPython.hooks module.
408 # Set all default hooks, defined in the IPython.hooks module.
409 hooks = IPython.hooks
409 hooks = IPython.hooks
410 for hook_name in hooks.__all__:
410 for hook_name in hooks.__all__:
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
413 #print "bound hook",hook_name
413 #print "bound hook",hook_name
414
414
415 # Flag to mark unconditional exit
415 # Flag to mark unconditional exit
416 self.exit_now = False
416 self.exit_now = False
417
417
418 self.usage_min = """\
418 self.usage_min = """\
419 An enhanced console for Python.
419 An enhanced console for Python.
420 Some of its features are:
420 Some of its features are:
421 - Readline support if the readline library is present.
421 - Readline support if the readline library is present.
422 - Tab completion in the local namespace.
422 - Tab completion in the local namespace.
423 - Logging of input, see command-line options.
423 - Logging of input, see command-line options.
424 - System shell escape via ! , eg !ls.
424 - System shell escape via ! , eg !ls.
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
426 - Keeps track of locally defined variables via %who, %whos.
426 - Keeps track of locally defined variables via %who, %whos.
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
428 """
428 """
429 if usage: self.usage = usage
429 if usage: self.usage = usage
430 else: self.usage = self.usage_min
430 else: self.usage = self.usage_min
431
431
432 # Storage
432 # Storage
433 self.rc = rc # This will hold all configuration information
433 self.rc = rc # This will hold all configuration information
434 self.pager = 'less'
434 self.pager = 'less'
435 # temporary files used for various purposes. Deleted at exit.
435 # temporary files used for various purposes. Deleted at exit.
436 self.tempfiles = []
436 self.tempfiles = []
437
437
438 # Keep track of readline usage (later set by init_readline)
438 # Keep track of readline usage (later set by init_readline)
439 self.has_readline = False
439 self.has_readline = False
440
440
441 # template for logfile headers. It gets resolved at runtime by the
441 # template for logfile headers. It gets resolved at runtime by the
442 # logstart method.
442 # logstart method.
443 self.loghead_tpl = \
443 self.loghead_tpl = \
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
446 #log# opts = %s
446 #log# opts = %s
447 #log# args = %s
447 #log# args = %s
448 #log# It is safe to make manual edits below here.
448 #log# It is safe to make manual edits below here.
449 #log#-----------------------------------------------------------------------
449 #log#-----------------------------------------------------------------------
450 """
450 """
451 # for pushd/popd management
451 # for pushd/popd management
452 try:
452 try:
453 self.home_dir = get_home_dir()
453 self.home_dir = get_home_dir()
454 except HomeDirError,msg:
454 except HomeDirError,msg:
455 fatal(msg)
455 fatal(msg)
456
456
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
458
458
459 # Functions to call the underlying shell.
459 # Functions to call the underlying shell.
460
460
461 # utility to expand user variables via Itpl
461 # utility to expand user variables via Itpl
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
463 self.user_ns))
463 self.user_ns))
464 # The first is similar to os.system, but it doesn't return a value,
464 # The first is similar to os.system, but it doesn't return a value,
465 # and it allows interpolation of variables in the user's namespace.
465 # and it allows interpolation of variables in the user's namespace.
466 self.system = lambda cmd: shell(self.var_expand(cmd),
466 self.system = lambda cmd: shell(self.var_expand(cmd),
467 header='IPython system call: ',
467 header='IPython system call: ',
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469 # These are for getoutput and getoutputerror:
469 # These are for getoutput and getoutputerror:
470 self.getoutput = lambda cmd: \
470 self.getoutput = lambda cmd: \
471 getoutput(self.var_expand(cmd),
471 getoutput(self.var_expand(cmd),
472 header='IPython system call: ',
472 header='IPython system call: ',
473 verbose=self.rc.system_verbose)
473 verbose=self.rc.system_verbose)
474 self.getoutputerror = lambda cmd: \
474 self.getoutputerror = lambda cmd: \
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
476 self.user_ns)),
476 self.user_ns)),
477 header='IPython system call: ',
477 header='IPython system call: ',
478 verbose=self.rc.system_verbose)
478 verbose=self.rc.system_verbose)
479
479
480 # RegExp for splitting line contents into pre-char//first
480 # RegExp for splitting line contents into pre-char//first
481 # word-method//rest. For clarity, each group in on one line.
481 # word-method//rest. For clarity, each group in on one line.
482
482
483 # WARNING: update the regexp if the above escapes are changed, as they
483 # WARNING: update the regexp if the above escapes are changed, as they
484 # are hardwired in.
484 # are hardwired in.
485
485
486 # Don't get carried away with trying to make the autocalling catch too
486 # Don't get carried away with trying to make the autocalling catch too
487 # much: it's better to be conservative rather than to trigger hidden
487 # much: it's better to be conservative rather than to trigger hidden
488 # evals() somewhere and end up causing side effects.
488 # evals() somewhere and end up causing side effects.
489
489
490 self.line_split = re.compile(r'^([\s*,;/])'
490 self.line_split = re.compile(r'^([\s*,;/])'
491 r'([\?\w\.]+\w*\s*)'
491 r'([\?\w\.]+\w*\s*)'
492 r'(\(?.*$)')
492 r'(\(?.*$)')
493
493
494 # Original re, keep around for a while in case changes break something
494 # Original re, keep around for a while in case changes break something
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
497 # r'(\(?.*$)')
497 # r'(\(?.*$)')
498
498
499 # RegExp to identify potential function names
499 # RegExp to identify potential function names
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501
501
502 # RegExp to exclude strings with this start from autocalling. In
502 # RegExp to exclude strings with this start from autocalling. In
503 # particular, all binary operators should be excluded, so that if foo
503 # particular, all binary operators should be excluded, so that if foo
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 # invalid. The characters '!=()' don't need to be checked for, as the
505 # invalid. The characters '!=()' don't need to be checked for, as the
506 # _prefilter routine explicitely does so, to catch direct calls and
506 # _prefilter routine explicitely does so, to catch direct calls and
507 # rebindings of existing names.
507 # rebindings of existing names.
508
508
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 # it affects the rest of the group in square brackets.
510 # it affects the rest of the group in square brackets.
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 '|^is |^not |^in |^and |^or ')
512 '|^is |^not |^in |^and |^or ')
513
513
514 # try to catch also methods for stuff in lists/tuples/dicts: off
514 # try to catch also methods for stuff in lists/tuples/dicts: off
515 # (experimental). For this to work, the line_split regexp would need
515 # (experimental). For this to work, the line_split regexp would need
516 # to be modified so it wouldn't break things at '['. That line is
516 # to be modified so it wouldn't break things at '['. That line is
517 # nasty enough that I shouldn't change it until I can test it _well_.
517 # nasty enough that I shouldn't change it until I can test it _well_.
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519
519
520 # keep track of where we started running (mainly for crash post-mortem)
520 # keep track of where we started running (mainly for crash post-mortem)
521 self.starting_dir = os.getcwd()
521 self.starting_dir = os.getcwd()
522
522
523 # Various switches which can be set
523 # Various switches which can be set
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 self.banner2 = banner2
526 self.banner2 = banner2
527
527
528 # TraceBack handlers:
528 # TraceBack handlers:
529
529
530 # Syntax error handler.
530 # Syntax error handler.
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532
532
533 # The interactive one is initialized with an offset, meaning we always
533 # The interactive one is initialized with an offset, meaning we always
534 # want to remove the topmost item in the traceback, which is our own
534 # want to remove the topmost item in the traceback, which is our own
535 # internal code. Valid modes: ['Plain','Context','Verbose']
535 # internal code. Valid modes: ['Plain','Context','Verbose']
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 color_scheme='NoColor',
537 color_scheme='NoColor',
538 tb_offset = 1)
538 tb_offset = 1)
539
539
540 # IPython itself shouldn't crash. This will produce a detailed
540 # IPython itself shouldn't crash. This will produce a detailed
541 # post-mortem if it does. But we only install the crash handler for
541 # post-mortem if it does. But we only install the crash handler for
542 # non-threaded shells, the threaded ones use a normal verbose reporter
542 # non-threaded shells, the threaded ones use a normal verbose reporter
543 # and lose the crash handler. This is because exceptions in the main
543 # and lose the crash handler. This is because exceptions in the main
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 # and there's no point in printing crash dumps for every user exception.
545 # and there's no point in printing crash dumps for every user exception.
546 if self.isthreaded:
546 if self.isthreaded:
547 sys.excepthook = ultraTB.FormattedTB()
547 sys.excepthook = ultraTB.FormattedTB()
548 else:
548 else:
549 from IPython import CrashHandler
549 from IPython import CrashHandler
550 sys.excepthook = CrashHandler.CrashHandler(self)
550 sys.excepthook = CrashHandler.CrashHandler(self)
551
551
552 # The instance will store a pointer to this, so that runtime code
552 # The instance will store a pointer to this, so that runtime code
553 # (such as magics) can access it. This is because during the
553 # (such as magics) can access it. This is because during the
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
555 # frameworks).
555 # frameworks).
556 self.sys_excepthook = sys.excepthook
556 self.sys_excepthook = sys.excepthook
557
557
558 # and add any custom exception handlers the user may have specified
558 # and add any custom exception handlers the user may have specified
559 self.set_custom_exc(*custom_exceptions)
559 self.set_custom_exc(*custom_exceptions)
560
560
561 # Object inspector
561 # Object inspector
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
563 PyColorize.ANSICodeColors,
563 PyColorize.ANSICodeColors,
564 'NoColor')
564 'NoColor')
565 # indentation management
565 # indentation management
566 self.autoindent = False
566 self.autoindent = False
567 self.indent_current_nsp = 0
567 self.indent_current_nsp = 0
568
568
569 # Make some aliases automatically
569 # Make some aliases automatically
570 # Prepare list of shell aliases to auto-define
570 # Prepare list of shell aliases to auto-define
571 if os.name == 'posix':
571 if os.name == 'posix':
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 'mv mv -i','rm rm -i','cp cp -i',
573 'mv mv -i','rm rm -i','cp cp -i',
574 'cat cat','less less','clear clear',
574 'cat cat','less less','clear clear',
575 # a better ls
575 # a better ls
576 'ls ls -F',
576 'ls ls -F',
577 # long ls
577 # long ls
578 'll ls -lF',
578 'll ls -lF',
579 # color ls
579 # color ls
580 'lc ls -F -o --color',
580 'lc ls -F -o --color',
581 # ls normal files only
581 # ls normal files only
582 'lf ls -F -o --color %l | grep ^-',
582 'lf ls -F -o --color %l | grep ^-',
583 # ls symbolic links
583 # ls symbolic links
584 'lk ls -F -o --color %l | grep ^l',
584 'lk ls -F -o --color %l | grep ^l',
585 # directories or links to directories,
585 # directories or links to directories,
586 'ldir ls -F -o --color %l | grep /$',
586 'ldir ls -F -o --color %l | grep /$',
587 # things which are executable
587 # things which are executable
588 'lx ls -F -o --color %l | grep ^-..x',
588 'lx ls -F -o --color %l | grep ^-..x',
589 )
589 )
590 elif os.name in ['nt','dos']:
590 elif os.name in ['nt','dos']:
591 auto_alias = ('dir dir /on', 'ls dir /on',
591 auto_alias = ('dir dir /on', 'ls dir /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
593 'mkdir mkdir','rmdir rmdir','echo echo',
593 'mkdir mkdir','rmdir rmdir','echo echo',
594 'ren ren','cls cls','copy copy')
594 'ren ren','cls cls','copy copy')
595 else:
595 else:
596 auto_alias = ()
596 auto_alias = ()
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
598 # Call the actual (public) initializer
598 # Call the actual (public) initializer
599 self.init_auto_alias()
599 self.init_auto_alias()
600 # end __init__
600 # end __init__
601
601
602 def post_config_initialization(self):
602 def post_config_initialization(self):
603 """Post configuration init method
603 """Post configuration init method
604
604
605 This is called after the configuration files have been processed to
605 This is called after the configuration files have been processed to
606 'finalize' the initialization."""
606 'finalize' the initialization."""
607
607
608 rc = self.rc
608 rc = self.rc
609
609
610 # Load readline proper
610 # Load readline proper
611 if rc.readline:
611 if rc.readline:
612 self.init_readline()
612 self.init_readline()
613
613
614 # local shortcut, this is used a LOT
614 # local shortcut, this is used a LOT
615 self.log = self.logger.log
615 self.log = self.logger.log
616
616
617 # Initialize cache, set in/out prompts and printing system
617 # Initialize cache, set in/out prompts and printing system
618 self.outputcache = CachedOutput(self,
618 self.outputcache = CachedOutput(self,
619 rc.cache_size,
619 rc.cache_size,
620 rc.pprint,
620 rc.pprint,
621 input_sep = rc.separate_in,
621 input_sep = rc.separate_in,
622 output_sep = rc.separate_out,
622 output_sep = rc.separate_out,
623 output_sep2 = rc.separate_out2,
623 output_sep2 = rc.separate_out2,
624 ps1 = rc.prompt_in1,
624 ps1 = rc.prompt_in1,
625 ps2 = rc.prompt_in2,
625 ps2 = rc.prompt_in2,
626 ps_out = rc.prompt_out,
626 ps_out = rc.prompt_out,
627 pad_left = rc.prompts_pad_left)
627 pad_left = rc.prompts_pad_left)
628
628
629 # user may have over-ridden the default print hook:
629 # user may have over-ridden the default print hook:
630 try:
630 try:
631 self.outputcache.__class__.display = self.hooks.display
631 self.outputcache.__class__.display = self.hooks.display
632 except AttributeError:
632 except AttributeError:
633 pass
633 pass
634
634
635 # I don't like assigning globally to sys, because it means when embedding
635 # I don't like assigning globally to sys, because it means when embedding
636 # instances, each embedded instance overrides the previous choice. But
636 # instances, each embedded instance overrides the previous choice. But
637 # sys.displayhook seems to be called internally by exec, so I don't see a
637 # sys.displayhook seems to be called internally by exec, so I don't see a
638 # way around it.
638 # way around it.
639 sys.displayhook = self.outputcache
639 sys.displayhook = self.outputcache
640
640
641 # Set user colors (don't do it in the constructor above so that it
641 # Set user colors (don't do it in the constructor above so that it
642 # doesn't crash if colors option is invalid)
642 # doesn't crash if colors option is invalid)
643 self.magic_colors(rc.colors)
643 self.magic_colors(rc.colors)
644
644
645 # Set calling of pdb on exceptions
645 # Set calling of pdb on exceptions
646 self.call_pdb = rc.pdb
646 self.call_pdb = rc.pdb
647
647
648 # Load user aliases
648 # Load user aliases
649 for alias in rc.alias:
649 for alias in rc.alias:
650 self.magic_alias(alias)
650 self.magic_alias(alias)
651
651
652 # dynamic data that survives through sessions
652 # dynamic data that survives through sessions
653 # XXX make the filename a config option?
653 # XXX make the filename a config option?
654 persist_base = 'persist'
654 persist_base = 'persist'
655 if rc.profile:
655 if rc.profile:
656 persist_base += '_%s' % rc.profile
656 persist_base += '_%s' % rc.profile
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
658
658
659 try:
659 try:
660 self.persist = pickle.load(file(self.persist_fname))
660 self.persist = pickle.load(file(self.persist_fname))
661 except:
661 except:
662 self.persist = {}
662 self.persist = {}
663
663
664
664
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
666 try:
666 try:
667 obj = pickle.loads(value)
667 obj = pickle.loads(value)
668 except:
668 except:
669
669
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
671 print "The error was:",sys.exc_info()[0]
671 print "The error was:",sys.exc_info()[0]
672 continue
672 continue
673
673
674
674
675 self.user_ns[key] = obj
675 self.user_ns[key] = obj
676
676
677 def add_builtins(self):
677 def add_builtins(self):
678 """Store ipython references into the builtin namespace.
678 """Store ipython references into the builtin namespace.
679
679
680 Some parts of ipython operate via builtins injected here, which hold a
680 Some parts of ipython operate via builtins injected here, which hold a
681 reference to IPython itself."""
681 reference to IPython itself."""
682
682
683 # TODO: deprecate all except _ip; 'jobs' should be installed
684 # by an extension and the rest are under _ip
683 builtins_new = dict(__IPYTHON__ = self,
685 builtins_new = dict(__IPYTHON__ = self,
684 ip_set_hook = self.set_hook,
686 ip_set_hook = self.set_hook,
685 jobs = self.jobs,
687 jobs = self.jobs,
686 ipmagic = self.ipmagic,
688 ipmagic = self.ipmagic,
687 ipalias = self.ipalias,
689 ipalias = self.ipalias,
688 ipsystem = self.ipsystem,
690 ipsystem = self.ipsystem,
691 _ip = self.api
689 )
692 )
690 for biname,bival in builtins_new.items():
693 for biname,bival in builtins_new.items():
691 try:
694 try:
692 # store the orignal value so we can restore it
695 # store the orignal value so we can restore it
693 self.builtins_added[biname] = __builtin__.__dict__[biname]
696 self.builtins_added[biname] = __builtin__.__dict__[biname]
694 except KeyError:
697 except KeyError:
695 # or mark that it wasn't defined, and we'll just delete it at
698 # or mark that it wasn't defined, and we'll just delete it at
696 # cleanup
699 # cleanup
697 self.builtins_added[biname] = Undefined
700 self.builtins_added[biname] = Undefined
698 __builtin__.__dict__[biname] = bival
701 __builtin__.__dict__[biname] = bival
699
702
700 # Keep in the builtins a flag for when IPython is active. We set it
703 # Keep in the builtins a flag for when IPython is active. We set it
701 # with setdefault so that multiple nested IPythons don't clobber one
704 # with setdefault so that multiple nested IPythons don't clobber one
702 # another. Each will increase its value by one upon being activated,
705 # another. Each will increase its value by one upon being activated,
703 # which also gives us a way to determine the nesting level.
706 # which also gives us a way to determine the nesting level.
704 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
707 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
705
708
706 def clean_builtins(self):
709 def clean_builtins(self):
707 """Remove any builtins which might have been added by add_builtins, or
710 """Remove any builtins which might have been added by add_builtins, or
708 restore overwritten ones to their previous values."""
711 restore overwritten ones to their previous values."""
709 for biname,bival in self.builtins_added.items():
712 for biname,bival in self.builtins_added.items():
710 if bival is Undefined:
713 if bival is Undefined:
711 del __builtin__.__dict__[biname]
714 del __builtin__.__dict__[biname]
712 else:
715 else:
713 __builtin__.__dict__[biname] = bival
716 __builtin__.__dict__[biname] = bival
714 self.builtins_added.clear()
717 self.builtins_added.clear()
715
718
716 def set_hook(self,name,hook, priority = 50):
719 def set_hook(self,name,hook, priority = 50):
717 """set_hook(name,hook) -> sets an internal IPython hook.
720 """set_hook(name,hook) -> sets an internal IPython hook.
718
721
719 IPython exposes some of its internal API as user-modifiable hooks. By
722 IPython exposes some of its internal API as user-modifiable hooks. By
720 adding your function to one of these hooks, you can modify IPython's
723 adding your function to one of these hooks, you can modify IPython's
721 behavior to call at runtime your own routines."""
724 behavior to call at runtime your own routines."""
722
725
723 # At some point in the future, this should validate the hook before it
726 # At some point in the future, this should validate the hook before it
724 # accepts it. Probably at least check that the hook takes the number
727 # accepts it. Probably at least check that the hook takes the number
725 # of args it's supposed to.
728 # of args it's supposed to.
726 dp = getattr(self.hooks, name, None)
729 dp = getattr(self.hooks, name, None)
727 if name not in IPython.hooks.__all__:
730 if name not in IPython.hooks.__all__:
728 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
731 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
729 if not dp:
732 if not dp:
730 dp = IPython.hooks.CommandChainDispatcher()
733 dp = IPython.hooks.CommandChainDispatcher()
731
734
732 f = new.instancemethod(hook,self,self.__class__)
735 f = new.instancemethod(hook,self,self.__class__)
733 try:
736 try:
734 dp.add(f,priority)
737 dp.add(f,priority)
735 except AttributeError:
738 except AttributeError:
736 # it was not commandchain, plain old func - replace
739 # it was not commandchain, plain old func - replace
737 dp = f
740 dp = f
738
741
739 setattr(self.hooks,name, dp)
742 setattr(self.hooks,name, dp)
740
743
741
744
742 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
745 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
743
746
744 def set_custom_exc(self,exc_tuple,handler):
747 def set_custom_exc(self,exc_tuple,handler):
745 """set_custom_exc(exc_tuple,handler)
748 """set_custom_exc(exc_tuple,handler)
746
749
747 Set a custom exception handler, which will be called if any of the
750 Set a custom exception handler, which will be called if any of the
748 exceptions in exc_tuple occur in the mainloop (specifically, in the
751 exceptions in exc_tuple occur in the mainloop (specifically, in the
749 runcode() method.
752 runcode() method.
750
753
751 Inputs:
754 Inputs:
752
755
753 - exc_tuple: a *tuple* of valid exceptions to call the defined
756 - exc_tuple: a *tuple* of valid exceptions to call the defined
754 handler for. It is very important that you use a tuple, and NOT A
757 handler for. It is very important that you use a tuple, and NOT A
755 LIST here, because of the way Python's except statement works. If
758 LIST here, because of the way Python's except statement works. If
756 you only want to trap a single exception, use a singleton tuple:
759 you only want to trap a single exception, use a singleton tuple:
757
760
758 exc_tuple == (MyCustomException,)
761 exc_tuple == (MyCustomException,)
759
762
760 - handler: this must be defined as a function with the following
763 - handler: this must be defined as a function with the following
761 basic interface: def my_handler(self,etype,value,tb).
764 basic interface: def my_handler(self,etype,value,tb).
762
765
763 This will be made into an instance method (via new.instancemethod)
766 This will be made into an instance method (via new.instancemethod)
764 of IPython itself, and it will be called if any of the exceptions
767 of IPython itself, and it will be called if any of the exceptions
765 listed in the exc_tuple are caught. If the handler is None, an
768 listed in the exc_tuple are caught. If the handler is None, an
766 internal basic one is used, which just prints basic info.
769 internal basic one is used, which just prints basic info.
767
770
768 WARNING: by putting in your own exception handler into IPython's main
771 WARNING: by putting in your own exception handler into IPython's main
769 execution loop, you run a very good chance of nasty crashes. This
772 execution loop, you run a very good chance of nasty crashes. This
770 facility should only be used if you really know what you are doing."""
773 facility should only be used if you really know what you are doing."""
771
774
772 assert type(exc_tuple)==type(()) , \
775 assert type(exc_tuple)==type(()) , \
773 "The custom exceptions must be given AS A TUPLE."
776 "The custom exceptions must be given AS A TUPLE."
774
777
775 def dummy_handler(self,etype,value,tb):
778 def dummy_handler(self,etype,value,tb):
776 print '*** Simple custom exception handler ***'
779 print '*** Simple custom exception handler ***'
777 print 'Exception type :',etype
780 print 'Exception type :',etype
778 print 'Exception value:',value
781 print 'Exception value:',value
779 print 'Traceback :',tb
782 print 'Traceback :',tb
780 print 'Source code :','\n'.join(self.buffer)
783 print 'Source code :','\n'.join(self.buffer)
781
784
782 if handler is None: handler = dummy_handler
785 if handler is None: handler = dummy_handler
783
786
784 self.CustomTB = new.instancemethod(handler,self,self.__class__)
787 self.CustomTB = new.instancemethod(handler,self,self.__class__)
785 self.custom_exceptions = exc_tuple
788 self.custom_exceptions = exc_tuple
786
789
787 def set_custom_completer(self,completer,pos=0):
790 def set_custom_completer(self,completer,pos=0):
788 """set_custom_completer(completer,pos=0)
791 """set_custom_completer(completer,pos=0)
789
792
790 Adds a new custom completer function.
793 Adds a new custom completer function.
791
794
792 The position argument (defaults to 0) is the index in the completers
795 The position argument (defaults to 0) is the index in the completers
793 list where you want the completer to be inserted."""
796 list where you want the completer to be inserted."""
794
797
795 newcomp = new.instancemethod(completer,self.Completer,
798 newcomp = new.instancemethod(completer,self.Completer,
796 self.Completer.__class__)
799 self.Completer.__class__)
797 self.Completer.matchers.insert(pos,newcomp)
800 self.Completer.matchers.insert(pos,newcomp)
798
801
799 def _get_call_pdb(self):
802 def _get_call_pdb(self):
800 return self._call_pdb
803 return self._call_pdb
801
804
802 def _set_call_pdb(self,val):
805 def _set_call_pdb(self,val):
803
806
804 if val not in (0,1,False,True):
807 if val not in (0,1,False,True):
805 raise ValueError,'new call_pdb value must be boolean'
808 raise ValueError,'new call_pdb value must be boolean'
806
809
807 # store value in instance
810 # store value in instance
808 self._call_pdb = val
811 self._call_pdb = val
809
812
810 # notify the actual exception handlers
813 # notify the actual exception handlers
811 self.InteractiveTB.call_pdb = val
814 self.InteractiveTB.call_pdb = val
812 if self.isthreaded:
815 if self.isthreaded:
813 try:
816 try:
814 self.sys_excepthook.call_pdb = val
817 self.sys_excepthook.call_pdb = val
815 except:
818 except:
816 warn('Failed to activate pdb for threaded exception handler')
819 warn('Failed to activate pdb for threaded exception handler')
817
820
818 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
821 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
819 'Control auto-activation of pdb at exceptions')
822 'Control auto-activation of pdb at exceptions')
820
823
821
824
822 # These special functions get installed in the builtin namespace, to
825 # These special functions get installed in the builtin namespace, to
823 # provide programmatic (pure python) access to magics, aliases and system
826 # provide programmatic (pure python) access to magics, aliases and system
824 # calls. This is important for logging, user scripting, and more.
827 # calls. This is important for logging, user scripting, and more.
825
828
826 # We are basically exposing, via normal python functions, the three
829 # We are basically exposing, via normal python functions, the three
827 # mechanisms in which ipython offers special call modes (magics for
830 # mechanisms in which ipython offers special call modes (magics for
828 # internal control, aliases for direct system access via pre-selected
831 # internal control, aliases for direct system access via pre-selected
829 # names, and !cmd for calling arbitrary system commands).
832 # names, and !cmd for calling arbitrary system commands).
830
833
831 def ipmagic(self,arg_s):
834 def ipmagic(self,arg_s):
832 """Call a magic function by name.
835 """Call a magic function by name.
833
836
834 Input: a string containing the name of the magic function to call and any
837 Input: a string containing the name of the magic function to call and any
835 additional arguments to be passed to the magic.
838 additional arguments to be passed to the magic.
836
839
837 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
840 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
838 prompt:
841 prompt:
839
842
840 In[1]: %name -opt foo bar
843 In[1]: %name -opt foo bar
841
844
842 To call a magic without arguments, simply use ipmagic('name').
845 To call a magic without arguments, simply use ipmagic('name').
843
846
844 This provides a proper Python function to call IPython's magics in any
847 This provides a proper Python function to call IPython's magics in any
845 valid Python code you can type at the interpreter, including loops and
848 valid Python code you can type at the interpreter, including loops and
846 compound statements. It is added by IPython to the Python builtin
849 compound statements. It is added by IPython to the Python builtin
847 namespace upon initialization."""
850 namespace upon initialization."""
848
851
849 args = arg_s.split(' ',1)
852 args = arg_s.split(' ',1)
850 magic_name = args[0]
853 magic_name = args[0]
851 magic_name = magic_name.lstrip(self.ESC_MAGIC)
854 magic_name = magic_name.lstrip(self.ESC_MAGIC)
852
855
853 try:
856 try:
854 magic_args = args[1]
857 magic_args = args[1]
855 except IndexError:
858 except IndexError:
856 magic_args = ''
859 magic_args = ''
857 fn = getattr(self,'magic_'+magic_name,None)
860 fn = getattr(self,'magic_'+magic_name,None)
858 if fn is None:
861 if fn is None:
859 error("Magic function `%s` not found." % magic_name)
862 error("Magic function `%s` not found." % magic_name)
860 else:
863 else:
861 magic_args = self.var_expand(magic_args)
864 magic_args = self.var_expand(magic_args)
862 return fn(magic_args)
865 return fn(magic_args)
863
866
864 def ipalias(self,arg_s):
867 def ipalias(self,arg_s):
865 """Call an alias by name.
868 """Call an alias by name.
866
869
867 Input: a string containing the name of the alias to call and any
870 Input: a string containing the name of the alias to call and any
868 additional arguments to be passed to the magic.
871 additional arguments to be passed to the magic.
869
872
870 ipalias('name -opt foo bar') is equivalent to typing at the ipython
873 ipalias('name -opt foo bar') is equivalent to typing at the ipython
871 prompt:
874 prompt:
872
875
873 In[1]: name -opt foo bar
876 In[1]: name -opt foo bar
874
877
875 To call an alias without arguments, simply use ipalias('name').
878 To call an alias without arguments, simply use ipalias('name').
876
879
877 This provides a proper Python function to call IPython's aliases in any
880 This provides a proper Python function to call IPython's aliases in any
878 valid Python code you can type at the interpreter, including loops and
881 valid Python code you can type at the interpreter, including loops and
879 compound statements. It is added by IPython to the Python builtin
882 compound statements. It is added by IPython to the Python builtin
880 namespace upon initialization."""
883 namespace upon initialization."""
881
884
882 args = arg_s.split(' ',1)
885 args = arg_s.split(' ',1)
883 alias_name = args[0]
886 alias_name = args[0]
884 try:
887 try:
885 alias_args = args[1]
888 alias_args = args[1]
886 except IndexError:
889 except IndexError:
887 alias_args = ''
890 alias_args = ''
888 if alias_name in self.alias_table:
891 if alias_name in self.alias_table:
889 self.call_alias(alias_name,alias_args)
892 self.call_alias(alias_name,alias_args)
890 else:
893 else:
891 error("Alias `%s` not found." % alias_name)
894 error("Alias `%s` not found." % alias_name)
892
895
893 def ipsystem(self,arg_s):
896 def ipsystem(self,arg_s):
894 """Make a system call, using IPython."""
897 """Make a system call, using IPython."""
895
898
896 self.system(arg_s)
899 self.system(arg_s)
897
900
898 def complete(self,text):
901 def complete(self,text):
899 """Return a sorted list of all possible completions on text.
902 """Return a sorted list of all possible completions on text.
900
903
901 Inputs:
904 Inputs:
902
905
903 - text: a string of text to be completed on.
906 - text: a string of text to be completed on.
904
907
905 This is a wrapper around the completion mechanism, similar to what
908 This is a wrapper around the completion mechanism, similar to what
906 readline does at the command line when the TAB key is hit. By
909 readline does at the command line when the TAB key is hit. By
907 exposing it as a method, it can be used by other non-readline
910 exposing it as a method, it can be used by other non-readline
908 environments (such as GUIs) for text completion.
911 environments (such as GUIs) for text completion.
909
912
910 Simple usage example:
913 Simple usage example:
911
914
912 In [1]: x = 'hello'
915 In [1]: x = 'hello'
913
916
914 In [2]: __IP.complete('x.l')
917 In [2]: __IP.complete('x.l')
915 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
918 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
916
919
917 complete = self.Completer.complete
920 complete = self.Completer.complete
918 state = 0
921 state = 0
919 # use a dict so we get unique keys, since ipyhton's multiple
922 # use a dict so we get unique keys, since ipyhton's multiple
920 # completers can return duplicates.
923 # completers can return duplicates.
921 comps = {}
924 comps = {}
922 while True:
925 while True:
923 newcomp = complete(text,state)
926 newcomp = complete(text,state)
924 if newcomp is None:
927 if newcomp is None:
925 break
928 break
926 comps[newcomp] = 1
929 comps[newcomp] = 1
927 state += 1
930 state += 1
928 outcomps = comps.keys()
931 outcomps = comps.keys()
929 outcomps.sort()
932 outcomps.sort()
930 return outcomps
933 return outcomps
931
934
932 def set_completer_frame(self, frame=None):
935 def set_completer_frame(self, frame=None):
933 if frame:
936 if frame:
934 self.Completer.namespace = frame.f_locals
937 self.Completer.namespace = frame.f_locals
935 self.Completer.global_namespace = frame.f_globals
938 self.Completer.global_namespace = frame.f_globals
936 else:
939 else:
937 self.Completer.namespace = self.user_ns
940 self.Completer.namespace = self.user_ns
938 self.Completer.global_namespace = self.user_global_ns
941 self.Completer.global_namespace = self.user_global_ns
939
942
940 def init_auto_alias(self):
943 def init_auto_alias(self):
941 """Define some aliases automatically.
944 """Define some aliases automatically.
942
945
943 These are ALL parameter-less aliases"""
946 These are ALL parameter-less aliases"""
944
947
945 for alias,cmd in self.auto_alias:
948 for alias,cmd in self.auto_alias:
946 self.alias_table[alias] = (0,cmd)
949 self.alias_table[alias] = (0,cmd)
947
950
948 def alias_table_validate(self,verbose=0):
951 def alias_table_validate(self,verbose=0):
949 """Update information about the alias table.
952 """Update information about the alias table.
950
953
951 In particular, make sure no Python keywords/builtins are in it."""
954 In particular, make sure no Python keywords/builtins are in it."""
952
955
953 no_alias = self.no_alias
956 no_alias = self.no_alias
954 for k in self.alias_table.keys():
957 for k in self.alias_table.keys():
955 if k in no_alias:
958 if k in no_alias:
956 del self.alias_table[k]
959 del self.alias_table[k]
957 if verbose:
960 if verbose:
958 print ("Deleting alias <%s>, it's a Python "
961 print ("Deleting alias <%s>, it's a Python "
959 "keyword or builtin." % k)
962 "keyword or builtin." % k)
960
963
961 def set_autoindent(self,value=None):
964 def set_autoindent(self,value=None):
962 """Set the autoindent flag, checking for readline support.
965 """Set the autoindent flag, checking for readline support.
963
966
964 If called with no arguments, it acts as a toggle."""
967 If called with no arguments, it acts as a toggle."""
965
968
966 if not self.has_readline:
969 if not self.has_readline:
967 if os.name == 'posix':
970 if os.name == 'posix':
968 warn("The auto-indent feature requires the readline library")
971 warn("The auto-indent feature requires the readline library")
969 self.autoindent = 0
972 self.autoindent = 0
970 return
973 return
971 if value is None:
974 if value is None:
972 self.autoindent = not self.autoindent
975 self.autoindent = not self.autoindent
973 else:
976 else:
974 self.autoindent = value
977 self.autoindent = value
975
978
976 def rc_set_toggle(self,rc_field,value=None):
979 def rc_set_toggle(self,rc_field,value=None):
977 """Set or toggle a field in IPython's rc config. structure.
980 """Set or toggle a field in IPython's rc config. structure.
978
981
979 If called with no arguments, it acts as a toggle.
982 If called with no arguments, it acts as a toggle.
980
983
981 If called with a non-existent field, the resulting AttributeError
984 If called with a non-existent field, the resulting AttributeError
982 exception will propagate out."""
985 exception will propagate out."""
983
986
984 rc_val = getattr(self.rc,rc_field)
987 rc_val = getattr(self.rc,rc_field)
985 if value is None:
988 if value is None:
986 value = not rc_val
989 value = not rc_val
987 setattr(self.rc,rc_field,value)
990 setattr(self.rc,rc_field,value)
988
991
989 def user_setup(self,ipythondir,rc_suffix,mode='install'):
992 def user_setup(self,ipythondir,rc_suffix,mode='install'):
990 """Install the user configuration directory.
993 """Install the user configuration directory.
991
994
992 Can be called when running for the first time or to upgrade the user's
995 Can be called when running for the first time or to upgrade the user's
993 .ipython/ directory with the mode parameter. Valid modes are 'install'
996 .ipython/ directory with the mode parameter. Valid modes are 'install'
994 and 'upgrade'."""
997 and 'upgrade'."""
995
998
996 def wait():
999 def wait():
997 try:
1000 try:
998 raw_input("Please press <RETURN> to start IPython.")
1001 raw_input("Please press <RETURN> to start IPython.")
999 except EOFError:
1002 except EOFError:
1000 print >> Term.cout
1003 print >> Term.cout
1001 print '*'*70
1004 print '*'*70
1002
1005
1003 cwd = os.getcwd() # remember where we started
1006 cwd = os.getcwd() # remember where we started
1004 glb = glob.glob
1007 glb = glob.glob
1005 print '*'*70
1008 print '*'*70
1006 if mode == 'install':
1009 if mode == 'install':
1007 print \
1010 print \
1008 """Welcome to IPython. I will try to create a personal configuration directory
1011 """Welcome to IPython. I will try to create a personal configuration directory
1009 where you can customize many aspects of IPython's functionality in:\n"""
1012 where you can customize many aspects of IPython's functionality in:\n"""
1010 else:
1013 else:
1011 print 'I am going to upgrade your configuration in:'
1014 print 'I am going to upgrade your configuration in:'
1012
1015
1013 print ipythondir
1016 print ipythondir
1014
1017
1015 rcdirend = os.path.join('IPython','UserConfig')
1018 rcdirend = os.path.join('IPython','UserConfig')
1016 cfg = lambda d: os.path.join(d,rcdirend)
1019 cfg = lambda d: os.path.join(d,rcdirend)
1017 try:
1020 try:
1018 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1021 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1019 except IOError:
1022 except IOError:
1020 warning = """
1023 warning = """
1021 Installation error. IPython's directory was not found.
1024 Installation error. IPython's directory was not found.
1022
1025
1023 Check the following:
1026 Check the following:
1024
1027
1025 The ipython/IPython directory should be in a directory belonging to your
1028 The ipython/IPython directory should be in a directory belonging to your
1026 PYTHONPATH environment variable (that is, it should be in a directory
1029 PYTHONPATH environment variable (that is, it should be in a directory
1027 belonging to sys.path). You can copy it explicitly there or just link to it.
1030 belonging to sys.path). You can copy it explicitly there or just link to it.
1028
1031
1029 IPython will proceed with builtin defaults.
1032 IPython will proceed with builtin defaults.
1030 """
1033 """
1031 warn(warning)
1034 warn(warning)
1032 wait()
1035 wait()
1033 return
1036 return
1034
1037
1035 if mode == 'install':
1038 if mode == 'install':
1036 try:
1039 try:
1037 shutil.copytree(rcdir,ipythondir)
1040 shutil.copytree(rcdir,ipythondir)
1038 os.chdir(ipythondir)
1041 os.chdir(ipythondir)
1039 rc_files = glb("ipythonrc*")
1042 rc_files = glb("ipythonrc*")
1040 for rc_file in rc_files:
1043 for rc_file in rc_files:
1041 os.rename(rc_file,rc_file+rc_suffix)
1044 os.rename(rc_file,rc_file+rc_suffix)
1042 except:
1045 except:
1043 warning = """
1046 warning = """
1044
1047
1045 There was a problem with the installation:
1048 There was a problem with the installation:
1046 %s
1049 %s
1047 Try to correct it or contact the developers if you think it's a bug.
1050 Try to correct it or contact the developers if you think it's a bug.
1048 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1051 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1049 warn(warning)
1052 warn(warning)
1050 wait()
1053 wait()
1051 return
1054 return
1052
1055
1053 elif mode == 'upgrade':
1056 elif mode == 'upgrade':
1054 try:
1057 try:
1055 os.chdir(ipythondir)
1058 os.chdir(ipythondir)
1056 except:
1059 except:
1057 print """
1060 print """
1058 Can not upgrade: changing to directory %s failed. Details:
1061 Can not upgrade: changing to directory %s failed. Details:
1059 %s
1062 %s
1060 """ % (ipythondir,sys.exc_info()[1])
1063 """ % (ipythondir,sys.exc_info()[1])
1061 wait()
1064 wait()
1062 return
1065 return
1063 else:
1066 else:
1064 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1067 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1065 for new_full_path in sources:
1068 for new_full_path in sources:
1066 new_filename = os.path.basename(new_full_path)
1069 new_filename = os.path.basename(new_full_path)
1067 if new_filename.startswith('ipythonrc'):
1070 if new_filename.startswith('ipythonrc'):
1068 new_filename = new_filename + rc_suffix
1071 new_filename = new_filename + rc_suffix
1069 # The config directory should only contain files, skip any
1072 # The config directory should only contain files, skip any
1070 # directories which may be there (like CVS)
1073 # directories which may be there (like CVS)
1071 if os.path.isdir(new_full_path):
1074 if os.path.isdir(new_full_path):
1072 continue
1075 continue
1073 if os.path.exists(new_filename):
1076 if os.path.exists(new_filename):
1074 old_file = new_filename+'.old'
1077 old_file = new_filename+'.old'
1075 if os.path.exists(old_file):
1078 if os.path.exists(old_file):
1076 os.remove(old_file)
1079 os.remove(old_file)
1077 os.rename(new_filename,old_file)
1080 os.rename(new_filename,old_file)
1078 shutil.copy(new_full_path,new_filename)
1081 shutil.copy(new_full_path,new_filename)
1079 else:
1082 else:
1080 raise ValueError,'unrecognized mode for install:',`mode`
1083 raise ValueError,'unrecognized mode for install:',`mode`
1081
1084
1082 # Fix line-endings to those native to each platform in the config
1085 # Fix line-endings to those native to each platform in the config
1083 # directory.
1086 # directory.
1084 try:
1087 try:
1085 os.chdir(ipythondir)
1088 os.chdir(ipythondir)
1086 except:
1089 except:
1087 print """
1090 print """
1088 Problem: changing to directory %s failed.
1091 Problem: changing to directory %s failed.
1089 Details:
1092 Details:
1090 %s
1093 %s
1091
1094
1092 Some configuration files may have incorrect line endings. This should not
1095 Some configuration files may have incorrect line endings. This should not
1093 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1096 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1094 wait()
1097 wait()
1095 else:
1098 else:
1096 for fname in glb('ipythonrc*'):
1099 for fname in glb('ipythonrc*'):
1097 try:
1100 try:
1098 native_line_ends(fname,backup=0)
1101 native_line_ends(fname,backup=0)
1099 except IOError:
1102 except IOError:
1100 pass
1103 pass
1101
1104
1102 if mode == 'install':
1105 if mode == 'install':
1103 print """
1106 print """
1104 Successful installation!
1107 Successful installation!
1105
1108
1106 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1109 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1107 IPython manual (there are both HTML and PDF versions supplied with the
1110 IPython manual (there are both HTML and PDF versions supplied with the
1108 distribution) to make sure that your system environment is properly configured
1111 distribution) to make sure that your system environment is properly configured
1109 to take advantage of IPython's features.
1112 to take advantage of IPython's features.
1110
1113
1111 Important note: the configuration system has changed! The old system is
1114 Important note: the configuration system has changed! The old system is
1112 still in place, but its setting may be partly overridden by the settings in
1115 still in place, but its setting may be partly overridden by the settings in
1113 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1116 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1114 if some of the new settings bother you.
1117 if some of the new settings bother you.
1115
1118
1116 """
1119 """
1117 else:
1120 else:
1118 print """
1121 print """
1119 Successful upgrade!
1122 Successful upgrade!
1120
1123
1121 All files in your directory:
1124 All files in your directory:
1122 %(ipythondir)s
1125 %(ipythondir)s
1123 which would have been overwritten by the upgrade were backed up with a .old
1126 which would have been overwritten by the upgrade were backed up with a .old
1124 extension. If you had made particular customizations in those files you may
1127 extension. If you had made particular customizations in those files you may
1125 want to merge them back into the new files.""" % locals()
1128 want to merge them back into the new files.""" % locals()
1126 wait()
1129 wait()
1127 os.chdir(cwd)
1130 os.chdir(cwd)
1128 # end user_setup()
1131 # end user_setup()
1129
1132
1130 def atexit_operations(self):
1133 def atexit_operations(self):
1131 """This will be executed at the time of exit.
1134 """This will be executed at the time of exit.
1132
1135
1133 Saving of persistent data should be performed here. """
1136 Saving of persistent data should be performed here. """
1134
1137
1135 #print '*** IPython exit cleanup ***' # dbg
1138 #print '*** IPython exit cleanup ***' # dbg
1136 # input history
1139 # input history
1137 self.savehist()
1140 self.savehist()
1138
1141
1139 # Cleanup all tempfiles left around
1142 # Cleanup all tempfiles left around
1140 for tfile in self.tempfiles:
1143 for tfile in self.tempfiles:
1141 try:
1144 try:
1142 os.unlink(tfile)
1145 os.unlink(tfile)
1143 except OSError:
1146 except OSError:
1144 pass
1147 pass
1145
1148
1146 # save the "persistent data" catch-all dictionary
1149 # save the "persistent data" catch-all dictionary
1147 try:
1150 try:
1148 pickle.dump(self.persist, open(self.persist_fname,"w"))
1151 pickle.dump(self.persist, open(self.persist_fname,"w"))
1149 except:
1152 except:
1150 print "*** ERROR *** persistent data saving failed."
1153 print "*** ERROR *** persistent data saving failed."
1151
1154
1152 def savehist(self):
1155 def savehist(self):
1153 """Save input history to a file (via readline library)."""
1156 """Save input history to a file (via readline library)."""
1154 try:
1157 try:
1155 self.readline.write_history_file(self.histfile)
1158 self.readline.write_history_file(self.histfile)
1156 except:
1159 except:
1157 print 'Unable to save IPython command history to file: ' + \
1160 print 'Unable to save IPython command history to file: ' + \
1158 `self.histfile`
1161 `self.histfile`
1159
1162
1160 def pre_readline(self):
1163 def pre_readline(self):
1161 """readline hook to be used at the start of each line.
1164 """readline hook to be used at the start of each line.
1162
1165
1163 Currently it handles auto-indent only."""
1166 Currently it handles auto-indent only."""
1164
1167
1165 #debugx('self.indent_current_nsp','pre_readline:')
1168 #debugx('self.indent_current_nsp','pre_readline:')
1166 self.readline.insert_text(self.indent_current_str())
1169 self.readline.insert_text(self.indent_current_str())
1167
1170
1168 def init_readline(self):
1171 def init_readline(self):
1169 """Command history completion/saving/reloading."""
1172 """Command history completion/saving/reloading."""
1170 try:
1173 try:
1171 import readline
1174 import readline
1172 except ImportError:
1175 except ImportError:
1173 self.has_readline = 0
1176 self.has_readline = 0
1174 self.readline = None
1177 self.readline = None
1175 # no point in bugging windows users with this every time:
1178 # no point in bugging windows users with this every time:
1176 if os.name == 'posix':
1179 if os.name == 'posix':
1177 warn('Readline services not available on this platform.')
1180 warn('Readline services not available on this platform.')
1178 else:
1181 else:
1179 import atexit
1182 import atexit
1180 from IPython.completer import IPCompleter
1183 from IPython.completer import IPCompleter
1181 self.Completer = IPCompleter(self,
1184 self.Completer = IPCompleter(self,
1182 self.user_ns,
1185 self.user_ns,
1183 self.user_global_ns,
1186 self.user_global_ns,
1184 self.rc.readline_omit__names,
1187 self.rc.readline_omit__names,
1185 self.alias_table)
1188 self.alias_table)
1186
1189
1187 # Platform-specific configuration
1190 # Platform-specific configuration
1188 if os.name == 'nt':
1191 if os.name == 'nt':
1189 self.readline_startup_hook = readline.set_pre_input_hook
1192 self.readline_startup_hook = readline.set_pre_input_hook
1190 else:
1193 else:
1191 self.readline_startup_hook = readline.set_startup_hook
1194 self.readline_startup_hook = readline.set_startup_hook
1192
1195
1193 # Load user's initrc file (readline config)
1196 # Load user's initrc file (readline config)
1194 inputrc_name = os.environ.get('INPUTRC')
1197 inputrc_name = os.environ.get('INPUTRC')
1195 if inputrc_name is None:
1198 if inputrc_name is None:
1196 home_dir = get_home_dir()
1199 home_dir = get_home_dir()
1197 if home_dir is not None:
1200 if home_dir is not None:
1198 inputrc_name = os.path.join(home_dir,'.inputrc')
1201 inputrc_name = os.path.join(home_dir,'.inputrc')
1199 if os.path.isfile(inputrc_name):
1202 if os.path.isfile(inputrc_name):
1200 try:
1203 try:
1201 readline.read_init_file(inputrc_name)
1204 readline.read_init_file(inputrc_name)
1202 except:
1205 except:
1203 warn('Problems reading readline initialization file <%s>'
1206 warn('Problems reading readline initialization file <%s>'
1204 % inputrc_name)
1207 % inputrc_name)
1205
1208
1206 self.has_readline = 1
1209 self.has_readline = 1
1207 self.readline = readline
1210 self.readline = readline
1208 # save this in sys so embedded copies can restore it properly
1211 # save this in sys so embedded copies can restore it properly
1209 sys.ipcompleter = self.Completer.complete
1212 sys.ipcompleter = self.Completer.complete
1210 readline.set_completer(self.Completer.complete)
1213 readline.set_completer(self.Completer.complete)
1211
1214
1212 # Configure readline according to user's prefs
1215 # Configure readline according to user's prefs
1213 for rlcommand in self.rc.readline_parse_and_bind:
1216 for rlcommand in self.rc.readline_parse_and_bind:
1214 readline.parse_and_bind(rlcommand)
1217 readline.parse_and_bind(rlcommand)
1215
1218
1216 # remove some chars from the delimiters list
1219 # remove some chars from the delimiters list
1217 delims = readline.get_completer_delims()
1220 delims = readline.get_completer_delims()
1218 delims = delims.translate(string._idmap,
1221 delims = delims.translate(string._idmap,
1219 self.rc.readline_remove_delims)
1222 self.rc.readline_remove_delims)
1220 readline.set_completer_delims(delims)
1223 readline.set_completer_delims(delims)
1221 # otherwise we end up with a monster history after a while:
1224 # otherwise we end up with a monster history after a while:
1222 readline.set_history_length(1000)
1225 readline.set_history_length(1000)
1223 try:
1226 try:
1224 #print '*** Reading readline history' # dbg
1227 #print '*** Reading readline history' # dbg
1225 readline.read_history_file(self.histfile)
1228 readline.read_history_file(self.histfile)
1226 except IOError:
1229 except IOError:
1227 pass # It doesn't exist yet.
1230 pass # It doesn't exist yet.
1228
1231
1229 atexit.register(self.atexit_operations)
1232 atexit.register(self.atexit_operations)
1230 del atexit
1233 del atexit
1231
1234
1232 # Configure auto-indent for all platforms
1235 # Configure auto-indent for all platforms
1233 self.set_autoindent(self.rc.autoindent)
1236 self.set_autoindent(self.rc.autoindent)
1234
1237
1235 def _should_recompile(self,e):
1238 def _should_recompile(self,e):
1236 """Utility routine for edit_syntax_error"""
1239 """Utility routine for edit_syntax_error"""
1237
1240
1238 if e.filename in ('<ipython console>','<input>','<string>',
1241 if e.filename in ('<ipython console>','<input>','<string>',
1239 '<console>',None):
1242 '<console>',None):
1240
1243
1241 return False
1244 return False
1242 try:
1245 try:
1243 if not ask_yes_no('Return to editor to correct syntax error? '
1246 if (self.rc.autoedit_syntax != 2 and
1244 '[Y/n] ','y'):
1247 not ask_yes_no('Return to editor to correct syntax error? '
1248 '[Y/n] ','y')):
1245 return False
1249 return False
1246 except EOFError:
1250 except EOFError:
1247 return False
1251 return False
1248
1252
1249 def int0(x):
1253 def int0(x):
1250 try:
1254 try:
1251 return int(x)
1255 return int(x)
1252 except TypeError:
1256 except TypeError:
1253 return 0
1257 return 0
1254 # always pass integer line and offset values to editor hook
1258 # always pass integer line and offset values to editor hook
1255 self.hooks.fix_error_editor(e.filename,
1259 self.hooks.fix_error_editor(e.filename,
1256 int0(e.lineno),int0(e.offset),e.msg)
1260 int0(e.lineno),int0(e.offset),e.msg)
1257 return True
1261 return True
1258
1262
1259 def edit_syntax_error(self):
1263 def edit_syntax_error(self):
1260 """The bottom half of the syntax error handler called in the main loop.
1264 """The bottom half of the syntax error handler called in the main loop.
1261
1265
1262 Loop until syntax error is fixed or user cancels.
1266 Loop until syntax error is fixed or user cancels.
1263 """
1267 """
1264
1268
1265 while self.SyntaxTB.last_syntax_error:
1269 while self.SyntaxTB.last_syntax_error:
1266 # copy and clear last_syntax_error
1270 # copy and clear last_syntax_error
1267 err = self.SyntaxTB.clear_err_state()
1271 err = self.SyntaxTB.clear_err_state()
1268 if not self._should_recompile(err):
1272 if not self._should_recompile(err):
1269 return
1273 return
1270 try:
1274 try:
1271 # may set last_syntax_error again if a SyntaxError is raised
1275 # may set last_syntax_error again if a SyntaxError is raised
1272 self.safe_execfile(err.filename,self.shell.user_ns)
1276 self.safe_execfile(err.filename,self.shell.user_ns)
1273 except:
1277 except:
1274 self.showtraceback()
1278 self.showtraceback()
1275 else:
1279 else:
1276 f = file(err.filename)
1280 f = file(err.filename)
1277 try:
1281 try:
1278 sys.displayhook(f.read())
1282 sys.displayhook(f.read())
1279 finally:
1283 finally:
1280 f.close()
1284 f.close()
1281
1285
1282 def showsyntaxerror(self, filename=None):
1286 def showsyntaxerror(self, filename=None):
1283 """Display the syntax error that just occurred.
1287 """Display the syntax error that just occurred.
1284
1288
1285 This doesn't display a stack trace because there isn't one.
1289 This doesn't display a stack trace because there isn't one.
1286
1290
1287 If a filename is given, it is stuffed in the exception instead
1291 If a filename is given, it is stuffed in the exception instead
1288 of what was there before (because Python's parser always uses
1292 of what was there before (because Python's parser always uses
1289 "<string>" when reading from a string).
1293 "<string>" when reading from a string).
1290 """
1294 """
1291 etype, value, last_traceback = sys.exc_info()
1295 etype, value, last_traceback = sys.exc_info()
1292 if filename and etype is SyntaxError:
1296 if filename and etype is SyntaxError:
1293 # Work hard to stuff the correct filename in the exception
1297 # Work hard to stuff the correct filename in the exception
1294 try:
1298 try:
1295 msg, (dummy_filename, lineno, offset, line) = value
1299 msg, (dummy_filename, lineno, offset, line) = value
1296 except:
1300 except:
1297 # Not the format we expect; leave it alone
1301 # Not the format we expect; leave it alone
1298 pass
1302 pass
1299 else:
1303 else:
1300 # Stuff in the right filename
1304 # Stuff in the right filename
1301 try:
1305 try:
1302 # Assume SyntaxError is a class exception
1306 # Assume SyntaxError is a class exception
1303 value = SyntaxError(msg, (filename, lineno, offset, line))
1307 value = SyntaxError(msg, (filename, lineno, offset, line))
1304 except:
1308 except:
1305 # If that failed, assume SyntaxError is a string
1309 # If that failed, assume SyntaxError is a string
1306 value = msg, (filename, lineno, offset, line)
1310 value = msg, (filename, lineno, offset, line)
1307 self.SyntaxTB(etype,value,[])
1311 self.SyntaxTB(etype,value,[])
1308
1312
1309 def debugger(self):
1313 def debugger(self):
1310 """Call the pdb debugger."""
1314 """Call the pdb debugger."""
1311
1315
1312 if not self.rc.pdb:
1316 if not self.rc.pdb:
1313 return
1317 return
1314 pdb.pm()
1318 pdb.pm()
1315
1319
1316 def showtraceback(self,exc_tuple = None,filename=None):
1320 def showtraceback(self,exc_tuple = None,filename=None):
1317 """Display the exception that just occurred."""
1321 """Display the exception that just occurred."""
1318
1322
1319 # Though this won't be called by syntax errors in the input line,
1323 # Though this won't be called by syntax errors in the input line,
1320 # there may be SyntaxError cases whith imported code.
1324 # there may be SyntaxError cases whith imported code.
1321 if exc_tuple is None:
1325 if exc_tuple is None:
1322 type, value, tb = sys.exc_info()
1326 type, value, tb = sys.exc_info()
1323 else:
1327 else:
1324 type, value, tb = exc_tuple
1328 type, value, tb = exc_tuple
1325 if type is SyntaxError:
1329 if type is SyntaxError:
1326 self.showsyntaxerror(filename)
1330 self.showsyntaxerror(filename)
1327 else:
1331 else:
1328 self.InteractiveTB()
1332 self.InteractiveTB()
1329 if self.InteractiveTB.call_pdb and self.has_readline:
1333 if self.InteractiveTB.call_pdb and self.has_readline:
1330 # pdb mucks up readline, fix it back
1334 # pdb mucks up readline, fix it back
1331 self.readline.set_completer(self.Completer.complete)
1335 self.readline.set_completer(self.Completer.complete)
1332
1336
1333 def mainloop(self,banner=None):
1337 def mainloop(self,banner=None):
1334 """Creates the local namespace and starts the mainloop.
1338 """Creates the local namespace and starts the mainloop.
1335
1339
1336 If an optional banner argument is given, it will override the
1340 If an optional banner argument is given, it will override the
1337 internally created default banner."""
1341 internally created default banner."""
1338
1342
1339 if self.rc.c: # Emulate Python's -c option
1343 if self.rc.c: # Emulate Python's -c option
1340 self.exec_init_cmd()
1344 self.exec_init_cmd()
1341 if banner is None:
1345 if banner is None:
1342 if self.rc.banner:
1346 if self.rc.banner:
1343 banner = self.BANNER+self.banner2
1347 banner = self.BANNER+self.banner2
1344 else:
1348 else:
1345 banner = ''
1349 banner = ''
1346 self.interact(banner)
1350 self.interact(banner)
1347
1351
1348 def exec_init_cmd(self):
1352 def exec_init_cmd(self):
1349 """Execute a command given at the command line.
1353 """Execute a command given at the command line.
1350
1354
1351 This emulates Python's -c option."""
1355 This emulates Python's -c option."""
1352
1356
1353 #sys.argv = ['-c']
1357 #sys.argv = ['-c']
1354 self.push(self.rc.c)
1358 self.push(self.rc.c)
1355
1359
1356 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1360 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1357 """Embeds IPython into a running python program.
1361 """Embeds IPython into a running python program.
1358
1362
1359 Input:
1363 Input:
1360
1364
1361 - header: An optional header message can be specified.
1365 - header: An optional header message can be specified.
1362
1366
1363 - local_ns, global_ns: working namespaces. If given as None, the
1367 - local_ns, global_ns: working namespaces. If given as None, the
1364 IPython-initialized one is updated with __main__.__dict__, so that
1368 IPython-initialized one is updated with __main__.__dict__, so that
1365 program variables become visible but user-specific configuration
1369 program variables become visible but user-specific configuration
1366 remains possible.
1370 remains possible.
1367
1371
1368 - stack_depth: specifies how many levels in the stack to go to
1372 - stack_depth: specifies how many levels in the stack to go to
1369 looking for namespaces (when local_ns and global_ns are None). This
1373 looking for namespaces (when local_ns and global_ns are None). This
1370 allows an intermediate caller to make sure that this function gets
1374 allows an intermediate caller to make sure that this function gets
1371 the namespace from the intended level in the stack. By default (0)
1375 the namespace from the intended level in the stack. By default (0)
1372 it will get its locals and globals from the immediate caller.
1376 it will get its locals and globals from the immediate caller.
1373
1377
1374 Warning: it's possible to use this in a program which is being run by
1378 Warning: it's possible to use this in a program which is being run by
1375 IPython itself (via %run), but some funny things will happen (a few
1379 IPython itself (via %run), but some funny things will happen (a few
1376 globals get overwritten). In the future this will be cleaned up, as
1380 globals get overwritten). In the future this will be cleaned up, as
1377 there is no fundamental reason why it can't work perfectly."""
1381 there is no fundamental reason why it can't work perfectly."""
1378
1382
1379 # Get locals and globals from caller
1383 # Get locals and globals from caller
1380 if local_ns is None or global_ns is None:
1384 if local_ns is None or global_ns is None:
1381 call_frame = sys._getframe(stack_depth).f_back
1385 call_frame = sys._getframe(stack_depth).f_back
1382
1386
1383 if local_ns is None:
1387 if local_ns is None:
1384 local_ns = call_frame.f_locals
1388 local_ns = call_frame.f_locals
1385 if global_ns is None:
1389 if global_ns is None:
1386 global_ns = call_frame.f_globals
1390 global_ns = call_frame.f_globals
1387
1391
1388 # Update namespaces and fire up interpreter
1392 # Update namespaces and fire up interpreter
1389
1393
1390 # The global one is easy, we can just throw it in
1394 # The global one is easy, we can just throw it in
1391 self.user_global_ns = global_ns
1395 self.user_global_ns = global_ns
1392
1396
1393 # but the user/local one is tricky: ipython needs it to store internal
1397 # but the user/local one is tricky: ipython needs it to store internal
1394 # data, but we also need the locals. We'll copy locals in the user
1398 # data, but we also need the locals. We'll copy locals in the user
1395 # one, but will track what got copied so we can delete them at exit.
1399 # one, but will track what got copied so we can delete them at exit.
1396 # This is so that a later embedded call doesn't see locals from a
1400 # This is so that a later embedded call doesn't see locals from a
1397 # previous call (which most likely existed in a separate scope).
1401 # previous call (which most likely existed in a separate scope).
1398 local_varnames = local_ns.keys()
1402 local_varnames = local_ns.keys()
1399 self.user_ns.update(local_ns)
1403 self.user_ns.update(local_ns)
1400
1404
1401 # Patch for global embedding to make sure that things don't overwrite
1405 # Patch for global embedding to make sure that things don't overwrite
1402 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1406 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1403 # FIXME. Test this a bit more carefully (the if.. is new)
1407 # FIXME. Test this a bit more carefully (the if.. is new)
1404 if local_ns is None and global_ns is None:
1408 if local_ns is None and global_ns is None:
1405 self.user_global_ns.update(__main__.__dict__)
1409 self.user_global_ns.update(__main__.__dict__)
1406
1410
1407 # make sure the tab-completer has the correct frame information, so it
1411 # make sure the tab-completer has the correct frame information, so it
1408 # actually completes using the frame's locals/globals
1412 # actually completes using the frame's locals/globals
1409 self.set_completer_frame()
1413 self.set_completer_frame()
1410
1414
1411 # before activating the interactive mode, we need to make sure that
1415 # before activating the interactive mode, we need to make sure that
1412 # all names in the builtin namespace needed by ipython point to
1416 # all names in the builtin namespace needed by ipython point to
1413 # ourselves, and not to other instances.
1417 # ourselves, and not to other instances.
1414 self.add_builtins()
1418 self.add_builtins()
1415
1419
1416 self.interact(header)
1420 self.interact(header)
1417
1421
1418 # now, purge out the user namespace from anything we might have added
1422 # now, purge out the user namespace from anything we might have added
1419 # from the caller's local namespace
1423 # from the caller's local namespace
1420 delvar = self.user_ns.pop
1424 delvar = self.user_ns.pop
1421 for var in local_varnames:
1425 for var in local_varnames:
1422 delvar(var,None)
1426 delvar(var,None)
1423 # and clean builtins we may have overridden
1427 # and clean builtins we may have overridden
1424 self.clean_builtins()
1428 self.clean_builtins()
1425
1429
1426 def interact(self, banner=None):
1430 def interact(self, banner=None):
1427 """Closely emulate the interactive Python console.
1431 """Closely emulate the interactive Python console.
1428
1432
1429 The optional banner argument specify the banner to print
1433 The optional banner argument specify the banner to print
1430 before the first interaction; by default it prints a banner
1434 before the first interaction; by default it prints a banner
1431 similar to the one printed by the real Python interpreter,
1435 similar to the one printed by the real Python interpreter,
1432 followed by the current class name in parentheses (so as not
1436 followed by the current class name in parentheses (so as not
1433 to confuse this with the real interpreter -- since it's so
1437 to confuse this with the real interpreter -- since it's so
1434 close!).
1438 close!).
1435
1439
1436 """
1440 """
1437 cprt = 'Type "copyright", "credits" or "license" for more information.'
1441 cprt = 'Type "copyright", "credits" or "license" for more information.'
1438 if banner is None:
1442 if banner is None:
1439 self.write("Python %s on %s\n%s\n(%s)\n" %
1443 self.write("Python %s on %s\n%s\n(%s)\n" %
1440 (sys.version, sys.platform, cprt,
1444 (sys.version, sys.platform, cprt,
1441 self.__class__.__name__))
1445 self.__class__.__name__))
1442 else:
1446 else:
1443 self.write(banner)
1447 self.write(banner)
1444
1448
1445 more = 0
1449 more = 0
1446
1450
1447 # Mark activity in the builtins
1451 # Mark activity in the builtins
1448 __builtin__.__dict__['__IPYTHON__active'] += 1
1452 __builtin__.__dict__['__IPYTHON__active'] += 1
1449
1453
1450 # exit_now is set by a call to %Exit or %Quit
1454 # exit_now is set by a call to %Exit or %Quit
1451 self.exit_now = False
1455 self.exit_now = False
1452 while not self.exit_now:
1456 while not self.exit_now:
1453
1457
1454 try:
1458 try:
1455 if more:
1459 if more:
1456 prompt = self.outputcache.prompt2
1460 prompt = self.outputcache.prompt2
1457 if self.autoindent:
1461 if self.autoindent:
1458 self.readline_startup_hook(self.pre_readline)
1462 self.readline_startup_hook(self.pre_readline)
1459 else:
1463 else:
1460 prompt = self.outputcache.prompt1
1464 prompt = self.outputcache.prompt1
1461 try:
1465 try:
1462 line = self.raw_input(prompt,more)
1466 line = self.raw_input(prompt,more)
1463 if self.autoindent:
1467 if self.autoindent:
1464 self.readline_startup_hook(None)
1468 self.readline_startup_hook(None)
1465 except EOFError:
1469 except EOFError:
1466 if self.autoindent:
1470 if self.autoindent:
1467 self.readline_startup_hook(None)
1471 self.readline_startup_hook(None)
1468 self.write("\n")
1472 self.write("\n")
1469 self.exit()
1473 self.exit()
1470 except:
1474 except:
1471 # exceptions here are VERY RARE, but they can be triggered
1475 # exceptions here are VERY RARE, but they can be triggered
1472 # asynchronously by signal handlers, for example.
1476 # asynchronously by signal handlers, for example.
1473 self.showtraceback()
1477 self.showtraceback()
1474 else:
1478 else:
1475 more = self.push(line)
1479 more = self.push(line)
1476
1480
1477 if (self.SyntaxTB.last_syntax_error and
1481 if (self.SyntaxTB.last_syntax_error and
1478 self.rc.autoedit_syntax):
1482 self.rc.autoedit_syntax):
1479 self.edit_syntax_error()
1483 self.edit_syntax_error()
1480
1484
1481 except KeyboardInterrupt:
1485 except KeyboardInterrupt:
1482 self.write("\nKeyboardInterrupt\n")
1486 self.write("\nKeyboardInterrupt\n")
1483 self.resetbuffer()
1487 self.resetbuffer()
1484 more = 0
1488 more = 0
1485 # keep cache in sync with the prompt counter:
1489 # keep cache in sync with the prompt counter:
1486 self.outputcache.prompt_count -= 1
1490 self.outputcache.prompt_count -= 1
1487
1491
1488 if self.autoindent:
1492 if self.autoindent:
1489 self.indent_current_nsp = 0
1493 self.indent_current_nsp = 0
1490
1494
1491 except bdb.BdbQuit:
1495 except bdb.BdbQuit:
1492 warn("The Python debugger has exited with a BdbQuit exception.\n"
1496 warn("The Python debugger has exited with a BdbQuit exception.\n"
1493 "Because of how pdb handles the stack, it is impossible\n"
1497 "Because of how pdb handles the stack, it is impossible\n"
1494 "for IPython to properly format this particular exception.\n"
1498 "for IPython to properly format this particular exception.\n"
1495 "IPython will resume normal operation.")
1499 "IPython will resume normal operation.")
1496
1500
1497 # We are off again...
1501 # We are off again...
1498 __builtin__.__dict__['__IPYTHON__active'] -= 1
1502 __builtin__.__dict__['__IPYTHON__active'] -= 1
1499
1503
1500 def excepthook(self, type, value, tb):
1504 def excepthook(self, type, value, tb):
1501 """One more defense for GUI apps that call sys.excepthook.
1505 """One more defense for GUI apps that call sys.excepthook.
1502
1506
1503 GUI frameworks like wxPython trap exceptions and call
1507 GUI frameworks like wxPython trap exceptions and call
1504 sys.excepthook themselves. I guess this is a feature that
1508 sys.excepthook themselves. I guess this is a feature that
1505 enables them to keep running after exceptions that would
1509 enables them to keep running after exceptions that would
1506 otherwise kill their mainloop. This is a bother for IPython
1510 otherwise kill their mainloop. This is a bother for IPython
1507 which excepts to catch all of the program exceptions with a try:
1511 which excepts to catch all of the program exceptions with a try:
1508 except: statement.
1512 except: statement.
1509
1513
1510 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1514 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1511 any app directly invokes sys.excepthook, it will look to the user like
1515 any app directly invokes sys.excepthook, it will look to the user like
1512 IPython crashed. In order to work around this, we can disable the
1516 IPython crashed. In order to work around this, we can disable the
1513 CrashHandler and replace it with this excepthook instead, which prints a
1517 CrashHandler and replace it with this excepthook instead, which prints a
1514 regular traceback using our InteractiveTB. In this fashion, apps which
1518 regular traceback using our InteractiveTB. In this fashion, apps which
1515 call sys.excepthook will generate a regular-looking exception from
1519 call sys.excepthook will generate a regular-looking exception from
1516 IPython, and the CrashHandler will only be triggered by real IPython
1520 IPython, and the CrashHandler will only be triggered by real IPython
1517 crashes.
1521 crashes.
1518
1522
1519 This hook should be used sparingly, only in places which are not likely
1523 This hook should be used sparingly, only in places which are not likely
1520 to be true IPython errors.
1524 to be true IPython errors.
1521 """
1525 """
1522
1526
1523 self.InteractiveTB(type, value, tb, tb_offset=0)
1527 self.InteractiveTB(type, value, tb, tb_offset=0)
1524 if self.InteractiveTB.call_pdb and self.has_readline:
1528 if self.InteractiveTB.call_pdb and self.has_readline:
1525 self.readline.set_completer(self.Completer.complete)
1529 self.readline.set_completer(self.Completer.complete)
1526
1530
1527 def call_alias(self,alias,rest=''):
1531 def call_alias(self,alias,rest=''):
1528 """Call an alias given its name and the rest of the line.
1532 """Call an alias given its name and the rest of the line.
1529
1533
1530 This function MUST be given a proper alias, because it doesn't make
1534 This function MUST be given a proper alias, because it doesn't make
1531 any checks when looking up into the alias table. The caller is
1535 any checks when looking up into the alias table. The caller is
1532 responsible for invoking it only with a valid alias."""
1536 responsible for invoking it only with a valid alias."""
1533
1537
1534 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1538 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1535 nargs,cmd = self.alias_table[alias]
1539 nargs,cmd = self.alias_table[alias]
1536 # Expand the %l special to be the user's input line
1540 # Expand the %l special to be the user's input line
1537 if cmd.find('%l') >= 0:
1541 if cmd.find('%l') >= 0:
1538 cmd = cmd.replace('%l',rest)
1542 cmd = cmd.replace('%l',rest)
1539 rest = ''
1543 rest = ''
1540 if nargs==0:
1544 if nargs==0:
1541 # Simple, argument-less aliases
1545 # Simple, argument-less aliases
1542 cmd = '%s %s' % (cmd,rest)
1546 cmd = '%s %s' % (cmd,rest)
1543 else:
1547 else:
1544 # Handle aliases with positional arguments
1548 # Handle aliases with positional arguments
1545 args = rest.split(None,nargs)
1549 args = rest.split(None,nargs)
1546 if len(args)< nargs:
1550 if len(args)< nargs:
1547 error('Alias <%s> requires %s arguments, %s given.' %
1551 error('Alias <%s> requires %s arguments, %s given.' %
1548 (alias,nargs,len(args)))
1552 (alias,nargs,len(args)))
1549 return
1553 return
1550 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1554 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1551 # Now call the macro, evaluating in the user's namespace
1555 # Now call the macro, evaluating in the user's namespace
1552 try:
1556 try:
1553 self.system(cmd)
1557 self.system(cmd)
1554 except:
1558 except:
1555 self.showtraceback()
1559 self.showtraceback()
1556
1560
1557 def indent_current_str(self):
1561 def indent_current_str(self):
1558 """return the current level of indentation as a string"""
1562 """return the current level of indentation as a string"""
1559 return self.indent_current_nsp * ' '
1563 return self.indent_current_nsp * ' '
1560
1564
1561 def autoindent_update(self,line):
1565 def autoindent_update(self,line):
1562 """Keep track of the indent level."""
1566 """Keep track of the indent level."""
1563
1567
1564 #debugx('line')
1568 #debugx('line')
1565 #debugx('self.indent_current_nsp')
1569 #debugx('self.indent_current_nsp')
1566 if self.autoindent:
1570 if self.autoindent:
1567 if line:
1571 if line:
1568 inisp = num_ini_spaces(line)
1572 inisp = num_ini_spaces(line)
1569 if inisp < self.indent_current_nsp:
1573 if inisp < self.indent_current_nsp:
1570 self.indent_current_nsp = inisp
1574 self.indent_current_nsp = inisp
1571
1575
1572 if line[-1] == ':':
1576 if line[-1] == ':':
1573 self.indent_current_nsp += 4
1577 self.indent_current_nsp += 4
1574 elif dedent_re.match(line):
1578 elif dedent_re.match(line):
1575 self.indent_current_nsp -= 4
1579 self.indent_current_nsp -= 4
1576 else:
1580 else:
1577 self.indent_current_nsp = 0
1581 self.indent_current_nsp = 0
1578
1582
1579 def runlines(self,lines):
1583 def runlines(self,lines):
1580 """Run a string of one or more lines of source.
1584 """Run a string of one or more lines of source.
1581
1585
1582 This method is capable of running a string containing multiple source
1586 This method is capable of running a string containing multiple source
1583 lines, as if they had been entered at the IPython prompt. Since it
1587 lines, as if they had been entered at the IPython prompt. Since it
1584 exposes IPython's processing machinery, the given strings can contain
1588 exposes IPython's processing machinery, the given strings can contain
1585 magic calls (%magic), special shell access (!cmd), etc."""
1589 magic calls (%magic), special shell access (!cmd), etc."""
1586
1590
1587 # We must start with a clean buffer, in case this is run from an
1591 # We must start with a clean buffer, in case this is run from an
1588 # interactive IPython session (via a magic, for example).
1592 # interactive IPython session (via a magic, for example).
1589 self.resetbuffer()
1593 self.resetbuffer()
1590 lines = lines.split('\n')
1594 lines = lines.split('\n')
1591 more = 0
1595 more = 0
1592 for line in lines:
1596 for line in lines:
1593 # skip blank lines so we don't mess up the prompt counter, but do
1597 # skip blank lines so we don't mess up the prompt counter, but do
1594 # NOT skip even a blank line if we are in a code block (more is
1598 # NOT skip even a blank line if we are in a code block (more is
1595 # true)
1599 # true)
1596 if line or more:
1600 if line or more:
1597 more = self.push(self.prefilter(line,more))
1601 more = self.push(self.prefilter(line,more))
1598 # IPython's runsource returns None if there was an error
1602 # IPython's runsource returns None if there was an error
1599 # compiling the code. This allows us to stop processing right
1603 # compiling the code. This allows us to stop processing right
1600 # away, so the user gets the error message at the right place.
1604 # away, so the user gets the error message at the right place.
1601 if more is None:
1605 if more is None:
1602 break
1606 break
1603 # final newline in case the input didn't have it, so that the code
1607 # final newline in case the input didn't have it, so that the code
1604 # actually does get executed
1608 # actually does get executed
1605 if more:
1609 if more:
1606 self.push('\n')
1610 self.push('\n')
1607
1611
1608 def runsource(self, source, filename='<input>', symbol='single'):
1612 def runsource(self, source, filename='<input>', symbol='single'):
1609 """Compile and run some source in the interpreter.
1613 """Compile and run some source in the interpreter.
1610
1614
1611 Arguments are as for compile_command().
1615 Arguments are as for compile_command().
1612
1616
1613 One several things can happen:
1617 One several things can happen:
1614
1618
1615 1) The input is incorrect; compile_command() raised an
1619 1) The input is incorrect; compile_command() raised an
1616 exception (SyntaxError or OverflowError). A syntax traceback
1620 exception (SyntaxError or OverflowError). A syntax traceback
1617 will be printed by calling the showsyntaxerror() method.
1621 will be printed by calling the showsyntaxerror() method.
1618
1622
1619 2) The input is incomplete, and more input is required;
1623 2) The input is incomplete, and more input is required;
1620 compile_command() returned None. Nothing happens.
1624 compile_command() returned None. Nothing happens.
1621
1625
1622 3) The input is complete; compile_command() returned a code
1626 3) The input is complete; compile_command() returned a code
1623 object. The code is executed by calling self.runcode() (which
1627 object. The code is executed by calling self.runcode() (which
1624 also handles run-time exceptions, except for SystemExit).
1628 also handles run-time exceptions, except for SystemExit).
1625
1629
1626 The return value is:
1630 The return value is:
1627
1631
1628 - True in case 2
1632 - True in case 2
1629
1633
1630 - False in the other cases, unless an exception is raised, where
1634 - False in the other cases, unless an exception is raised, where
1631 None is returned instead. This can be used by external callers to
1635 None is returned instead. This can be used by external callers to
1632 know whether to continue feeding input or not.
1636 know whether to continue feeding input or not.
1633
1637
1634 The return value can be used to decide whether to use sys.ps1 or
1638 The return value can be used to decide whether to use sys.ps1 or
1635 sys.ps2 to prompt the next line."""
1639 sys.ps2 to prompt the next line."""
1636
1640
1637 try:
1641 try:
1638 code = self.compile(source,filename,symbol)
1642 code = self.compile(source,filename,symbol)
1639 except (OverflowError, SyntaxError, ValueError):
1643 except (OverflowError, SyntaxError, ValueError):
1640 # Case 1
1644 # Case 1
1641 self.showsyntaxerror(filename)
1645 self.showsyntaxerror(filename)
1642 return None
1646 return None
1643
1647
1644 if code is None:
1648 if code is None:
1645 # Case 2
1649 # Case 2
1646 return True
1650 return True
1647
1651
1648 # Case 3
1652 # Case 3
1649 # We store the code object so that threaded shells and
1653 # We store the code object so that threaded shells and
1650 # custom exception handlers can access all this info if needed.
1654 # custom exception handlers can access all this info if needed.
1651 # The source corresponding to this can be obtained from the
1655 # The source corresponding to this can be obtained from the
1652 # buffer attribute as '\n'.join(self.buffer).
1656 # buffer attribute as '\n'.join(self.buffer).
1653 self.code_to_run = code
1657 self.code_to_run = code
1654 # now actually execute the code object
1658 # now actually execute the code object
1655 if self.runcode(code) == 0:
1659 if self.runcode(code) == 0:
1656 return False
1660 return False
1657 else:
1661 else:
1658 return None
1662 return None
1659
1663
1660 def runcode(self,code_obj):
1664 def runcode(self,code_obj):
1661 """Execute a code object.
1665 """Execute a code object.
1662
1666
1663 When an exception occurs, self.showtraceback() is called to display a
1667 When an exception occurs, self.showtraceback() is called to display a
1664 traceback.
1668 traceback.
1665
1669
1666 Return value: a flag indicating whether the code to be run completed
1670 Return value: a flag indicating whether the code to be run completed
1667 successfully:
1671 successfully:
1668
1672
1669 - 0: successful execution.
1673 - 0: successful execution.
1670 - 1: an error occurred.
1674 - 1: an error occurred.
1671 """
1675 """
1672
1676
1673 # Set our own excepthook in case the user code tries to call it
1677 # Set our own excepthook in case the user code tries to call it
1674 # directly, so that the IPython crash handler doesn't get triggered
1678 # directly, so that the IPython crash handler doesn't get triggered
1675 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1679 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1676
1680
1677 # we save the original sys.excepthook in the instance, in case config
1681 # we save the original sys.excepthook in the instance, in case config
1678 # code (such as magics) needs access to it.
1682 # code (such as magics) needs access to it.
1679 self.sys_excepthook = old_excepthook
1683 self.sys_excepthook = old_excepthook
1680 outflag = 1 # happens in more places, so it's easier as default
1684 outflag = 1 # happens in more places, so it's easier as default
1681 try:
1685 try:
1682 try:
1686 try:
1683 # Embedded instances require separate global/local namespaces
1687 # Embedded instances require separate global/local namespaces
1684 # so they can see both the surrounding (local) namespace and
1688 # so they can see both the surrounding (local) namespace and
1685 # the module-level globals when called inside another function.
1689 # the module-level globals when called inside another function.
1686 if self.embedded:
1690 if self.embedded:
1687 exec code_obj in self.user_global_ns, self.user_ns
1691 exec code_obj in self.user_global_ns, self.user_ns
1688 # Normal (non-embedded) instances should only have a single
1692 # Normal (non-embedded) instances should only have a single
1689 # namespace for user code execution, otherwise functions won't
1693 # namespace for user code execution, otherwise functions won't
1690 # see interactive top-level globals.
1694 # see interactive top-level globals.
1691 else:
1695 else:
1692 exec code_obj in self.user_ns
1696 exec code_obj in self.user_ns
1693 finally:
1697 finally:
1694 # Reset our crash handler in place
1698 # Reset our crash handler in place
1695 sys.excepthook = old_excepthook
1699 sys.excepthook = old_excepthook
1696 except SystemExit:
1700 except SystemExit:
1697 self.resetbuffer()
1701 self.resetbuffer()
1698 self.showtraceback()
1702 self.showtraceback()
1699 warn("Type exit or quit to exit IPython "
1703 warn("Type exit or quit to exit IPython "
1700 "(%Exit or %Quit do so unconditionally).",level=1)
1704 "(%Exit or %Quit do so unconditionally).",level=1)
1701 except self.custom_exceptions:
1705 except self.custom_exceptions:
1702 etype,value,tb = sys.exc_info()
1706 etype,value,tb = sys.exc_info()
1703 self.CustomTB(etype,value,tb)
1707 self.CustomTB(etype,value,tb)
1704 except:
1708 except:
1705 self.showtraceback()
1709 self.showtraceback()
1706 else:
1710 else:
1707 outflag = 0
1711 outflag = 0
1708 if softspace(sys.stdout, 0):
1712 if softspace(sys.stdout, 0):
1709 print
1713 print
1710 # Flush out code object which has been run (and source)
1714 # Flush out code object which has been run (and source)
1711 self.code_to_run = None
1715 self.code_to_run = None
1712 return outflag
1716 return outflag
1713
1717
1714 def push(self, line):
1718 def push(self, line):
1715 """Push a line to the interpreter.
1719 """Push a line to the interpreter.
1716
1720
1717 The line should not have a trailing newline; it may have
1721 The line should not have a trailing newline; it may have
1718 internal newlines. The line is appended to a buffer and the
1722 internal newlines. The line is appended to a buffer and the
1719 interpreter's runsource() method is called with the
1723 interpreter's runsource() method is called with the
1720 concatenated contents of the buffer as source. If this
1724 concatenated contents of the buffer as source. If this
1721 indicates that the command was executed or invalid, the buffer
1725 indicates that the command was executed or invalid, the buffer
1722 is reset; otherwise, the command is incomplete, and the buffer
1726 is reset; otherwise, the command is incomplete, and the buffer
1723 is left as it was after the line was appended. The return
1727 is left as it was after the line was appended. The return
1724 value is 1 if more input is required, 0 if the line was dealt
1728 value is 1 if more input is required, 0 if the line was dealt
1725 with in some way (this is the same as runsource()).
1729 with in some way (this is the same as runsource()).
1726 """
1730 """
1727
1731
1728 # autoindent management should be done here, and not in the
1732 # autoindent management should be done here, and not in the
1729 # interactive loop, since that one is only seen by keyboard input. We
1733 # interactive loop, since that one is only seen by keyboard input. We
1730 # need this done correctly even for code run via runlines (which uses
1734 # need this done correctly even for code run via runlines (which uses
1731 # push).
1735 # push).
1732
1736
1733 #print 'push line: <%s>' % line # dbg
1737 #print 'push line: <%s>' % line # dbg
1734 self.autoindent_update(line)
1738 self.autoindent_update(line)
1735
1739
1736 self.buffer.append(line)
1740 self.buffer.append(line)
1737 more = self.runsource('\n'.join(self.buffer), self.filename)
1741 more = self.runsource('\n'.join(self.buffer), self.filename)
1738 if not more:
1742 if not more:
1739 self.resetbuffer()
1743 self.resetbuffer()
1740 return more
1744 return more
1741
1745
1742 def resetbuffer(self):
1746 def resetbuffer(self):
1743 """Reset the input buffer."""
1747 """Reset the input buffer."""
1744 self.buffer[:] = []
1748 self.buffer[:] = []
1745
1749
1746 def raw_input(self,prompt='',continue_prompt=False):
1750 def raw_input(self,prompt='',continue_prompt=False):
1747 """Write a prompt and read a line.
1751 """Write a prompt and read a line.
1748
1752
1749 The returned line does not include the trailing newline.
1753 The returned line does not include the trailing newline.
1750 When the user enters the EOF key sequence, EOFError is raised.
1754 When the user enters the EOF key sequence, EOFError is raised.
1751
1755
1752 Optional inputs:
1756 Optional inputs:
1753
1757
1754 - prompt(''): a string to be printed to prompt the user.
1758 - prompt(''): a string to be printed to prompt the user.
1755
1759
1756 - continue_prompt(False): whether this line is the first one or a
1760 - continue_prompt(False): whether this line is the first one or a
1757 continuation in a sequence of inputs.
1761 continuation in a sequence of inputs.
1758 """
1762 """
1759
1763
1760 line = raw_input_original(prompt)
1764 line = raw_input_original(prompt)
1761 # Try to be reasonably smart about not re-indenting pasted input more
1765 # Try to be reasonably smart about not re-indenting pasted input more
1762 # than necessary. We do this by trimming out the auto-indent initial
1766 # than necessary. We do this by trimming out the auto-indent initial
1763 # spaces, if the user's actual input started itself with whitespace.
1767 # spaces, if the user's actual input started itself with whitespace.
1764 #debugx('self.buffer[-1]')
1768 #debugx('self.buffer[-1]')
1765
1769
1766 if self.autoindent:
1770 if self.autoindent:
1767 if num_ini_spaces(line) > self.indent_current_nsp:
1771 if num_ini_spaces(line) > self.indent_current_nsp:
1768 line = line[self.indent_current_nsp:]
1772 line = line[self.indent_current_nsp:]
1769 self.indent_current_nsp = 0
1773 self.indent_current_nsp = 0
1770
1774
1771 # store the unfiltered input before the user has any chance to modify
1775 # store the unfiltered input before the user has any chance to modify
1772 # it.
1776 # it.
1773 if line.strip():
1777 if line.strip():
1774 if continue_prompt:
1778 if continue_prompt:
1775 self.input_hist_raw[-1] += '%s\n' % line
1779 self.input_hist_raw[-1] += '%s\n' % line
1776 else:
1780 else:
1777 self.input_hist_raw.append('%s\n' % line)
1781 self.input_hist_raw.append('%s\n' % line)
1778
1782
1779 lineout = self.prefilter(line,continue_prompt)
1783 lineout = self.prefilter(line,continue_prompt)
1780 return lineout
1784 return lineout
1781
1785
1782 def split_user_input(self,line):
1786 def split_user_input(self,line):
1783 """Split user input into pre-char, function part and rest."""
1787 """Split user input into pre-char, function part and rest."""
1784
1788
1785 lsplit = self.line_split.match(line)
1789 lsplit = self.line_split.match(line)
1786 if lsplit is None: # no regexp match returns None
1790 if lsplit is None: # no regexp match returns None
1787 try:
1791 try:
1788 iFun,theRest = line.split(None,1)
1792 iFun,theRest = line.split(None,1)
1789 except ValueError:
1793 except ValueError:
1790 iFun,theRest = line,''
1794 iFun,theRest = line,''
1791 pre = re.match('^(\s*)(.*)',line).groups()[0]
1795 pre = re.match('^(\s*)(.*)',line).groups()[0]
1792 else:
1796 else:
1793 pre,iFun,theRest = lsplit.groups()
1797 pre,iFun,theRest = lsplit.groups()
1794
1798
1795 #print 'line:<%s>' % line # dbg
1799 #print 'line:<%s>' % line # dbg
1796 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1800 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1797 return pre,iFun.strip(),theRest
1801 return pre,iFun.strip(),theRest
1798
1802
1799 def _prefilter(self, line, continue_prompt):
1803 def _prefilter(self, line, continue_prompt):
1800 """Calls different preprocessors, depending on the form of line."""
1804 """Calls different preprocessors, depending on the form of line."""
1801
1805
1802 # All handlers *must* return a value, even if it's blank ('').
1806 # All handlers *must* return a value, even if it's blank ('').
1803
1807
1804 # Lines are NOT logged here. Handlers should process the line as
1808 # Lines are NOT logged here. Handlers should process the line as
1805 # needed, update the cache AND log it (so that the input cache array
1809 # needed, update the cache AND log it (so that the input cache array
1806 # stays synced).
1810 # stays synced).
1807
1811
1808 # This function is _very_ delicate, and since it's also the one which
1812 # This function is _very_ delicate, and since it's also the one which
1809 # determines IPython's response to user input, it must be as efficient
1813 # determines IPython's response to user input, it must be as efficient
1810 # as possible. For this reason it has _many_ returns in it, trying
1814 # as possible. For this reason it has _many_ returns in it, trying
1811 # always to exit as quickly as it can figure out what it needs to do.
1815 # always to exit as quickly as it can figure out what it needs to do.
1812
1816
1813 # This function is the main responsible for maintaining IPython's
1817 # This function is the main responsible for maintaining IPython's
1814 # behavior respectful of Python's semantics. So be _very_ careful if
1818 # behavior respectful of Python's semantics. So be _very_ careful if
1815 # making changes to anything here.
1819 # making changes to anything here.
1816
1820
1817 #.....................................................................
1821 #.....................................................................
1818 # Code begins
1822 # Code begins
1819
1823
1820 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1824 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1821
1825
1822 # save the line away in case we crash, so the post-mortem handler can
1826 # save the line away in case we crash, so the post-mortem handler can
1823 # record it
1827 # record it
1824 self._last_input_line = line
1828 self._last_input_line = line
1825
1829
1826 #print '***line: <%s>' % line # dbg
1830 #print '***line: <%s>' % line # dbg
1827
1831
1828 # the input history needs to track even empty lines
1832 # the input history needs to track even empty lines
1829 stripped = line.strip()
1833 stripped = line.strip()
1830
1834
1831 if not stripped:
1835 if not stripped:
1832 if not continue_prompt:
1836 if not continue_prompt:
1833 self.outputcache.prompt_count -= 1
1837 self.outputcache.prompt_count -= 1
1834 return self.handle_normal(line,continue_prompt)
1838 return self.handle_normal(line,continue_prompt)
1835 #return self.handle_normal('',continue_prompt)
1839 #return self.handle_normal('',continue_prompt)
1836
1840
1837 # print '***cont',continue_prompt # dbg
1841 # print '***cont',continue_prompt # dbg
1838 # special handlers are only allowed for single line statements
1842 # special handlers are only allowed for single line statements
1839 if continue_prompt and not self.rc.multi_line_specials:
1843 if continue_prompt and not self.rc.multi_line_specials:
1840 return self.handle_normal(line,continue_prompt)
1844 return self.handle_normal(line,continue_prompt)
1841
1845
1842
1846
1843 # For the rest, we need the structure of the input
1847 # For the rest, we need the structure of the input
1844 pre,iFun,theRest = self.split_user_input(line)
1848 pre,iFun,theRest = self.split_user_input(line)
1845
1849
1846 # See whether any pre-existing handler can take care of it
1850 # See whether any pre-existing handler can take care of it
1847
1851
1848 rewritten = self.hooks.input_prefilter(stripped)
1852 rewritten = self.hooks.input_prefilter(stripped)
1849 if rewritten != stripped: # ok, some prefilter did something
1853 if rewritten != stripped: # ok, some prefilter did something
1850 rewritten = pre + rewritten # add indentation
1854 rewritten = pre + rewritten # add indentation
1851 return self.handle_normal(rewritten)
1855 return self.handle_normal(rewritten)
1852
1856
1853
1857
1854
1858
1855
1859
1856 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1860 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1857
1861
1858 # First check for explicit escapes in the last/first character
1862 # First check for explicit escapes in the last/first character
1859 handler = None
1863 handler = None
1860 if line[-1] == self.ESC_HELP:
1864 if line[-1] == self.ESC_HELP:
1861 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1865 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1862 if handler is None:
1866 if handler is None:
1863 # look at the first character of iFun, NOT of line, so we skip
1867 # look at the first character of iFun, NOT of line, so we skip
1864 # leading whitespace in multiline input
1868 # leading whitespace in multiline input
1865 handler = self.esc_handlers.get(iFun[0:1])
1869 handler = self.esc_handlers.get(iFun[0:1])
1866 if handler is not None:
1870 if handler is not None:
1867 return handler(line,continue_prompt,pre,iFun,theRest)
1871 return handler(line,continue_prompt,pre,iFun,theRest)
1868 # Emacs ipython-mode tags certain input lines
1872 # Emacs ipython-mode tags certain input lines
1869 if line.endswith('# PYTHON-MODE'):
1873 if line.endswith('# PYTHON-MODE'):
1870 return self.handle_emacs(line,continue_prompt)
1874 return self.handle_emacs(line,continue_prompt)
1871
1875
1872 # Next, check if we can automatically execute this thing
1876 # Next, check if we can automatically execute this thing
1873
1877
1874 # Allow ! in multi-line statements if multi_line_specials is on:
1878 # Allow ! in multi-line statements if multi_line_specials is on:
1875 if continue_prompt and self.rc.multi_line_specials and \
1879 if continue_prompt and self.rc.multi_line_specials and \
1876 iFun.startswith(self.ESC_SHELL):
1880 iFun.startswith(self.ESC_SHELL):
1877 return self.handle_shell_escape(line,continue_prompt,
1881 return self.handle_shell_escape(line,continue_prompt,
1878 pre=pre,iFun=iFun,
1882 pre=pre,iFun=iFun,
1879 theRest=theRest)
1883 theRest=theRest)
1880
1884
1881 # Let's try to find if the input line is a magic fn
1885 # Let's try to find if the input line is a magic fn
1882 oinfo = None
1886 oinfo = None
1883 if hasattr(self,'magic_'+iFun):
1887 if hasattr(self,'magic_'+iFun):
1884 # WARNING: _ofind uses getattr(), so it can consume generators and
1888 # WARNING: _ofind uses getattr(), so it can consume generators and
1885 # cause other side effects.
1889 # cause other side effects.
1886 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1890 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1887 if oinfo['ismagic']:
1891 if oinfo['ismagic']:
1888 # Be careful not to call magics when a variable assignment is
1892 # Be careful not to call magics when a variable assignment is
1889 # being made (ls='hi', for example)
1893 # being made (ls='hi', for example)
1890 if self.rc.automagic and \
1894 if self.rc.automagic and \
1891 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1895 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1892 (self.rc.multi_line_specials or not continue_prompt):
1896 (self.rc.multi_line_specials or not continue_prompt):
1893 return self.handle_magic(line,continue_prompt,
1897 return self.handle_magic(line,continue_prompt,
1894 pre,iFun,theRest)
1898 pre,iFun,theRest)
1895 else:
1899 else:
1896 return self.handle_normal(line,continue_prompt)
1900 return self.handle_normal(line,continue_prompt)
1897
1901
1898 # If the rest of the line begins with an (in)equality, assginment or
1902 # If the rest of the line begins with an (in)equality, assginment or
1899 # function call, we should not call _ofind but simply execute it.
1903 # function call, we should not call _ofind but simply execute it.
1900 # This avoids spurious geattr() accesses on objects upon assignment.
1904 # This avoids spurious geattr() accesses on objects upon assignment.
1901 #
1905 #
1902 # It also allows users to assign to either alias or magic names true
1906 # It also allows users to assign to either alias or magic names true
1903 # python variables (the magic/alias systems always take second seat to
1907 # python variables (the magic/alias systems always take second seat to
1904 # true python code).
1908 # true python code).
1905 if theRest and theRest[0] in '!=()':
1909 if theRest and theRest[0] in '!=()':
1906 return self.handle_normal(line,continue_prompt)
1910 return self.handle_normal(line,continue_prompt)
1907
1911
1908 if oinfo is None:
1912 if oinfo is None:
1909 # let's try to ensure that _oinfo is ONLY called when autocall is
1913 # let's try to ensure that _oinfo is ONLY called when autocall is
1910 # on. Since it has inevitable potential side effects, at least
1914 # on. Since it has inevitable potential side effects, at least
1911 # having autocall off should be a guarantee to the user that no
1915 # having autocall off should be a guarantee to the user that no
1912 # weird things will happen.
1916 # weird things will happen.
1913
1917
1914 if self.rc.autocall:
1918 if self.rc.autocall:
1915 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1919 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1916 else:
1920 else:
1917 # in this case, all that's left is either an alias or
1921 # in this case, all that's left is either an alias or
1918 # processing the line normally.
1922 # processing the line normally.
1919 if iFun in self.alias_table:
1923 if iFun in self.alias_table:
1920 return self.handle_alias(line,continue_prompt,
1924 return self.handle_alias(line,continue_prompt,
1921 pre,iFun,theRest)
1925 pre,iFun,theRest)
1922
1926
1923 else:
1927 else:
1924 return self.handle_normal(line,continue_prompt)
1928 return self.handle_normal(line,continue_prompt)
1925
1929
1926 if not oinfo['found']:
1930 if not oinfo['found']:
1927 return self.handle_normal(line,continue_prompt)
1931 return self.handle_normal(line,continue_prompt)
1928 else:
1932 else:
1929 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1933 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1930 if oinfo['isalias']:
1934 if oinfo['isalias']:
1931 return self.handle_alias(line,continue_prompt,
1935 return self.handle_alias(line,continue_prompt,
1932 pre,iFun,theRest)
1936 pre,iFun,theRest)
1933
1937
1934 if (self.rc.autocall
1938 if (self.rc.autocall
1935 and
1939 and
1936 (
1940 (
1937 #only consider exclusion re if not "," or ";" autoquoting
1941 #only consider exclusion re if not "," or ";" autoquoting
1938 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1942 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1939 or pre == self.ESC_PAREN) or
1943 or pre == self.ESC_PAREN) or
1940 (not self.re_exclude_auto.match(theRest)))
1944 (not self.re_exclude_auto.match(theRest)))
1941 and
1945 and
1942 self.re_fun_name.match(iFun) and
1946 self.re_fun_name.match(iFun) and
1943 callable(oinfo['obj'])) :
1947 callable(oinfo['obj'])) :
1944 #print 'going auto' # dbg
1948 #print 'going auto' # dbg
1945 return self.handle_auto(line,continue_prompt,
1949 return self.handle_auto(line,continue_prompt,
1946 pre,iFun,theRest,oinfo['obj'])
1950 pre,iFun,theRest,oinfo['obj'])
1947 else:
1951 else:
1948 #print 'was callable?', callable(oinfo['obj']) # dbg
1952 #print 'was callable?', callable(oinfo['obj']) # dbg
1949 return self.handle_normal(line,continue_prompt)
1953 return self.handle_normal(line,continue_prompt)
1950
1954
1951 # If we get here, we have a normal Python line. Log and return.
1955 # If we get here, we have a normal Python line. Log and return.
1952 return self.handle_normal(line,continue_prompt)
1956 return self.handle_normal(line,continue_prompt)
1953
1957
1954 def _prefilter_dumb(self, line, continue_prompt):
1958 def _prefilter_dumb(self, line, continue_prompt):
1955 """simple prefilter function, for debugging"""
1959 """simple prefilter function, for debugging"""
1956 return self.handle_normal(line,continue_prompt)
1960 return self.handle_normal(line,continue_prompt)
1957
1961
1958 # Set the default prefilter() function (this can be user-overridden)
1962 # Set the default prefilter() function (this can be user-overridden)
1959 prefilter = _prefilter
1963 prefilter = _prefilter
1960
1964
1961 def handle_normal(self,line,continue_prompt=None,
1965 def handle_normal(self,line,continue_prompt=None,
1962 pre=None,iFun=None,theRest=None):
1966 pre=None,iFun=None,theRest=None):
1963 """Handle normal input lines. Use as a template for handlers."""
1967 """Handle normal input lines. Use as a template for handlers."""
1964
1968
1965 # With autoindent on, we need some way to exit the input loop, and I
1969 # With autoindent on, we need some way to exit the input loop, and I
1966 # don't want to force the user to have to backspace all the way to
1970 # don't want to force the user to have to backspace all the way to
1967 # clear the line. The rule will be in this case, that either two
1971 # clear the line. The rule will be in this case, that either two
1968 # lines of pure whitespace in a row, or a line of pure whitespace but
1972 # lines of pure whitespace in a row, or a line of pure whitespace but
1969 # of a size different to the indent level, will exit the input loop.
1973 # of a size different to the indent level, will exit the input loop.
1970
1974
1971 if (continue_prompt and self.autoindent and line.isspace() and
1975 if (continue_prompt and self.autoindent and line.isspace() and
1972 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1976 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1973 (self.buffer[-1]).isspace() )):
1977 (self.buffer[-1]).isspace() )):
1974 line = ''
1978 line = ''
1975
1979
1976 self.log(line,continue_prompt)
1980 self.log(line,continue_prompt)
1977 return line
1981 return line
1978
1982
1979 def handle_alias(self,line,continue_prompt=None,
1983 def handle_alias(self,line,continue_prompt=None,
1980 pre=None,iFun=None,theRest=None):
1984 pre=None,iFun=None,theRest=None):
1981 """Handle alias input lines. """
1985 """Handle alias input lines. """
1982
1986
1983 # pre is needed, because it carries the leading whitespace. Otherwise
1987 # pre is needed, because it carries the leading whitespace. Otherwise
1984 # aliases won't work in indented sections.
1988 # aliases won't work in indented sections.
1985 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1989 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1986 self.log(line_out,continue_prompt)
1990 self.log(line_out,continue_prompt)
1987 return line_out
1991 return line_out
1988
1992
1989 def handle_shell_escape(self, line, continue_prompt=None,
1993 def handle_shell_escape(self, line, continue_prompt=None,
1990 pre=None,iFun=None,theRest=None):
1994 pre=None,iFun=None,theRest=None):
1991 """Execute the line in a shell, empty return value"""
1995 """Execute the line in a shell, empty return value"""
1992
1996
1993 #print 'line in :', `line` # dbg
1997 #print 'line in :', `line` # dbg
1994 # Example of a special handler. Others follow a similar pattern.
1998 # Example of a special handler. Others follow a similar pattern.
1995 if line.lstrip().startswith('!!'):
1999 if line.lstrip().startswith('!!'):
1996 # rewrite iFun/theRest to properly hold the call to %sx and
2000 # rewrite iFun/theRest to properly hold the call to %sx and
1997 # the actual command to be executed, so handle_magic can work
2001 # the actual command to be executed, so handle_magic can work
1998 # correctly
2002 # correctly
1999 theRest = '%s %s' % (iFun[2:],theRest)
2003 theRest = '%s %s' % (iFun[2:],theRest)
2000 iFun = 'sx'
2004 iFun = 'sx'
2001 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2005 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2002 line.lstrip()[2:]),
2006 line.lstrip()[2:]),
2003 continue_prompt,pre,iFun,theRest)
2007 continue_prompt,pre,iFun,theRest)
2004 else:
2008 else:
2005 cmd=line.lstrip().lstrip('!')
2009 cmd=line.lstrip().lstrip('!')
2006 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2010 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2007 # update cache/log and return
2011 # update cache/log and return
2008 self.log(line_out,continue_prompt)
2012 self.log(line_out,continue_prompt)
2009 return line_out
2013 return line_out
2010
2014
2011 def handle_magic(self, line, continue_prompt=None,
2015 def handle_magic(self, line, continue_prompt=None,
2012 pre=None,iFun=None,theRest=None):
2016 pre=None,iFun=None,theRest=None):
2013 """Execute magic functions."""
2017 """Execute magic functions."""
2014
2018
2015
2019
2016 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2020 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2017 self.log(cmd,continue_prompt)
2021 self.log(cmd,continue_prompt)
2018 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2022 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2019 return cmd
2023 return cmd
2020
2024
2021 def handle_auto(self, line, continue_prompt=None,
2025 def handle_auto(self, line, continue_prompt=None,
2022 pre=None,iFun=None,theRest=None,obj=None):
2026 pre=None,iFun=None,theRest=None,obj=None):
2023 """Hande lines which can be auto-executed, quoting if requested."""
2027 """Hande lines which can be auto-executed, quoting if requested."""
2024
2028
2025 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2029 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2026
2030
2027 # This should only be active for single-line input!
2031 # This should only be active for single-line input!
2028 if continue_prompt:
2032 if continue_prompt:
2029 self.log(line,continue_prompt)
2033 self.log(line,continue_prompt)
2030 return line
2034 return line
2031
2035
2032 auto_rewrite = True
2036 auto_rewrite = True
2033
2037
2034 if pre == self.ESC_QUOTE:
2038 if pre == self.ESC_QUOTE:
2035 # Auto-quote splitting on whitespace
2039 # Auto-quote splitting on whitespace
2036 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2040 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2037 elif pre == self.ESC_QUOTE2:
2041 elif pre == self.ESC_QUOTE2:
2038 # Auto-quote whole string
2042 # Auto-quote whole string
2039 newcmd = '%s("%s")' % (iFun,theRest)
2043 newcmd = '%s("%s")' % (iFun,theRest)
2040 elif pre == self.ESC_PAREN:
2044 elif pre == self.ESC_PAREN:
2041 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2045 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2042 else:
2046 else:
2043 # Auto-paren.
2047 # Auto-paren.
2044 # We only apply it to argument-less calls if the autocall
2048 # We only apply it to argument-less calls if the autocall
2045 # parameter is set to 2. We only need to check that autocall is <
2049 # parameter is set to 2. We only need to check that autocall is <
2046 # 2, since this function isn't called unless it's at least 1.
2050 # 2, since this function isn't called unless it's at least 1.
2047 if not theRest and (self.rc.autocall < 2):
2051 if not theRest and (self.rc.autocall < 2):
2048 newcmd = '%s %s' % (iFun,theRest)
2052 newcmd = '%s %s' % (iFun,theRest)
2049 auto_rewrite = False
2053 auto_rewrite = False
2050 else:
2054 else:
2051 if theRest.startswith('['):
2055 if theRest.startswith('['):
2052 if hasattr(obj,'__getitem__'):
2056 if hasattr(obj,'__getitem__'):
2053 # Don't autocall in this case: item access for an object
2057 # Don't autocall in this case: item access for an object
2054 # which is BOTH callable and implements __getitem__.
2058 # which is BOTH callable and implements __getitem__.
2055 newcmd = '%s %s' % (iFun,theRest)
2059 newcmd = '%s %s' % (iFun,theRest)
2056 auto_rewrite = False
2060 auto_rewrite = False
2057 else:
2061 else:
2058 # if the object doesn't support [] access, go ahead and
2062 # if the object doesn't support [] access, go ahead and
2059 # autocall
2063 # autocall
2060 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2061 elif theRest.endswith(';'):
2065 elif theRest.endswith(';'):
2062 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2066 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2063 else:
2067 else:
2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2068 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2065
2069
2066 if auto_rewrite:
2070 if auto_rewrite:
2067 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2071 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2068 # log what is now valid Python, not the actual user input (without the
2072 # log what is now valid Python, not the actual user input (without the
2069 # final newline)
2073 # final newline)
2070 self.log(newcmd,continue_prompt)
2074 self.log(newcmd,continue_prompt)
2071 return newcmd
2075 return newcmd
2072
2076
2073 def handle_help(self, line, continue_prompt=None,
2077 def handle_help(self, line, continue_prompt=None,
2074 pre=None,iFun=None,theRest=None):
2078 pre=None,iFun=None,theRest=None):
2075 """Try to get some help for the object.
2079 """Try to get some help for the object.
2076
2080
2077 obj? or ?obj -> basic information.
2081 obj? or ?obj -> basic information.
2078 obj?? or ??obj -> more details.
2082 obj?? or ??obj -> more details.
2079 """
2083 """
2080
2084
2081 # We need to make sure that we don't process lines which would be
2085 # We need to make sure that we don't process lines which would be
2082 # otherwise valid python, such as "x=1 # what?"
2086 # otherwise valid python, such as "x=1 # what?"
2083 try:
2087 try:
2084 codeop.compile_command(line)
2088 codeop.compile_command(line)
2085 except SyntaxError:
2089 except SyntaxError:
2086 # We should only handle as help stuff which is NOT valid syntax
2090 # We should only handle as help stuff which is NOT valid syntax
2087 if line[0]==self.ESC_HELP:
2091 if line[0]==self.ESC_HELP:
2088 line = line[1:]
2092 line = line[1:]
2089 elif line[-1]==self.ESC_HELP:
2093 elif line[-1]==self.ESC_HELP:
2090 line = line[:-1]
2094 line = line[:-1]
2091 self.log('#?'+line)
2095 self.log('#?'+line)
2092 if line:
2096 if line:
2093 self.magic_pinfo(line)
2097 self.magic_pinfo(line)
2094 else:
2098 else:
2095 page(self.usage,screen_lines=self.rc.screen_length)
2099 page(self.usage,screen_lines=self.rc.screen_length)
2096 return '' # Empty string is needed here!
2100 return '' # Empty string is needed here!
2097 except:
2101 except:
2098 # Pass any other exceptions through to the normal handler
2102 # Pass any other exceptions through to the normal handler
2099 return self.handle_normal(line,continue_prompt)
2103 return self.handle_normal(line,continue_prompt)
2100 else:
2104 else:
2101 # If the code compiles ok, we should handle it normally
2105 # If the code compiles ok, we should handle it normally
2102 return self.handle_normal(line,continue_prompt)
2106 return self.handle_normal(line,continue_prompt)
2103
2107
2104 def getapi(self):
2108 def getapi(self):
2105 """ Get an IPApi object for this shell instance
2109 """ Get an IPApi object for this shell instance
2106
2110
2107 Getting an IPApi object is always preferable to accessing the shell
2111 Getting an IPApi object is always preferable to accessing the shell
2108 directly, but this holds true especially for extensions.
2112 directly, but this holds true especially for extensions.
2109
2113
2110 It should always be possible to implement an extension with IPApi
2114 It should always be possible to implement an extension with IPApi
2111 alone. If not, contact maintainer to request an addition.
2115 alone. If not, contact maintainer to request an addition.
2112
2116
2113 """
2117 """
2114 return self.api
2118 return self.api
2115
2119
2116 def handle_emacs(self,line,continue_prompt=None,
2120 def handle_emacs(self,line,continue_prompt=None,
2117 pre=None,iFun=None,theRest=None):
2121 pre=None,iFun=None,theRest=None):
2118 """Handle input lines marked by python-mode."""
2122 """Handle input lines marked by python-mode."""
2119
2123
2120 # Currently, nothing is done. Later more functionality can be added
2124 # Currently, nothing is done. Later more functionality can be added
2121 # here if needed.
2125 # here if needed.
2122
2126
2123 # The input cache shouldn't be updated
2127 # The input cache shouldn't be updated
2124
2128
2125 return line
2129 return line
2126
2130
2127 def mktempfile(self,data=None):
2131 def mktempfile(self,data=None):
2128 """Make a new tempfile and return its filename.
2132 """Make a new tempfile and return its filename.
2129
2133
2130 This makes a call to tempfile.mktemp, but it registers the created
2134 This makes a call to tempfile.mktemp, but it registers the created
2131 filename internally so ipython cleans it up at exit time.
2135 filename internally so ipython cleans it up at exit time.
2132
2136
2133 Optional inputs:
2137 Optional inputs:
2134
2138
2135 - data(None): if data is given, it gets written out to the temp file
2139 - data(None): if data is given, it gets written out to the temp file
2136 immediately, and the file is closed again."""
2140 immediately, and the file is closed again."""
2137
2141
2138 filename = tempfile.mktemp('.py','ipython_edit_')
2142 filename = tempfile.mktemp('.py','ipython_edit_')
2139 self.tempfiles.append(filename)
2143 self.tempfiles.append(filename)
2140
2144
2141 if data:
2145 if data:
2142 tmp_file = open(filename,'w')
2146 tmp_file = open(filename,'w')
2143 tmp_file.write(data)
2147 tmp_file.write(data)
2144 tmp_file.close()
2148 tmp_file.close()
2145 return filename
2149 return filename
2146
2150
2147 def write(self,data):
2151 def write(self,data):
2148 """Write a string to the default output"""
2152 """Write a string to the default output"""
2149 Term.cout.write(data)
2153 Term.cout.write(data)
2150
2154
2151 def write_err(self,data):
2155 def write_err(self,data):
2152 """Write a string to the default error output"""
2156 """Write a string to the default error output"""
2153 Term.cerr.write(data)
2157 Term.cerr.write(data)
2154
2158
2155 def exit(self):
2159 def exit(self):
2156 """Handle interactive exit.
2160 """Handle interactive exit.
2157
2161
2158 This method sets the exit_now attribute."""
2162 This method sets the exit_now attribute."""
2159
2163
2160 if self.rc.confirm_exit:
2164 if self.rc.confirm_exit:
2161 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2165 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2162 self.exit_now = True
2166 self.exit_now = True
2163 else:
2167 else:
2164 self.exit_now = True
2168 self.exit_now = True
2165 return self.exit_now
2169 return self.exit_now
2166
2170
2167 def safe_execfile(self,fname,*where,**kw):
2171 def safe_execfile(self,fname,*where,**kw):
2168 fname = os.path.expanduser(fname)
2172 fname = os.path.expanduser(fname)
2169
2173
2170 # find things also in current directory
2174 # find things also in current directory
2171 dname = os.path.dirname(fname)
2175 dname = os.path.dirname(fname)
2172 if not sys.path.count(dname):
2176 if not sys.path.count(dname):
2173 sys.path.append(dname)
2177 sys.path.append(dname)
2174
2178
2175 try:
2179 try:
2176 xfile = open(fname)
2180 xfile = open(fname)
2177 except:
2181 except:
2178 print >> Term.cerr, \
2182 print >> Term.cerr, \
2179 'Could not open file <%s> for safe execution.' % fname
2183 'Could not open file <%s> for safe execution.' % fname
2180 return None
2184 return None
2181
2185
2182 kw.setdefault('islog',0)
2186 kw.setdefault('islog',0)
2183 kw.setdefault('quiet',1)
2187 kw.setdefault('quiet',1)
2184 kw.setdefault('exit_ignore',0)
2188 kw.setdefault('exit_ignore',0)
2185 first = xfile.readline()
2189 first = xfile.readline()
2186 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2190 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2187 xfile.close()
2191 xfile.close()
2188 # line by line execution
2192 # line by line execution
2189 if first.startswith(loghead) or kw['islog']:
2193 if first.startswith(loghead) or kw['islog']:
2190 print 'Loading log file <%s> one line at a time...' % fname
2194 print 'Loading log file <%s> one line at a time...' % fname
2191 if kw['quiet']:
2195 if kw['quiet']:
2192 stdout_save = sys.stdout
2196 stdout_save = sys.stdout
2193 sys.stdout = StringIO.StringIO()
2197 sys.stdout = StringIO.StringIO()
2194 try:
2198 try:
2195 globs,locs = where[0:2]
2199 globs,locs = where[0:2]
2196 except:
2200 except:
2197 try:
2201 try:
2198 globs = locs = where[0]
2202 globs = locs = where[0]
2199 except:
2203 except:
2200 globs = locs = globals()
2204 globs = locs = globals()
2201 badblocks = []
2205 badblocks = []
2202
2206
2203 # we also need to identify indented blocks of code when replaying
2207 # we also need to identify indented blocks of code when replaying
2204 # logs and put them together before passing them to an exec
2208 # logs and put them together before passing them to an exec
2205 # statement. This takes a bit of regexp and look-ahead work in the
2209 # statement. This takes a bit of regexp and look-ahead work in the
2206 # file. It's easiest if we swallow the whole thing in memory
2210 # file. It's easiest if we swallow the whole thing in memory
2207 # first, and manually walk through the lines list moving the
2211 # first, and manually walk through the lines list moving the
2208 # counter ourselves.
2212 # counter ourselves.
2209 indent_re = re.compile('\s+\S')
2213 indent_re = re.compile('\s+\S')
2210 xfile = open(fname)
2214 xfile = open(fname)
2211 filelines = xfile.readlines()
2215 filelines = xfile.readlines()
2212 xfile.close()
2216 xfile.close()
2213 nlines = len(filelines)
2217 nlines = len(filelines)
2214 lnum = 0
2218 lnum = 0
2215 while lnum < nlines:
2219 while lnum < nlines:
2216 line = filelines[lnum]
2220 line = filelines[lnum]
2217 lnum += 1
2221 lnum += 1
2218 # don't re-insert logger status info into cache
2222 # don't re-insert logger status info into cache
2219 if line.startswith('#log#'):
2223 if line.startswith('#log#'):
2220 continue
2224 continue
2221 else:
2225 else:
2222 # build a block of code (maybe a single line) for execution
2226 # build a block of code (maybe a single line) for execution
2223 block = line
2227 block = line
2224 try:
2228 try:
2225 next = filelines[lnum] # lnum has already incremented
2229 next = filelines[lnum] # lnum has already incremented
2226 except:
2230 except:
2227 next = None
2231 next = None
2228 while next and indent_re.match(next):
2232 while next and indent_re.match(next):
2229 block += next
2233 block += next
2230 lnum += 1
2234 lnum += 1
2231 try:
2235 try:
2232 next = filelines[lnum]
2236 next = filelines[lnum]
2233 except:
2237 except:
2234 next = None
2238 next = None
2235 # now execute the block of one or more lines
2239 # now execute the block of one or more lines
2236 try:
2240 try:
2237 exec block in globs,locs
2241 exec block in globs,locs
2238 except SystemExit:
2242 except SystemExit:
2239 pass
2243 pass
2240 except:
2244 except:
2241 badblocks.append(block.rstrip())
2245 badblocks.append(block.rstrip())
2242 if kw['quiet']: # restore stdout
2246 if kw['quiet']: # restore stdout
2243 sys.stdout.close()
2247 sys.stdout.close()
2244 sys.stdout = stdout_save
2248 sys.stdout = stdout_save
2245 print 'Finished replaying log file <%s>' % fname
2249 print 'Finished replaying log file <%s>' % fname
2246 if badblocks:
2250 if badblocks:
2247 print >> sys.stderr, ('\nThe following lines/blocks in file '
2251 print >> sys.stderr, ('\nThe following lines/blocks in file '
2248 '<%s> reported errors:' % fname)
2252 '<%s> reported errors:' % fname)
2249
2253
2250 for badline in badblocks:
2254 for badline in badblocks:
2251 print >> sys.stderr, badline
2255 print >> sys.stderr, badline
2252 else: # regular file execution
2256 else: # regular file execution
2253 try:
2257 try:
2254 execfile(fname,*where)
2258 execfile(fname,*where)
2255 except SyntaxError:
2259 except SyntaxError:
2256 etype,evalue = sys.exc_info()[:2]
2260 etype,evalue = sys.exc_info()[:2]
2257 self.SyntaxTB(etype,evalue,[])
2261 self.SyntaxTB(etype,evalue,[])
2258 warn('Failure executing file: <%s>' % fname)
2262 warn('Failure executing file: <%s>' % fname)
2259 except SystemExit,status:
2263 except SystemExit,status:
2260 if not kw['exit_ignore']:
2264 if not kw['exit_ignore']:
2261 self.InteractiveTB()
2265 self.InteractiveTB()
2262 warn('Failure executing file: <%s>' % fname)
2266 warn('Failure executing file: <%s>' % fname)
2263 except:
2267 except:
2264 self.InteractiveTB()
2268 self.InteractiveTB()
2265 warn('Failure executing file: <%s>' % fname)
2269 warn('Failure executing file: <%s>' % fname)
2266
2270
2267 #************************* end of file <iplib.py> *****************************
2271 #************************* end of file <iplib.py> *****************************
@@ -1,5106 +1,5116 b''
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
2
2
3 * iplib.py: Expose ipapi as _ip in builtin namespace.
4 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
5 and ip_set_hook (-> _ip.set_hook) redundant. % and !
6 syntax now produce _ip.* variant of the commands.
7
8 * "_ip.options().autoedit_syntax = 2" automatically throws
9 user to editor for syntax error correction without prompting.
10
11 2006-01-27 Ville Vainio <vivainio@gmail.com>
12
3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
13 * ipmaker.py: Give "realistic" sys.argv for scripts (without
4 'ipython' at argv[0]) executed through command line.
14 'ipython' at argv[0]) executed through command line.
5 NOTE: this DEPRECATES calling ipython with multiple scripts
15 NOTE: this DEPRECATES calling ipython with multiple scripts
6 ("ipython a.py b.py c.py")
16 ("ipython a.py b.py c.py")
7
17
8 * iplib.py, hooks.py: Added configurable input prefilter,
18 * iplib.py, hooks.py: Added configurable input prefilter,
9 named 'input_prefilter'. See ext_rescapture.py for example
19 named 'input_prefilter'. See ext_rescapture.py for example
10 usage.
20 usage.
11
21
12 * ext_rescapture.py, Magic.py: Better system command output capture
22 * ext_rescapture.py, Magic.py: Better system command output capture
13 through 'var = !ls' (deprecates user-visible %sc). Same notation
23 through 'var = !ls' (deprecates user-visible %sc). Same notation
14 applies for magics, 'var = %alias' assigns alias list to var.
24 applies for magics, 'var = %alias' assigns alias list to var.
15
25
16 * ipapi.py: added meta() for accessing extension-usable data store.
26 * ipapi.py: added meta() for accessing extension-usable data store.
17
27
18 * iplib.py: added InteractiveShell.getapi(). New magics should be
28 * iplib.py: added InteractiveShell.getapi(). New magics should be
19 written doing self.getapi() instead of using the shell directly.
29 written doing self.getapi() instead of using the shell directly.
20
30
21 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
31 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
22 %store foo >> ~/myfoo.txt to store variables to files (in clean
32 %store foo >> ~/myfoo.txt to store variables to files (in clean
23 textual form, not a restorable pickle).
33 textual form, not a restorable pickle).
24
34
25 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
35 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
26
36
27 * usage.py, Magic.py: added %quickref
37 * usage.py, Magic.py: added %quickref
28
38
29 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
39 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
30
40
31 * GetoptErrors when invoking magics etc. with wrong args
41 * GetoptErrors when invoking magics etc. with wrong args
32 are now more helpful:
42 are now more helpful:
33 GetoptError: option -l not recognized (allowed: "qb" )
43 GetoptError: option -l not recognized (allowed: "qb" )
34
44
35 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
45 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
36
46
37 * IPython/demo.py (Demo.show): Flush stdout after each block, so
47 * IPython/demo.py (Demo.show): Flush stdout after each block, so
38 computationally intensive blocks don't appear to stall the demo.
48 computationally intensive blocks don't appear to stall the demo.
39
49
40 2006-01-24 Ville Vainio <vivainio@gmail.com>
50 2006-01-24 Ville Vainio <vivainio@gmail.com>
41
51
42 * iplib.py, hooks.py: 'result_display' hook can return a non-None
52 * iplib.py, hooks.py: 'result_display' hook can return a non-None
43 value to manipulate resulting history entry.
53 value to manipulate resulting history entry.
44
54
45 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
55 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
46 to instance methods of IPApi class, to make extending an embedded
56 to instance methods of IPApi class, to make extending an embedded
47 IPython feasible. See ext_rehashdir.py for example usage.
57 IPython feasible. See ext_rehashdir.py for example usage.
48
58
49 * Merged 1071-1076 from banches/0.7.1
59 * Merged 1071-1076 from banches/0.7.1
50
60
51
61
52 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
62 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
53
63
54 * tools/release (daystamp): Fix build tools to use the new
64 * tools/release (daystamp): Fix build tools to use the new
55 eggsetup.py script to build lightweight eggs.
65 eggsetup.py script to build lightweight eggs.
56
66
57 * Applied changesets 1062 and 1064 before 0.7.1 release.
67 * Applied changesets 1062 and 1064 before 0.7.1 release.
58
68
59 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
69 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
60 see the raw input history (without conversions like %ls ->
70 see the raw input history (without conversions like %ls ->
61 ipmagic("ls")). After a request from W. Stein, SAGE
71 ipmagic("ls")). After a request from W. Stein, SAGE
62 (http://modular.ucsd.edu/sage) developer. This information is
72 (http://modular.ucsd.edu/sage) developer. This information is
63 stored in the input_hist_raw attribute of the IPython instance, so
73 stored in the input_hist_raw attribute of the IPython instance, so
64 developers can access it if needed (it's an InputList instance).
74 developers can access it if needed (it's an InputList instance).
65
75
66 * Versionstring = 0.7.2.svn
76 * Versionstring = 0.7.2.svn
67
77
68 * eggsetup.py: A separate script for constructing eggs, creates
78 * eggsetup.py: A separate script for constructing eggs, creates
69 proper launch scripts even on Windows (an .exe file in
79 proper launch scripts even on Windows (an .exe file in
70 \python24\scripts).
80 \python24\scripts).
71
81
72 * ipapi.py: launch_new_instance, launch entry point needed for the
82 * ipapi.py: launch_new_instance, launch entry point needed for the
73 egg.
83 egg.
74
84
75 2006-01-23 Ville Vainio <vivainio@gmail.com>
85 2006-01-23 Ville Vainio <vivainio@gmail.com>
76
86
77 * Added %cpaste magic for pasting python code
87 * Added %cpaste magic for pasting python code
78
88
79 2006-01-22 Ville Vainio <vivainio@gmail.com>
89 2006-01-22 Ville Vainio <vivainio@gmail.com>
80
90
81 * Merge from branches/0.7.1 into trunk, revs 1052-1057
91 * Merge from branches/0.7.1 into trunk, revs 1052-1057
82
92
83 * Versionstring = 0.7.2.svn
93 * Versionstring = 0.7.2.svn
84
94
85 * eggsetup.py: A separate script for constructing eggs, creates
95 * eggsetup.py: A separate script for constructing eggs, creates
86 proper launch scripts even on Windows (an .exe file in
96 proper launch scripts even on Windows (an .exe file in
87 \python24\scripts).
97 \python24\scripts).
88
98
89 * ipapi.py: launch_new_instance, launch entry point needed for the
99 * ipapi.py: launch_new_instance, launch entry point needed for the
90 egg.
100 egg.
91
101
92 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
102 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
93
103
94 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
104 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
95 %pfile foo would print the file for foo even if it was a binary.
105 %pfile foo would print the file for foo even if it was a binary.
96 Now, extensions '.so' and '.dll' are skipped.
106 Now, extensions '.so' and '.dll' are skipped.
97
107
98 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
108 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
99 bug, where macros would fail in all threaded modes. I'm not 100%
109 bug, where macros would fail in all threaded modes. I'm not 100%
100 sure, so I'm going to put out an rc instead of making a release
110 sure, so I'm going to put out an rc instead of making a release
101 today, and wait for feedback for at least a few days.
111 today, and wait for feedback for at least a few days.
102
112
103 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
113 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
104 it...) the handling of pasting external code with autoindent on.
114 it...) the handling of pasting external code with autoindent on.
105 To get out of a multiline input, the rule will appear for most
115 To get out of a multiline input, the rule will appear for most
106 users unchanged: two blank lines or change the indent level
116 users unchanged: two blank lines or change the indent level
107 proposed by IPython. But there is a twist now: you can
117 proposed by IPython. But there is a twist now: you can
108 add/subtract only *one or two spaces*. If you add/subtract three
118 add/subtract only *one or two spaces*. If you add/subtract three
109 or more (unless you completely delete the line), IPython will
119 or more (unless you completely delete the line), IPython will
110 accept that line, and you'll need to enter a second one of pure
120 accept that line, and you'll need to enter a second one of pure
111 whitespace. I know it sounds complicated, but I can't find a
121 whitespace. I know it sounds complicated, but I can't find a
112 different solution that covers all the cases, with the right
122 different solution that covers all the cases, with the right
113 heuristics. Hopefully in actual use, nobody will really notice
123 heuristics. Hopefully in actual use, nobody will really notice
114 all these strange rules and things will 'just work'.
124 all these strange rules and things will 'just work'.
115
125
116 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
126 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
117
127
118 * IPython/iplib.py (interact): catch exceptions which can be
128 * IPython/iplib.py (interact): catch exceptions which can be
119 triggered asynchronously by signal handlers. Thanks to an
129 triggered asynchronously by signal handlers. Thanks to an
120 automatic crash report, submitted by Colin Kingsley
130 automatic crash report, submitted by Colin Kingsley
121 <tercel-AT-gentoo.org>.
131 <tercel-AT-gentoo.org>.
122
132
123 2006-01-20 Ville Vainio <vivainio@gmail.com>
133 2006-01-20 Ville Vainio <vivainio@gmail.com>
124
134
125 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
135 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
126 (%rehashdir, very useful, try it out) of how to extend ipython
136 (%rehashdir, very useful, try it out) of how to extend ipython
127 with new magics. Also added Extensions dir to pythonpath to make
137 with new magics. Also added Extensions dir to pythonpath to make
128 importing extensions easy.
138 importing extensions easy.
129
139
130 * %store now complains when trying to store interactively declared
140 * %store now complains when trying to store interactively declared
131 classes / instances of those classes.
141 classes / instances of those classes.
132
142
133 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
143 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
134 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
144 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
135 if they exist, and ipy_user_conf.py with some defaults is created for
145 if they exist, and ipy_user_conf.py with some defaults is created for
136 the user.
146 the user.
137
147
138 * Startup rehashing done by the config file, not InterpreterExec.
148 * Startup rehashing done by the config file, not InterpreterExec.
139 This means system commands are available even without selecting the
149 This means system commands are available even without selecting the
140 pysh profile. It's the sensible default after all.
150 pysh profile. It's the sensible default after all.
141
151
142 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
152 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
143
153
144 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
154 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
145 multiline code with autoindent on working. But I am really not
155 multiline code with autoindent on working. But I am really not
146 sure, so this needs more testing. Will commit a debug-enabled
156 sure, so this needs more testing. Will commit a debug-enabled
147 version for now, while I test it some more, so that Ville and
157 version for now, while I test it some more, so that Ville and
148 others may also catch any problems. Also made
158 others may also catch any problems. Also made
149 self.indent_current_str() a method, to ensure that there's no
159 self.indent_current_str() a method, to ensure that there's no
150 chance of the indent space count and the corresponding string
160 chance of the indent space count and the corresponding string
151 falling out of sync. All code needing the string should just call
161 falling out of sync. All code needing the string should just call
152 the method.
162 the method.
153
163
154 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
164 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
155
165
156 * IPython/Magic.py (magic_edit): fix check for when users don't
166 * IPython/Magic.py (magic_edit): fix check for when users don't
157 save their output files, the try/except was in the wrong section.
167 save their output files, the try/except was in the wrong section.
158
168
159 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
169 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
160
170
161 * IPython/Magic.py (magic_run): fix __file__ global missing from
171 * IPython/Magic.py (magic_run): fix __file__ global missing from
162 script's namespace when executed via %run. After a report by
172 script's namespace when executed via %run. After a report by
163 Vivian.
173 Vivian.
164
174
165 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
175 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
166 when using python 2.4. The parent constructor changed in 2.4, and
176 when using python 2.4. The parent constructor changed in 2.4, and
167 we need to track it directly (we can't call it, as it messes up
177 we need to track it directly (we can't call it, as it messes up
168 readline and tab-completion inside our pdb would stop working).
178 readline and tab-completion inside our pdb would stop working).
169 After a bug report by R. Bernstein <rocky-AT-panix.com>.
179 After a bug report by R. Bernstein <rocky-AT-panix.com>.
170
180
171 2006-01-16 Ville Vainio <vivainio@gmail.com>
181 2006-01-16 Ville Vainio <vivainio@gmail.com>
172
182
173 * Ipython/magic.py:Reverted back to old %edit functionality
183 * Ipython/magic.py:Reverted back to old %edit functionality
174 that returns file contents on exit.
184 that returns file contents on exit.
175
185
176 * IPython/path.py: Added Jason Orendorff's "path" module to
186 * IPython/path.py: Added Jason Orendorff's "path" module to
177 IPython tree, http://www.jorendorff.com/articles/python/path/.
187 IPython tree, http://www.jorendorff.com/articles/python/path/.
178 You can get path objects conveniently through %sc, and !!, e.g.:
188 You can get path objects conveniently through %sc, and !!, e.g.:
179 sc files=ls
189 sc files=ls
180 for p in files.paths: # or files.p
190 for p in files.paths: # or files.p
181 print p,p.mtime
191 print p,p.mtime
182
192
183 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
193 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
184 now work again without considering the exclusion regexp -
194 now work again without considering the exclusion regexp -
185 hence, things like ',foo my/path' turn to 'foo("my/path")'
195 hence, things like ',foo my/path' turn to 'foo("my/path")'
186 instead of syntax error.
196 instead of syntax error.
187
197
188
198
189 2006-01-14 Ville Vainio <vivainio@gmail.com>
199 2006-01-14 Ville Vainio <vivainio@gmail.com>
190
200
191 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
201 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
192 ipapi decorators for python 2.4 users, options() provides access to rc
202 ipapi decorators for python 2.4 users, options() provides access to rc
193 data.
203 data.
194
204
195 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
205 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
196 as path separators (even on Linux ;-). Space character after
206 as path separators (even on Linux ;-). Space character after
197 backslash (as yielded by tab completer) is still space;
207 backslash (as yielded by tab completer) is still space;
198 "%cd long\ name" works as expected.
208 "%cd long\ name" works as expected.
199
209
200 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
210 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
201 as "chain of command", with priority. API stays the same,
211 as "chain of command", with priority. API stays the same,
202 TryNext exception raised by a hook function signals that
212 TryNext exception raised by a hook function signals that
203 current hook failed and next hook should try handling it, as
213 current hook failed and next hook should try handling it, as
204 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
214 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
205 requested configurable display hook, which is now implemented.
215 requested configurable display hook, which is now implemented.
206
216
207 2006-01-13 Ville Vainio <vivainio@gmail.com>
217 2006-01-13 Ville Vainio <vivainio@gmail.com>
208
218
209 * IPython/platutils*.py: platform specific utility functions,
219 * IPython/platutils*.py: platform specific utility functions,
210 so far only set_term_title is implemented (change terminal
220 so far only set_term_title is implemented (change terminal
211 label in windowing systems). %cd now changes the title to
221 label in windowing systems). %cd now changes the title to
212 current dir.
222 current dir.
213
223
214 * IPython/Release.py: Added myself to "authors" list,
224 * IPython/Release.py: Added myself to "authors" list,
215 had to create new files.
225 had to create new files.
216
226
217 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
227 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
218 shell escape; not a known bug but had potential to be one in the
228 shell escape; not a known bug but had potential to be one in the
219 future.
229 future.
220
230
221 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
231 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
222 extension API for IPython! See the module for usage example. Fix
232 extension API for IPython! See the module for usage example. Fix
223 OInspect for docstring-less magic functions.
233 OInspect for docstring-less magic functions.
224
234
225
235
226 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
236 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
227
237
228 * IPython/iplib.py (raw_input): temporarily deactivate all
238 * IPython/iplib.py (raw_input): temporarily deactivate all
229 attempts at allowing pasting of code with autoindent on. It
239 attempts at allowing pasting of code with autoindent on. It
230 introduced bugs (reported by Prabhu) and I can't seem to find a
240 introduced bugs (reported by Prabhu) and I can't seem to find a
231 robust combination which works in all cases. Will have to revisit
241 robust combination which works in all cases. Will have to revisit
232 later.
242 later.
233
243
234 * IPython/genutils.py: remove isspace() function. We've dropped
244 * IPython/genutils.py: remove isspace() function. We've dropped
235 2.2 compatibility, so it's OK to use the string method.
245 2.2 compatibility, so it's OK to use the string method.
236
246
237 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
247 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
238
248
239 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
249 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
240 matching what NOT to autocall on, to include all python binary
250 matching what NOT to autocall on, to include all python binary
241 operators (including things like 'and', 'or', 'is' and 'in').
251 operators (including things like 'and', 'or', 'is' and 'in').
242 Prompted by a bug report on 'foo & bar', but I realized we had
252 Prompted by a bug report on 'foo & bar', but I realized we had
243 many more potential bug cases with other operators. The regexp is
253 many more potential bug cases with other operators. The regexp is
244 self.re_exclude_auto, it's fairly commented.
254 self.re_exclude_auto, it's fairly commented.
245
255
246 2006-01-12 Ville Vainio <vivainio@gmail.com>
256 2006-01-12 Ville Vainio <vivainio@gmail.com>
247
257
248 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
258 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
249 Prettified and hardened string/backslash quoting with ipsystem(),
259 Prettified and hardened string/backslash quoting with ipsystem(),
250 ipalias() and ipmagic(). Now even \ characters are passed to
260 ipalias() and ipmagic(). Now even \ characters are passed to
251 %magics, !shell escapes and aliases exactly as they are in the
261 %magics, !shell escapes and aliases exactly as they are in the
252 ipython command line. Should improve backslash experience,
262 ipython command line. Should improve backslash experience,
253 particularly in Windows (path delimiter for some commands that
263 particularly in Windows (path delimiter for some commands that
254 won't understand '/'), but Unix benefits as well (regexps). %cd
264 won't understand '/'), but Unix benefits as well (regexps). %cd
255 magic still doesn't support backslash path delimiters, though. Also
265 magic still doesn't support backslash path delimiters, though. Also
256 deleted all pretense of supporting multiline command strings in
266 deleted all pretense of supporting multiline command strings in
257 !system or %magic commands. Thanks to Jerry McRae for suggestions.
267 !system or %magic commands. Thanks to Jerry McRae for suggestions.
258
268
259 * doc/build_doc_instructions.txt added. Documentation on how to
269 * doc/build_doc_instructions.txt added. Documentation on how to
260 use doc/update_manual.py, added yesterday. Both files contributed
270 use doc/update_manual.py, added yesterday. Both files contributed
261 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
271 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
262 doc/*.sh for deprecation at a later date.
272 doc/*.sh for deprecation at a later date.
263
273
264 * /ipython.py Added ipython.py to root directory for
274 * /ipython.py Added ipython.py to root directory for
265 zero-installation (tar xzvf ipython.tgz; cd ipython; python
275 zero-installation (tar xzvf ipython.tgz; cd ipython; python
266 ipython.py) and development convenience (no need to kee doing
276 ipython.py) and development convenience (no need to kee doing
267 "setup.py install" between changes).
277 "setup.py install" between changes).
268
278
269 * Made ! and !! shell escapes work (again) in multiline expressions:
279 * Made ! and !! shell escapes work (again) in multiline expressions:
270 if 1:
280 if 1:
271 !ls
281 !ls
272 !!ls
282 !!ls
273
283
274 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
284 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
275
285
276 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
286 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
277 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
287 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
278 module in case-insensitive installation. Was causing crashes
288 module in case-insensitive installation. Was causing crashes
279 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
289 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
280
290
281 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
291 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
282 <marienz-AT-gentoo.org>, closes
292 <marienz-AT-gentoo.org>, closes
283 http://www.scipy.net/roundup/ipython/issue51.
293 http://www.scipy.net/roundup/ipython/issue51.
284
294
285 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
295 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
286
296
287 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
297 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
288 problem of excessive CPU usage under *nix and keyboard lag under
298 problem of excessive CPU usage under *nix and keyboard lag under
289 win32.
299 win32.
290
300
291 2006-01-10 *** Released version 0.7.0
301 2006-01-10 *** Released version 0.7.0
292
302
293 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
303 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
294
304
295 * IPython/Release.py (revision): tag version number to 0.7.0,
305 * IPython/Release.py (revision): tag version number to 0.7.0,
296 ready for release.
306 ready for release.
297
307
298 * IPython/Magic.py (magic_edit): Add print statement to %edit so
308 * IPython/Magic.py (magic_edit): Add print statement to %edit so
299 it informs the user of the name of the temp. file used. This can
309 it informs the user of the name of the temp. file used. This can
300 help if you decide later to reuse that same file, so you know
310 help if you decide later to reuse that same file, so you know
301 where to copy the info from.
311 where to copy the info from.
302
312
303 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
313 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
304
314
305 * setup_bdist_egg.py: little script to build an egg. Added
315 * setup_bdist_egg.py: little script to build an egg. Added
306 support in the release tools as well.
316 support in the release tools as well.
307
317
308 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
318 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
309
319
310 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
320 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
311 version selection (new -wxversion command line and ipythonrc
321 version selection (new -wxversion command line and ipythonrc
312 parameter). Patch contributed by Arnd Baecker
322 parameter). Patch contributed by Arnd Baecker
313 <arnd.baecker-AT-web.de>.
323 <arnd.baecker-AT-web.de>.
314
324
315 * IPython/iplib.py (embed_mainloop): fix tab-completion in
325 * IPython/iplib.py (embed_mainloop): fix tab-completion in
316 embedded instances, for variables defined at the interactive
326 embedded instances, for variables defined at the interactive
317 prompt of the embedded ipython. Reported by Arnd.
327 prompt of the embedded ipython. Reported by Arnd.
318
328
319 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
329 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
320 it can be used as a (stateful) toggle, or with a direct parameter.
330 it can be used as a (stateful) toggle, or with a direct parameter.
321
331
322 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
332 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
323 could be triggered in certain cases and cause the traceback
333 could be triggered in certain cases and cause the traceback
324 printer not to work.
334 printer not to work.
325
335
326 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
336 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
327
337
328 * IPython/iplib.py (_should_recompile): Small fix, closes
338 * IPython/iplib.py (_should_recompile): Small fix, closes
329 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
339 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
330
340
331 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
341 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
332
342
333 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
343 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
334 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
344 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
335 Moad for help with tracking it down.
345 Moad for help with tracking it down.
336
346
337 * IPython/iplib.py (handle_auto): fix autocall handling for
347 * IPython/iplib.py (handle_auto): fix autocall handling for
338 objects which support BOTH __getitem__ and __call__ (so that f [x]
348 objects which support BOTH __getitem__ and __call__ (so that f [x]
339 is left alone, instead of becoming f([x]) automatically).
349 is left alone, instead of becoming f([x]) automatically).
340
350
341 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
351 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
342 Ville's patch.
352 Ville's patch.
343
353
344 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
354 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
345
355
346 * IPython/iplib.py (handle_auto): changed autocall semantics to
356 * IPython/iplib.py (handle_auto): changed autocall semantics to
347 include 'smart' mode, where the autocall transformation is NOT
357 include 'smart' mode, where the autocall transformation is NOT
348 applied if there are no arguments on the line. This allows you to
358 applied if there are no arguments on the line. This allows you to
349 just type 'foo' if foo is a callable to see its internal form,
359 just type 'foo' if foo is a callable to see its internal form,
350 instead of having it called with no arguments (typically a
360 instead of having it called with no arguments (typically a
351 mistake). The old 'full' autocall still exists: for that, you
361 mistake). The old 'full' autocall still exists: for that, you
352 need to set the 'autocall' parameter to 2 in your ipythonrc file.
362 need to set the 'autocall' parameter to 2 in your ipythonrc file.
353
363
354 * IPython/completer.py (Completer.attr_matches): add
364 * IPython/completer.py (Completer.attr_matches): add
355 tab-completion support for Enthoughts' traits. After a report by
365 tab-completion support for Enthoughts' traits. After a report by
356 Arnd and a patch by Prabhu.
366 Arnd and a patch by Prabhu.
357
367
358 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
368 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
359
369
360 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
370 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
361 Schmolck's patch to fix inspect.getinnerframes().
371 Schmolck's patch to fix inspect.getinnerframes().
362
372
363 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
373 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
364 for embedded instances, regarding handling of namespaces and items
374 for embedded instances, regarding handling of namespaces and items
365 added to the __builtin__ one. Multiple embedded instances and
375 added to the __builtin__ one. Multiple embedded instances and
366 recursive embeddings should work better now (though I'm not sure
376 recursive embeddings should work better now (though I'm not sure
367 I've got all the corner cases fixed, that code is a bit of a brain
377 I've got all the corner cases fixed, that code is a bit of a brain
368 twister).
378 twister).
369
379
370 * IPython/Magic.py (magic_edit): added support to edit in-memory
380 * IPython/Magic.py (magic_edit): added support to edit in-memory
371 macros (automatically creates the necessary temp files). %edit
381 macros (automatically creates the necessary temp files). %edit
372 also doesn't return the file contents anymore, it's just noise.
382 also doesn't return the file contents anymore, it's just noise.
373
383
374 * IPython/completer.py (Completer.attr_matches): revert change to
384 * IPython/completer.py (Completer.attr_matches): revert change to
375 complete only on attributes listed in __all__. I realized it
385 complete only on attributes listed in __all__. I realized it
376 cripples the tab-completion system as a tool for exploring the
386 cripples the tab-completion system as a tool for exploring the
377 internals of unknown libraries (it renders any non-__all__
387 internals of unknown libraries (it renders any non-__all__
378 attribute off-limits). I got bit by this when trying to see
388 attribute off-limits). I got bit by this when trying to see
379 something inside the dis module.
389 something inside the dis module.
380
390
381 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
391 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
382
392
383 * IPython/iplib.py (InteractiveShell.__init__): add .meta
393 * IPython/iplib.py (InteractiveShell.__init__): add .meta
384 namespace for users and extension writers to hold data in. This
394 namespace for users and extension writers to hold data in. This
385 follows the discussion in
395 follows the discussion in
386 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
396 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
387
397
388 * IPython/completer.py (IPCompleter.complete): small patch to help
398 * IPython/completer.py (IPCompleter.complete): small patch to help
389 tab-completion under Emacs, after a suggestion by John Barnard
399 tab-completion under Emacs, after a suggestion by John Barnard
390 <barnarj-AT-ccf.org>.
400 <barnarj-AT-ccf.org>.
391
401
392 * IPython/Magic.py (Magic.extract_input_slices): added support for
402 * IPython/Magic.py (Magic.extract_input_slices): added support for
393 the slice notation in magics to use N-M to represent numbers N...M
403 the slice notation in magics to use N-M to represent numbers N...M
394 (closed endpoints). This is used by %macro and %save.
404 (closed endpoints). This is used by %macro and %save.
395
405
396 * IPython/completer.py (Completer.attr_matches): for modules which
406 * IPython/completer.py (Completer.attr_matches): for modules which
397 define __all__, complete only on those. After a patch by Jeffrey
407 define __all__, complete only on those. After a patch by Jeffrey
398 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
408 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
399 speed up this routine.
409 speed up this routine.
400
410
401 * IPython/Logger.py (Logger.log): fix a history handling bug. I
411 * IPython/Logger.py (Logger.log): fix a history handling bug. I
402 don't know if this is the end of it, but the behavior now is
412 don't know if this is the end of it, but the behavior now is
403 certainly much more correct. Note that coupled with macros,
413 certainly much more correct. Note that coupled with macros,
404 slightly surprising (at first) behavior may occur: a macro will in
414 slightly surprising (at first) behavior may occur: a macro will in
405 general expand to multiple lines of input, so upon exiting, the
415 general expand to multiple lines of input, so upon exiting, the
406 in/out counters will both be bumped by the corresponding amount
416 in/out counters will both be bumped by the corresponding amount
407 (as if the macro's contents had been typed interactively). Typing
417 (as if the macro's contents had been typed interactively). Typing
408 %hist will reveal the intermediate (silently processed) lines.
418 %hist will reveal the intermediate (silently processed) lines.
409
419
410 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
420 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
411 pickle to fail (%run was overwriting __main__ and not restoring
421 pickle to fail (%run was overwriting __main__ and not restoring
412 it, but pickle relies on __main__ to operate).
422 it, but pickle relies on __main__ to operate).
413
423
414 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
424 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
415 using properties, but forgot to make the main InteractiveShell
425 using properties, but forgot to make the main InteractiveShell
416 class a new-style class. Properties fail silently, and
426 class a new-style class. Properties fail silently, and
417 misteriously, with old-style class (getters work, but
427 misteriously, with old-style class (getters work, but
418 setters don't do anything).
428 setters don't do anything).
419
429
420 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
430 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
421
431
422 * IPython/Magic.py (magic_history): fix history reporting bug (I
432 * IPython/Magic.py (magic_history): fix history reporting bug (I
423 know some nasties are still there, I just can't seem to find a
433 know some nasties are still there, I just can't seem to find a
424 reproducible test case to track them down; the input history is
434 reproducible test case to track them down; the input history is
425 falling out of sync...)
435 falling out of sync...)
426
436
427 * IPython/iplib.py (handle_shell_escape): fix bug where both
437 * IPython/iplib.py (handle_shell_escape): fix bug where both
428 aliases and system accesses where broken for indented code (such
438 aliases and system accesses where broken for indented code (such
429 as loops).
439 as loops).
430
440
431 * IPython/genutils.py (shell): fix small but critical bug for
441 * IPython/genutils.py (shell): fix small but critical bug for
432 win32 system access.
442 win32 system access.
433
443
434 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
444 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
435
445
436 * IPython/iplib.py (showtraceback): remove use of the
446 * IPython/iplib.py (showtraceback): remove use of the
437 sys.last_{type/value/traceback} structures, which are non
447 sys.last_{type/value/traceback} structures, which are non
438 thread-safe.
448 thread-safe.
439 (_prefilter): change control flow to ensure that we NEVER
449 (_prefilter): change control flow to ensure that we NEVER
440 introspect objects when autocall is off. This will guarantee that
450 introspect objects when autocall is off. This will guarantee that
441 having an input line of the form 'x.y', where access to attribute
451 having an input line of the form 'x.y', where access to attribute
442 'y' has side effects, doesn't trigger the side effect TWICE. It
452 'y' has side effects, doesn't trigger the side effect TWICE. It
443 is important to note that, with autocall on, these side effects
453 is important to note that, with autocall on, these side effects
444 can still happen.
454 can still happen.
445 (ipsystem): new builtin, to complete the ip{magic/alias/system}
455 (ipsystem): new builtin, to complete the ip{magic/alias/system}
446 trio. IPython offers these three kinds of special calls which are
456 trio. IPython offers these three kinds of special calls which are
447 not python code, and it's a good thing to have their call method
457 not python code, and it's a good thing to have their call method
448 be accessible as pure python functions (not just special syntax at
458 be accessible as pure python functions (not just special syntax at
449 the command line). It gives us a better internal implementation
459 the command line). It gives us a better internal implementation
450 structure, as well as exposing these for user scripting more
460 structure, as well as exposing these for user scripting more
451 cleanly.
461 cleanly.
452
462
453 * IPython/macro.py (Macro.__init__): moved macros to a standalone
463 * IPython/macro.py (Macro.__init__): moved macros to a standalone
454 file. Now that they'll be more likely to be used with the
464 file. Now that they'll be more likely to be used with the
455 persistance system (%store), I want to make sure their module path
465 persistance system (%store), I want to make sure their module path
456 doesn't change in the future, so that we don't break things for
466 doesn't change in the future, so that we don't break things for
457 users' persisted data.
467 users' persisted data.
458
468
459 * IPython/iplib.py (autoindent_update): move indentation
469 * IPython/iplib.py (autoindent_update): move indentation
460 management into the _text_ processing loop, not the keyboard
470 management into the _text_ processing loop, not the keyboard
461 interactive one. This is necessary to correctly process non-typed
471 interactive one. This is necessary to correctly process non-typed
462 multiline input (such as macros).
472 multiline input (such as macros).
463
473
464 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
474 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
465 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
475 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
466 which was producing problems in the resulting manual.
476 which was producing problems in the resulting manual.
467 (magic_whos): improve reporting of instances (show their class,
477 (magic_whos): improve reporting of instances (show their class,
468 instead of simply printing 'instance' which isn't terribly
478 instead of simply printing 'instance' which isn't terribly
469 informative).
479 informative).
470
480
471 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
481 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
472 (minor mods) to support network shares under win32.
482 (minor mods) to support network shares under win32.
473
483
474 * IPython/winconsole.py (get_console_size): add new winconsole
484 * IPython/winconsole.py (get_console_size): add new winconsole
475 module and fixes to page_dumb() to improve its behavior under
485 module and fixes to page_dumb() to improve its behavior under
476 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
486 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
477
487
478 * IPython/Magic.py (Macro): simplified Macro class to just
488 * IPython/Magic.py (Macro): simplified Macro class to just
479 subclass list. We've had only 2.2 compatibility for a very long
489 subclass list. We've had only 2.2 compatibility for a very long
480 time, yet I was still avoiding subclassing the builtin types. No
490 time, yet I was still avoiding subclassing the builtin types. No
481 more (I'm also starting to use properties, though I won't shift to
491 more (I'm also starting to use properties, though I won't shift to
482 2.3-specific features quite yet).
492 2.3-specific features quite yet).
483 (magic_store): added Ville's patch for lightweight variable
493 (magic_store): added Ville's patch for lightweight variable
484 persistence, after a request on the user list by Matt Wilkie
494 persistence, after a request on the user list by Matt Wilkie
485 <maphew-AT-gmail.com>. The new %store magic's docstring has full
495 <maphew-AT-gmail.com>. The new %store magic's docstring has full
486 details.
496 details.
487
497
488 * IPython/iplib.py (InteractiveShell.post_config_initialization):
498 * IPython/iplib.py (InteractiveShell.post_config_initialization):
489 changed the default logfile name from 'ipython.log' to
499 changed the default logfile name from 'ipython.log' to
490 'ipython_log.py'. These logs are real python files, and now that
500 'ipython_log.py'. These logs are real python files, and now that
491 we have much better multiline support, people are more likely to
501 we have much better multiline support, people are more likely to
492 want to use them as such. Might as well name them correctly.
502 want to use them as such. Might as well name them correctly.
493
503
494 * IPython/Magic.py: substantial cleanup. While we can't stop
504 * IPython/Magic.py: substantial cleanup. While we can't stop
495 using magics as mixins, due to the existing customizations 'out
505 using magics as mixins, due to the existing customizations 'out
496 there' which rely on the mixin naming conventions, at least I
506 there' which rely on the mixin naming conventions, at least I
497 cleaned out all cross-class name usage. So once we are OK with
507 cleaned out all cross-class name usage. So once we are OK with
498 breaking compatibility, the two systems can be separated.
508 breaking compatibility, the two systems can be separated.
499
509
500 * IPython/Logger.py: major cleanup. This one is NOT a mixin
510 * IPython/Logger.py: major cleanup. This one is NOT a mixin
501 anymore, and the class is a fair bit less hideous as well. New
511 anymore, and the class is a fair bit less hideous as well. New
502 features were also introduced: timestamping of input, and logging
512 features were also introduced: timestamping of input, and logging
503 of output results. These are user-visible with the -t and -o
513 of output results. These are user-visible with the -t and -o
504 options to %logstart. Closes
514 options to %logstart. Closes
505 http://www.scipy.net/roundup/ipython/issue11 and a request by
515 http://www.scipy.net/roundup/ipython/issue11 and a request by
506 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
516 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
507
517
508 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
518 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
509
519
510 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
520 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
511 better hadnle backslashes in paths. See the thread 'More Windows
521 better hadnle backslashes in paths. See the thread 'More Windows
512 questions part 2 - \/ characters revisited' on the iypthon user
522 questions part 2 - \/ characters revisited' on the iypthon user
513 list:
523 list:
514 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
524 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
515
525
516 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
526 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
517
527
518 (InteractiveShell.__init__): change threaded shells to not use the
528 (InteractiveShell.__init__): change threaded shells to not use the
519 ipython crash handler. This was causing more problems than not,
529 ipython crash handler. This was causing more problems than not,
520 as exceptions in the main thread (GUI code, typically) would
530 as exceptions in the main thread (GUI code, typically) would
521 always show up as a 'crash', when they really weren't.
531 always show up as a 'crash', when they really weren't.
522
532
523 The colors and exception mode commands (%colors/%xmode) have been
533 The colors and exception mode commands (%colors/%xmode) have been
524 synchronized to also take this into account, so users can get
534 synchronized to also take this into account, so users can get
525 verbose exceptions for their threaded code as well. I also added
535 verbose exceptions for their threaded code as well. I also added
526 support for activating pdb inside this exception handler as well,
536 support for activating pdb inside this exception handler as well,
527 so now GUI authors can use IPython's enhanced pdb at runtime.
537 so now GUI authors can use IPython's enhanced pdb at runtime.
528
538
529 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
539 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
530 true by default, and add it to the shipped ipythonrc file. Since
540 true by default, and add it to the shipped ipythonrc file. Since
531 this asks the user before proceeding, I think it's OK to make it
541 this asks the user before proceeding, I think it's OK to make it
532 true by default.
542 true by default.
533
543
534 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
544 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
535 of the previous special-casing of input in the eval loop. I think
545 of the previous special-casing of input in the eval loop. I think
536 this is cleaner, as they really are commands and shouldn't have
546 this is cleaner, as they really are commands and shouldn't have
537 a special role in the middle of the core code.
547 a special role in the middle of the core code.
538
548
539 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
549 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
540
550
541 * IPython/iplib.py (edit_syntax_error): added support for
551 * IPython/iplib.py (edit_syntax_error): added support for
542 automatically reopening the editor if the file had a syntax error
552 automatically reopening the editor if the file had a syntax error
543 in it. Thanks to scottt who provided the patch at:
553 in it. Thanks to scottt who provided the patch at:
544 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
554 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
545 version committed).
555 version committed).
546
556
547 * IPython/iplib.py (handle_normal): add suport for multi-line
557 * IPython/iplib.py (handle_normal): add suport for multi-line
548 input with emtpy lines. This fixes
558 input with emtpy lines. This fixes
549 http://www.scipy.net/roundup/ipython/issue43 and a similar
559 http://www.scipy.net/roundup/ipython/issue43 and a similar
550 discussion on the user list.
560 discussion on the user list.
551
561
552 WARNING: a behavior change is necessarily introduced to support
562 WARNING: a behavior change is necessarily introduced to support
553 blank lines: now a single blank line with whitespace does NOT
563 blank lines: now a single blank line with whitespace does NOT
554 break the input loop, which means that when autoindent is on, by
564 break the input loop, which means that when autoindent is on, by
555 default hitting return on the next (indented) line does NOT exit.
565 default hitting return on the next (indented) line does NOT exit.
556
566
557 Instead, to exit a multiline input you can either have:
567 Instead, to exit a multiline input you can either have:
558
568
559 - TWO whitespace lines (just hit return again), or
569 - TWO whitespace lines (just hit return again), or
560 - a single whitespace line of a different length than provided
570 - a single whitespace line of a different length than provided
561 by the autoindent (add or remove a space).
571 by the autoindent (add or remove a space).
562
572
563 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
573 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
564 module to better organize all readline-related functionality.
574 module to better organize all readline-related functionality.
565 I've deleted FlexCompleter and put all completion clases here.
575 I've deleted FlexCompleter and put all completion clases here.
566
576
567 * IPython/iplib.py (raw_input): improve indentation management.
577 * IPython/iplib.py (raw_input): improve indentation management.
568 It is now possible to paste indented code with autoindent on, and
578 It is now possible to paste indented code with autoindent on, and
569 the code is interpreted correctly (though it still looks bad on
579 the code is interpreted correctly (though it still looks bad on
570 screen, due to the line-oriented nature of ipython).
580 screen, due to the line-oriented nature of ipython).
571 (MagicCompleter.complete): change behavior so that a TAB key on an
581 (MagicCompleter.complete): change behavior so that a TAB key on an
572 otherwise empty line actually inserts a tab, instead of completing
582 otherwise empty line actually inserts a tab, instead of completing
573 on the entire global namespace. This makes it easier to use the
583 on the entire global namespace. This makes it easier to use the
574 TAB key for indentation. After a request by Hans Meine
584 TAB key for indentation. After a request by Hans Meine
575 <hans_meine-AT-gmx.net>
585 <hans_meine-AT-gmx.net>
576 (_prefilter): add support so that typing plain 'exit' or 'quit'
586 (_prefilter): add support so that typing plain 'exit' or 'quit'
577 does a sensible thing. Originally I tried to deviate as little as
587 does a sensible thing. Originally I tried to deviate as little as
578 possible from the default python behavior, but even that one may
588 possible from the default python behavior, but even that one may
579 change in this direction (thread on python-dev to that effect).
589 change in this direction (thread on python-dev to that effect).
580 Regardless, ipython should do the right thing even if CPython's
590 Regardless, ipython should do the right thing even if CPython's
581 '>>>' prompt doesn't.
591 '>>>' prompt doesn't.
582 (InteractiveShell): removed subclassing code.InteractiveConsole
592 (InteractiveShell): removed subclassing code.InteractiveConsole
583 class. By now we'd overridden just about all of its methods: I've
593 class. By now we'd overridden just about all of its methods: I've
584 copied the remaining two over, and now ipython is a standalone
594 copied the remaining two over, and now ipython is a standalone
585 class. This will provide a clearer picture for the chainsaw
595 class. This will provide a clearer picture for the chainsaw
586 branch refactoring.
596 branch refactoring.
587
597
588 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
598 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
589
599
590 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
600 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
591 failures for objects which break when dir() is called on them.
601 failures for objects which break when dir() is called on them.
592
602
593 * IPython/FlexCompleter.py (Completer.__init__): Added support for
603 * IPython/FlexCompleter.py (Completer.__init__): Added support for
594 distinct local and global namespaces in the completer API. This
604 distinct local and global namespaces in the completer API. This
595 change allows us top properly handle completion with distinct
605 change allows us top properly handle completion with distinct
596 scopes, including in embedded instances (this had never really
606 scopes, including in embedded instances (this had never really
597 worked correctly).
607 worked correctly).
598
608
599 Note: this introduces a change in the constructor for
609 Note: this introduces a change in the constructor for
600 MagicCompleter, as a new global_namespace parameter is now the
610 MagicCompleter, as a new global_namespace parameter is now the
601 second argument (the others were bumped one position).
611 second argument (the others were bumped one position).
602
612
603 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
613 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
604
614
605 * IPython/iplib.py (embed_mainloop): fix tab-completion in
615 * IPython/iplib.py (embed_mainloop): fix tab-completion in
606 embedded instances (which can be done now thanks to Vivian's
616 embedded instances (which can be done now thanks to Vivian's
607 frame-handling fixes for pdb).
617 frame-handling fixes for pdb).
608 (InteractiveShell.__init__): Fix namespace handling problem in
618 (InteractiveShell.__init__): Fix namespace handling problem in
609 embedded instances. We were overwriting __main__ unconditionally,
619 embedded instances. We were overwriting __main__ unconditionally,
610 and this should only be done for 'full' (non-embedded) IPython;
620 and this should only be done for 'full' (non-embedded) IPython;
611 embedded instances must respect the caller's __main__. Thanks to
621 embedded instances must respect the caller's __main__. Thanks to
612 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
622 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
613
623
614 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
624 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
615
625
616 * setup.py: added download_url to setup(). This registers the
626 * setup.py: added download_url to setup(). This registers the
617 download address at PyPI, which is not only useful to humans
627 download address at PyPI, which is not only useful to humans
618 browsing the site, but is also picked up by setuptools (the Eggs
628 browsing the site, but is also picked up by setuptools (the Eggs
619 machinery). Thanks to Ville and R. Kern for the info/discussion
629 machinery). Thanks to Ville and R. Kern for the info/discussion
620 on this.
630 on this.
621
631
622 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
632 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
623
633
624 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
634 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
625 This brings a lot of nice functionality to the pdb mode, which now
635 This brings a lot of nice functionality to the pdb mode, which now
626 has tab-completion, syntax highlighting, and better stack handling
636 has tab-completion, syntax highlighting, and better stack handling
627 than before. Many thanks to Vivian De Smedt
637 than before. Many thanks to Vivian De Smedt
628 <vivian-AT-vdesmedt.com> for the original patches.
638 <vivian-AT-vdesmedt.com> for the original patches.
629
639
630 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
640 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
631
641
632 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
642 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
633 sequence to consistently accept the banner argument. The
643 sequence to consistently accept the banner argument. The
634 inconsistency was tripping SAGE, thanks to Gary Zablackis
644 inconsistency was tripping SAGE, thanks to Gary Zablackis
635 <gzabl-AT-yahoo.com> for the report.
645 <gzabl-AT-yahoo.com> for the report.
636
646
637 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
647 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
638
648
639 * IPython/iplib.py (InteractiveShell.post_config_initialization):
649 * IPython/iplib.py (InteractiveShell.post_config_initialization):
640 Fix bug where a naked 'alias' call in the ipythonrc file would
650 Fix bug where a naked 'alias' call in the ipythonrc file would
641 cause a crash. Bug reported by Jorgen Stenarson.
651 cause a crash. Bug reported by Jorgen Stenarson.
642
652
643 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
653 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
644
654
645 * IPython/ipmaker.py (make_IPython): cleanups which should improve
655 * IPython/ipmaker.py (make_IPython): cleanups which should improve
646 startup time.
656 startup time.
647
657
648 * IPython/iplib.py (runcode): my globals 'fix' for embedded
658 * IPython/iplib.py (runcode): my globals 'fix' for embedded
649 instances had introduced a bug with globals in normal code. Now
659 instances had introduced a bug with globals in normal code. Now
650 it's working in all cases.
660 it's working in all cases.
651
661
652 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
662 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
653 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
663 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
654 has been introduced to set the default case sensitivity of the
664 has been introduced to set the default case sensitivity of the
655 searches. Users can still select either mode at runtime on a
665 searches. Users can still select either mode at runtime on a
656 per-search basis.
666 per-search basis.
657
667
658 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
668 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
659
669
660 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
670 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
661 attributes in wildcard searches for subclasses. Modified version
671 attributes in wildcard searches for subclasses. Modified version
662 of a patch by Jorgen.
672 of a patch by Jorgen.
663
673
664 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
674 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
665
675
666 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
676 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
667 embedded instances. I added a user_global_ns attribute to the
677 embedded instances. I added a user_global_ns attribute to the
668 InteractiveShell class to handle this.
678 InteractiveShell class to handle this.
669
679
670 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
680 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
671
681
672 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
682 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
673 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
683 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
674 (reported under win32, but may happen also in other platforms).
684 (reported under win32, but may happen also in other platforms).
675 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
685 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
676
686
677 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
687 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
678
688
679 * IPython/Magic.py (magic_psearch): new support for wildcard
689 * IPython/Magic.py (magic_psearch): new support for wildcard
680 patterns. Now, typing ?a*b will list all names which begin with a
690 patterns. Now, typing ?a*b will list all names which begin with a
681 and end in b, for example. The %psearch magic has full
691 and end in b, for example. The %psearch magic has full
682 docstrings. Many thanks to JΓΆrgen Stenarson
692 docstrings. Many thanks to JΓΆrgen Stenarson
683 <jorgen.stenarson-AT-bostream.nu>, author of the patches
693 <jorgen.stenarson-AT-bostream.nu>, author of the patches
684 implementing this functionality.
694 implementing this functionality.
685
695
686 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
696 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
687
697
688 * Manual: fixed long-standing annoyance of double-dashes (as in
698 * Manual: fixed long-standing annoyance of double-dashes (as in
689 --prefix=~, for example) being stripped in the HTML version. This
699 --prefix=~, for example) being stripped in the HTML version. This
690 is a latex2html bug, but a workaround was provided. Many thanks
700 is a latex2html bug, but a workaround was provided. Many thanks
691 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
701 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
692 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
702 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
693 rolling. This seemingly small issue had tripped a number of users
703 rolling. This seemingly small issue had tripped a number of users
694 when first installing, so I'm glad to see it gone.
704 when first installing, so I'm glad to see it gone.
695
705
696 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
706 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
697
707
698 * IPython/Extensions/numeric_formats.py: fix missing import,
708 * IPython/Extensions/numeric_formats.py: fix missing import,
699 reported by Stephen Walton.
709 reported by Stephen Walton.
700
710
701 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
711 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
702
712
703 * IPython/demo.py: finish demo module, fully documented now.
713 * IPython/demo.py: finish demo module, fully documented now.
704
714
705 * IPython/genutils.py (file_read): simple little utility to read a
715 * IPython/genutils.py (file_read): simple little utility to read a
706 file and ensure it's closed afterwards.
716 file and ensure it's closed afterwards.
707
717
708 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
718 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
709
719
710 * IPython/demo.py (Demo.__init__): added support for individually
720 * IPython/demo.py (Demo.__init__): added support for individually
711 tagging blocks for automatic execution.
721 tagging blocks for automatic execution.
712
722
713 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
723 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
714 syntax-highlighted python sources, requested by John.
724 syntax-highlighted python sources, requested by John.
715
725
716 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
726 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
717
727
718 * IPython/demo.py (Demo.again): fix bug where again() blocks after
728 * IPython/demo.py (Demo.again): fix bug where again() blocks after
719 finishing.
729 finishing.
720
730
721 * IPython/genutils.py (shlex_split): moved from Magic to here,
731 * IPython/genutils.py (shlex_split): moved from Magic to here,
722 where all 2.2 compatibility stuff lives. I needed it for demo.py.
732 where all 2.2 compatibility stuff lives. I needed it for demo.py.
723
733
724 * IPython/demo.py (Demo.__init__): added support for silent
734 * IPython/demo.py (Demo.__init__): added support for silent
725 blocks, improved marks as regexps, docstrings written.
735 blocks, improved marks as regexps, docstrings written.
726 (Demo.__init__): better docstring, added support for sys.argv.
736 (Demo.__init__): better docstring, added support for sys.argv.
727
737
728 * IPython/genutils.py (marquee): little utility used by the demo
738 * IPython/genutils.py (marquee): little utility used by the demo
729 code, handy in general.
739 code, handy in general.
730
740
731 * IPython/demo.py (Demo.__init__): new class for interactive
741 * IPython/demo.py (Demo.__init__): new class for interactive
732 demos. Not documented yet, I just wrote it in a hurry for
742 demos. Not documented yet, I just wrote it in a hurry for
733 scipy'05. Will docstring later.
743 scipy'05. Will docstring later.
734
744
735 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
745 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
736
746
737 * IPython/Shell.py (sigint_handler): Drastic simplification which
747 * IPython/Shell.py (sigint_handler): Drastic simplification which
738 also seems to make Ctrl-C work correctly across threads! This is
748 also seems to make Ctrl-C work correctly across threads! This is
739 so simple, that I can't beleive I'd missed it before. Needs more
749 so simple, that I can't beleive I'd missed it before. Needs more
740 testing, though.
750 testing, though.
741 (KBINT): Never mind, revert changes. I'm sure I'd tried something
751 (KBINT): Never mind, revert changes. I'm sure I'd tried something
742 like this before...
752 like this before...
743
753
744 * IPython/genutils.py (get_home_dir): add protection against
754 * IPython/genutils.py (get_home_dir): add protection against
745 non-dirs in win32 registry.
755 non-dirs in win32 registry.
746
756
747 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
757 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
748 bug where dict was mutated while iterating (pysh crash).
758 bug where dict was mutated while iterating (pysh crash).
749
759
750 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
760 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
751
761
752 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
762 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
753 spurious newlines added by this routine. After a report by
763 spurious newlines added by this routine. After a report by
754 F. Mantegazza.
764 F. Mantegazza.
755
765
756 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
766 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
757
767
758 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
768 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
759 calls. These were a leftover from the GTK 1.x days, and can cause
769 calls. These were a leftover from the GTK 1.x days, and can cause
760 problems in certain cases (after a report by John Hunter).
770 problems in certain cases (after a report by John Hunter).
761
771
762 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
772 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
763 os.getcwd() fails at init time. Thanks to patch from David Remahl
773 os.getcwd() fails at init time. Thanks to patch from David Remahl
764 <chmod007-AT-mac.com>.
774 <chmod007-AT-mac.com>.
765 (InteractiveShell.__init__): prevent certain special magics from
775 (InteractiveShell.__init__): prevent certain special magics from
766 being shadowed by aliases. Closes
776 being shadowed by aliases. Closes
767 http://www.scipy.net/roundup/ipython/issue41.
777 http://www.scipy.net/roundup/ipython/issue41.
768
778
769 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
779 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
770
780
771 * IPython/iplib.py (InteractiveShell.complete): Added new
781 * IPython/iplib.py (InteractiveShell.complete): Added new
772 top-level completion method to expose the completion mechanism
782 top-level completion method to expose the completion mechanism
773 beyond readline-based environments.
783 beyond readline-based environments.
774
784
775 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
785 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
776
786
777 * tools/ipsvnc (svnversion): fix svnversion capture.
787 * tools/ipsvnc (svnversion): fix svnversion capture.
778
788
779 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
789 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
780 attribute to self, which was missing. Before, it was set by a
790 attribute to self, which was missing. Before, it was set by a
781 routine which in certain cases wasn't being called, so the
791 routine which in certain cases wasn't being called, so the
782 instance could end up missing the attribute. This caused a crash.
792 instance could end up missing the attribute. This caused a crash.
783 Closes http://www.scipy.net/roundup/ipython/issue40.
793 Closes http://www.scipy.net/roundup/ipython/issue40.
784
794
785 2005-08-16 Fernando Perez <fperez@colorado.edu>
795 2005-08-16 Fernando Perez <fperez@colorado.edu>
786
796
787 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
797 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
788 contains non-string attribute. Closes
798 contains non-string attribute. Closes
789 http://www.scipy.net/roundup/ipython/issue38.
799 http://www.scipy.net/roundup/ipython/issue38.
790
800
791 2005-08-14 Fernando Perez <fperez@colorado.edu>
801 2005-08-14 Fernando Perez <fperez@colorado.edu>
792
802
793 * tools/ipsvnc: Minor improvements, to add changeset info.
803 * tools/ipsvnc: Minor improvements, to add changeset info.
794
804
795 2005-08-12 Fernando Perez <fperez@colorado.edu>
805 2005-08-12 Fernando Perez <fperez@colorado.edu>
796
806
797 * IPython/iplib.py (runsource): remove self.code_to_run_src
807 * IPython/iplib.py (runsource): remove self.code_to_run_src
798 attribute. I realized this is nothing more than
808 attribute. I realized this is nothing more than
799 '\n'.join(self.buffer), and having the same data in two different
809 '\n'.join(self.buffer), and having the same data in two different
800 places is just asking for synchronization bugs. This may impact
810 places is just asking for synchronization bugs. This may impact
801 people who have custom exception handlers, so I need to warn
811 people who have custom exception handlers, so I need to warn
802 ipython-dev about it (F. Mantegazza may use them).
812 ipython-dev about it (F. Mantegazza may use them).
803
813
804 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
814 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
805
815
806 * IPython/genutils.py: fix 2.2 compatibility (generators)
816 * IPython/genutils.py: fix 2.2 compatibility (generators)
807
817
808 2005-07-18 Fernando Perez <fperez@colorado.edu>
818 2005-07-18 Fernando Perez <fperez@colorado.edu>
809
819
810 * IPython/genutils.py (get_home_dir): fix to help users with
820 * IPython/genutils.py (get_home_dir): fix to help users with
811 invalid $HOME under win32.
821 invalid $HOME under win32.
812
822
813 2005-07-17 Fernando Perez <fperez@colorado.edu>
823 2005-07-17 Fernando Perez <fperez@colorado.edu>
814
824
815 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
825 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
816 some old hacks and clean up a bit other routines; code should be
826 some old hacks and clean up a bit other routines; code should be
817 simpler and a bit faster.
827 simpler and a bit faster.
818
828
819 * IPython/iplib.py (interact): removed some last-resort attempts
829 * IPython/iplib.py (interact): removed some last-resort attempts
820 to survive broken stdout/stderr. That code was only making it
830 to survive broken stdout/stderr. That code was only making it
821 harder to abstract out the i/o (necessary for gui integration),
831 harder to abstract out the i/o (necessary for gui integration),
822 and the crashes it could prevent were extremely rare in practice
832 and the crashes it could prevent were extremely rare in practice
823 (besides being fully user-induced in a pretty violent manner).
833 (besides being fully user-induced in a pretty violent manner).
824
834
825 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
835 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
826 Nothing major yet, but the code is simpler to read; this should
836 Nothing major yet, but the code is simpler to read; this should
827 make it easier to do more serious modifications in the future.
837 make it easier to do more serious modifications in the future.
828
838
829 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
839 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
830 which broke in .15 (thanks to a report by Ville).
840 which broke in .15 (thanks to a report by Ville).
831
841
832 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
842 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
833 be quite correct, I know next to nothing about unicode). This
843 be quite correct, I know next to nothing about unicode). This
834 will allow unicode strings to be used in prompts, amongst other
844 will allow unicode strings to be used in prompts, amongst other
835 cases. It also will prevent ipython from crashing when unicode
845 cases. It also will prevent ipython from crashing when unicode
836 shows up unexpectedly in many places. If ascii encoding fails, we
846 shows up unexpectedly in many places. If ascii encoding fails, we
837 assume utf_8. Currently the encoding is not a user-visible
847 assume utf_8. Currently the encoding is not a user-visible
838 setting, though it could be made so if there is demand for it.
848 setting, though it could be made so if there is demand for it.
839
849
840 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
850 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
841
851
842 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
852 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
843
853
844 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
854 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
845
855
846 * IPython/genutils.py: Add 2.2 compatibility here, so all other
856 * IPython/genutils.py: Add 2.2 compatibility here, so all other
847 code can work transparently for 2.2/2.3.
857 code can work transparently for 2.2/2.3.
848
858
849 2005-07-16 Fernando Perez <fperez@colorado.edu>
859 2005-07-16 Fernando Perez <fperez@colorado.edu>
850
860
851 * IPython/ultraTB.py (ExceptionColors): Make a global variable
861 * IPython/ultraTB.py (ExceptionColors): Make a global variable
852 out of the color scheme table used for coloring exception
862 out of the color scheme table used for coloring exception
853 tracebacks. This allows user code to add new schemes at runtime.
863 tracebacks. This allows user code to add new schemes at runtime.
854 This is a minimally modified version of the patch at
864 This is a minimally modified version of the patch at
855 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
865 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
856 for the contribution.
866 for the contribution.
857
867
858 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
868 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
859 slightly modified version of the patch in
869 slightly modified version of the patch in
860 http://www.scipy.net/roundup/ipython/issue34, which also allows me
870 http://www.scipy.net/roundup/ipython/issue34, which also allows me
861 to remove the previous try/except solution (which was costlier).
871 to remove the previous try/except solution (which was costlier).
862 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
872 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
863
873
864 2005-06-08 Fernando Perez <fperez@colorado.edu>
874 2005-06-08 Fernando Perez <fperez@colorado.edu>
865
875
866 * IPython/iplib.py (write/write_err): Add methods to abstract all
876 * IPython/iplib.py (write/write_err): Add methods to abstract all
867 I/O a bit more.
877 I/O a bit more.
868
878
869 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
879 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
870 warning, reported by Aric Hagberg, fix by JD Hunter.
880 warning, reported by Aric Hagberg, fix by JD Hunter.
871
881
872 2005-06-02 *** Released version 0.6.15
882 2005-06-02 *** Released version 0.6.15
873
883
874 2005-06-01 Fernando Perez <fperez@colorado.edu>
884 2005-06-01 Fernando Perez <fperez@colorado.edu>
875
885
876 * IPython/iplib.py (MagicCompleter.file_matches): Fix
886 * IPython/iplib.py (MagicCompleter.file_matches): Fix
877 tab-completion of filenames within open-quoted strings. Note that
887 tab-completion of filenames within open-quoted strings. Note that
878 this requires that in ~/.ipython/ipythonrc, users change the
888 this requires that in ~/.ipython/ipythonrc, users change the
879 readline delimiters configuration to read:
889 readline delimiters configuration to read:
880
890
881 readline_remove_delims -/~
891 readline_remove_delims -/~
882
892
883
893
884 2005-05-31 *** Released version 0.6.14
894 2005-05-31 *** Released version 0.6.14
885
895
886 2005-05-29 Fernando Perez <fperez@colorado.edu>
896 2005-05-29 Fernando Perez <fperez@colorado.edu>
887
897
888 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
898 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
889 with files not on the filesystem. Reported by Eliyahu Sandler
899 with files not on the filesystem. Reported by Eliyahu Sandler
890 <eli@gondolin.net>
900 <eli@gondolin.net>
891
901
892 2005-05-22 Fernando Perez <fperez@colorado.edu>
902 2005-05-22 Fernando Perez <fperez@colorado.edu>
893
903
894 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
904 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
895 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
905 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
896
906
897 2005-05-19 Fernando Perez <fperez@colorado.edu>
907 2005-05-19 Fernando Perez <fperez@colorado.edu>
898
908
899 * IPython/iplib.py (safe_execfile): close a file which could be
909 * IPython/iplib.py (safe_execfile): close a file which could be
900 left open (causing problems in win32, which locks open files).
910 left open (causing problems in win32, which locks open files).
901 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
911 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
902
912
903 2005-05-18 Fernando Perez <fperez@colorado.edu>
913 2005-05-18 Fernando Perez <fperez@colorado.edu>
904
914
905 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
915 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
906 keyword arguments correctly to safe_execfile().
916 keyword arguments correctly to safe_execfile().
907
917
908 2005-05-13 Fernando Perez <fperez@colorado.edu>
918 2005-05-13 Fernando Perez <fperez@colorado.edu>
909
919
910 * ipython.1: Added info about Qt to manpage, and threads warning
920 * ipython.1: Added info about Qt to manpage, and threads warning
911 to usage page (invoked with --help).
921 to usage page (invoked with --help).
912
922
913 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
923 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
914 new matcher (it goes at the end of the priority list) to do
924 new matcher (it goes at the end of the priority list) to do
915 tab-completion on named function arguments. Submitted by George
925 tab-completion on named function arguments. Submitted by George
916 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
926 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
917 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
927 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
918 for more details.
928 for more details.
919
929
920 * IPython/Magic.py (magic_run): Added new -e flag to ignore
930 * IPython/Magic.py (magic_run): Added new -e flag to ignore
921 SystemExit exceptions in the script being run. Thanks to a report
931 SystemExit exceptions in the script being run. Thanks to a report
922 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
932 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
923 producing very annoying behavior when running unit tests.
933 producing very annoying behavior when running unit tests.
924
934
925 2005-05-12 Fernando Perez <fperez@colorado.edu>
935 2005-05-12 Fernando Perez <fperez@colorado.edu>
926
936
927 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
937 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
928 which I'd broken (again) due to a changed regexp. In the process,
938 which I'd broken (again) due to a changed regexp. In the process,
929 added ';' as an escape to auto-quote the whole line without
939 added ';' as an escape to auto-quote the whole line without
930 splitting its arguments. Thanks to a report by Jerry McRae
940 splitting its arguments. Thanks to a report by Jerry McRae
931 <qrs0xyc02-AT-sneakemail.com>.
941 <qrs0xyc02-AT-sneakemail.com>.
932
942
933 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
943 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
934 possible crashes caused by a TokenError. Reported by Ed Schofield
944 possible crashes caused by a TokenError. Reported by Ed Schofield
935 <schofield-AT-ftw.at>.
945 <schofield-AT-ftw.at>.
936
946
937 2005-05-06 Fernando Perez <fperez@colorado.edu>
947 2005-05-06 Fernando Perez <fperez@colorado.edu>
938
948
939 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
949 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
940
950
941 2005-04-29 Fernando Perez <fperez@colorado.edu>
951 2005-04-29 Fernando Perez <fperez@colorado.edu>
942
952
943 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
953 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
944 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
954 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
945 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
955 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
946 which provides support for Qt interactive usage (similar to the
956 which provides support for Qt interactive usage (similar to the
947 existing one for WX and GTK). This had been often requested.
957 existing one for WX and GTK). This had been often requested.
948
958
949 2005-04-14 *** Released version 0.6.13
959 2005-04-14 *** Released version 0.6.13
950
960
951 2005-04-08 Fernando Perez <fperez@colorado.edu>
961 2005-04-08 Fernando Perez <fperez@colorado.edu>
952
962
953 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
963 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
954 from _ofind, which gets called on almost every input line. Now,
964 from _ofind, which gets called on almost every input line. Now,
955 we only try to get docstrings if they are actually going to be
965 we only try to get docstrings if they are actually going to be
956 used (the overhead of fetching unnecessary docstrings can be
966 used (the overhead of fetching unnecessary docstrings can be
957 noticeable for certain objects, such as Pyro proxies).
967 noticeable for certain objects, such as Pyro proxies).
958
968
959 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
969 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
960 for completers. For some reason I had been passing them the state
970 for completers. For some reason I had been passing them the state
961 variable, which completers never actually need, and was in
971 variable, which completers never actually need, and was in
962 conflict with the rlcompleter API. Custom completers ONLY need to
972 conflict with the rlcompleter API. Custom completers ONLY need to
963 take the text parameter.
973 take the text parameter.
964
974
965 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
975 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
966 work correctly in pysh. I've also moved all the logic which used
976 work correctly in pysh. I've also moved all the logic which used
967 to be in pysh.py here, which will prevent problems with future
977 to be in pysh.py here, which will prevent problems with future
968 upgrades. However, this time I must warn users to update their
978 upgrades. However, this time I must warn users to update their
969 pysh profile to include the line
979 pysh profile to include the line
970
980
971 import_all IPython.Extensions.InterpreterExec
981 import_all IPython.Extensions.InterpreterExec
972
982
973 because otherwise things won't work for them. They MUST also
983 because otherwise things won't work for them. They MUST also
974 delete pysh.py and the line
984 delete pysh.py and the line
975
985
976 execfile pysh.py
986 execfile pysh.py
977
987
978 from their ipythonrc-pysh.
988 from their ipythonrc-pysh.
979
989
980 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
990 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
981 robust in the face of objects whose dir() returns non-strings
991 robust in the face of objects whose dir() returns non-strings
982 (which it shouldn't, but some broken libs like ITK do). Thanks to
992 (which it shouldn't, but some broken libs like ITK do). Thanks to
983 a patch by John Hunter (implemented differently, though). Also
993 a patch by John Hunter (implemented differently, though). Also
984 minor improvements by using .extend instead of + on lists.
994 minor improvements by using .extend instead of + on lists.
985
995
986 * pysh.py:
996 * pysh.py:
987
997
988 2005-04-06 Fernando Perez <fperez@colorado.edu>
998 2005-04-06 Fernando Perez <fperez@colorado.edu>
989
999
990 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1000 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
991 by default, so that all users benefit from it. Those who don't
1001 by default, so that all users benefit from it. Those who don't
992 want it can still turn it off.
1002 want it can still turn it off.
993
1003
994 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1004 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
995 config file, I'd forgotten about this, so users were getting it
1005 config file, I'd forgotten about this, so users were getting it
996 off by default.
1006 off by default.
997
1007
998 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1008 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
999 consistency. Now magics can be called in multiline statements,
1009 consistency. Now magics can be called in multiline statements,
1000 and python variables can be expanded in magic calls via $var.
1010 and python variables can be expanded in magic calls via $var.
1001 This makes the magic system behave just like aliases or !system
1011 This makes the magic system behave just like aliases or !system
1002 calls.
1012 calls.
1003
1013
1004 2005-03-28 Fernando Perez <fperez@colorado.edu>
1014 2005-03-28 Fernando Perez <fperez@colorado.edu>
1005
1015
1006 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1016 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1007 expensive string additions for building command. Add support for
1017 expensive string additions for building command. Add support for
1008 trailing ';' when autocall is used.
1018 trailing ';' when autocall is used.
1009
1019
1010 2005-03-26 Fernando Perez <fperez@colorado.edu>
1020 2005-03-26 Fernando Perez <fperez@colorado.edu>
1011
1021
1012 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1022 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1013 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1023 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1014 ipython.el robust against prompts with any number of spaces
1024 ipython.el robust against prompts with any number of spaces
1015 (including 0) after the ':' character.
1025 (including 0) after the ':' character.
1016
1026
1017 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1027 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1018 continuation prompt, which misled users to think the line was
1028 continuation prompt, which misled users to think the line was
1019 already indented. Closes debian Bug#300847, reported to me by
1029 already indented. Closes debian Bug#300847, reported to me by
1020 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1030 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1021
1031
1022 2005-03-23 Fernando Perez <fperez@colorado.edu>
1032 2005-03-23 Fernando Perez <fperez@colorado.edu>
1023
1033
1024 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1034 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1025 properly aligned if they have embedded newlines.
1035 properly aligned if they have embedded newlines.
1026
1036
1027 * IPython/iplib.py (runlines): Add a public method to expose
1037 * IPython/iplib.py (runlines): Add a public method to expose
1028 IPython's code execution machinery, so that users can run strings
1038 IPython's code execution machinery, so that users can run strings
1029 as if they had been typed at the prompt interactively.
1039 as if they had been typed at the prompt interactively.
1030 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1040 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1031 methods which can call the system shell, but with python variable
1041 methods which can call the system shell, but with python variable
1032 expansion. The three such methods are: __IPYTHON__.system,
1042 expansion. The three such methods are: __IPYTHON__.system,
1033 .getoutput and .getoutputerror. These need to be documented in a
1043 .getoutput and .getoutputerror. These need to be documented in a
1034 'public API' section (to be written) of the manual.
1044 'public API' section (to be written) of the manual.
1035
1045
1036 2005-03-20 Fernando Perez <fperez@colorado.edu>
1046 2005-03-20 Fernando Perez <fperez@colorado.edu>
1037
1047
1038 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1048 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1039 for custom exception handling. This is quite powerful, and it
1049 for custom exception handling. This is quite powerful, and it
1040 allows for user-installable exception handlers which can trap
1050 allows for user-installable exception handlers which can trap
1041 custom exceptions at runtime and treat them separately from
1051 custom exceptions at runtime and treat them separately from
1042 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1052 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1043 Mantegazza <mantegazza-AT-ill.fr>.
1053 Mantegazza <mantegazza-AT-ill.fr>.
1044 (InteractiveShell.set_custom_completer): public API function to
1054 (InteractiveShell.set_custom_completer): public API function to
1045 add new completers at runtime.
1055 add new completers at runtime.
1046
1056
1047 2005-03-19 Fernando Perez <fperez@colorado.edu>
1057 2005-03-19 Fernando Perez <fperez@colorado.edu>
1048
1058
1049 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1059 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1050 allow objects which provide their docstrings via non-standard
1060 allow objects which provide their docstrings via non-standard
1051 mechanisms (like Pyro proxies) to still be inspected by ipython's
1061 mechanisms (like Pyro proxies) to still be inspected by ipython's
1052 ? system.
1062 ? system.
1053
1063
1054 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1064 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1055 automatic capture system. I tried quite hard to make it work
1065 automatic capture system. I tried quite hard to make it work
1056 reliably, and simply failed. I tried many combinations with the
1066 reliably, and simply failed. I tried many combinations with the
1057 subprocess module, but eventually nothing worked in all needed
1067 subprocess module, but eventually nothing worked in all needed
1058 cases (not blocking stdin for the child, duplicating stdout
1068 cases (not blocking stdin for the child, duplicating stdout
1059 without blocking, etc). The new %sc/%sx still do capture to these
1069 without blocking, etc). The new %sc/%sx still do capture to these
1060 magical list/string objects which make shell use much more
1070 magical list/string objects which make shell use much more
1061 conveninent, so not all is lost.
1071 conveninent, so not all is lost.
1062
1072
1063 XXX - FIX MANUAL for the change above!
1073 XXX - FIX MANUAL for the change above!
1064
1074
1065 (runsource): I copied code.py's runsource() into ipython to modify
1075 (runsource): I copied code.py's runsource() into ipython to modify
1066 it a bit. Now the code object and source to be executed are
1076 it a bit. Now the code object and source to be executed are
1067 stored in ipython. This makes this info accessible to third-party
1077 stored in ipython. This makes this info accessible to third-party
1068 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1078 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1069 Mantegazza <mantegazza-AT-ill.fr>.
1079 Mantegazza <mantegazza-AT-ill.fr>.
1070
1080
1071 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1081 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1072 history-search via readline (like C-p/C-n). I'd wanted this for a
1082 history-search via readline (like C-p/C-n). I'd wanted this for a
1073 long time, but only recently found out how to do it. For users
1083 long time, but only recently found out how to do it. For users
1074 who already have their ipythonrc files made and want this, just
1084 who already have their ipythonrc files made and want this, just
1075 add:
1085 add:
1076
1086
1077 readline_parse_and_bind "\e[A": history-search-backward
1087 readline_parse_and_bind "\e[A": history-search-backward
1078 readline_parse_and_bind "\e[B": history-search-forward
1088 readline_parse_and_bind "\e[B": history-search-forward
1079
1089
1080 2005-03-18 Fernando Perez <fperez@colorado.edu>
1090 2005-03-18 Fernando Perez <fperez@colorado.edu>
1081
1091
1082 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1092 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1083 LSString and SList classes which allow transparent conversions
1093 LSString and SList classes which allow transparent conversions
1084 between list mode and whitespace-separated string.
1094 between list mode and whitespace-separated string.
1085 (magic_r): Fix recursion problem in %r.
1095 (magic_r): Fix recursion problem in %r.
1086
1096
1087 * IPython/genutils.py (LSString): New class to be used for
1097 * IPython/genutils.py (LSString): New class to be used for
1088 automatic storage of the results of all alias/system calls in _o
1098 automatic storage of the results of all alias/system calls in _o
1089 and _e (stdout/err). These provide a .l/.list attribute which
1099 and _e (stdout/err). These provide a .l/.list attribute which
1090 does automatic splitting on newlines. This means that for most
1100 does automatic splitting on newlines. This means that for most
1091 uses, you'll never need to do capturing of output with %sc/%sx
1101 uses, you'll never need to do capturing of output with %sc/%sx
1092 anymore, since ipython keeps this always done for you. Note that
1102 anymore, since ipython keeps this always done for you. Note that
1093 only the LAST results are stored, the _o/e variables are
1103 only the LAST results are stored, the _o/e variables are
1094 overwritten on each call. If you need to save their contents
1104 overwritten on each call. If you need to save their contents
1095 further, simply bind them to any other name.
1105 further, simply bind them to any other name.
1096
1106
1097 2005-03-17 Fernando Perez <fperez@colorado.edu>
1107 2005-03-17 Fernando Perez <fperez@colorado.edu>
1098
1108
1099 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1109 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1100 prompt namespace handling.
1110 prompt namespace handling.
1101
1111
1102 2005-03-16 Fernando Perez <fperez@colorado.edu>
1112 2005-03-16 Fernando Perez <fperez@colorado.edu>
1103
1113
1104 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1114 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1105 classic prompts to be '>>> ' (final space was missing, and it
1115 classic prompts to be '>>> ' (final space was missing, and it
1106 trips the emacs python mode).
1116 trips the emacs python mode).
1107 (BasePrompt.__str__): Added safe support for dynamic prompt
1117 (BasePrompt.__str__): Added safe support for dynamic prompt
1108 strings. Now you can set your prompt string to be '$x', and the
1118 strings. Now you can set your prompt string to be '$x', and the
1109 value of x will be printed from your interactive namespace. The
1119 value of x will be printed from your interactive namespace. The
1110 interpolation syntax includes the full Itpl support, so
1120 interpolation syntax includes the full Itpl support, so
1111 ${foo()+x+bar()} is a valid prompt string now, and the function
1121 ${foo()+x+bar()} is a valid prompt string now, and the function
1112 calls will be made at runtime.
1122 calls will be made at runtime.
1113
1123
1114 2005-03-15 Fernando Perez <fperez@colorado.edu>
1124 2005-03-15 Fernando Perez <fperez@colorado.edu>
1115
1125
1116 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1126 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1117 avoid name clashes in pylab. %hist still works, it just forwards
1127 avoid name clashes in pylab. %hist still works, it just forwards
1118 the call to %history.
1128 the call to %history.
1119
1129
1120 2005-03-02 *** Released version 0.6.12
1130 2005-03-02 *** Released version 0.6.12
1121
1131
1122 2005-03-02 Fernando Perez <fperez@colorado.edu>
1132 2005-03-02 Fernando Perez <fperez@colorado.edu>
1123
1133
1124 * IPython/iplib.py (handle_magic): log magic calls properly as
1134 * IPython/iplib.py (handle_magic): log magic calls properly as
1125 ipmagic() function calls.
1135 ipmagic() function calls.
1126
1136
1127 * IPython/Magic.py (magic_time): Improved %time to support
1137 * IPython/Magic.py (magic_time): Improved %time to support
1128 statements and provide wall-clock as well as CPU time.
1138 statements and provide wall-clock as well as CPU time.
1129
1139
1130 2005-02-27 Fernando Perez <fperez@colorado.edu>
1140 2005-02-27 Fernando Perez <fperez@colorado.edu>
1131
1141
1132 * IPython/hooks.py: New hooks module, to expose user-modifiable
1142 * IPython/hooks.py: New hooks module, to expose user-modifiable
1133 IPython functionality in a clean manner. For now only the editor
1143 IPython functionality in a clean manner. For now only the editor
1134 hook is actually written, and other thigns which I intend to turn
1144 hook is actually written, and other thigns which I intend to turn
1135 into proper hooks aren't yet there. The display and prefilter
1145 into proper hooks aren't yet there. The display and prefilter
1136 stuff, for example, should be hooks. But at least now the
1146 stuff, for example, should be hooks. But at least now the
1137 framework is in place, and the rest can be moved here with more
1147 framework is in place, and the rest can be moved here with more
1138 time later. IPython had had a .hooks variable for a long time for
1148 time later. IPython had had a .hooks variable for a long time for
1139 this purpose, but I'd never actually used it for anything.
1149 this purpose, but I'd never actually used it for anything.
1140
1150
1141 2005-02-26 Fernando Perez <fperez@colorado.edu>
1151 2005-02-26 Fernando Perez <fperez@colorado.edu>
1142
1152
1143 * IPython/ipmaker.py (make_IPython): make the default ipython
1153 * IPython/ipmaker.py (make_IPython): make the default ipython
1144 directory be called _ipython under win32, to follow more the
1154 directory be called _ipython under win32, to follow more the
1145 naming peculiarities of that platform (where buggy software like
1155 naming peculiarities of that platform (where buggy software like
1146 Visual Sourcesafe breaks with .named directories). Reported by
1156 Visual Sourcesafe breaks with .named directories). Reported by
1147 Ville Vainio.
1157 Ville Vainio.
1148
1158
1149 2005-02-23 Fernando Perez <fperez@colorado.edu>
1159 2005-02-23 Fernando Perez <fperez@colorado.edu>
1150
1160
1151 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1161 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1152 auto_aliases for win32 which were causing problems. Users can
1162 auto_aliases for win32 which were causing problems. Users can
1153 define the ones they personally like.
1163 define the ones they personally like.
1154
1164
1155 2005-02-21 Fernando Perez <fperez@colorado.edu>
1165 2005-02-21 Fernando Perez <fperez@colorado.edu>
1156
1166
1157 * IPython/Magic.py (magic_time): new magic to time execution of
1167 * IPython/Magic.py (magic_time): new magic to time execution of
1158 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1168 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1159
1169
1160 2005-02-19 Fernando Perez <fperez@colorado.edu>
1170 2005-02-19 Fernando Perez <fperez@colorado.edu>
1161
1171
1162 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1172 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1163 into keys (for prompts, for example).
1173 into keys (for prompts, for example).
1164
1174
1165 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1175 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1166 prompts in case users want them. This introduces a small behavior
1176 prompts in case users want them. This introduces a small behavior
1167 change: ipython does not automatically add a space to all prompts
1177 change: ipython does not automatically add a space to all prompts
1168 anymore. To get the old prompts with a space, users should add it
1178 anymore. To get the old prompts with a space, users should add it
1169 manually to their ipythonrc file, so for example prompt_in1 should
1179 manually to their ipythonrc file, so for example prompt_in1 should
1170 now read 'In [\#]: ' instead of 'In [\#]:'.
1180 now read 'In [\#]: ' instead of 'In [\#]:'.
1171 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1181 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1172 file) to control left-padding of secondary prompts.
1182 file) to control left-padding of secondary prompts.
1173
1183
1174 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1184 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1175 the profiler can't be imported. Fix for Debian, which removed
1185 the profiler can't be imported. Fix for Debian, which removed
1176 profile.py because of License issues. I applied a slightly
1186 profile.py because of License issues. I applied a slightly
1177 modified version of the original Debian patch at
1187 modified version of the original Debian patch at
1178 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1188 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1179
1189
1180 2005-02-17 Fernando Perez <fperez@colorado.edu>
1190 2005-02-17 Fernando Perez <fperez@colorado.edu>
1181
1191
1182 * IPython/genutils.py (native_line_ends): Fix bug which would
1192 * IPython/genutils.py (native_line_ends): Fix bug which would
1183 cause improper line-ends under win32 b/c I was not opening files
1193 cause improper line-ends under win32 b/c I was not opening files
1184 in binary mode. Bug report and fix thanks to Ville.
1194 in binary mode. Bug report and fix thanks to Ville.
1185
1195
1186 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1196 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1187 trying to catch spurious foo[1] autocalls. My fix actually broke
1197 trying to catch spurious foo[1] autocalls. My fix actually broke
1188 ',/' autoquote/call with explicit escape (bad regexp).
1198 ',/' autoquote/call with explicit escape (bad regexp).
1189
1199
1190 2005-02-15 *** Released version 0.6.11
1200 2005-02-15 *** Released version 0.6.11
1191
1201
1192 2005-02-14 Fernando Perez <fperez@colorado.edu>
1202 2005-02-14 Fernando Perez <fperez@colorado.edu>
1193
1203
1194 * IPython/background_jobs.py: New background job management
1204 * IPython/background_jobs.py: New background job management
1195 subsystem. This is implemented via a new set of classes, and
1205 subsystem. This is implemented via a new set of classes, and
1196 IPython now provides a builtin 'jobs' object for background job
1206 IPython now provides a builtin 'jobs' object for background job
1197 execution. A convenience %bg magic serves as a lightweight
1207 execution. A convenience %bg magic serves as a lightweight
1198 frontend for starting the more common type of calls. This was
1208 frontend for starting the more common type of calls. This was
1199 inspired by discussions with B. Granger and the BackgroundCommand
1209 inspired by discussions with B. Granger and the BackgroundCommand
1200 class described in the book Python Scripting for Computational
1210 class described in the book Python Scripting for Computational
1201 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1211 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1202 (although ultimately no code from this text was used, as IPython's
1212 (although ultimately no code from this text was used, as IPython's
1203 system is a separate implementation).
1213 system is a separate implementation).
1204
1214
1205 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1215 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1206 to control the completion of single/double underscore names
1216 to control the completion of single/double underscore names
1207 separately. As documented in the example ipytonrc file, the
1217 separately. As documented in the example ipytonrc file, the
1208 readline_omit__names variable can now be set to 2, to omit even
1218 readline_omit__names variable can now be set to 2, to omit even
1209 single underscore names. Thanks to a patch by Brian Wong
1219 single underscore names. Thanks to a patch by Brian Wong
1210 <BrianWong-AT-AirgoNetworks.Com>.
1220 <BrianWong-AT-AirgoNetworks.Com>.
1211 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1221 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1212 be autocalled as foo([1]) if foo were callable. A problem for
1222 be autocalled as foo([1]) if foo were callable. A problem for
1213 things which are both callable and implement __getitem__.
1223 things which are both callable and implement __getitem__.
1214 (init_readline): Fix autoindentation for win32. Thanks to a patch
1224 (init_readline): Fix autoindentation for win32. Thanks to a patch
1215 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1225 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1216
1226
1217 2005-02-12 Fernando Perez <fperez@colorado.edu>
1227 2005-02-12 Fernando Perez <fperez@colorado.edu>
1218
1228
1219 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1229 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1220 which I had written long ago to sort out user error messages which
1230 which I had written long ago to sort out user error messages which
1221 may occur during startup. This seemed like a good idea initially,
1231 may occur during startup. This seemed like a good idea initially,
1222 but it has proven a disaster in retrospect. I don't want to
1232 but it has proven a disaster in retrospect. I don't want to
1223 change much code for now, so my fix is to set the internal 'debug'
1233 change much code for now, so my fix is to set the internal 'debug'
1224 flag to true everywhere, whose only job was precisely to control
1234 flag to true everywhere, whose only job was precisely to control
1225 this subsystem. This closes issue 28 (as well as avoiding all
1235 this subsystem. This closes issue 28 (as well as avoiding all
1226 sorts of strange hangups which occur from time to time).
1236 sorts of strange hangups which occur from time to time).
1227
1237
1228 2005-02-07 Fernando Perez <fperez@colorado.edu>
1238 2005-02-07 Fernando Perez <fperez@colorado.edu>
1229
1239
1230 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1240 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1231 previous call produced a syntax error.
1241 previous call produced a syntax error.
1232
1242
1233 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1243 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1234 classes without constructor.
1244 classes without constructor.
1235
1245
1236 2005-02-06 Fernando Perez <fperez@colorado.edu>
1246 2005-02-06 Fernando Perez <fperez@colorado.edu>
1237
1247
1238 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1248 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1239 completions with the results of each matcher, so we return results
1249 completions with the results of each matcher, so we return results
1240 to the user from all namespaces. This breaks with ipython
1250 to the user from all namespaces. This breaks with ipython
1241 tradition, but I think it's a nicer behavior. Now you get all
1251 tradition, but I think it's a nicer behavior. Now you get all
1242 possible completions listed, from all possible namespaces (python,
1252 possible completions listed, from all possible namespaces (python,
1243 filesystem, magics...) After a request by John Hunter
1253 filesystem, magics...) After a request by John Hunter
1244 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1254 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1245
1255
1246 2005-02-05 Fernando Perez <fperez@colorado.edu>
1256 2005-02-05 Fernando Perez <fperez@colorado.edu>
1247
1257
1248 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1258 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1249 the call had quote characters in it (the quotes were stripped).
1259 the call had quote characters in it (the quotes were stripped).
1250
1260
1251 2005-01-31 Fernando Perez <fperez@colorado.edu>
1261 2005-01-31 Fernando Perez <fperez@colorado.edu>
1252
1262
1253 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1263 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1254 Itpl.itpl() to make the code more robust against psyco
1264 Itpl.itpl() to make the code more robust against psyco
1255 optimizations.
1265 optimizations.
1256
1266
1257 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1267 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1258 of causing an exception. Quicker, cleaner.
1268 of causing an exception. Quicker, cleaner.
1259
1269
1260 2005-01-28 Fernando Perez <fperez@colorado.edu>
1270 2005-01-28 Fernando Perez <fperez@colorado.edu>
1261
1271
1262 * scripts/ipython_win_post_install.py (install): hardcode
1272 * scripts/ipython_win_post_install.py (install): hardcode
1263 sys.prefix+'python.exe' as the executable path. It turns out that
1273 sys.prefix+'python.exe' as the executable path. It turns out that
1264 during the post-installation run, sys.executable resolves to the
1274 during the post-installation run, sys.executable resolves to the
1265 name of the binary installer! I should report this as a distutils
1275 name of the binary installer! I should report this as a distutils
1266 bug, I think. I updated the .10 release with this tiny fix, to
1276 bug, I think. I updated the .10 release with this tiny fix, to
1267 avoid annoying the lists further.
1277 avoid annoying the lists further.
1268
1278
1269 2005-01-27 *** Released version 0.6.10
1279 2005-01-27 *** Released version 0.6.10
1270
1280
1271 2005-01-27 Fernando Perez <fperez@colorado.edu>
1281 2005-01-27 Fernando Perez <fperez@colorado.edu>
1272
1282
1273 * IPython/numutils.py (norm): Added 'inf' as optional name for
1283 * IPython/numutils.py (norm): Added 'inf' as optional name for
1274 L-infinity norm, included references to mathworld.com for vector
1284 L-infinity norm, included references to mathworld.com for vector
1275 norm definitions.
1285 norm definitions.
1276 (amin/amax): added amin/amax for array min/max. Similar to what
1286 (amin/amax): added amin/amax for array min/max. Similar to what
1277 pylab ships with after the recent reorganization of names.
1287 pylab ships with after the recent reorganization of names.
1278 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1288 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1279
1289
1280 * ipython.el: committed Alex's recent fixes and improvements.
1290 * ipython.el: committed Alex's recent fixes and improvements.
1281 Tested with python-mode from CVS, and it looks excellent. Since
1291 Tested with python-mode from CVS, and it looks excellent. Since
1282 python-mode hasn't released anything in a while, I'm temporarily
1292 python-mode hasn't released anything in a while, I'm temporarily
1283 putting a copy of today's CVS (v 4.70) of python-mode in:
1293 putting a copy of today's CVS (v 4.70) of python-mode in:
1284 http://ipython.scipy.org/tmp/python-mode.el
1294 http://ipython.scipy.org/tmp/python-mode.el
1285
1295
1286 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1296 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1287 sys.executable for the executable name, instead of assuming it's
1297 sys.executable for the executable name, instead of assuming it's
1288 called 'python.exe' (the post-installer would have produced broken
1298 called 'python.exe' (the post-installer would have produced broken
1289 setups on systems with a differently named python binary).
1299 setups on systems with a differently named python binary).
1290
1300
1291 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1301 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1292 references to os.linesep, to make the code more
1302 references to os.linesep, to make the code more
1293 platform-independent. This is also part of the win32 coloring
1303 platform-independent. This is also part of the win32 coloring
1294 fixes.
1304 fixes.
1295
1305
1296 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1306 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1297 lines, which actually cause coloring bugs because the length of
1307 lines, which actually cause coloring bugs because the length of
1298 the line is very difficult to correctly compute with embedded
1308 the line is very difficult to correctly compute with embedded
1299 escapes. This was the source of all the coloring problems under
1309 escapes. This was the source of all the coloring problems under
1300 Win32. I think that _finally_, Win32 users have a properly
1310 Win32. I think that _finally_, Win32 users have a properly
1301 working ipython in all respects. This would never have happened
1311 working ipython in all respects. This would never have happened
1302 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1312 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1303
1313
1304 2005-01-26 *** Released version 0.6.9
1314 2005-01-26 *** Released version 0.6.9
1305
1315
1306 2005-01-25 Fernando Perez <fperez@colorado.edu>
1316 2005-01-25 Fernando Perez <fperez@colorado.edu>
1307
1317
1308 * setup.py: finally, we have a true Windows installer, thanks to
1318 * setup.py: finally, we have a true Windows installer, thanks to
1309 the excellent work of Viktor Ransmayr
1319 the excellent work of Viktor Ransmayr
1310 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1320 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1311 Windows users. The setup routine is quite a bit cleaner thanks to
1321 Windows users. The setup routine is quite a bit cleaner thanks to
1312 this, and the post-install script uses the proper functions to
1322 this, and the post-install script uses the proper functions to
1313 allow a clean de-installation using the standard Windows Control
1323 allow a clean de-installation using the standard Windows Control
1314 Panel.
1324 Panel.
1315
1325
1316 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1326 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1317 environment variable under all OSes (including win32) if
1327 environment variable under all OSes (including win32) if
1318 available. This will give consistency to win32 users who have set
1328 available. This will give consistency to win32 users who have set
1319 this variable for any reason. If os.environ['HOME'] fails, the
1329 this variable for any reason. If os.environ['HOME'] fails, the
1320 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1330 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1321
1331
1322 2005-01-24 Fernando Perez <fperez@colorado.edu>
1332 2005-01-24 Fernando Perez <fperez@colorado.edu>
1323
1333
1324 * IPython/numutils.py (empty_like): add empty_like(), similar to
1334 * IPython/numutils.py (empty_like): add empty_like(), similar to
1325 zeros_like() but taking advantage of the new empty() Numeric routine.
1335 zeros_like() but taking advantage of the new empty() Numeric routine.
1326
1336
1327 2005-01-23 *** Released version 0.6.8
1337 2005-01-23 *** Released version 0.6.8
1328
1338
1329 2005-01-22 Fernando Perez <fperez@colorado.edu>
1339 2005-01-22 Fernando Perez <fperez@colorado.edu>
1330
1340
1331 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1341 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1332 automatic show() calls. After discussing things with JDH, it
1342 automatic show() calls. After discussing things with JDH, it
1333 turns out there are too many corner cases where this can go wrong.
1343 turns out there are too many corner cases where this can go wrong.
1334 It's best not to try to be 'too smart', and simply have ipython
1344 It's best not to try to be 'too smart', and simply have ipython
1335 reproduce as much as possible the default behavior of a normal
1345 reproduce as much as possible the default behavior of a normal
1336 python shell.
1346 python shell.
1337
1347
1338 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1348 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1339 line-splitting regexp and _prefilter() to avoid calling getattr()
1349 line-splitting regexp and _prefilter() to avoid calling getattr()
1340 on assignments. This closes
1350 on assignments. This closes
1341 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1351 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1342 readline uses getattr(), so a simple <TAB> keypress is still
1352 readline uses getattr(), so a simple <TAB> keypress is still
1343 enough to trigger getattr() calls on an object.
1353 enough to trigger getattr() calls on an object.
1344
1354
1345 2005-01-21 Fernando Perez <fperez@colorado.edu>
1355 2005-01-21 Fernando Perez <fperez@colorado.edu>
1346
1356
1347 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1357 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1348 docstring under pylab so it doesn't mask the original.
1358 docstring under pylab so it doesn't mask the original.
1349
1359
1350 2005-01-21 *** Released version 0.6.7
1360 2005-01-21 *** Released version 0.6.7
1351
1361
1352 2005-01-21 Fernando Perez <fperez@colorado.edu>
1362 2005-01-21 Fernando Perez <fperez@colorado.edu>
1353
1363
1354 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1364 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1355 signal handling for win32 users in multithreaded mode.
1365 signal handling for win32 users in multithreaded mode.
1356
1366
1357 2005-01-17 Fernando Perez <fperez@colorado.edu>
1367 2005-01-17 Fernando Perez <fperez@colorado.edu>
1358
1368
1359 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1369 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1360 instances with no __init__. After a crash report by Norbert Nemec
1370 instances with no __init__. After a crash report by Norbert Nemec
1361 <Norbert-AT-nemec-online.de>.
1371 <Norbert-AT-nemec-online.de>.
1362
1372
1363 2005-01-14 Fernando Perez <fperez@colorado.edu>
1373 2005-01-14 Fernando Perez <fperez@colorado.edu>
1364
1374
1365 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1375 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1366 names for verbose exceptions, when multiple dotted names and the
1376 names for verbose exceptions, when multiple dotted names and the
1367 'parent' object were present on the same line.
1377 'parent' object were present on the same line.
1368
1378
1369 2005-01-11 Fernando Perez <fperez@colorado.edu>
1379 2005-01-11 Fernando Perez <fperez@colorado.edu>
1370
1380
1371 * IPython/genutils.py (flag_calls): new utility to trap and flag
1381 * IPython/genutils.py (flag_calls): new utility to trap and flag
1372 calls in functions. I need it to clean up matplotlib support.
1382 calls in functions. I need it to clean up matplotlib support.
1373 Also removed some deprecated code in genutils.
1383 Also removed some deprecated code in genutils.
1374
1384
1375 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1385 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1376 that matplotlib scripts called with %run, which don't call show()
1386 that matplotlib scripts called with %run, which don't call show()
1377 themselves, still have their plotting windows open.
1387 themselves, still have their plotting windows open.
1378
1388
1379 2005-01-05 Fernando Perez <fperez@colorado.edu>
1389 2005-01-05 Fernando Perez <fperez@colorado.edu>
1380
1390
1381 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1391 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1382 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1392 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1383
1393
1384 2004-12-19 Fernando Perez <fperez@colorado.edu>
1394 2004-12-19 Fernando Perez <fperez@colorado.edu>
1385
1395
1386 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1396 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1387 parent_runcode, which was an eyesore. The same result can be
1397 parent_runcode, which was an eyesore. The same result can be
1388 obtained with Python's regular superclass mechanisms.
1398 obtained with Python's regular superclass mechanisms.
1389
1399
1390 2004-12-17 Fernando Perez <fperez@colorado.edu>
1400 2004-12-17 Fernando Perez <fperez@colorado.edu>
1391
1401
1392 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1402 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1393 reported by Prabhu.
1403 reported by Prabhu.
1394 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1404 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1395 sys.stderr) instead of explicitly calling sys.stderr. This helps
1405 sys.stderr) instead of explicitly calling sys.stderr. This helps
1396 maintain our I/O abstractions clean, for future GUI embeddings.
1406 maintain our I/O abstractions clean, for future GUI embeddings.
1397
1407
1398 * IPython/genutils.py (info): added new utility for sys.stderr
1408 * IPython/genutils.py (info): added new utility for sys.stderr
1399 unified info message handling (thin wrapper around warn()).
1409 unified info message handling (thin wrapper around warn()).
1400
1410
1401 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1411 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1402 composite (dotted) names on verbose exceptions.
1412 composite (dotted) names on verbose exceptions.
1403 (VerboseTB.nullrepr): harden against another kind of errors which
1413 (VerboseTB.nullrepr): harden against another kind of errors which
1404 Python's inspect module can trigger, and which were crashing
1414 Python's inspect module can trigger, and which were crashing
1405 IPython. Thanks to a report by Marco Lombardi
1415 IPython. Thanks to a report by Marco Lombardi
1406 <mlombard-AT-ma010192.hq.eso.org>.
1416 <mlombard-AT-ma010192.hq.eso.org>.
1407
1417
1408 2004-12-13 *** Released version 0.6.6
1418 2004-12-13 *** Released version 0.6.6
1409
1419
1410 2004-12-12 Fernando Perez <fperez@colorado.edu>
1420 2004-12-12 Fernando Perez <fperez@colorado.edu>
1411
1421
1412 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1422 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1413 generated by pygtk upon initialization if it was built without
1423 generated by pygtk upon initialization if it was built without
1414 threads (for matplotlib users). After a crash reported by
1424 threads (for matplotlib users). After a crash reported by
1415 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1425 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1416
1426
1417 * IPython/ipmaker.py (make_IPython): fix small bug in the
1427 * IPython/ipmaker.py (make_IPython): fix small bug in the
1418 import_some parameter for multiple imports.
1428 import_some parameter for multiple imports.
1419
1429
1420 * IPython/iplib.py (ipmagic): simplified the interface of
1430 * IPython/iplib.py (ipmagic): simplified the interface of
1421 ipmagic() to take a single string argument, just as it would be
1431 ipmagic() to take a single string argument, just as it would be
1422 typed at the IPython cmd line.
1432 typed at the IPython cmd line.
1423 (ipalias): Added new ipalias() with an interface identical to
1433 (ipalias): Added new ipalias() with an interface identical to
1424 ipmagic(). This completes exposing a pure python interface to the
1434 ipmagic(). This completes exposing a pure python interface to the
1425 alias and magic system, which can be used in loops or more complex
1435 alias and magic system, which can be used in loops or more complex
1426 code where IPython's automatic line mangling is not active.
1436 code where IPython's automatic line mangling is not active.
1427
1437
1428 * IPython/genutils.py (timing): changed interface of timing to
1438 * IPython/genutils.py (timing): changed interface of timing to
1429 simply run code once, which is the most common case. timings()
1439 simply run code once, which is the most common case. timings()
1430 remains unchanged, for the cases where you want multiple runs.
1440 remains unchanged, for the cases where you want multiple runs.
1431
1441
1432 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1442 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1433 bug where Python2.2 crashes with exec'ing code which does not end
1443 bug where Python2.2 crashes with exec'ing code which does not end
1434 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1444 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1435 before.
1445 before.
1436
1446
1437 2004-12-10 Fernando Perez <fperez@colorado.edu>
1447 2004-12-10 Fernando Perez <fperez@colorado.edu>
1438
1448
1439 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1449 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1440 -t to -T, to accomodate the new -t flag in %run (the %run and
1450 -t to -T, to accomodate the new -t flag in %run (the %run and
1441 %prun options are kind of intermixed, and it's not easy to change
1451 %prun options are kind of intermixed, and it's not easy to change
1442 this with the limitations of python's getopt).
1452 this with the limitations of python's getopt).
1443
1453
1444 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1454 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1445 the execution of scripts. It's not as fine-tuned as timeit.py,
1455 the execution of scripts. It's not as fine-tuned as timeit.py,
1446 but it works from inside ipython (and under 2.2, which lacks
1456 but it works from inside ipython (and under 2.2, which lacks
1447 timeit.py). Optionally a number of runs > 1 can be given for
1457 timeit.py). Optionally a number of runs > 1 can be given for
1448 timing very short-running code.
1458 timing very short-running code.
1449
1459
1450 * IPython/genutils.py (uniq_stable): new routine which returns a
1460 * IPython/genutils.py (uniq_stable): new routine which returns a
1451 list of unique elements in any iterable, but in stable order of
1461 list of unique elements in any iterable, but in stable order of
1452 appearance. I needed this for the ultraTB fixes, and it's a handy
1462 appearance. I needed this for the ultraTB fixes, and it's a handy
1453 utility.
1463 utility.
1454
1464
1455 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1465 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1456 dotted names in Verbose exceptions. This had been broken since
1466 dotted names in Verbose exceptions. This had been broken since
1457 the very start, now x.y will properly be printed in a Verbose
1467 the very start, now x.y will properly be printed in a Verbose
1458 traceback, instead of x being shown and y appearing always as an
1468 traceback, instead of x being shown and y appearing always as an
1459 'undefined global'. Getting this to work was a bit tricky,
1469 'undefined global'. Getting this to work was a bit tricky,
1460 because by default python tokenizers are stateless. Saved by
1470 because by default python tokenizers are stateless. Saved by
1461 python's ability to easily add a bit of state to an arbitrary
1471 python's ability to easily add a bit of state to an arbitrary
1462 function (without needing to build a full-blown callable object).
1472 function (without needing to build a full-blown callable object).
1463
1473
1464 Also big cleanup of this code, which had horrendous runtime
1474 Also big cleanup of this code, which had horrendous runtime
1465 lookups of zillions of attributes for colorization. Moved all
1475 lookups of zillions of attributes for colorization. Moved all
1466 this code into a few templates, which make it cleaner and quicker.
1476 this code into a few templates, which make it cleaner and quicker.
1467
1477
1468 Printout quality was also improved for Verbose exceptions: one
1478 Printout quality was also improved for Verbose exceptions: one
1469 variable per line, and memory addresses are printed (this can be
1479 variable per line, and memory addresses are printed (this can be
1470 quite handy in nasty debugging situations, which is what Verbose
1480 quite handy in nasty debugging situations, which is what Verbose
1471 is for).
1481 is for).
1472
1482
1473 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1483 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1474 the command line as scripts to be loaded by embedded instances.
1484 the command line as scripts to be loaded by embedded instances.
1475 Doing so has the potential for an infinite recursion if there are
1485 Doing so has the potential for an infinite recursion if there are
1476 exceptions thrown in the process. This fixes a strange crash
1486 exceptions thrown in the process. This fixes a strange crash
1477 reported by Philippe MULLER <muller-AT-irit.fr>.
1487 reported by Philippe MULLER <muller-AT-irit.fr>.
1478
1488
1479 2004-12-09 Fernando Perez <fperez@colorado.edu>
1489 2004-12-09 Fernando Perez <fperez@colorado.edu>
1480
1490
1481 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1491 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1482 to reflect new names in matplotlib, which now expose the
1492 to reflect new names in matplotlib, which now expose the
1483 matlab-compatible interface via a pylab module instead of the
1493 matlab-compatible interface via a pylab module instead of the
1484 'matlab' name. The new code is backwards compatible, so users of
1494 'matlab' name. The new code is backwards compatible, so users of
1485 all matplotlib versions are OK. Patch by J. Hunter.
1495 all matplotlib versions are OK. Patch by J. Hunter.
1486
1496
1487 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1497 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1488 of __init__ docstrings for instances (class docstrings are already
1498 of __init__ docstrings for instances (class docstrings are already
1489 automatically printed). Instances with customized docstrings
1499 automatically printed). Instances with customized docstrings
1490 (indep. of the class) are also recognized and all 3 separate
1500 (indep. of the class) are also recognized and all 3 separate
1491 docstrings are printed (instance, class, constructor). After some
1501 docstrings are printed (instance, class, constructor). After some
1492 comments/suggestions by J. Hunter.
1502 comments/suggestions by J. Hunter.
1493
1503
1494 2004-12-05 Fernando Perez <fperez@colorado.edu>
1504 2004-12-05 Fernando Perez <fperez@colorado.edu>
1495
1505
1496 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1506 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1497 warnings when tab-completion fails and triggers an exception.
1507 warnings when tab-completion fails and triggers an exception.
1498
1508
1499 2004-12-03 Fernando Perez <fperez@colorado.edu>
1509 2004-12-03 Fernando Perez <fperez@colorado.edu>
1500
1510
1501 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1511 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1502 be triggered when using 'run -p'. An incorrect option flag was
1512 be triggered when using 'run -p'. An incorrect option flag was
1503 being set ('d' instead of 'D').
1513 being set ('d' instead of 'D').
1504 (manpage): fix missing escaped \- sign.
1514 (manpage): fix missing escaped \- sign.
1505
1515
1506 2004-11-30 *** Released version 0.6.5
1516 2004-11-30 *** Released version 0.6.5
1507
1517
1508 2004-11-30 Fernando Perez <fperez@colorado.edu>
1518 2004-11-30 Fernando Perez <fperez@colorado.edu>
1509
1519
1510 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1520 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1511 setting with -d option.
1521 setting with -d option.
1512
1522
1513 * setup.py (docfiles): Fix problem where the doc glob I was using
1523 * setup.py (docfiles): Fix problem where the doc glob I was using
1514 was COMPLETELY BROKEN. It was giving the right files by pure
1524 was COMPLETELY BROKEN. It was giving the right files by pure
1515 accident, but failed once I tried to include ipython.el. Note:
1525 accident, but failed once I tried to include ipython.el. Note:
1516 glob() does NOT allow you to do exclusion on multiple endings!
1526 glob() does NOT allow you to do exclusion on multiple endings!
1517
1527
1518 2004-11-29 Fernando Perez <fperez@colorado.edu>
1528 2004-11-29 Fernando Perez <fperez@colorado.edu>
1519
1529
1520 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1530 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1521 the manpage as the source. Better formatting & consistency.
1531 the manpage as the source. Better formatting & consistency.
1522
1532
1523 * IPython/Magic.py (magic_run): Added new -d option, to run
1533 * IPython/Magic.py (magic_run): Added new -d option, to run
1524 scripts under the control of the python pdb debugger. Note that
1534 scripts under the control of the python pdb debugger. Note that
1525 this required changing the %prun option -d to -D, to avoid a clash
1535 this required changing the %prun option -d to -D, to avoid a clash
1526 (since %run must pass options to %prun, and getopt is too dumb to
1536 (since %run must pass options to %prun, and getopt is too dumb to
1527 handle options with string values with embedded spaces). Thanks
1537 handle options with string values with embedded spaces). Thanks
1528 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1538 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1529 (magic_who_ls): added type matching to %who and %whos, so that one
1539 (magic_who_ls): added type matching to %who and %whos, so that one
1530 can filter their output to only include variables of certain
1540 can filter their output to only include variables of certain
1531 types. Another suggestion by Matthew.
1541 types. Another suggestion by Matthew.
1532 (magic_whos): Added memory summaries in kb and Mb for arrays.
1542 (magic_whos): Added memory summaries in kb and Mb for arrays.
1533 (magic_who): Improve formatting (break lines every 9 vars).
1543 (magic_who): Improve formatting (break lines every 9 vars).
1534
1544
1535 2004-11-28 Fernando Perez <fperez@colorado.edu>
1545 2004-11-28 Fernando Perez <fperez@colorado.edu>
1536
1546
1537 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1547 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1538 cache when empty lines were present.
1548 cache when empty lines were present.
1539
1549
1540 2004-11-24 Fernando Perez <fperez@colorado.edu>
1550 2004-11-24 Fernando Perez <fperez@colorado.edu>
1541
1551
1542 * IPython/usage.py (__doc__): document the re-activated threading
1552 * IPython/usage.py (__doc__): document the re-activated threading
1543 options for WX and GTK.
1553 options for WX and GTK.
1544
1554
1545 2004-11-23 Fernando Perez <fperez@colorado.edu>
1555 2004-11-23 Fernando Perez <fperez@colorado.edu>
1546
1556
1547 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1557 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1548 the -wthread and -gthread options, along with a new -tk one to try
1558 the -wthread and -gthread options, along with a new -tk one to try
1549 and coordinate Tk threading with wx/gtk. The tk support is very
1559 and coordinate Tk threading with wx/gtk. The tk support is very
1550 platform dependent, since it seems to require Tcl and Tk to be
1560 platform dependent, since it seems to require Tcl and Tk to be
1551 built with threads (Fedora1/2 appears NOT to have it, but in
1561 built with threads (Fedora1/2 appears NOT to have it, but in
1552 Prabhu's Debian boxes it works OK). But even with some Tk
1562 Prabhu's Debian boxes it works OK). But even with some Tk
1553 limitations, this is a great improvement.
1563 limitations, this is a great improvement.
1554
1564
1555 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1565 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1556 info in user prompts. Patch by Prabhu.
1566 info in user prompts. Patch by Prabhu.
1557
1567
1558 2004-11-18 Fernando Perez <fperez@colorado.edu>
1568 2004-11-18 Fernando Perez <fperez@colorado.edu>
1559
1569
1560 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1570 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1561 EOFErrors and bail, to avoid infinite loops if a non-terminating
1571 EOFErrors and bail, to avoid infinite loops if a non-terminating
1562 file is fed into ipython. Patch submitted in issue 19 by user,
1572 file is fed into ipython. Patch submitted in issue 19 by user,
1563 many thanks.
1573 many thanks.
1564
1574
1565 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1575 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1566 autoquote/parens in continuation prompts, which can cause lots of
1576 autoquote/parens in continuation prompts, which can cause lots of
1567 problems. Closes roundup issue 20.
1577 problems. Closes roundup issue 20.
1568
1578
1569 2004-11-17 Fernando Perez <fperez@colorado.edu>
1579 2004-11-17 Fernando Perez <fperez@colorado.edu>
1570
1580
1571 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1581 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1572 reported as debian bug #280505. I'm not sure my local changelog
1582 reported as debian bug #280505. I'm not sure my local changelog
1573 entry has the proper debian format (Jack?).
1583 entry has the proper debian format (Jack?).
1574
1584
1575 2004-11-08 *** Released version 0.6.4
1585 2004-11-08 *** Released version 0.6.4
1576
1586
1577 2004-11-08 Fernando Perez <fperez@colorado.edu>
1587 2004-11-08 Fernando Perez <fperez@colorado.edu>
1578
1588
1579 * IPython/iplib.py (init_readline): Fix exit message for Windows
1589 * IPython/iplib.py (init_readline): Fix exit message for Windows
1580 when readline is active. Thanks to a report by Eric Jones
1590 when readline is active. Thanks to a report by Eric Jones
1581 <eric-AT-enthought.com>.
1591 <eric-AT-enthought.com>.
1582
1592
1583 2004-11-07 Fernando Perez <fperez@colorado.edu>
1593 2004-11-07 Fernando Perez <fperez@colorado.edu>
1584
1594
1585 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1595 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1586 sometimes seen by win2k/cygwin users.
1596 sometimes seen by win2k/cygwin users.
1587
1597
1588 2004-11-06 Fernando Perez <fperez@colorado.edu>
1598 2004-11-06 Fernando Perez <fperez@colorado.edu>
1589
1599
1590 * IPython/iplib.py (interact): Change the handling of %Exit from
1600 * IPython/iplib.py (interact): Change the handling of %Exit from
1591 trying to propagate a SystemExit to an internal ipython flag.
1601 trying to propagate a SystemExit to an internal ipython flag.
1592 This is less elegant than using Python's exception mechanism, but
1602 This is less elegant than using Python's exception mechanism, but
1593 I can't get that to work reliably with threads, so under -pylab
1603 I can't get that to work reliably with threads, so under -pylab
1594 %Exit was hanging IPython. Cross-thread exception handling is
1604 %Exit was hanging IPython. Cross-thread exception handling is
1595 really a bitch. Thaks to a bug report by Stephen Walton
1605 really a bitch. Thaks to a bug report by Stephen Walton
1596 <stephen.walton-AT-csun.edu>.
1606 <stephen.walton-AT-csun.edu>.
1597
1607
1598 2004-11-04 Fernando Perez <fperez@colorado.edu>
1608 2004-11-04 Fernando Perez <fperez@colorado.edu>
1599
1609
1600 * IPython/iplib.py (raw_input_original): store a pointer to the
1610 * IPython/iplib.py (raw_input_original): store a pointer to the
1601 true raw_input to harden against code which can modify it
1611 true raw_input to harden against code which can modify it
1602 (wx.py.PyShell does this and would otherwise crash ipython).
1612 (wx.py.PyShell does this and would otherwise crash ipython).
1603 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1613 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1604
1614
1605 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1615 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1606 Ctrl-C problem, which does not mess up the input line.
1616 Ctrl-C problem, which does not mess up the input line.
1607
1617
1608 2004-11-03 Fernando Perez <fperez@colorado.edu>
1618 2004-11-03 Fernando Perez <fperez@colorado.edu>
1609
1619
1610 * IPython/Release.py: Changed licensing to BSD, in all files.
1620 * IPython/Release.py: Changed licensing to BSD, in all files.
1611 (name): lowercase name for tarball/RPM release.
1621 (name): lowercase name for tarball/RPM release.
1612
1622
1613 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1623 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1614 use throughout ipython.
1624 use throughout ipython.
1615
1625
1616 * IPython/Magic.py (Magic._ofind): Switch to using the new
1626 * IPython/Magic.py (Magic._ofind): Switch to using the new
1617 OInspect.getdoc() function.
1627 OInspect.getdoc() function.
1618
1628
1619 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1629 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1620 of the line currently being canceled via Ctrl-C. It's extremely
1630 of the line currently being canceled via Ctrl-C. It's extremely
1621 ugly, but I don't know how to do it better (the problem is one of
1631 ugly, but I don't know how to do it better (the problem is one of
1622 handling cross-thread exceptions).
1632 handling cross-thread exceptions).
1623
1633
1624 2004-10-28 Fernando Perez <fperez@colorado.edu>
1634 2004-10-28 Fernando Perez <fperez@colorado.edu>
1625
1635
1626 * IPython/Shell.py (signal_handler): add signal handlers to trap
1636 * IPython/Shell.py (signal_handler): add signal handlers to trap
1627 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1637 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1628 report by Francesc Alted.
1638 report by Francesc Alted.
1629
1639
1630 2004-10-21 Fernando Perez <fperez@colorado.edu>
1640 2004-10-21 Fernando Perez <fperez@colorado.edu>
1631
1641
1632 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1642 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1633 to % for pysh syntax extensions.
1643 to % for pysh syntax extensions.
1634
1644
1635 2004-10-09 Fernando Perez <fperez@colorado.edu>
1645 2004-10-09 Fernando Perez <fperez@colorado.edu>
1636
1646
1637 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1647 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1638 arrays to print a more useful summary, without calling str(arr).
1648 arrays to print a more useful summary, without calling str(arr).
1639 This avoids the problem of extremely lengthy computations which
1649 This avoids the problem of extremely lengthy computations which
1640 occur if arr is large, and appear to the user as a system lockup
1650 occur if arr is large, and appear to the user as a system lockup
1641 with 100% cpu activity. After a suggestion by Kristian Sandberg
1651 with 100% cpu activity. After a suggestion by Kristian Sandberg
1642 <Kristian.Sandberg@colorado.edu>.
1652 <Kristian.Sandberg@colorado.edu>.
1643 (Magic.__init__): fix bug in global magic escapes not being
1653 (Magic.__init__): fix bug in global magic escapes not being
1644 correctly set.
1654 correctly set.
1645
1655
1646 2004-10-08 Fernando Perez <fperez@colorado.edu>
1656 2004-10-08 Fernando Perez <fperez@colorado.edu>
1647
1657
1648 * IPython/Magic.py (__license__): change to absolute imports of
1658 * IPython/Magic.py (__license__): change to absolute imports of
1649 ipython's own internal packages, to start adapting to the absolute
1659 ipython's own internal packages, to start adapting to the absolute
1650 import requirement of PEP-328.
1660 import requirement of PEP-328.
1651
1661
1652 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1662 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1653 files, and standardize author/license marks through the Release
1663 files, and standardize author/license marks through the Release
1654 module instead of having per/file stuff (except for files with
1664 module instead of having per/file stuff (except for files with
1655 particular licenses, like the MIT/PSF-licensed codes).
1665 particular licenses, like the MIT/PSF-licensed codes).
1656
1666
1657 * IPython/Debugger.py: remove dead code for python 2.1
1667 * IPython/Debugger.py: remove dead code for python 2.1
1658
1668
1659 2004-10-04 Fernando Perez <fperez@colorado.edu>
1669 2004-10-04 Fernando Perez <fperez@colorado.edu>
1660
1670
1661 * IPython/iplib.py (ipmagic): New function for accessing magics
1671 * IPython/iplib.py (ipmagic): New function for accessing magics
1662 via a normal python function call.
1672 via a normal python function call.
1663
1673
1664 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1674 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1665 from '@' to '%', to accomodate the new @decorator syntax of python
1675 from '@' to '%', to accomodate the new @decorator syntax of python
1666 2.4.
1676 2.4.
1667
1677
1668 2004-09-29 Fernando Perez <fperez@colorado.edu>
1678 2004-09-29 Fernando Perez <fperez@colorado.edu>
1669
1679
1670 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1680 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1671 matplotlib.use to prevent running scripts which try to switch
1681 matplotlib.use to prevent running scripts which try to switch
1672 interactive backends from within ipython. This will just crash
1682 interactive backends from within ipython. This will just crash
1673 the python interpreter, so we can't allow it (but a detailed error
1683 the python interpreter, so we can't allow it (but a detailed error
1674 is given to the user).
1684 is given to the user).
1675
1685
1676 2004-09-28 Fernando Perez <fperez@colorado.edu>
1686 2004-09-28 Fernando Perez <fperez@colorado.edu>
1677
1687
1678 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1688 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1679 matplotlib-related fixes so that using @run with non-matplotlib
1689 matplotlib-related fixes so that using @run with non-matplotlib
1680 scripts doesn't pop up spurious plot windows. This requires
1690 scripts doesn't pop up spurious plot windows. This requires
1681 matplotlib >= 0.63, where I had to make some changes as well.
1691 matplotlib >= 0.63, where I had to make some changes as well.
1682
1692
1683 * IPython/ipmaker.py (make_IPython): update version requirement to
1693 * IPython/ipmaker.py (make_IPython): update version requirement to
1684 python 2.2.
1694 python 2.2.
1685
1695
1686 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1696 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1687 banner arg for embedded customization.
1697 banner arg for embedded customization.
1688
1698
1689 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1699 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1690 explicit uses of __IP as the IPython's instance name. Now things
1700 explicit uses of __IP as the IPython's instance name. Now things
1691 are properly handled via the shell.name value. The actual code
1701 are properly handled via the shell.name value. The actual code
1692 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1702 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1693 is much better than before. I'll clean things completely when the
1703 is much better than before. I'll clean things completely when the
1694 magic stuff gets a real overhaul.
1704 magic stuff gets a real overhaul.
1695
1705
1696 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1706 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1697 minor changes to debian dir.
1707 minor changes to debian dir.
1698
1708
1699 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1709 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1700 pointer to the shell itself in the interactive namespace even when
1710 pointer to the shell itself in the interactive namespace even when
1701 a user-supplied dict is provided. This is needed for embedding
1711 a user-supplied dict is provided. This is needed for embedding
1702 purposes (found by tests with Michel Sanner).
1712 purposes (found by tests with Michel Sanner).
1703
1713
1704 2004-09-27 Fernando Perez <fperez@colorado.edu>
1714 2004-09-27 Fernando Perez <fperez@colorado.edu>
1705
1715
1706 * IPython/UserConfig/ipythonrc: remove []{} from
1716 * IPython/UserConfig/ipythonrc: remove []{} from
1707 readline_remove_delims, so that things like [modname.<TAB> do
1717 readline_remove_delims, so that things like [modname.<TAB> do
1708 proper completion. This disables [].TAB, but that's a less common
1718 proper completion. This disables [].TAB, but that's a less common
1709 case than module names in list comprehensions, for example.
1719 case than module names in list comprehensions, for example.
1710 Thanks to a report by Andrea Riciputi.
1720 Thanks to a report by Andrea Riciputi.
1711
1721
1712 2004-09-09 Fernando Perez <fperez@colorado.edu>
1722 2004-09-09 Fernando Perez <fperez@colorado.edu>
1713
1723
1714 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1724 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1715 blocking problems in win32 and osx. Fix by John.
1725 blocking problems in win32 and osx. Fix by John.
1716
1726
1717 2004-09-08 Fernando Perez <fperez@colorado.edu>
1727 2004-09-08 Fernando Perez <fperez@colorado.edu>
1718
1728
1719 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1729 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1720 for Win32 and OSX. Fix by John Hunter.
1730 for Win32 and OSX. Fix by John Hunter.
1721
1731
1722 2004-08-30 *** Released version 0.6.3
1732 2004-08-30 *** Released version 0.6.3
1723
1733
1724 2004-08-30 Fernando Perez <fperez@colorado.edu>
1734 2004-08-30 Fernando Perez <fperez@colorado.edu>
1725
1735
1726 * setup.py (isfile): Add manpages to list of dependent files to be
1736 * setup.py (isfile): Add manpages to list of dependent files to be
1727 updated.
1737 updated.
1728
1738
1729 2004-08-27 Fernando Perez <fperez@colorado.edu>
1739 2004-08-27 Fernando Perez <fperez@colorado.edu>
1730
1740
1731 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1741 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1732 for now. They don't really work with standalone WX/GTK code
1742 for now. They don't really work with standalone WX/GTK code
1733 (though matplotlib IS working fine with both of those backends).
1743 (though matplotlib IS working fine with both of those backends).
1734 This will neeed much more testing. I disabled most things with
1744 This will neeed much more testing. I disabled most things with
1735 comments, so turning it back on later should be pretty easy.
1745 comments, so turning it back on later should be pretty easy.
1736
1746
1737 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1747 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1738 autocalling of expressions like r'foo', by modifying the line
1748 autocalling of expressions like r'foo', by modifying the line
1739 split regexp. Closes
1749 split regexp. Closes
1740 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1750 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1741 Riley <ipythonbugs-AT-sabi.net>.
1751 Riley <ipythonbugs-AT-sabi.net>.
1742 (InteractiveShell.mainloop): honor --nobanner with banner
1752 (InteractiveShell.mainloop): honor --nobanner with banner
1743 extensions.
1753 extensions.
1744
1754
1745 * IPython/Shell.py: Significant refactoring of all classes, so
1755 * IPython/Shell.py: Significant refactoring of all classes, so
1746 that we can really support ALL matplotlib backends and threading
1756 that we can really support ALL matplotlib backends and threading
1747 models (John spotted a bug with Tk which required this). Now we
1757 models (John spotted a bug with Tk which required this). Now we
1748 should support single-threaded, WX-threads and GTK-threads, both
1758 should support single-threaded, WX-threads and GTK-threads, both
1749 for generic code and for matplotlib.
1759 for generic code and for matplotlib.
1750
1760
1751 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1761 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1752 -pylab, to simplify things for users. Will also remove the pylab
1762 -pylab, to simplify things for users. Will also remove the pylab
1753 profile, since now all of matplotlib configuration is directly
1763 profile, since now all of matplotlib configuration is directly
1754 handled here. This also reduces startup time.
1764 handled here. This also reduces startup time.
1755
1765
1756 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1766 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1757 shell wasn't being correctly called. Also in IPShellWX.
1767 shell wasn't being correctly called. Also in IPShellWX.
1758
1768
1759 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1769 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1760 fine-tune banner.
1770 fine-tune banner.
1761
1771
1762 * IPython/numutils.py (spike): Deprecate these spike functions,
1772 * IPython/numutils.py (spike): Deprecate these spike functions,
1763 delete (long deprecated) gnuplot_exec handler.
1773 delete (long deprecated) gnuplot_exec handler.
1764
1774
1765 2004-08-26 Fernando Perez <fperez@colorado.edu>
1775 2004-08-26 Fernando Perez <fperez@colorado.edu>
1766
1776
1767 * ipython.1: Update for threading options, plus some others which
1777 * ipython.1: Update for threading options, plus some others which
1768 were missing.
1778 were missing.
1769
1779
1770 * IPython/ipmaker.py (__call__): Added -wthread option for
1780 * IPython/ipmaker.py (__call__): Added -wthread option for
1771 wxpython thread handling. Make sure threading options are only
1781 wxpython thread handling. Make sure threading options are only
1772 valid at the command line.
1782 valid at the command line.
1773
1783
1774 * scripts/ipython: moved shell selection into a factory function
1784 * scripts/ipython: moved shell selection into a factory function
1775 in Shell.py, to keep the starter script to a minimum.
1785 in Shell.py, to keep the starter script to a minimum.
1776
1786
1777 2004-08-25 Fernando Perez <fperez@colorado.edu>
1787 2004-08-25 Fernando Perez <fperez@colorado.edu>
1778
1788
1779 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1789 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1780 John. Along with some recent changes he made to matplotlib, the
1790 John. Along with some recent changes he made to matplotlib, the
1781 next versions of both systems should work very well together.
1791 next versions of both systems should work very well together.
1782
1792
1783 2004-08-24 Fernando Perez <fperez@colorado.edu>
1793 2004-08-24 Fernando Perez <fperez@colorado.edu>
1784
1794
1785 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1795 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1786 tried to switch the profiling to using hotshot, but I'm getting
1796 tried to switch the profiling to using hotshot, but I'm getting
1787 strange errors from prof.runctx() there. I may be misreading the
1797 strange errors from prof.runctx() there. I may be misreading the
1788 docs, but it looks weird. For now the profiling code will
1798 docs, but it looks weird. For now the profiling code will
1789 continue to use the standard profiler.
1799 continue to use the standard profiler.
1790
1800
1791 2004-08-23 Fernando Perez <fperez@colorado.edu>
1801 2004-08-23 Fernando Perez <fperez@colorado.edu>
1792
1802
1793 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1803 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1794 threaded shell, by John Hunter. It's not quite ready yet, but
1804 threaded shell, by John Hunter. It's not quite ready yet, but
1795 close.
1805 close.
1796
1806
1797 2004-08-22 Fernando Perez <fperez@colorado.edu>
1807 2004-08-22 Fernando Perez <fperez@colorado.edu>
1798
1808
1799 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1809 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1800 in Magic and ultraTB.
1810 in Magic and ultraTB.
1801
1811
1802 * ipython.1: document threading options in manpage.
1812 * ipython.1: document threading options in manpage.
1803
1813
1804 * scripts/ipython: Changed name of -thread option to -gthread,
1814 * scripts/ipython: Changed name of -thread option to -gthread,
1805 since this is GTK specific. I want to leave the door open for a
1815 since this is GTK specific. I want to leave the door open for a
1806 -wthread option for WX, which will most likely be necessary. This
1816 -wthread option for WX, which will most likely be necessary. This
1807 change affects usage and ipmaker as well.
1817 change affects usage and ipmaker as well.
1808
1818
1809 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1819 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1810 handle the matplotlib shell issues. Code by John Hunter
1820 handle the matplotlib shell issues. Code by John Hunter
1811 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1821 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1812 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1822 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1813 broken (and disabled for end users) for now, but it puts the
1823 broken (and disabled for end users) for now, but it puts the
1814 infrastructure in place.
1824 infrastructure in place.
1815
1825
1816 2004-08-21 Fernando Perez <fperez@colorado.edu>
1826 2004-08-21 Fernando Perez <fperez@colorado.edu>
1817
1827
1818 * ipythonrc-pylab: Add matplotlib support.
1828 * ipythonrc-pylab: Add matplotlib support.
1819
1829
1820 * matplotlib_config.py: new files for matplotlib support, part of
1830 * matplotlib_config.py: new files for matplotlib support, part of
1821 the pylab profile.
1831 the pylab profile.
1822
1832
1823 * IPython/usage.py (__doc__): documented the threading options.
1833 * IPython/usage.py (__doc__): documented the threading options.
1824
1834
1825 2004-08-20 Fernando Perez <fperez@colorado.edu>
1835 2004-08-20 Fernando Perez <fperez@colorado.edu>
1826
1836
1827 * ipython: Modified the main calling routine to handle the -thread
1837 * ipython: Modified the main calling routine to handle the -thread
1828 and -mpthread options. This needs to be done as a top-level hack,
1838 and -mpthread options. This needs to be done as a top-level hack,
1829 because it determines which class to instantiate for IPython
1839 because it determines which class to instantiate for IPython
1830 itself.
1840 itself.
1831
1841
1832 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1842 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1833 classes to support multithreaded GTK operation without blocking,
1843 classes to support multithreaded GTK operation without blocking,
1834 and matplotlib with all backends. This is a lot of still very
1844 and matplotlib with all backends. This is a lot of still very
1835 experimental code, and threads are tricky. So it may still have a
1845 experimental code, and threads are tricky. So it may still have a
1836 few rough edges... This code owes a lot to
1846 few rough edges... This code owes a lot to
1837 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1847 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1838 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1848 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1839 to John Hunter for all the matplotlib work.
1849 to John Hunter for all the matplotlib work.
1840
1850
1841 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1851 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1842 options for gtk thread and matplotlib support.
1852 options for gtk thread and matplotlib support.
1843
1853
1844 2004-08-16 Fernando Perez <fperez@colorado.edu>
1854 2004-08-16 Fernando Perez <fperez@colorado.edu>
1845
1855
1846 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1856 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1847 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1857 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1848 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1858 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1849
1859
1850 2004-08-11 Fernando Perez <fperez@colorado.edu>
1860 2004-08-11 Fernando Perez <fperez@colorado.edu>
1851
1861
1852 * setup.py (isfile): Fix build so documentation gets updated for
1862 * setup.py (isfile): Fix build so documentation gets updated for
1853 rpms (it was only done for .tgz builds).
1863 rpms (it was only done for .tgz builds).
1854
1864
1855 2004-08-10 Fernando Perez <fperez@colorado.edu>
1865 2004-08-10 Fernando Perez <fperez@colorado.edu>
1856
1866
1857 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1867 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1858
1868
1859 * iplib.py : Silence syntax error exceptions in tab-completion.
1869 * iplib.py : Silence syntax error exceptions in tab-completion.
1860
1870
1861 2004-08-05 Fernando Perez <fperez@colorado.edu>
1871 2004-08-05 Fernando Perez <fperez@colorado.edu>
1862
1872
1863 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1873 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1864 'color off' mark for continuation prompts. This was causing long
1874 'color off' mark for continuation prompts. This was causing long
1865 continuation lines to mis-wrap.
1875 continuation lines to mis-wrap.
1866
1876
1867 2004-08-01 Fernando Perez <fperez@colorado.edu>
1877 2004-08-01 Fernando Perez <fperez@colorado.edu>
1868
1878
1869 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1879 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1870 for building ipython to be a parameter. All this is necessary
1880 for building ipython to be a parameter. All this is necessary
1871 right now to have a multithreaded version, but this insane
1881 right now to have a multithreaded version, but this insane
1872 non-design will be cleaned up soon. For now, it's a hack that
1882 non-design will be cleaned up soon. For now, it's a hack that
1873 works.
1883 works.
1874
1884
1875 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1885 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1876 args in various places. No bugs so far, but it's a dangerous
1886 args in various places. No bugs so far, but it's a dangerous
1877 practice.
1887 practice.
1878
1888
1879 2004-07-31 Fernando Perez <fperez@colorado.edu>
1889 2004-07-31 Fernando Perez <fperez@colorado.edu>
1880
1890
1881 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1891 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1882 fix completion of files with dots in their names under most
1892 fix completion of files with dots in their names under most
1883 profiles (pysh was OK because the completion order is different).
1893 profiles (pysh was OK because the completion order is different).
1884
1894
1885 2004-07-27 Fernando Perez <fperez@colorado.edu>
1895 2004-07-27 Fernando Perez <fperez@colorado.edu>
1886
1896
1887 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1897 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1888 keywords manually, b/c the one in keyword.py was removed in python
1898 keywords manually, b/c the one in keyword.py was removed in python
1889 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1899 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1890 This is NOT a bug under python 2.3 and earlier.
1900 This is NOT a bug under python 2.3 and earlier.
1891
1901
1892 2004-07-26 Fernando Perez <fperez@colorado.edu>
1902 2004-07-26 Fernando Perez <fperez@colorado.edu>
1893
1903
1894 * IPython/ultraTB.py (VerboseTB.text): Add another
1904 * IPython/ultraTB.py (VerboseTB.text): Add another
1895 linecache.checkcache() call to try to prevent inspect.py from
1905 linecache.checkcache() call to try to prevent inspect.py from
1896 crashing under python 2.3. I think this fixes
1906 crashing under python 2.3. I think this fixes
1897 http://www.scipy.net/roundup/ipython/issue17.
1907 http://www.scipy.net/roundup/ipython/issue17.
1898
1908
1899 2004-07-26 *** Released version 0.6.2
1909 2004-07-26 *** Released version 0.6.2
1900
1910
1901 2004-07-26 Fernando Perez <fperez@colorado.edu>
1911 2004-07-26 Fernando Perez <fperez@colorado.edu>
1902
1912
1903 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1913 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1904 fail for any number.
1914 fail for any number.
1905 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1915 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1906 empty bookmarks.
1916 empty bookmarks.
1907
1917
1908 2004-07-26 *** Released version 0.6.1
1918 2004-07-26 *** Released version 0.6.1
1909
1919
1910 2004-07-26 Fernando Perez <fperez@colorado.edu>
1920 2004-07-26 Fernando Perez <fperez@colorado.edu>
1911
1921
1912 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1922 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1913
1923
1914 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1924 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1915 escaping '()[]{}' in filenames.
1925 escaping '()[]{}' in filenames.
1916
1926
1917 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1927 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1918 Python 2.2 users who lack a proper shlex.split.
1928 Python 2.2 users who lack a proper shlex.split.
1919
1929
1920 2004-07-19 Fernando Perez <fperez@colorado.edu>
1930 2004-07-19 Fernando Perez <fperez@colorado.edu>
1921
1931
1922 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1932 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1923 for reading readline's init file. I follow the normal chain:
1933 for reading readline's init file. I follow the normal chain:
1924 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1934 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1925 report by Mike Heeter. This closes
1935 report by Mike Heeter. This closes
1926 http://www.scipy.net/roundup/ipython/issue16.
1936 http://www.scipy.net/roundup/ipython/issue16.
1927
1937
1928 2004-07-18 Fernando Perez <fperez@colorado.edu>
1938 2004-07-18 Fernando Perez <fperez@colorado.edu>
1929
1939
1930 * IPython/iplib.py (__init__): Add better handling of '\' under
1940 * IPython/iplib.py (__init__): Add better handling of '\' under
1931 Win32 for filenames. After a patch by Ville.
1941 Win32 for filenames. After a patch by Ville.
1932
1942
1933 2004-07-17 Fernando Perez <fperez@colorado.edu>
1943 2004-07-17 Fernando Perez <fperez@colorado.edu>
1934
1944
1935 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1945 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1936 autocalling would be triggered for 'foo is bar' if foo is
1946 autocalling would be triggered for 'foo is bar' if foo is
1937 callable. I also cleaned up the autocall detection code to use a
1947 callable. I also cleaned up the autocall detection code to use a
1938 regexp, which is faster. Bug reported by Alexander Schmolck.
1948 regexp, which is faster. Bug reported by Alexander Schmolck.
1939
1949
1940 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1950 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1941 '?' in them would confuse the help system. Reported by Alex
1951 '?' in them would confuse the help system. Reported by Alex
1942 Schmolck.
1952 Schmolck.
1943
1953
1944 2004-07-16 Fernando Perez <fperez@colorado.edu>
1954 2004-07-16 Fernando Perez <fperez@colorado.edu>
1945
1955
1946 * IPython/GnuplotInteractive.py (__all__): added plot2.
1956 * IPython/GnuplotInteractive.py (__all__): added plot2.
1947
1957
1948 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1958 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1949 plotting dictionaries, lists or tuples of 1d arrays.
1959 plotting dictionaries, lists or tuples of 1d arrays.
1950
1960
1951 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1961 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1952 optimizations.
1962 optimizations.
1953
1963
1954 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1964 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1955 the information which was there from Janko's original IPP code:
1965 the information which was there from Janko's original IPP code:
1956
1966
1957 03.05.99 20:53 porto.ifm.uni-kiel.de
1967 03.05.99 20:53 porto.ifm.uni-kiel.de
1958 --Started changelog.
1968 --Started changelog.
1959 --make clear do what it say it does
1969 --make clear do what it say it does
1960 --added pretty output of lines from inputcache
1970 --added pretty output of lines from inputcache
1961 --Made Logger a mixin class, simplifies handling of switches
1971 --Made Logger a mixin class, simplifies handling of switches
1962 --Added own completer class. .string<TAB> expands to last history
1972 --Added own completer class. .string<TAB> expands to last history
1963 line which starts with string. The new expansion is also present
1973 line which starts with string. The new expansion is also present
1964 with Ctrl-r from the readline library. But this shows, who this
1974 with Ctrl-r from the readline library. But this shows, who this
1965 can be done for other cases.
1975 can be done for other cases.
1966 --Added convention that all shell functions should accept a
1976 --Added convention that all shell functions should accept a
1967 parameter_string This opens the door for different behaviour for
1977 parameter_string This opens the door for different behaviour for
1968 each function. @cd is a good example of this.
1978 each function. @cd is a good example of this.
1969
1979
1970 04.05.99 12:12 porto.ifm.uni-kiel.de
1980 04.05.99 12:12 porto.ifm.uni-kiel.de
1971 --added logfile rotation
1981 --added logfile rotation
1972 --added new mainloop method which freezes first the namespace
1982 --added new mainloop method which freezes first the namespace
1973
1983
1974 07.05.99 21:24 porto.ifm.uni-kiel.de
1984 07.05.99 21:24 porto.ifm.uni-kiel.de
1975 --added the docreader classes. Now there is a help system.
1985 --added the docreader classes. Now there is a help system.
1976 -This is only a first try. Currently it's not easy to put new
1986 -This is only a first try. Currently it's not easy to put new
1977 stuff in the indices. But this is the way to go. Info would be
1987 stuff in the indices. But this is the way to go. Info would be
1978 better, but HTML is every where and not everybody has an info
1988 better, but HTML is every where and not everybody has an info
1979 system installed and it's not so easy to change html-docs to info.
1989 system installed and it's not so easy to change html-docs to info.
1980 --added global logfile option
1990 --added global logfile option
1981 --there is now a hook for object inspection method pinfo needs to
1991 --there is now a hook for object inspection method pinfo needs to
1982 be provided for this. Can be reached by two '??'.
1992 be provided for this. Can be reached by two '??'.
1983
1993
1984 08.05.99 20:51 porto.ifm.uni-kiel.de
1994 08.05.99 20:51 porto.ifm.uni-kiel.de
1985 --added a README
1995 --added a README
1986 --bug in rc file. Something has changed so functions in the rc
1996 --bug in rc file. Something has changed so functions in the rc
1987 file need to reference the shell and not self. Not clear if it's a
1997 file need to reference the shell and not self. Not clear if it's a
1988 bug or feature.
1998 bug or feature.
1989 --changed rc file for new behavior
1999 --changed rc file for new behavior
1990
2000
1991 2004-07-15 Fernando Perez <fperez@colorado.edu>
2001 2004-07-15 Fernando Perez <fperez@colorado.edu>
1992
2002
1993 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2003 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1994 cache was falling out of sync in bizarre manners when multi-line
2004 cache was falling out of sync in bizarre manners when multi-line
1995 input was present. Minor optimizations and cleanup.
2005 input was present. Minor optimizations and cleanup.
1996
2006
1997 (Logger): Remove old Changelog info for cleanup. This is the
2007 (Logger): Remove old Changelog info for cleanup. This is the
1998 information which was there from Janko's original code:
2008 information which was there from Janko's original code:
1999
2009
2000 Changes to Logger: - made the default log filename a parameter
2010 Changes to Logger: - made the default log filename a parameter
2001
2011
2002 - put a check for lines beginning with !@? in log(). Needed
2012 - put a check for lines beginning with !@? in log(). Needed
2003 (even if the handlers properly log their lines) for mid-session
2013 (even if the handlers properly log their lines) for mid-session
2004 logging activation to work properly. Without this, lines logged
2014 logging activation to work properly. Without this, lines logged
2005 in mid session, which get read from the cache, would end up
2015 in mid session, which get read from the cache, would end up
2006 'bare' (with !@? in the open) in the log. Now they are caught
2016 'bare' (with !@? in the open) in the log. Now they are caught
2007 and prepended with a #.
2017 and prepended with a #.
2008
2018
2009 * IPython/iplib.py (InteractiveShell.init_readline): added check
2019 * IPython/iplib.py (InteractiveShell.init_readline): added check
2010 in case MagicCompleter fails to be defined, so we don't crash.
2020 in case MagicCompleter fails to be defined, so we don't crash.
2011
2021
2012 2004-07-13 Fernando Perez <fperez@colorado.edu>
2022 2004-07-13 Fernando Perez <fperez@colorado.edu>
2013
2023
2014 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2024 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2015 of EPS if the requested filename ends in '.eps'.
2025 of EPS if the requested filename ends in '.eps'.
2016
2026
2017 2004-07-04 Fernando Perez <fperez@colorado.edu>
2027 2004-07-04 Fernando Perez <fperez@colorado.edu>
2018
2028
2019 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2029 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2020 escaping of quotes when calling the shell.
2030 escaping of quotes when calling the shell.
2021
2031
2022 2004-07-02 Fernando Perez <fperez@colorado.edu>
2032 2004-07-02 Fernando Perez <fperez@colorado.edu>
2023
2033
2024 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2034 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2025 gettext not working because we were clobbering '_'. Fixes
2035 gettext not working because we were clobbering '_'. Fixes
2026 http://www.scipy.net/roundup/ipython/issue6.
2036 http://www.scipy.net/roundup/ipython/issue6.
2027
2037
2028 2004-07-01 Fernando Perez <fperez@colorado.edu>
2038 2004-07-01 Fernando Perez <fperez@colorado.edu>
2029
2039
2030 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2040 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2031 into @cd. Patch by Ville.
2041 into @cd. Patch by Ville.
2032
2042
2033 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2043 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2034 new function to store things after ipmaker runs. Patch by Ville.
2044 new function to store things after ipmaker runs. Patch by Ville.
2035 Eventually this will go away once ipmaker is removed and the class
2045 Eventually this will go away once ipmaker is removed and the class
2036 gets cleaned up, but for now it's ok. Key functionality here is
2046 gets cleaned up, but for now it's ok. Key functionality here is
2037 the addition of the persistent storage mechanism, a dict for
2047 the addition of the persistent storage mechanism, a dict for
2038 keeping data across sessions (for now just bookmarks, but more can
2048 keeping data across sessions (for now just bookmarks, but more can
2039 be implemented later).
2049 be implemented later).
2040
2050
2041 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2051 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2042 persistent across sections. Patch by Ville, I modified it
2052 persistent across sections. Patch by Ville, I modified it
2043 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2053 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2044 added a '-l' option to list all bookmarks.
2054 added a '-l' option to list all bookmarks.
2045
2055
2046 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2056 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2047 center for cleanup. Registered with atexit.register(). I moved
2057 center for cleanup. Registered with atexit.register(). I moved
2048 here the old exit_cleanup(). After a patch by Ville.
2058 here the old exit_cleanup(). After a patch by Ville.
2049
2059
2050 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2060 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2051 characters in the hacked shlex_split for python 2.2.
2061 characters in the hacked shlex_split for python 2.2.
2052
2062
2053 * IPython/iplib.py (file_matches): more fixes to filenames with
2063 * IPython/iplib.py (file_matches): more fixes to filenames with
2054 whitespace in them. It's not perfect, but limitations in python's
2064 whitespace in them. It's not perfect, but limitations in python's
2055 readline make it impossible to go further.
2065 readline make it impossible to go further.
2056
2066
2057 2004-06-29 Fernando Perez <fperez@colorado.edu>
2067 2004-06-29 Fernando Perez <fperez@colorado.edu>
2058
2068
2059 * IPython/iplib.py (file_matches): escape whitespace correctly in
2069 * IPython/iplib.py (file_matches): escape whitespace correctly in
2060 filename completions. Bug reported by Ville.
2070 filename completions. Bug reported by Ville.
2061
2071
2062 2004-06-28 Fernando Perez <fperez@colorado.edu>
2072 2004-06-28 Fernando Perez <fperez@colorado.edu>
2063
2073
2064 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2074 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2065 the history file will be called 'history-PROFNAME' (or just
2075 the history file will be called 'history-PROFNAME' (or just
2066 'history' if no profile is loaded). I was getting annoyed at
2076 'history' if no profile is loaded). I was getting annoyed at
2067 getting my Numerical work history clobbered by pysh sessions.
2077 getting my Numerical work history clobbered by pysh sessions.
2068
2078
2069 * IPython/iplib.py (InteractiveShell.__init__): Internal
2079 * IPython/iplib.py (InteractiveShell.__init__): Internal
2070 getoutputerror() function so that we can honor the system_verbose
2080 getoutputerror() function so that we can honor the system_verbose
2071 flag for _all_ system calls. I also added escaping of #
2081 flag for _all_ system calls. I also added escaping of #
2072 characters here to avoid confusing Itpl.
2082 characters here to avoid confusing Itpl.
2073
2083
2074 * IPython/Magic.py (shlex_split): removed call to shell in
2084 * IPython/Magic.py (shlex_split): removed call to shell in
2075 parse_options and replaced it with shlex.split(). The annoying
2085 parse_options and replaced it with shlex.split(). The annoying
2076 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2086 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2077 to backport it from 2.3, with several frail hacks (the shlex
2087 to backport it from 2.3, with several frail hacks (the shlex
2078 module is rather limited in 2.2). Thanks to a suggestion by Ville
2088 module is rather limited in 2.2). Thanks to a suggestion by Ville
2079 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2089 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2080 problem.
2090 problem.
2081
2091
2082 (Magic.magic_system_verbose): new toggle to print the actual
2092 (Magic.magic_system_verbose): new toggle to print the actual
2083 system calls made by ipython. Mainly for debugging purposes.
2093 system calls made by ipython. Mainly for debugging purposes.
2084
2094
2085 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2095 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2086 doesn't support persistence. Reported (and fix suggested) by
2096 doesn't support persistence. Reported (and fix suggested) by
2087 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2097 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2088
2098
2089 2004-06-26 Fernando Perez <fperez@colorado.edu>
2099 2004-06-26 Fernando Perez <fperez@colorado.edu>
2090
2100
2091 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2101 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2092 continue prompts.
2102 continue prompts.
2093
2103
2094 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2104 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2095 function (basically a big docstring) and a few more things here to
2105 function (basically a big docstring) and a few more things here to
2096 speedup startup. pysh.py is now very lightweight. We want because
2106 speedup startup. pysh.py is now very lightweight. We want because
2097 it gets execfile'd, while InterpreterExec gets imported, so
2107 it gets execfile'd, while InterpreterExec gets imported, so
2098 byte-compilation saves time.
2108 byte-compilation saves time.
2099
2109
2100 2004-06-25 Fernando Perez <fperez@colorado.edu>
2110 2004-06-25 Fernando Perez <fperez@colorado.edu>
2101
2111
2102 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2112 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2103 -NUM', which was recently broken.
2113 -NUM', which was recently broken.
2104
2114
2105 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2115 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2106 in multi-line input (but not !!, which doesn't make sense there).
2116 in multi-line input (but not !!, which doesn't make sense there).
2107
2117
2108 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2118 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2109 It's just too useful, and people can turn it off in the less
2119 It's just too useful, and people can turn it off in the less
2110 common cases where it's a problem.
2120 common cases where it's a problem.
2111
2121
2112 2004-06-24 Fernando Perez <fperez@colorado.edu>
2122 2004-06-24 Fernando Perez <fperez@colorado.edu>
2113
2123
2114 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2124 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2115 special syntaxes (like alias calling) is now allied in multi-line
2125 special syntaxes (like alias calling) is now allied in multi-line
2116 input. This is still _very_ experimental, but it's necessary for
2126 input. This is still _very_ experimental, but it's necessary for
2117 efficient shell usage combining python looping syntax with system
2127 efficient shell usage combining python looping syntax with system
2118 calls. For now it's restricted to aliases, I don't think it
2128 calls. For now it's restricted to aliases, I don't think it
2119 really even makes sense to have this for magics.
2129 really even makes sense to have this for magics.
2120
2130
2121 2004-06-23 Fernando Perez <fperez@colorado.edu>
2131 2004-06-23 Fernando Perez <fperez@colorado.edu>
2122
2132
2123 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2133 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2124 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2134 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2125
2135
2126 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2136 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2127 extensions under Windows (after code sent by Gary Bishop). The
2137 extensions under Windows (after code sent by Gary Bishop). The
2128 extensions considered 'executable' are stored in IPython's rc
2138 extensions considered 'executable' are stored in IPython's rc
2129 structure as win_exec_ext.
2139 structure as win_exec_ext.
2130
2140
2131 * IPython/genutils.py (shell): new function, like system() but
2141 * IPython/genutils.py (shell): new function, like system() but
2132 without return value. Very useful for interactive shell work.
2142 without return value. Very useful for interactive shell work.
2133
2143
2134 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2144 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2135 delete aliases.
2145 delete aliases.
2136
2146
2137 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2147 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2138 sure that the alias table doesn't contain python keywords.
2148 sure that the alias table doesn't contain python keywords.
2139
2149
2140 2004-06-21 Fernando Perez <fperez@colorado.edu>
2150 2004-06-21 Fernando Perez <fperez@colorado.edu>
2141
2151
2142 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2152 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2143 non-existent items are found in $PATH. Reported by Thorsten.
2153 non-existent items are found in $PATH. Reported by Thorsten.
2144
2154
2145 2004-06-20 Fernando Perez <fperez@colorado.edu>
2155 2004-06-20 Fernando Perez <fperez@colorado.edu>
2146
2156
2147 * IPython/iplib.py (complete): modified the completer so that the
2157 * IPython/iplib.py (complete): modified the completer so that the
2148 order of priorities can be easily changed at runtime.
2158 order of priorities can be easily changed at runtime.
2149
2159
2150 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2160 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2151 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2161 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2152
2162
2153 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2163 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2154 expand Python variables prepended with $ in all system calls. The
2164 expand Python variables prepended with $ in all system calls. The
2155 same was done to InteractiveShell.handle_shell_escape. Now all
2165 same was done to InteractiveShell.handle_shell_escape. Now all
2156 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2166 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2157 expansion of python variables and expressions according to the
2167 expansion of python variables and expressions according to the
2158 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2168 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2159
2169
2160 Though PEP-215 has been rejected, a similar (but simpler) one
2170 Though PEP-215 has been rejected, a similar (but simpler) one
2161 seems like it will go into Python 2.4, PEP-292 -
2171 seems like it will go into Python 2.4, PEP-292 -
2162 http://www.python.org/peps/pep-0292.html.
2172 http://www.python.org/peps/pep-0292.html.
2163
2173
2164 I'll keep the full syntax of PEP-215, since IPython has since the
2174 I'll keep the full syntax of PEP-215, since IPython has since the
2165 start used Ka-Ping Yee's reference implementation discussed there
2175 start used Ka-Ping Yee's reference implementation discussed there
2166 (Itpl), and I actually like the powerful semantics it offers.
2176 (Itpl), and I actually like the powerful semantics it offers.
2167
2177
2168 In order to access normal shell variables, the $ has to be escaped
2178 In order to access normal shell variables, the $ has to be escaped
2169 via an extra $. For example:
2179 via an extra $. For example:
2170
2180
2171 In [7]: PATH='a python variable'
2181 In [7]: PATH='a python variable'
2172
2182
2173 In [8]: !echo $PATH
2183 In [8]: !echo $PATH
2174 a python variable
2184 a python variable
2175
2185
2176 In [9]: !echo $$PATH
2186 In [9]: !echo $$PATH
2177 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2187 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2178
2188
2179 (Magic.parse_options): escape $ so the shell doesn't evaluate
2189 (Magic.parse_options): escape $ so the shell doesn't evaluate
2180 things prematurely.
2190 things prematurely.
2181
2191
2182 * IPython/iplib.py (InteractiveShell.call_alias): added the
2192 * IPython/iplib.py (InteractiveShell.call_alias): added the
2183 ability for aliases to expand python variables via $.
2193 ability for aliases to expand python variables via $.
2184
2194
2185 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2195 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2186 system, now there's a @rehash/@rehashx pair of magics. These work
2196 system, now there's a @rehash/@rehashx pair of magics. These work
2187 like the csh rehash command, and can be invoked at any time. They
2197 like the csh rehash command, and can be invoked at any time. They
2188 build a table of aliases to everything in the user's $PATH
2198 build a table of aliases to everything in the user's $PATH
2189 (@rehash uses everything, @rehashx is slower but only adds
2199 (@rehash uses everything, @rehashx is slower but only adds
2190 executable files). With this, the pysh.py-based shell profile can
2200 executable files). With this, the pysh.py-based shell profile can
2191 now simply call rehash upon startup, and full access to all
2201 now simply call rehash upon startup, and full access to all
2192 programs in the user's path is obtained.
2202 programs in the user's path is obtained.
2193
2203
2194 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2204 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2195 functionality is now fully in place. I removed the old dynamic
2205 functionality is now fully in place. I removed the old dynamic
2196 code generation based approach, in favor of a much lighter one
2206 code generation based approach, in favor of a much lighter one
2197 based on a simple dict. The advantage is that this allows me to
2207 based on a simple dict. The advantage is that this allows me to
2198 now have thousands of aliases with negligible cost (unthinkable
2208 now have thousands of aliases with negligible cost (unthinkable
2199 with the old system).
2209 with the old system).
2200
2210
2201 2004-06-19 Fernando Perez <fperez@colorado.edu>
2211 2004-06-19 Fernando Perez <fperez@colorado.edu>
2202
2212
2203 * IPython/iplib.py (__init__): extended MagicCompleter class to
2213 * IPython/iplib.py (__init__): extended MagicCompleter class to
2204 also complete (last in priority) on user aliases.
2214 also complete (last in priority) on user aliases.
2205
2215
2206 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2216 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2207 call to eval.
2217 call to eval.
2208 (ItplNS.__init__): Added a new class which functions like Itpl,
2218 (ItplNS.__init__): Added a new class which functions like Itpl,
2209 but allows configuring the namespace for the evaluation to occur
2219 but allows configuring the namespace for the evaluation to occur
2210 in.
2220 in.
2211
2221
2212 2004-06-18 Fernando Perez <fperez@colorado.edu>
2222 2004-06-18 Fernando Perez <fperez@colorado.edu>
2213
2223
2214 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2224 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2215 better message when 'exit' or 'quit' are typed (a common newbie
2225 better message when 'exit' or 'quit' are typed (a common newbie
2216 confusion).
2226 confusion).
2217
2227
2218 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2228 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2219 check for Windows users.
2229 check for Windows users.
2220
2230
2221 * IPython/iplib.py (InteractiveShell.user_setup): removed
2231 * IPython/iplib.py (InteractiveShell.user_setup): removed
2222 disabling of colors for Windows. I'll test at runtime and issue a
2232 disabling of colors for Windows. I'll test at runtime and issue a
2223 warning if Gary's readline isn't found, as to nudge users to
2233 warning if Gary's readline isn't found, as to nudge users to
2224 download it.
2234 download it.
2225
2235
2226 2004-06-16 Fernando Perez <fperez@colorado.edu>
2236 2004-06-16 Fernando Perez <fperez@colorado.edu>
2227
2237
2228 * IPython/genutils.py (Stream.__init__): changed to print errors
2238 * IPython/genutils.py (Stream.__init__): changed to print errors
2229 to sys.stderr. I had a circular dependency here. Now it's
2239 to sys.stderr. I had a circular dependency here. Now it's
2230 possible to run ipython as IDLE's shell (consider this pre-alpha,
2240 possible to run ipython as IDLE's shell (consider this pre-alpha,
2231 since true stdout things end up in the starting terminal instead
2241 since true stdout things end up in the starting terminal instead
2232 of IDLE's out).
2242 of IDLE's out).
2233
2243
2234 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2244 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2235 users who haven't # updated their prompt_in2 definitions. Remove
2245 users who haven't # updated their prompt_in2 definitions. Remove
2236 eventually.
2246 eventually.
2237 (multiple_replace): added credit to original ASPN recipe.
2247 (multiple_replace): added credit to original ASPN recipe.
2238
2248
2239 2004-06-15 Fernando Perez <fperez@colorado.edu>
2249 2004-06-15 Fernando Perez <fperez@colorado.edu>
2240
2250
2241 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2251 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2242 list of auto-defined aliases.
2252 list of auto-defined aliases.
2243
2253
2244 2004-06-13 Fernando Perez <fperez@colorado.edu>
2254 2004-06-13 Fernando Perez <fperez@colorado.edu>
2245
2255
2246 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2256 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2247 install was really requested (so setup.py can be used for other
2257 install was really requested (so setup.py can be used for other
2248 things under Windows).
2258 things under Windows).
2249
2259
2250 2004-06-10 Fernando Perez <fperez@colorado.edu>
2260 2004-06-10 Fernando Perez <fperez@colorado.edu>
2251
2261
2252 * IPython/Logger.py (Logger.create_log): Manually remove any old
2262 * IPython/Logger.py (Logger.create_log): Manually remove any old
2253 backup, since os.remove may fail under Windows. Fixes bug
2263 backup, since os.remove may fail under Windows. Fixes bug
2254 reported by Thorsten.
2264 reported by Thorsten.
2255
2265
2256 2004-06-09 Fernando Perez <fperez@colorado.edu>
2266 2004-06-09 Fernando Perez <fperez@colorado.edu>
2257
2267
2258 * examples/example-embed.py: fixed all references to %n (replaced
2268 * examples/example-embed.py: fixed all references to %n (replaced
2259 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2269 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2260 for all examples and the manual as well.
2270 for all examples and the manual as well.
2261
2271
2262 2004-06-08 Fernando Perez <fperez@colorado.edu>
2272 2004-06-08 Fernando Perez <fperez@colorado.edu>
2263
2273
2264 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2274 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2265 alignment and color management. All 3 prompt subsystems now
2275 alignment and color management. All 3 prompt subsystems now
2266 inherit from BasePrompt.
2276 inherit from BasePrompt.
2267
2277
2268 * tools/release: updates for windows installer build and tag rpms
2278 * tools/release: updates for windows installer build and tag rpms
2269 with python version (since paths are fixed).
2279 with python version (since paths are fixed).
2270
2280
2271 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2281 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2272 which will become eventually obsolete. Also fixed the default
2282 which will become eventually obsolete. Also fixed the default
2273 prompt_in2 to use \D, so at least new users start with the correct
2283 prompt_in2 to use \D, so at least new users start with the correct
2274 defaults.
2284 defaults.
2275 WARNING: Users with existing ipythonrc files will need to apply
2285 WARNING: Users with existing ipythonrc files will need to apply
2276 this fix manually!
2286 this fix manually!
2277
2287
2278 * setup.py: make windows installer (.exe). This is finally the
2288 * setup.py: make windows installer (.exe). This is finally the
2279 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2289 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2280 which I hadn't included because it required Python 2.3 (or recent
2290 which I hadn't included because it required Python 2.3 (or recent
2281 distutils).
2291 distutils).
2282
2292
2283 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2293 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2284 usage of new '\D' escape.
2294 usage of new '\D' escape.
2285
2295
2286 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2296 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2287 lacks os.getuid())
2297 lacks os.getuid())
2288 (CachedOutput.set_colors): Added the ability to turn coloring
2298 (CachedOutput.set_colors): Added the ability to turn coloring
2289 on/off with @colors even for manually defined prompt colors. It
2299 on/off with @colors even for manually defined prompt colors. It
2290 uses a nasty global, but it works safely and via the generic color
2300 uses a nasty global, but it works safely and via the generic color
2291 handling mechanism.
2301 handling mechanism.
2292 (Prompt2.__init__): Introduced new escape '\D' for continuation
2302 (Prompt2.__init__): Introduced new escape '\D' for continuation
2293 prompts. It represents the counter ('\#') as dots.
2303 prompts. It represents the counter ('\#') as dots.
2294 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2304 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2295 need to update their ipythonrc files and replace '%n' with '\D' in
2305 need to update their ipythonrc files and replace '%n' with '\D' in
2296 their prompt_in2 settings everywhere. Sorry, but there's
2306 their prompt_in2 settings everywhere. Sorry, but there's
2297 otherwise no clean way to get all prompts to properly align. The
2307 otherwise no clean way to get all prompts to properly align. The
2298 ipythonrc shipped with IPython has been updated.
2308 ipythonrc shipped with IPython has been updated.
2299
2309
2300 2004-06-07 Fernando Perez <fperez@colorado.edu>
2310 2004-06-07 Fernando Perez <fperez@colorado.edu>
2301
2311
2302 * setup.py (isfile): Pass local_icons option to latex2html, so the
2312 * setup.py (isfile): Pass local_icons option to latex2html, so the
2303 resulting HTML file is self-contained. Thanks to
2313 resulting HTML file is self-contained. Thanks to
2304 dryice-AT-liu.com.cn for the tip.
2314 dryice-AT-liu.com.cn for the tip.
2305
2315
2306 * pysh.py: I created a new profile 'shell', which implements a
2316 * pysh.py: I created a new profile 'shell', which implements a
2307 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2317 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2308 system shell, nor will it become one anytime soon. It's mainly
2318 system shell, nor will it become one anytime soon. It's mainly
2309 meant to illustrate the use of the new flexible bash-like prompts.
2319 meant to illustrate the use of the new flexible bash-like prompts.
2310 I guess it could be used by hardy souls for true shell management,
2320 I guess it could be used by hardy souls for true shell management,
2311 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2321 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2312 profile. This uses the InterpreterExec extension provided by
2322 profile. This uses the InterpreterExec extension provided by
2313 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2323 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2314
2324
2315 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2325 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2316 auto-align itself with the length of the previous input prompt
2326 auto-align itself with the length of the previous input prompt
2317 (taking into account the invisible color escapes).
2327 (taking into account the invisible color escapes).
2318 (CachedOutput.__init__): Large restructuring of this class. Now
2328 (CachedOutput.__init__): Large restructuring of this class. Now
2319 all three prompts (primary1, primary2, output) are proper objects,
2329 all three prompts (primary1, primary2, output) are proper objects,
2320 managed by the 'parent' CachedOutput class. The code is still a
2330 managed by the 'parent' CachedOutput class. The code is still a
2321 bit hackish (all prompts share state via a pointer to the cache),
2331 bit hackish (all prompts share state via a pointer to the cache),
2322 but it's overall far cleaner than before.
2332 but it's overall far cleaner than before.
2323
2333
2324 * IPython/genutils.py (getoutputerror): modified to add verbose,
2334 * IPython/genutils.py (getoutputerror): modified to add verbose,
2325 debug and header options. This makes the interface of all getout*
2335 debug and header options. This makes the interface of all getout*
2326 functions uniform.
2336 functions uniform.
2327 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2337 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2328
2338
2329 * IPython/Magic.py (Magic.default_option): added a function to
2339 * IPython/Magic.py (Magic.default_option): added a function to
2330 allow registering default options for any magic command. This
2340 allow registering default options for any magic command. This
2331 makes it easy to have profiles which customize the magics globally
2341 makes it easy to have profiles which customize the magics globally
2332 for a certain use. The values set through this function are
2342 for a certain use. The values set through this function are
2333 picked up by the parse_options() method, which all magics should
2343 picked up by the parse_options() method, which all magics should
2334 use to parse their options.
2344 use to parse their options.
2335
2345
2336 * IPython/genutils.py (warn): modified the warnings framework to
2346 * IPython/genutils.py (warn): modified the warnings framework to
2337 use the Term I/O class. I'm trying to slowly unify all of
2347 use the Term I/O class. I'm trying to slowly unify all of
2338 IPython's I/O operations to pass through Term.
2348 IPython's I/O operations to pass through Term.
2339
2349
2340 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2350 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2341 the secondary prompt to correctly match the length of the primary
2351 the secondary prompt to correctly match the length of the primary
2342 one for any prompt. Now multi-line code will properly line up
2352 one for any prompt. Now multi-line code will properly line up
2343 even for path dependent prompts, such as the new ones available
2353 even for path dependent prompts, such as the new ones available
2344 via the prompt_specials.
2354 via the prompt_specials.
2345
2355
2346 2004-06-06 Fernando Perez <fperez@colorado.edu>
2356 2004-06-06 Fernando Perez <fperez@colorado.edu>
2347
2357
2348 * IPython/Prompts.py (prompt_specials): Added the ability to have
2358 * IPython/Prompts.py (prompt_specials): Added the ability to have
2349 bash-like special sequences in the prompts, which get
2359 bash-like special sequences in the prompts, which get
2350 automatically expanded. Things like hostname, current working
2360 automatically expanded. Things like hostname, current working
2351 directory and username are implemented already, but it's easy to
2361 directory and username are implemented already, but it's easy to
2352 add more in the future. Thanks to a patch by W.J. van der Laan
2362 add more in the future. Thanks to a patch by W.J. van der Laan
2353 <gnufnork-AT-hetdigitalegat.nl>
2363 <gnufnork-AT-hetdigitalegat.nl>
2354 (prompt_specials): Added color support for prompt strings, so
2364 (prompt_specials): Added color support for prompt strings, so
2355 users can define arbitrary color setups for their prompts.
2365 users can define arbitrary color setups for their prompts.
2356
2366
2357 2004-06-05 Fernando Perez <fperez@colorado.edu>
2367 2004-06-05 Fernando Perez <fperez@colorado.edu>
2358
2368
2359 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2369 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2360 code to load Gary Bishop's readline and configure it
2370 code to load Gary Bishop's readline and configure it
2361 automatically. Thanks to Gary for help on this.
2371 automatically. Thanks to Gary for help on this.
2362
2372
2363 2004-06-01 Fernando Perez <fperez@colorado.edu>
2373 2004-06-01 Fernando Perez <fperez@colorado.edu>
2364
2374
2365 * IPython/Logger.py (Logger.create_log): fix bug for logging
2375 * IPython/Logger.py (Logger.create_log): fix bug for logging
2366 with no filename (previous fix was incomplete).
2376 with no filename (previous fix was incomplete).
2367
2377
2368 2004-05-25 Fernando Perez <fperez@colorado.edu>
2378 2004-05-25 Fernando Perez <fperez@colorado.edu>
2369
2379
2370 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2380 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2371 parens would get passed to the shell.
2381 parens would get passed to the shell.
2372
2382
2373 2004-05-20 Fernando Perez <fperez@colorado.edu>
2383 2004-05-20 Fernando Perez <fperez@colorado.edu>
2374
2384
2375 * IPython/Magic.py (Magic.magic_prun): changed default profile
2385 * IPython/Magic.py (Magic.magic_prun): changed default profile
2376 sort order to 'time' (the more common profiling need).
2386 sort order to 'time' (the more common profiling need).
2377
2387
2378 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2388 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2379 so that source code shown is guaranteed in sync with the file on
2389 so that source code shown is guaranteed in sync with the file on
2380 disk (also changed in psource). Similar fix to the one for
2390 disk (also changed in psource). Similar fix to the one for
2381 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2391 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2382 <yann.ledu-AT-noos.fr>.
2392 <yann.ledu-AT-noos.fr>.
2383
2393
2384 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2394 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2385 with a single option would not be correctly parsed. Closes
2395 with a single option would not be correctly parsed. Closes
2386 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2396 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2387 introduced in 0.6.0 (on 2004-05-06).
2397 introduced in 0.6.0 (on 2004-05-06).
2388
2398
2389 2004-05-13 *** Released version 0.6.0
2399 2004-05-13 *** Released version 0.6.0
2390
2400
2391 2004-05-13 Fernando Perez <fperez@colorado.edu>
2401 2004-05-13 Fernando Perez <fperez@colorado.edu>
2392
2402
2393 * debian/: Added debian/ directory to CVS, so that debian support
2403 * debian/: Added debian/ directory to CVS, so that debian support
2394 is publicly accessible. The debian package is maintained by Jack
2404 is publicly accessible. The debian package is maintained by Jack
2395 Moffit <jack-AT-xiph.org>.
2405 Moffit <jack-AT-xiph.org>.
2396
2406
2397 * Documentation: included the notes about an ipython-based system
2407 * Documentation: included the notes about an ipython-based system
2398 shell (the hypothetical 'pysh') into the new_design.pdf document,
2408 shell (the hypothetical 'pysh') into the new_design.pdf document,
2399 so that these ideas get distributed to users along with the
2409 so that these ideas get distributed to users along with the
2400 official documentation.
2410 official documentation.
2401
2411
2402 2004-05-10 Fernando Perez <fperez@colorado.edu>
2412 2004-05-10 Fernando Perez <fperez@colorado.edu>
2403
2413
2404 * IPython/Logger.py (Logger.create_log): fix recently introduced
2414 * IPython/Logger.py (Logger.create_log): fix recently introduced
2405 bug (misindented line) where logstart would fail when not given an
2415 bug (misindented line) where logstart would fail when not given an
2406 explicit filename.
2416 explicit filename.
2407
2417
2408 2004-05-09 Fernando Perez <fperez@colorado.edu>
2418 2004-05-09 Fernando Perez <fperez@colorado.edu>
2409
2419
2410 * IPython/Magic.py (Magic.parse_options): skip system call when
2420 * IPython/Magic.py (Magic.parse_options): skip system call when
2411 there are no options to look for. Faster, cleaner for the common
2421 there are no options to look for. Faster, cleaner for the common
2412 case.
2422 case.
2413
2423
2414 * Documentation: many updates to the manual: describing Windows
2424 * Documentation: many updates to the manual: describing Windows
2415 support better, Gnuplot updates, credits, misc small stuff. Also
2425 support better, Gnuplot updates, credits, misc small stuff. Also
2416 updated the new_design doc a bit.
2426 updated the new_design doc a bit.
2417
2427
2418 2004-05-06 *** Released version 0.6.0.rc1
2428 2004-05-06 *** Released version 0.6.0.rc1
2419
2429
2420 2004-05-06 Fernando Perez <fperez@colorado.edu>
2430 2004-05-06 Fernando Perez <fperez@colorado.edu>
2421
2431
2422 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2432 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2423 operations to use the vastly more efficient list/''.join() method.
2433 operations to use the vastly more efficient list/''.join() method.
2424 (FormattedTB.text): Fix
2434 (FormattedTB.text): Fix
2425 http://www.scipy.net/roundup/ipython/issue12 - exception source
2435 http://www.scipy.net/roundup/ipython/issue12 - exception source
2426 extract not updated after reload. Thanks to Mike Salib
2436 extract not updated after reload. Thanks to Mike Salib
2427 <msalib-AT-mit.edu> for pinning the source of the problem.
2437 <msalib-AT-mit.edu> for pinning the source of the problem.
2428 Fortunately, the solution works inside ipython and doesn't require
2438 Fortunately, the solution works inside ipython and doesn't require
2429 any changes to python proper.
2439 any changes to python proper.
2430
2440
2431 * IPython/Magic.py (Magic.parse_options): Improved to process the
2441 * IPython/Magic.py (Magic.parse_options): Improved to process the
2432 argument list as a true shell would (by actually using the
2442 argument list as a true shell would (by actually using the
2433 underlying system shell). This way, all @magics automatically get
2443 underlying system shell). This way, all @magics automatically get
2434 shell expansion for variables. Thanks to a comment by Alex
2444 shell expansion for variables. Thanks to a comment by Alex
2435 Schmolck.
2445 Schmolck.
2436
2446
2437 2004-04-04 Fernando Perez <fperez@colorado.edu>
2447 2004-04-04 Fernando Perez <fperez@colorado.edu>
2438
2448
2439 * IPython/iplib.py (InteractiveShell.interact): Added a special
2449 * IPython/iplib.py (InteractiveShell.interact): Added a special
2440 trap for a debugger quit exception, which is basically impossible
2450 trap for a debugger quit exception, which is basically impossible
2441 to handle by normal mechanisms, given what pdb does to the stack.
2451 to handle by normal mechanisms, given what pdb does to the stack.
2442 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2452 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2443
2453
2444 2004-04-03 Fernando Perez <fperez@colorado.edu>
2454 2004-04-03 Fernando Perez <fperez@colorado.edu>
2445
2455
2446 * IPython/genutils.py (Term): Standardized the names of the Term
2456 * IPython/genutils.py (Term): Standardized the names of the Term
2447 class streams to cin/cout/cerr, following C++ naming conventions
2457 class streams to cin/cout/cerr, following C++ naming conventions
2448 (I can't use in/out/err because 'in' is not a valid attribute
2458 (I can't use in/out/err because 'in' is not a valid attribute
2449 name).
2459 name).
2450
2460
2451 * IPython/iplib.py (InteractiveShell.interact): don't increment
2461 * IPython/iplib.py (InteractiveShell.interact): don't increment
2452 the prompt if there's no user input. By Daniel 'Dang' Griffith
2462 the prompt if there's no user input. By Daniel 'Dang' Griffith
2453 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2463 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2454 Francois Pinard.
2464 Francois Pinard.
2455
2465
2456 2004-04-02 Fernando Perez <fperez@colorado.edu>
2466 2004-04-02 Fernando Perez <fperez@colorado.edu>
2457
2467
2458 * IPython/genutils.py (Stream.__init__): Modified to survive at
2468 * IPython/genutils.py (Stream.__init__): Modified to survive at
2459 least importing in contexts where stdin/out/err aren't true file
2469 least importing in contexts where stdin/out/err aren't true file
2460 objects, such as PyCrust (they lack fileno() and mode). However,
2470 objects, such as PyCrust (they lack fileno() and mode). However,
2461 the recovery facilities which rely on these things existing will
2471 the recovery facilities which rely on these things existing will
2462 not work.
2472 not work.
2463
2473
2464 2004-04-01 Fernando Perez <fperez@colorado.edu>
2474 2004-04-01 Fernando Perez <fperez@colorado.edu>
2465
2475
2466 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2476 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2467 use the new getoutputerror() function, so it properly
2477 use the new getoutputerror() function, so it properly
2468 distinguishes stdout/err.
2478 distinguishes stdout/err.
2469
2479
2470 * IPython/genutils.py (getoutputerror): added a function to
2480 * IPython/genutils.py (getoutputerror): added a function to
2471 capture separately the standard output and error of a command.
2481 capture separately the standard output and error of a command.
2472 After a comment from dang on the mailing lists. This code is
2482 After a comment from dang on the mailing lists. This code is
2473 basically a modified version of commands.getstatusoutput(), from
2483 basically a modified version of commands.getstatusoutput(), from
2474 the standard library.
2484 the standard library.
2475
2485
2476 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2486 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2477 '!!' as a special syntax (shorthand) to access @sx.
2487 '!!' as a special syntax (shorthand) to access @sx.
2478
2488
2479 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2489 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2480 command and return its output as a list split on '\n'.
2490 command and return its output as a list split on '\n'.
2481
2491
2482 2004-03-31 Fernando Perez <fperez@colorado.edu>
2492 2004-03-31 Fernando Perez <fperez@colorado.edu>
2483
2493
2484 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2494 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2485 method to dictionaries used as FakeModule instances if they lack
2495 method to dictionaries used as FakeModule instances if they lack
2486 it. At least pydoc in python2.3 breaks for runtime-defined
2496 it. At least pydoc in python2.3 breaks for runtime-defined
2487 functions without this hack. At some point I need to _really_
2497 functions without this hack. At some point I need to _really_
2488 understand what FakeModule is doing, because it's a gross hack.
2498 understand what FakeModule is doing, because it's a gross hack.
2489 But it solves Arnd's problem for now...
2499 But it solves Arnd's problem for now...
2490
2500
2491 2004-02-27 Fernando Perez <fperez@colorado.edu>
2501 2004-02-27 Fernando Perez <fperez@colorado.edu>
2492
2502
2493 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2503 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2494 mode would behave erratically. Also increased the number of
2504 mode would behave erratically. Also increased the number of
2495 possible logs in rotate mod to 999. Thanks to Rod Holland
2505 possible logs in rotate mod to 999. Thanks to Rod Holland
2496 <rhh@StructureLABS.com> for the report and fixes.
2506 <rhh@StructureLABS.com> for the report and fixes.
2497
2507
2498 2004-02-26 Fernando Perez <fperez@colorado.edu>
2508 2004-02-26 Fernando Perez <fperez@colorado.edu>
2499
2509
2500 * IPython/genutils.py (page): Check that the curses module really
2510 * IPython/genutils.py (page): Check that the curses module really
2501 has the initscr attribute before trying to use it. For some
2511 has the initscr attribute before trying to use it. For some
2502 reason, the Solaris curses module is missing this. I think this
2512 reason, the Solaris curses module is missing this. I think this
2503 should be considered a Solaris python bug, but I'm not sure.
2513 should be considered a Solaris python bug, but I'm not sure.
2504
2514
2505 2004-01-17 Fernando Perez <fperez@colorado.edu>
2515 2004-01-17 Fernando Perez <fperez@colorado.edu>
2506
2516
2507 * IPython/genutils.py (Stream.__init__): Changes to try to make
2517 * IPython/genutils.py (Stream.__init__): Changes to try to make
2508 ipython robust against stdin/out/err being closed by the user.
2518 ipython robust against stdin/out/err being closed by the user.
2509 This is 'user error' (and blocks a normal python session, at least
2519 This is 'user error' (and blocks a normal python session, at least
2510 the stdout case). However, Ipython should be able to survive such
2520 the stdout case). However, Ipython should be able to survive such
2511 instances of abuse as gracefully as possible. To simplify the
2521 instances of abuse as gracefully as possible. To simplify the
2512 coding and maintain compatibility with Gary Bishop's Term
2522 coding and maintain compatibility with Gary Bishop's Term
2513 contributions, I've made use of classmethods for this. I think
2523 contributions, I've made use of classmethods for this. I think
2514 this introduces a dependency on python 2.2.
2524 this introduces a dependency on python 2.2.
2515
2525
2516 2004-01-13 Fernando Perez <fperez@colorado.edu>
2526 2004-01-13 Fernando Perez <fperez@colorado.edu>
2517
2527
2518 * IPython/numutils.py (exp_safe): simplified the code a bit and
2528 * IPython/numutils.py (exp_safe): simplified the code a bit and
2519 removed the need for importing the kinds module altogether.
2529 removed the need for importing the kinds module altogether.
2520
2530
2521 2004-01-06 Fernando Perez <fperez@colorado.edu>
2531 2004-01-06 Fernando Perez <fperez@colorado.edu>
2522
2532
2523 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2533 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2524 a magic function instead, after some community feedback. No
2534 a magic function instead, after some community feedback. No
2525 special syntax will exist for it, but its name is deliberately
2535 special syntax will exist for it, but its name is deliberately
2526 very short.
2536 very short.
2527
2537
2528 2003-12-20 Fernando Perez <fperez@colorado.edu>
2538 2003-12-20 Fernando Perez <fperez@colorado.edu>
2529
2539
2530 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2540 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2531 new functionality, to automagically assign the result of a shell
2541 new functionality, to automagically assign the result of a shell
2532 command to a variable. I'll solicit some community feedback on
2542 command to a variable. I'll solicit some community feedback on
2533 this before making it permanent.
2543 this before making it permanent.
2534
2544
2535 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2545 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2536 requested about callables for which inspect couldn't obtain a
2546 requested about callables for which inspect couldn't obtain a
2537 proper argspec. Thanks to a crash report sent by Etienne
2547 proper argspec. Thanks to a crash report sent by Etienne
2538 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2548 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2539
2549
2540 2003-12-09 Fernando Perez <fperez@colorado.edu>
2550 2003-12-09 Fernando Perez <fperez@colorado.edu>
2541
2551
2542 * IPython/genutils.py (page): patch for the pager to work across
2552 * IPython/genutils.py (page): patch for the pager to work across
2543 various versions of Windows. By Gary Bishop.
2553 various versions of Windows. By Gary Bishop.
2544
2554
2545 2003-12-04 Fernando Perez <fperez@colorado.edu>
2555 2003-12-04 Fernando Perez <fperez@colorado.edu>
2546
2556
2547 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2557 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2548 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2558 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2549 While I tested this and it looks ok, there may still be corner
2559 While I tested this and it looks ok, there may still be corner
2550 cases I've missed.
2560 cases I've missed.
2551
2561
2552 2003-12-01 Fernando Perez <fperez@colorado.edu>
2562 2003-12-01 Fernando Perez <fperez@colorado.edu>
2553
2563
2554 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2564 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2555 where a line like 'p,q=1,2' would fail because the automagic
2565 where a line like 'p,q=1,2' would fail because the automagic
2556 system would be triggered for @p.
2566 system would be triggered for @p.
2557
2567
2558 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2568 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2559 cleanups, code unmodified.
2569 cleanups, code unmodified.
2560
2570
2561 * IPython/genutils.py (Term): added a class for IPython to handle
2571 * IPython/genutils.py (Term): added a class for IPython to handle
2562 output. In most cases it will just be a proxy for stdout/err, but
2572 output. In most cases it will just be a proxy for stdout/err, but
2563 having this allows modifications to be made for some platforms,
2573 having this allows modifications to be made for some platforms,
2564 such as handling color escapes under Windows. All of this code
2574 such as handling color escapes under Windows. All of this code
2565 was contributed by Gary Bishop, with minor modifications by me.
2575 was contributed by Gary Bishop, with minor modifications by me.
2566 The actual changes affect many files.
2576 The actual changes affect many files.
2567
2577
2568 2003-11-30 Fernando Perez <fperez@colorado.edu>
2578 2003-11-30 Fernando Perez <fperez@colorado.edu>
2569
2579
2570 * IPython/iplib.py (file_matches): new completion code, courtesy
2580 * IPython/iplib.py (file_matches): new completion code, courtesy
2571 of Jeff Collins. This enables filename completion again under
2581 of Jeff Collins. This enables filename completion again under
2572 python 2.3, which disabled it at the C level.
2582 python 2.3, which disabled it at the C level.
2573
2583
2574 2003-11-11 Fernando Perez <fperez@colorado.edu>
2584 2003-11-11 Fernando Perez <fperez@colorado.edu>
2575
2585
2576 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2586 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2577 for Numeric.array(map(...)), but often convenient.
2587 for Numeric.array(map(...)), but often convenient.
2578
2588
2579 2003-11-05 Fernando Perez <fperez@colorado.edu>
2589 2003-11-05 Fernando Perez <fperez@colorado.edu>
2580
2590
2581 * IPython/numutils.py (frange): Changed a call from int() to
2591 * IPython/numutils.py (frange): Changed a call from int() to
2582 int(round()) to prevent a problem reported with arange() in the
2592 int(round()) to prevent a problem reported with arange() in the
2583 numpy list.
2593 numpy list.
2584
2594
2585 2003-10-06 Fernando Perez <fperez@colorado.edu>
2595 2003-10-06 Fernando Perez <fperez@colorado.edu>
2586
2596
2587 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2597 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2588 prevent crashes if sys lacks an argv attribute (it happens with
2598 prevent crashes if sys lacks an argv attribute (it happens with
2589 embedded interpreters which build a bare-bones sys module).
2599 embedded interpreters which build a bare-bones sys module).
2590 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2600 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2591
2601
2592 2003-09-24 Fernando Perez <fperez@colorado.edu>
2602 2003-09-24 Fernando Perez <fperez@colorado.edu>
2593
2603
2594 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2604 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2595 to protect against poorly written user objects where __getattr__
2605 to protect against poorly written user objects where __getattr__
2596 raises exceptions other than AttributeError. Thanks to a bug
2606 raises exceptions other than AttributeError. Thanks to a bug
2597 report by Oliver Sander <osander-AT-gmx.de>.
2607 report by Oliver Sander <osander-AT-gmx.de>.
2598
2608
2599 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2609 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2600 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2610 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2601
2611
2602 2003-09-09 Fernando Perez <fperez@colorado.edu>
2612 2003-09-09 Fernando Perez <fperez@colorado.edu>
2603
2613
2604 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2614 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2605 unpacking a list whith a callable as first element would
2615 unpacking a list whith a callable as first element would
2606 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2616 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2607 Collins.
2617 Collins.
2608
2618
2609 2003-08-25 *** Released version 0.5.0
2619 2003-08-25 *** Released version 0.5.0
2610
2620
2611 2003-08-22 Fernando Perez <fperez@colorado.edu>
2621 2003-08-22 Fernando Perez <fperez@colorado.edu>
2612
2622
2613 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2623 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2614 improperly defined user exceptions. Thanks to feedback from Mark
2624 improperly defined user exceptions. Thanks to feedback from Mark
2615 Russell <mrussell-AT-verio.net>.
2625 Russell <mrussell-AT-verio.net>.
2616
2626
2617 2003-08-20 Fernando Perez <fperez@colorado.edu>
2627 2003-08-20 Fernando Perez <fperez@colorado.edu>
2618
2628
2619 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2629 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2620 printing so that it would print multi-line string forms starting
2630 printing so that it would print multi-line string forms starting
2621 with a new line. This way the formatting is better respected for
2631 with a new line. This way the formatting is better respected for
2622 objects which work hard to make nice string forms.
2632 objects which work hard to make nice string forms.
2623
2633
2624 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2634 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2625 autocall would overtake data access for objects with both
2635 autocall would overtake data access for objects with both
2626 __getitem__ and __call__.
2636 __getitem__ and __call__.
2627
2637
2628 2003-08-19 *** Released version 0.5.0-rc1
2638 2003-08-19 *** Released version 0.5.0-rc1
2629
2639
2630 2003-08-19 Fernando Perez <fperez@colorado.edu>
2640 2003-08-19 Fernando Perez <fperez@colorado.edu>
2631
2641
2632 * IPython/deep_reload.py (load_tail): single tiny change here
2642 * IPython/deep_reload.py (load_tail): single tiny change here
2633 seems to fix the long-standing bug of dreload() failing to work
2643 seems to fix the long-standing bug of dreload() failing to work
2634 for dotted names. But this module is pretty tricky, so I may have
2644 for dotted names. But this module is pretty tricky, so I may have
2635 missed some subtlety. Needs more testing!.
2645 missed some subtlety. Needs more testing!.
2636
2646
2637 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2647 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2638 exceptions which have badly implemented __str__ methods.
2648 exceptions which have badly implemented __str__ methods.
2639 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2649 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2640 which I've been getting reports about from Python 2.3 users. I
2650 which I've been getting reports about from Python 2.3 users. I
2641 wish I had a simple test case to reproduce the problem, so I could
2651 wish I had a simple test case to reproduce the problem, so I could
2642 either write a cleaner workaround or file a bug report if
2652 either write a cleaner workaround or file a bug report if
2643 necessary.
2653 necessary.
2644
2654
2645 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2655 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2646 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2656 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2647 a bug report by Tjabo Kloppenburg.
2657 a bug report by Tjabo Kloppenburg.
2648
2658
2649 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2659 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2650 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2660 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2651 seems rather unstable. Thanks to a bug report by Tjabo
2661 seems rather unstable. Thanks to a bug report by Tjabo
2652 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2662 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2653
2663
2654 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2664 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2655 this out soon because of the critical fixes in the inner loop for
2665 this out soon because of the critical fixes in the inner loop for
2656 generators.
2666 generators.
2657
2667
2658 * IPython/Magic.py (Magic.getargspec): removed. This (and
2668 * IPython/Magic.py (Magic.getargspec): removed. This (and
2659 _get_def) have been obsoleted by OInspect for a long time, I
2669 _get_def) have been obsoleted by OInspect for a long time, I
2660 hadn't noticed that they were dead code.
2670 hadn't noticed that they were dead code.
2661 (Magic._ofind): restored _ofind functionality for a few literals
2671 (Magic._ofind): restored _ofind functionality for a few literals
2662 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2672 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2663 for things like "hello".capitalize?, since that would require a
2673 for things like "hello".capitalize?, since that would require a
2664 potentially dangerous eval() again.
2674 potentially dangerous eval() again.
2665
2675
2666 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2676 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2667 logic a bit more to clean up the escapes handling and minimize the
2677 logic a bit more to clean up the escapes handling and minimize the
2668 use of _ofind to only necessary cases. The interactive 'feel' of
2678 use of _ofind to only necessary cases. The interactive 'feel' of
2669 IPython should have improved quite a bit with the changes in
2679 IPython should have improved quite a bit with the changes in
2670 _prefilter and _ofind (besides being far safer than before).
2680 _prefilter and _ofind (besides being far safer than before).
2671
2681
2672 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2682 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2673 obscure, never reported). Edit would fail to find the object to
2683 obscure, never reported). Edit would fail to find the object to
2674 edit under some circumstances.
2684 edit under some circumstances.
2675 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2685 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2676 which were causing double-calling of generators. Those eval calls
2686 which were causing double-calling of generators. Those eval calls
2677 were _very_ dangerous, since code with side effects could be
2687 were _very_ dangerous, since code with side effects could be
2678 triggered. As they say, 'eval is evil'... These were the
2688 triggered. As they say, 'eval is evil'... These were the
2679 nastiest evals in IPython. Besides, _ofind is now far simpler,
2689 nastiest evals in IPython. Besides, _ofind is now far simpler,
2680 and it should also be quite a bit faster. Its use of inspect is
2690 and it should also be quite a bit faster. Its use of inspect is
2681 also safer, so perhaps some of the inspect-related crashes I've
2691 also safer, so perhaps some of the inspect-related crashes I've
2682 seen lately with Python 2.3 might be taken care of. That will
2692 seen lately with Python 2.3 might be taken care of. That will
2683 need more testing.
2693 need more testing.
2684
2694
2685 2003-08-17 Fernando Perez <fperez@colorado.edu>
2695 2003-08-17 Fernando Perez <fperez@colorado.edu>
2686
2696
2687 * IPython/iplib.py (InteractiveShell._prefilter): significant
2697 * IPython/iplib.py (InteractiveShell._prefilter): significant
2688 simplifications to the logic for handling user escapes. Faster
2698 simplifications to the logic for handling user escapes. Faster
2689 and simpler code.
2699 and simpler code.
2690
2700
2691 2003-08-14 Fernando Perez <fperez@colorado.edu>
2701 2003-08-14 Fernando Perez <fperez@colorado.edu>
2692
2702
2693 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2703 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2694 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2704 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2695 but it should be quite a bit faster. And the recursive version
2705 but it should be quite a bit faster. And the recursive version
2696 generated O(log N) intermediate storage for all rank>1 arrays,
2706 generated O(log N) intermediate storage for all rank>1 arrays,
2697 even if they were contiguous.
2707 even if they were contiguous.
2698 (l1norm): Added this function.
2708 (l1norm): Added this function.
2699 (norm): Added this function for arbitrary norms (including
2709 (norm): Added this function for arbitrary norms (including
2700 l-infinity). l1 and l2 are still special cases for convenience
2710 l-infinity). l1 and l2 are still special cases for convenience
2701 and speed.
2711 and speed.
2702
2712
2703 2003-08-03 Fernando Perez <fperez@colorado.edu>
2713 2003-08-03 Fernando Perez <fperez@colorado.edu>
2704
2714
2705 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2715 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2706 exceptions, which now raise PendingDeprecationWarnings in Python
2716 exceptions, which now raise PendingDeprecationWarnings in Python
2707 2.3. There were some in Magic and some in Gnuplot2.
2717 2.3. There were some in Magic and some in Gnuplot2.
2708
2718
2709 2003-06-30 Fernando Perez <fperez@colorado.edu>
2719 2003-06-30 Fernando Perez <fperez@colorado.edu>
2710
2720
2711 * IPython/genutils.py (page): modified to call curses only for
2721 * IPython/genutils.py (page): modified to call curses only for
2712 terminals where TERM=='xterm'. After problems under many other
2722 terminals where TERM=='xterm'. After problems under many other
2713 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2723 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2714
2724
2715 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2725 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2716 would be triggered when readline was absent. This was just an old
2726 would be triggered when readline was absent. This was just an old
2717 debugging statement I'd forgotten to take out.
2727 debugging statement I'd forgotten to take out.
2718
2728
2719 2003-06-20 Fernando Perez <fperez@colorado.edu>
2729 2003-06-20 Fernando Perez <fperez@colorado.edu>
2720
2730
2721 * IPython/genutils.py (clock): modified to return only user time
2731 * IPython/genutils.py (clock): modified to return only user time
2722 (not counting system time), after a discussion on scipy. While
2732 (not counting system time), after a discussion on scipy. While
2723 system time may be a useful quantity occasionally, it may much
2733 system time may be a useful quantity occasionally, it may much
2724 more easily be skewed by occasional swapping or other similar
2734 more easily be skewed by occasional swapping or other similar
2725 activity.
2735 activity.
2726
2736
2727 2003-06-05 Fernando Perez <fperez@colorado.edu>
2737 2003-06-05 Fernando Perez <fperez@colorado.edu>
2728
2738
2729 * IPython/numutils.py (identity): new function, for building
2739 * IPython/numutils.py (identity): new function, for building
2730 arbitrary rank Kronecker deltas (mostly backwards compatible with
2740 arbitrary rank Kronecker deltas (mostly backwards compatible with
2731 Numeric.identity)
2741 Numeric.identity)
2732
2742
2733 2003-06-03 Fernando Perez <fperez@colorado.edu>
2743 2003-06-03 Fernando Perez <fperez@colorado.edu>
2734
2744
2735 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2745 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2736 arguments passed to magics with spaces, to allow trailing '\' to
2746 arguments passed to magics with spaces, to allow trailing '\' to
2737 work normally (mainly for Windows users).
2747 work normally (mainly for Windows users).
2738
2748
2739 2003-05-29 Fernando Perez <fperez@colorado.edu>
2749 2003-05-29 Fernando Perez <fperez@colorado.edu>
2740
2750
2741 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2751 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2742 instead of pydoc.help. This fixes a bizarre behavior where
2752 instead of pydoc.help. This fixes a bizarre behavior where
2743 printing '%s' % locals() would trigger the help system. Now
2753 printing '%s' % locals() would trigger the help system. Now
2744 ipython behaves like normal python does.
2754 ipython behaves like normal python does.
2745
2755
2746 Note that if one does 'from pydoc import help', the bizarre
2756 Note that if one does 'from pydoc import help', the bizarre
2747 behavior returns, but this will also happen in normal python, so
2757 behavior returns, but this will also happen in normal python, so
2748 it's not an ipython bug anymore (it has to do with how pydoc.help
2758 it's not an ipython bug anymore (it has to do with how pydoc.help
2749 is implemented).
2759 is implemented).
2750
2760
2751 2003-05-22 Fernando Perez <fperez@colorado.edu>
2761 2003-05-22 Fernando Perez <fperez@colorado.edu>
2752
2762
2753 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2763 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2754 return [] instead of None when nothing matches, also match to end
2764 return [] instead of None when nothing matches, also match to end
2755 of line. Patch by Gary Bishop.
2765 of line. Patch by Gary Bishop.
2756
2766
2757 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2767 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2758 protection as before, for files passed on the command line. This
2768 protection as before, for files passed on the command line. This
2759 prevents the CrashHandler from kicking in if user files call into
2769 prevents the CrashHandler from kicking in if user files call into
2760 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2770 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2761 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2771 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2762
2772
2763 2003-05-20 *** Released version 0.4.0
2773 2003-05-20 *** Released version 0.4.0
2764
2774
2765 2003-05-20 Fernando Perez <fperez@colorado.edu>
2775 2003-05-20 Fernando Perez <fperez@colorado.edu>
2766
2776
2767 * setup.py: added support for manpages. It's a bit hackish b/c of
2777 * setup.py: added support for manpages. It's a bit hackish b/c of
2768 a bug in the way the bdist_rpm distutils target handles gzipped
2778 a bug in the way the bdist_rpm distutils target handles gzipped
2769 manpages, but it works. After a patch by Jack.
2779 manpages, but it works. After a patch by Jack.
2770
2780
2771 2003-05-19 Fernando Perez <fperez@colorado.edu>
2781 2003-05-19 Fernando Perez <fperez@colorado.edu>
2772
2782
2773 * IPython/numutils.py: added a mockup of the kinds module, since
2783 * IPython/numutils.py: added a mockup of the kinds module, since
2774 it was recently removed from Numeric. This way, numutils will
2784 it was recently removed from Numeric. This way, numutils will
2775 work for all users even if they are missing kinds.
2785 work for all users even if they are missing kinds.
2776
2786
2777 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2787 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2778 failure, which can occur with SWIG-wrapped extensions. After a
2788 failure, which can occur with SWIG-wrapped extensions. After a
2779 crash report from Prabhu.
2789 crash report from Prabhu.
2780
2790
2781 2003-05-16 Fernando Perez <fperez@colorado.edu>
2791 2003-05-16 Fernando Perez <fperez@colorado.edu>
2782
2792
2783 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2793 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2784 protect ipython from user code which may call directly
2794 protect ipython from user code which may call directly
2785 sys.excepthook (this looks like an ipython crash to the user, even
2795 sys.excepthook (this looks like an ipython crash to the user, even
2786 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2796 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2787 This is especially important to help users of WxWindows, but may
2797 This is especially important to help users of WxWindows, but may
2788 also be useful in other cases.
2798 also be useful in other cases.
2789
2799
2790 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2800 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2791 an optional tb_offset to be specified, and to preserve exception
2801 an optional tb_offset to be specified, and to preserve exception
2792 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2802 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2793
2803
2794 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2804 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2795
2805
2796 2003-05-15 Fernando Perez <fperez@colorado.edu>
2806 2003-05-15 Fernando Perez <fperez@colorado.edu>
2797
2807
2798 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2808 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2799 installing for a new user under Windows.
2809 installing for a new user under Windows.
2800
2810
2801 2003-05-12 Fernando Perez <fperez@colorado.edu>
2811 2003-05-12 Fernando Perez <fperez@colorado.edu>
2802
2812
2803 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2813 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2804 handler for Emacs comint-based lines. Currently it doesn't do
2814 handler for Emacs comint-based lines. Currently it doesn't do
2805 much (but importantly, it doesn't update the history cache). In
2815 much (but importantly, it doesn't update the history cache). In
2806 the future it may be expanded if Alex needs more functionality
2816 the future it may be expanded if Alex needs more functionality
2807 there.
2817 there.
2808
2818
2809 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2819 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2810 info to crash reports.
2820 info to crash reports.
2811
2821
2812 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2822 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2813 just like Python's -c. Also fixed crash with invalid -color
2823 just like Python's -c. Also fixed crash with invalid -color
2814 option value at startup. Thanks to Will French
2824 option value at startup. Thanks to Will French
2815 <wfrench-AT-bestweb.net> for the bug report.
2825 <wfrench-AT-bestweb.net> for the bug report.
2816
2826
2817 2003-05-09 Fernando Perez <fperez@colorado.edu>
2827 2003-05-09 Fernando Perez <fperez@colorado.edu>
2818
2828
2819 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2829 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2820 to EvalDict (it's a mapping, after all) and simplified its code
2830 to EvalDict (it's a mapping, after all) and simplified its code
2821 quite a bit, after a nice discussion on c.l.py where Gustavo
2831 quite a bit, after a nice discussion on c.l.py where Gustavo
2822 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2832 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2823
2833
2824 2003-04-30 Fernando Perez <fperez@colorado.edu>
2834 2003-04-30 Fernando Perez <fperez@colorado.edu>
2825
2835
2826 * IPython/genutils.py (timings_out): modified it to reduce its
2836 * IPython/genutils.py (timings_out): modified it to reduce its
2827 overhead in the common reps==1 case.
2837 overhead in the common reps==1 case.
2828
2838
2829 2003-04-29 Fernando Perez <fperez@colorado.edu>
2839 2003-04-29 Fernando Perez <fperez@colorado.edu>
2830
2840
2831 * IPython/genutils.py (timings_out): Modified to use the resource
2841 * IPython/genutils.py (timings_out): Modified to use the resource
2832 module, which avoids the wraparound problems of time.clock().
2842 module, which avoids the wraparound problems of time.clock().
2833
2843
2834 2003-04-17 *** Released version 0.2.15pre4
2844 2003-04-17 *** Released version 0.2.15pre4
2835
2845
2836 2003-04-17 Fernando Perez <fperez@colorado.edu>
2846 2003-04-17 Fernando Perez <fperez@colorado.edu>
2837
2847
2838 * setup.py (scriptfiles): Split windows-specific stuff over to a
2848 * setup.py (scriptfiles): Split windows-specific stuff over to a
2839 separate file, in an attempt to have a Windows GUI installer.
2849 separate file, in an attempt to have a Windows GUI installer.
2840 That didn't work, but part of the groundwork is done.
2850 That didn't work, but part of the groundwork is done.
2841
2851
2842 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2852 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2843 indent/unindent with 4 spaces. Particularly useful in combination
2853 indent/unindent with 4 spaces. Particularly useful in combination
2844 with the new auto-indent option.
2854 with the new auto-indent option.
2845
2855
2846 2003-04-16 Fernando Perez <fperez@colorado.edu>
2856 2003-04-16 Fernando Perez <fperez@colorado.edu>
2847
2857
2848 * IPython/Magic.py: various replacements of self.rc for
2858 * IPython/Magic.py: various replacements of self.rc for
2849 self.shell.rc. A lot more remains to be done to fully disentangle
2859 self.shell.rc. A lot more remains to be done to fully disentangle
2850 this class from the main Shell class.
2860 this class from the main Shell class.
2851
2861
2852 * IPython/GnuplotRuntime.py: added checks for mouse support so
2862 * IPython/GnuplotRuntime.py: added checks for mouse support so
2853 that we don't try to enable it if the current gnuplot doesn't
2863 that we don't try to enable it if the current gnuplot doesn't
2854 really support it. Also added checks so that we don't try to
2864 really support it. Also added checks so that we don't try to
2855 enable persist under Windows (where Gnuplot doesn't recognize the
2865 enable persist under Windows (where Gnuplot doesn't recognize the
2856 option).
2866 option).
2857
2867
2858 * IPython/iplib.py (InteractiveShell.interact): Added optional
2868 * IPython/iplib.py (InteractiveShell.interact): Added optional
2859 auto-indenting code, after a patch by King C. Shu
2869 auto-indenting code, after a patch by King C. Shu
2860 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2870 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2861 get along well with pasting indented code. If I ever figure out
2871 get along well with pasting indented code. If I ever figure out
2862 how to make that part go well, it will become on by default.
2872 how to make that part go well, it will become on by default.
2863
2873
2864 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2874 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2865 crash ipython if there was an unmatched '%' in the user's prompt
2875 crash ipython if there was an unmatched '%' in the user's prompt
2866 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2876 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2867
2877
2868 * IPython/iplib.py (InteractiveShell.interact): removed the
2878 * IPython/iplib.py (InteractiveShell.interact): removed the
2869 ability to ask the user whether he wants to crash or not at the
2879 ability to ask the user whether he wants to crash or not at the
2870 'last line' exception handler. Calling functions at that point
2880 'last line' exception handler. Calling functions at that point
2871 changes the stack, and the error reports would have incorrect
2881 changes the stack, and the error reports would have incorrect
2872 tracebacks.
2882 tracebacks.
2873
2883
2874 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2884 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2875 pass through a peger a pretty-printed form of any object. After a
2885 pass through a peger a pretty-printed form of any object. After a
2876 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2886 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2877
2887
2878 2003-04-14 Fernando Perez <fperez@colorado.edu>
2888 2003-04-14 Fernando Perez <fperez@colorado.edu>
2879
2889
2880 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2890 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2881 all files in ~ would be modified at first install (instead of
2891 all files in ~ would be modified at first install (instead of
2882 ~/.ipython). This could be potentially disastrous, as the
2892 ~/.ipython). This could be potentially disastrous, as the
2883 modification (make line-endings native) could damage binary files.
2893 modification (make line-endings native) could damage binary files.
2884
2894
2885 2003-04-10 Fernando Perez <fperez@colorado.edu>
2895 2003-04-10 Fernando Perez <fperez@colorado.edu>
2886
2896
2887 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2897 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2888 handle only lines which are invalid python. This now means that
2898 handle only lines which are invalid python. This now means that
2889 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2899 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2890 for the bug report.
2900 for the bug report.
2891
2901
2892 2003-04-01 Fernando Perez <fperez@colorado.edu>
2902 2003-04-01 Fernando Perez <fperez@colorado.edu>
2893
2903
2894 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2904 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2895 where failing to set sys.last_traceback would crash pdb.pm().
2905 where failing to set sys.last_traceback would crash pdb.pm().
2896 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2906 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2897 report.
2907 report.
2898
2908
2899 2003-03-25 Fernando Perez <fperez@colorado.edu>
2909 2003-03-25 Fernando Perez <fperez@colorado.edu>
2900
2910
2901 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2911 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2902 before printing it (it had a lot of spurious blank lines at the
2912 before printing it (it had a lot of spurious blank lines at the
2903 end).
2913 end).
2904
2914
2905 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2915 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2906 output would be sent 21 times! Obviously people don't use this
2916 output would be sent 21 times! Obviously people don't use this
2907 too often, or I would have heard about it.
2917 too often, or I would have heard about it.
2908
2918
2909 2003-03-24 Fernando Perez <fperez@colorado.edu>
2919 2003-03-24 Fernando Perez <fperez@colorado.edu>
2910
2920
2911 * setup.py (scriptfiles): renamed the data_files parameter from
2921 * setup.py (scriptfiles): renamed the data_files parameter from
2912 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2922 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2913 for the patch.
2923 for the patch.
2914
2924
2915 2003-03-20 Fernando Perez <fperez@colorado.edu>
2925 2003-03-20 Fernando Perez <fperez@colorado.edu>
2916
2926
2917 * IPython/genutils.py (error): added error() and fatal()
2927 * IPython/genutils.py (error): added error() and fatal()
2918 functions.
2928 functions.
2919
2929
2920 2003-03-18 *** Released version 0.2.15pre3
2930 2003-03-18 *** Released version 0.2.15pre3
2921
2931
2922 2003-03-18 Fernando Perez <fperez@colorado.edu>
2932 2003-03-18 Fernando Perez <fperez@colorado.edu>
2923
2933
2924 * setupext/install_data_ext.py
2934 * setupext/install_data_ext.py
2925 (install_data_ext.initialize_options): Class contributed by Jack
2935 (install_data_ext.initialize_options): Class contributed by Jack
2926 Moffit for fixing the old distutils hack. He is sending this to
2936 Moffit for fixing the old distutils hack. He is sending this to
2927 the distutils folks so in the future we may not need it as a
2937 the distutils folks so in the future we may not need it as a
2928 private fix.
2938 private fix.
2929
2939
2930 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2940 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2931 changes for Debian packaging. See his patch for full details.
2941 changes for Debian packaging. See his patch for full details.
2932 The old distutils hack of making the ipythonrc* files carry a
2942 The old distutils hack of making the ipythonrc* files carry a
2933 bogus .py extension is gone, at last. Examples were moved to a
2943 bogus .py extension is gone, at last. Examples were moved to a
2934 separate subdir under doc/, and the separate executable scripts
2944 separate subdir under doc/, and the separate executable scripts
2935 now live in their own directory. Overall a great cleanup. The
2945 now live in their own directory. Overall a great cleanup. The
2936 manual was updated to use the new files, and setup.py has been
2946 manual was updated to use the new files, and setup.py has been
2937 fixed for this setup.
2947 fixed for this setup.
2938
2948
2939 * IPython/PyColorize.py (Parser.usage): made non-executable and
2949 * IPython/PyColorize.py (Parser.usage): made non-executable and
2940 created a pycolor wrapper around it to be included as a script.
2950 created a pycolor wrapper around it to be included as a script.
2941
2951
2942 2003-03-12 *** Released version 0.2.15pre2
2952 2003-03-12 *** Released version 0.2.15pre2
2943
2953
2944 2003-03-12 Fernando Perez <fperez@colorado.edu>
2954 2003-03-12 Fernando Perez <fperez@colorado.edu>
2945
2955
2946 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2956 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2947 long-standing problem with garbage characters in some terminals.
2957 long-standing problem with garbage characters in some terminals.
2948 The issue was really that the \001 and \002 escapes must _only_ be
2958 The issue was really that the \001 and \002 escapes must _only_ be
2949 passed to input prompts (which call readline), but _never_ to
2959 passed to input prompts (which call readline), but _never_ to
2950 normal text to be printed on screen. I changed ColorANSI to have
2960 normal text to be printed on screen. I changed ColorANSI to have
2951 two classes: TermColors and InputTermColors, each with the
2961 two classes: TermColors and InputTermColors, each with the
2952 appropriate escapes for input prompts or normal text. The code in
2962 appropriate escapes for input prompts or normal text. The code in
2953 Prompts.py got slightly more complicated, but this very old and
2963 Prompts.py got slightly more complicated, but this very old and
2954 annoying bug is finally fixed.
2964 annoying bug is finally fixed.
2955
2965
2956 All the credit for nailing down the real origin of this problem
2966 All the credit for nailing down the real origin of this problem
2957 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2967 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2958 *Many* thanks to him for spending quite a bit of effort on this.
2968 *Many* thanks to him for spending quite a bit of effort on this.
2959
2969
2960 2003-03-05 *** Released version 0.2.15pre1
2970 2003-03-05 *** Released version 0.2.15pre1
2961
2971
2962 2003-03-03 Fernando Perez <fperez@colorado.edu>
2972 2003-03-03 Fernando Perez <fperez@colorado.edu>
2963
2973
2964 * IPython/FakeModule.py: Moved the former _FakeModule to a
2974 * IPython/FakeModule.py: Moved the former _FakeModule to a
2965 separate file, because it's also needed by Magic (to fix a similar
2975 separate file, because it's also needed by Magic (to fix a similar
2966 pickle-related issue in @run).
2976 pickle-related issue in @run).
2967
2977
2968 2003-03-02 Fernando Perez <fperez@colorado.edu>
2978 2003-03-02 Fernando Perez <fperez@colorado.edu>
2969
2979
2970 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2980 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2971 the autocall option at runtime.
2981 the autocall option at runtime.
2972 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2982 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2973 across Magic.py to start separating Magic from InteractiveShell.
2983 across Magic.py to start separating Magic from InteractiveShell.
2974 (Magic._ofind): Fixed to return proper namespace for dotted
2984 (Magic._ofind): Fixed to return proper namespace for dotted
2975 names. Before, a dotted name would always return 'not currently
2985 names. Before, a dotted name would always return 'not currently
2976 defined', because it would find the 'parent'. s.x would be found,
2986 defined', because it would find the 'parent'. s.x would be found,
2977 but since 'x' isn't defined by itself, it would get confused.
2987 but since 'x' isn't defined by itself, it would get confused.
2978 (Magic.magic_run): Fixed pickling problems reported by Ralf
2988 (Magic.magic_run): Fixed pickling problems reported by Ralf
2979 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2989 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2980 that I'd used when Mike Heeter reported similar issues at the
2990 that I'd used when Mike Heeter reported similar issues at the
2981 top-level, but now for @run. It boils down to injecting the
2991 top-level, but now for @run. It boils down to injecting the
2982 namespace where code is being executed with something that looks
2992 namespace where code is being executed with something that looks
2983 enough like a module to fool pickle.dump(). Since a pickle stores
2993 enough like a module to fool pickle.dump(). Since a pickle stores
2984 a named reference to the importing module, we need this for
2994 a named reference to the importing module, we need this for
2985 pickles to save something sensible.
2995 pickles to save something sensible.
2986
2996
2987 * IPython/ipmaker.py (make_IPython): added an autocall option.
2997 * IPython/ipmaker.py (make_IPython): added an autocall option.
2988
2998
2989 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2999 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2990 the auto-eval code. Now autocalling is an option, and the code is
3000 the auto-eval code. Now autocalling is an option, and the code is
2991 also vastly safer. There is no more eval() involved at all.
3001 also vastly safer. There is no more eval() involved at all.
2992
3002
2993 2003-03-01 Fernando Perez <fperez@colorado.edu>
3003 2003-03-01 Fernando Perez <fperez@colorado.edu>
2994
3004
2995 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3005 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2996 dict with named keys instead of a tuple.
3006 dict with named keys instead of a tuple.
2997
3007
2998 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3008 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2999
3009
3000 * setup.py (make_shortcut): Fixed message about directories
3010 * setup.py (make_shortcut): Fixed message about directories
3001 created during Windows installation (the directories were ok, just
3011 created during Windows installation (the directories were ok, just
3002 the printed message was misleading). Thanks to Chris Liechti
3012 the printed message was misleading). Thanks to Chris Liechti
3003 <cliechti-AT-gmx.net> for the heads up.
3013 <cliechti-AT-gmx.net> for the heads up.
3004
3014
3005 2003-02-21 Fernando Perez <fperez@colorado.edu>
3015 2003-02-21 Fernando Perez <fperez@colorado.edu>
3006
3016
3007 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3017 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3008 of ValueError exception when checking for auto-execution. This
3018 of ValueError exception when checking for auto-execution. This
3009 one is raised by things like Numeric arrays arr.flat when the
3019 one is raised by things like Numeric arrays arr.flat when the
3010 array is non-contiguous.
3020 array is non-contiguous.
3011
3021
3012 2003-01-31 Fernando Perez <fperez@colorado.edu>
3022 2003-01-31 Fernando Perez <fperez@colorado.edu>
3013
3023
3014 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3024 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3015 not return any value at all (even though the command would get
3025 not return any value at all (even though the command would get
3016 executed).
3026 executed).
3017 (xsys): Flush stdout right after printing the command to ensure
3027 (xsys): Flush stdout right after printing the command to ensure
3018 proper ordering of commands and command output in the total
3028 proper ordering of commands and command output in the total
3019 output.
3029 output.
3020 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3030 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3021 system/getoutput as defaults. The old ones are kept for
3031 system/getoutput as defaults. The old ones are kept for
3022 compatibility reasons, so no code which uses this library needs
3032 compatibility reasons, so no code which uses this library needs
3023 changing.
3033 changing.
3024
3034
3025 2003-01-27 *** Released version 0.2.14
3035 2003-01-27 *** Released version 0.2.14
3026
3036
3027 2003-01-25 Fernando Perez <fperez@colorado.edu>
3037 2003-01-25 Fernando Perez <fperez@colorado.edu>
3028
3038
3029 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3039 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3030 functions defined in previous edit sessions could not be re-edited
3040 functions defined in previous edit sessions could not be re-edited
3031 (because the temp files were immediately removed). Now temp files
3041 (because the temp files were immediately removed). Now temp files
3032 are removed only at IPython's exit.
3042 are removed only at IPython's exit.
3033 (Magic.magic_run): Improved @run to perform shell-like expansions
3043 (Magic.magic_run): Improved @run to perform shell-like expansions
3034 on its arguments (~users and $VARS). With this, @run becomes more
3044 on its arguments (~users and $VARS). With this, @run becomes more
3035 like a normal command-line.
3045 like a normal command-line.
3036
3046
3037 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3047 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3038 bugs related to embedding and cleaned up that code. A fairly
3048 bugs related to embedding and cleaned up that code. A fairly
3039 important one was the impossibility to access the global namespace
3049 important one was the impossibility to access the global namespace
3040 through the embedded IPython (only local variables were visible).
3050 through the embedded IPython (only local variables were visible).
3041
3051
3042 2003-01-14 Fernando Perez <fperez@colorado.edu>
3052 2003-01-14 Fernando Perez <fperez@colorado.edu>
3043
3053
3044 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3054 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3045 auto-calling to be a bit more conservative. Now it doesn't get
3055 auto-calling to be a bit more conservative. Now it doesn't get
3046 triggered if any of '!=()<>' are in the rest of the input line, to
3056 triggered if any of '!=()<>' are in the rest of the input line, to
3047 allow comparing callables. Thanks to Alex for the heads up.
3057 allow comparing callables. Thanks to Alex for the heads up.
3048
3058
3049 2003-01-07 Fernando Perez <fperez@colorado.edu>
3059 2003-01-07 Fernando Perez <fperez@colorado.edu>
3050
3060
3051 * IPython/genutils.py (page): fixed estimation of the number of
3061 * IPython/genutils.py (page): fixed estimation of the number of
3052 lines in a string to be paged to simply count newlines. This
3062 lines in a string to be paged to simply count newlines. This
3053 prevents over-guessing due to embedded escape sequences. A better
3063 prevents over-guessing due to embedded escape sequences. A better
3054 long-term solution would involve stripping out the control chars
3064 long-term solution would involve stripping out the control chars
3055 for the count, but it's potentially so expensive I just don't
3065 for the count, but it's potentially so expensive I just don't
3056 think it's worth doing.
3066 think it's worth doing.
3057
3067
3058 2002-12-19 *** Released version 0.2.14pre50
3068 2002-12-19 *** Released version 0.2.14pre50
3059
3069
3060 2002-12-19 Fernando Perez <fperez@colorado.edu>
3070 2002-12-19 Fernando Perez <fperez@colorado.edu>
3061
3071
3062 * tools/release (version): Changed release scripts to inform
3072 * tools/release (version): Changed release scripts to inform
3063 Andrea and build a NEWS file with a list of recent changes.
3073 Andrea and build a NEWS file with a list of recent changes.
3064
3074
3065 * IPython/ColorANSI.py (__all__): changed terminal detection
3075 * IPython/ColorANSI.py (__all__): changed terminal detection
3066 code. Seems to work better for xterms without breaking
3076 code. Seems to work better for xterms without breaking
3067 konsole. Will need more testing to determine if WinXP and Mac OSX
3077 konsole. Will need more testing to determine if WinXP and Mac OSX
3068 also work ok.
3078 also work ok.
3069
3079
3070 2002-12-18 *** Released version 0.2.14pre49
3080 2002-12-18 *** Released version 0.2.14pre49
3071
3081
3072 2002-12-18 Fernando Perez <fperez@colorado.edu>
3082 2002-12-18 Fernando Perez <fperez@colorado.edu>
3073
3083
3074 * Docs: added new info about Mac OSX, from Andrea.
3084 * Docs: added new info about Mac OSX, from Andrea.
3075
3085
3076 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3086 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3077 allow direct plotting of python strings whose format is the same
3087 allow direct plotting of python strings whose format is the same
3078 of gnuplot data files.
3088 of gnuplot data files.
3079
3089
3080 2002-12-16 Fernando Perez <fperez@colorado.edu>
3090 2002-12-16 Fernando Perez <fperez@colorado.edu>
3081
3091
3082 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3092 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3083 value of exit question to be acknowledged.
3093 value of exit question to be acknowledged.
3084
3094
3085 2002-12-03 Fernando Perez <fperez@colorado.edu>
3095 2002-12-03 Fernando Perez <fperez@colorado.edu>
3086
3096
3087 * IPython/ipmaker.py: removed generators, which had been added
3097 * IPython/ipmaker.py: removed generators, which had been added
3088 by mistake in an earlier debugging run. This was causing trouble
3098 by mistake in an earlier debugging run. This was causing trouble
3089 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3099 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3090 for pointing this out.
3100 for pointing this out.
3091
3101
3092 2002-11-17 Fernando Perez <fperez@colorado.edu>
3102 2002-11-17 Fernando Perez <fperez@colorado.edu>
3093
3103
3094 * Manual: updated the Gnuplot section.
3104 * Manual: updated the Gnuplot section.
3095
3105
3096 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3106 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3097 a much better split of what goes in Runtime and what goes in
3107 a much better split of what goes in Runtime and what goes in
3098 Interactive.
3108 Interactive.
3099
3109
3100 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3110 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3101 being imported from iplib.
3111 being imported from iplib.
3102
3112
3103 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3113 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3104 for command-passing. Now the global Gnuplot instance is called
3114 for command-passing. Now the global Gnuplot instance is called
3105 'gp' instead of 'g', which was really a far too fragile and
3115 'gp' instead of 'g', which was really a far too fragile and
3106 common name.
3116 common name.
3107
3117
3108 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3118 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3109 bounding boxes generated by Gnuplot for square plots.
3119 bounding boxes generated by Gnuplot for square plots.
3110
3120
3111 * IPython/genutils.py (popkey): new function added. I should
3121 * IPython/genutils.py (popkey): new function added. I should
3112 suggest this on c.l.py as a dict method, it seems useful.
3122 suggest this on c.l.py as a dict method, it seems useful.
3113
3123
3114 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3124 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3115 to transparently handle PostScript generation. MUCH better than
3125 to transparently handle PostScript generation. MUCH better than
3116 the previous plot_eps/replot_eps (which I removed now). The code
3126 the previous plot_eps/replot_eps (which I removed now). The code
3117 is also fairly clean and well documented now (including
3127 is also fairly clean and well documented now (including
3118 docstrings).
3128 docstrings).
3119
3129
3120 2002-11-13 Fernando Perez <fperez@colorado.edu>
3130 2002-11-13 Fernando Perez <fperez@colorado.edu>
3121
3131
3122 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3132 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3123 (inconsistent with options).
3133 (inconsistent with options).
3124
3134
3125 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3135 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3126 manually disabled, I don't know why. Fixed it.
3136 manually disabled, I don't know why. Fixed it.
3127 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3137 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3128 eps output.
3138 eps output.
3129
3139
3130 2002-11-12 Fernando Perez <fperez@colorado.edu>
3140 2002-11-12 Fernando Perez <fperez@colorado.edu>
3131
3141
3132 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3142 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3133 don't propagate up to caller. Fixes crash reported by François
3143 don't propagate up to caller. Fixes crash reported by François
3134 Pinard.
3144 Pinard.
3135
3145
3136 2002-11-09 Fernando Perez <fperez@colorado.edu>
3146 2002-11-09 Fernando Perez <fperez@colorado.edu>
3137
3147
3138 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3148 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3139 history file for new users.
3149 history file for new users.
3140 (make_IPython): fixed bug where initial install would leave the
3150 (make_IPython): fixed bug where initial install would leave the
3141 user running in the .ipython dir.
3151 user running in the .ipython dir.
3142 (make_IPython): fixed bug where config dir .ipython would be
3152 (make_IPython): fixed bug where config dir .ipython would be
3143 created regardless of the given -ipythondir option. Thanks to Cory
3153 created regardless of the given -ipythondir option. Thanks to Cory
3144 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3154 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3145
3155
3146 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3156 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3147 type confirmations. Will need to use it in all of IPython's code
3157 type confirmations. Will need to use it in all of IPython's code
3148 consistently.
3158 consistently.
3149
3159
3150 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3160 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3151 context to print 31 lines instead of the default 5. This will make
3161 context to print 31 lines instead of the default 5. This will make
3152 the crash reports extremely detailed in case the problem is in
3162 the crash reports extremely detailed in case the problem is in
3153 libraries I don't have access to.
3163 libraries I don't have access to.
3154
3164
3155 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3165 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3156 line of defense' code to still crash, but giving users fair
3166 line of defense' code to still crash, but giving users fair
3157 warning. I don't want internal errors to go unreported: if there's
3167 warning. I don't want internal errors to go unreported: if there's
3158 an internal problem, IPython should crash and generate a full
3168 an internal problem, IPython should crash and generate a full
3159 report.
3169 report.
3160
3170
3161 2002-11-08 Fernando Perez <fperez@colorado.edu>
3171 2002-11-08 Fernando Perez <fperez@colorado.edu>
3162
3172
3163 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3173 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3164 otherwise uncaught exceptions which can appear if people set
3174 otherwise uncaught exceptions which can appear if people set
3165 sys.stdout to something badly broken. Thanks to a crash report
3175 sys.stdout to something badly broken. Thanks to a crash report
3166 from henni-AT-mail.brainbot.com.
3176 from henni-AT-mail.brainbot.com.
3167
3177
3168 2002-11-04 Fernando Perez <fperez@colorado.edu>
3178 2002-11-04 Fernando Perez <fperez@colorado.edu>
3169
3179
3170 * IPython/iplib.py (InteractiveShell.interact): added
3180 * IPython/iplib.py (InteractiveShell.interact): added
3171 __IPYTHON__active to the builtins. It's a flag which goes on when
3181 __IPYTHON__active to the builtins. It's a flag which goes on when
3172 the interaction starts and goes off again when it stops. This
3182 the interaction starts and goes off again when it stops. This
3173 allows embedding code to detect being inside IPython. Before this
3183 allows embedding code to detect being inside IPython. Before this
3174 was done via __IPYTHON__, but that only shows that an IPython
3184 was done via __IPYTHON__, but that only shows that an IPython
3175 instance has been created.
3185 instance has been created.
3176
3186
3177 * IPython/Magic.py (Magic.magic_env): I realized that in a
3187 * IPython/Magic.py (Magic.magic_env): I realized that in a
3178 UserDict, instance.data holds the data as a normal dict. So I
3188 UserDict, instance.data holds the data as a normal dict. So I
3179 modified @env to return os.environ.data instead of rebuilding a
3189 modified @env to return os.environ.data instead of rebuilding a
3180 dict by hand.
3190 dict by hand.
3181
3191
3182 2002-11-02 Fernando Perez <fperez@colorado.edu>
3192 2002-11-02 Fernando Perez <fperez@colorado.edu>
3183
3193
3184 * IPython/genutils.py (warn): changed so that level 1 prints no
3194 * IPython/genutils.py (warn): changed so that level 1 prints no
3185 header. Level 2 is now the default (with 'WARNING' header, as
3195 header. Level 2 is now the default (with 'WARNING' header, as
3186 before). I think I tracked all places where changes were needed in
3196 before). I think I tracked all places where changes were needed in
3187 IPython, but outside code using the old level numbering may have
3197 IPython, but outside code using the old level numbering may have
3188 broken.
3198 broken.
3189
3199
3190 * IPython/iplib.py (InteractiveShell.runcode): added this to
3200 * IPython/iplib.py (InteractiveShell.runcode): added this to
3191 handle the tracebacks in SystemExit traps correctly. The previous
3201 handle the tracebacks in SystemExit traps correctly. The previous
3192 code (through interact) was printing more of the stack than
3202 code (through interact) was printing more of the stack than
3193 necessary, showing IPython internal code to the user.
3203 necessary, showing IPython internal code to the user.
3194
3204
3195 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3205 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3196 default. Now that the default at the confirmation prompt is yes,
3206 default. Now that the default at the confirmation prompt is yes,
3197 it's not so intrusive. François' argument that ipython sessions
3207 it's not so intrusive. François' argument that ipython sessions
3198 tend to be complex enough not to lose them from an accidental C-d,
3208 tend to be complex enough not to lose them from an accidental C-d,
3199 is a valid one.
3209 is a valid one.
3200
3210
3201 * IPython/iplib.py (InteractiveShell.interact): added a
3211 * IPython/iplib.py (InteractiveShell.interact): added a
3202 showtraceback() call to the SystemExit trap, and modified the exit
3212 showtraceback() call to the SystemExit trap, and modified the exit
3203 confirmation to have yes as the default.
3213 confirmation to have yes as the default.
3204
3214
3205 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3215 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3206 this file. It's been gone from the code for a long time, this was
3216 this file. It's been gone from the code for a long time, this was
3207 simply leftover junk.
3217 simply leftover junk.
3208
3218
3209 2002-11-01 Fernando Perez <fperez@colorado.edu>
3219 2002-11-01 Fernando Perez <fperez@colorado.edu>
3210
3220
3211 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3221 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3212 added. If set, IPython now traps EOF and asks for
3222 added. If set, IPython now traps EOF and asks for
3213 confirmation. After a request by François Pinard.
3223 confirmation. After a request by François Pinard.
3214
3224
3215 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3225 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3216 of @abort, and with a new (better) mechanism for handling the
3226 of @abort, and with a new (better) mechanism for handling the
3217 exceptions.
3227 exceptions.
3218
3228
3219 2002-10-27 Fernando Perez <fperez@colorado.edu>
3229 2002-10-27 Fernando Perez <fperez@colorado.edu>
3220
3230
3221 * IPython/usage.py (__doc__): updated the --help information and
3231 * IPython/usage.py (__doc__): updated the --help information and
3222 the ipythonrc file to indicate that -log generates
3232 the ipythonrc file to indicate that -log generates
3223 ./ipython.log. Also fixed the corresponding info in @logstart.
3233 ./ipython.log. Also fixed the corresponding info in @logstart.
3224 This and several other fixes in the manuals thanks to reports by
3234 This and several other fixes in the manuals thanks to reports by
3225 François Pinard <pinard-AT-iro.umontreal.ca>.
3235 François Pinard <pinard-AT-iro.umontreal.ca>.
3226
3236
3227 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3237 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3228 refer to @logstart (instead of @log, which doesn't exist).
3238 refer to @logstart (instead of @log, which doesn't exist).
3229
3239
3230 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3240 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3231 AttributeError crash. Thanks to Christopher Armstrong
3241 AttributeError crash. Thanks to Christopher Armstrong
3232 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3242 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3233 introduced recently (in 0.2.14pre37) with the fix to the eval
3243 introduced recently (in 0.2.14pre37) with the fix to the eval
3234 problem mentioned below.
3244 problem mentioned below.
3235
3245
3236 2002-10-17 Fernando Perez <fperez@colorado.edu>
3246 2002-10-17 Fernando Perez <fperez@colorado.edu>
3237
3247
3238 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3248 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3239 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3249 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3240
3250
3241 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3251 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3242 this function to fix a problem reported by Alex Schmolck. He saw
3252 this function to fix a problem reported by Alex Schmolck. He saw
3243 it with list comprehensions and generators, which were getting
3253 it with list comprehensions and generators, which were getting
3244 called twice. The real problem was an 'eval' call in testing for
3254 called twice. The real problem was an 'eval' call in testing for
3245 automagic which was evaluating the input line silently.
3255 automagic which was evaluating the input line silently.
3246
3256
3247 This is a potentially very nasty bug, if the input has side
3257 This is a potentially very nasty bug, if the input has side
3248 effects which must not be repeated. The code is much cleaner now,
3258 effects which must not be repeated. The code is much cleaner now,
3249 without any blanket 'except' left and with a regexp test for
3259 without any blanket 'except' left and with a regexp test for
3250 actual function names.
3260 actual function names.
3251
3261
3252 But an eval remains, which I'm not fully comfortable with. I just
3262 But an eval remains, which I'm not fully comfortable with. I just
3253 don't know how to find out if an expression could be a callable in
3263 don't know how to find out if an expression could be a callable in
3254 the user's namespace without doing an eval on the string. However
3264 the user's namespace without doing an eval on the string. However
3255 that string is now much more strictly checked so that no code
3265 that string is now much more strictly checked so that no code
3256 slips by, so the eval should only happen for things that can
3266 slips by, so the eval should only happen for things that can
3257 really be only function/method names.
3267 really be only function/method names.
3258
3268
3259 2002-10-15 Fernando Perez <fperez@colorado.edu>
3269 2002-10-15 Fernando Perez <fperez@colorado.edu>
3260
3270
3261 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3271 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3262 OSX information to main manual, removed README_Mac_OSX file from
3272 OSX information to main manual, removed README_Mac_OSX file from
3263 distribution. Also updated credits for recent additions.
3273 distribution. Also updated credits for recent additions.
3264
3274
3265 2002-10-10 Fernando Perez <fperez@colorado.edu>
3275 2002-10-10 Fernando Perez <fperez@colorado.edu>
3266
3276
3267 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3277 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3268 terminal-related issues. Many thanks to Andrea Riciputi
3278 terminal-related issues. Many thanks to Andrea Riciputi
3269 <andrea.riciputi-AT-libero.it> for writing it.
3279 <andrea.riciputi-AT-libero.it> for writing it.
3270
3280
3271 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3281 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3272 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3282 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3273
3283
3274 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3284 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3275 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3285 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3276 <syver-en-AT-online.no> who both submitted patches for this problem.
3286 <syver-en-AT-online.no> who both submitted patches for this problem.
3277
3287
3278 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3288 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3279 global embedding to make sure that things don't overwrite user
3289 global embedding to make sure that things don't overwrite user
3280 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3290 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3281
3291
3282 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3292 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3283 compatibility. Thanks to Hayden Callow
3293 compatibility. Thanks to Hayden Callow
3284 <h.callow-AT-elec.canterbury.ac.nz>
3294 <h.callow-AT-elec.canterbury.ac.nz>
3285
3295
3286 2002-10-04 Fernando Perez <fperez@colorado.edu>
3296 2002-10-04 Fernando Perez <fperez@colorado.edu>
3287
3297
3288 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3298 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3289 Gnuplot.File objects.
3299 Gnuplot.File objects.
3290
3300
3291 2002-07-23 Fernando Perez <fperez@colorado.edu>
3301 2002-07-23 Fernando Perez <fperez@colorado.edu>
3292
3302
3293 * IPython/genutils.py (timing): Added timings() and timing() for
3303 * IPython/genutils.py (timing): Added timings() and timing() for
3294 quick access to the most commonly needed data, the execution
3304 quick access to the most commonly needed data, the execution
3295 times. Old timing() renamed to timings_out().
3305 times. Old timing() renamed to timings_out().
3296
3306
3297 2002-07-18 Fernando Perez <fperez@colorado.edu>
3307 2002-07-18 Fernando Perez <fperez@colorado.edu>
3298
3308
3299 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3309 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3300 bug with nested instances disrupting the parent's tab completion.
3310 bug with nested instances disrupting the parent's tab completion.
3301
3311
3302 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3312 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3303 all_completions code to begin the emacs integration.
3313 all_completions code to begin the emacs integration.
3304
3314
3305 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3315 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3306 argument to allow titling individual arrays when plotting.
3316 argument to allow titling individual arrays when plotting.
3307
3317
3308 2002-07-15 Fernando Perez <fperez@colorado.edu>
3318 2002-07-15 Fernando Perez <fperez@colorado.edu>
3309
3319
3310 * setup.py (make_shortcut): changed to retrieve the value of
3320 * setup.py (make_shortcut): changed to retrieve the value of
3311 'Program Files' directory from the registry (this value changes in
3321 'Program Files' directory from the registry (this value changes in
3312 non-english versions of Windows). Thanks to Thomas Fanslau
3322 non-english versions of Windows). Thanks to Thomas Fanslau
3313 <tfanslau-AT-gmx.de> for the report.
3323 <tfanslau-AT-gmx.de> for the report.
3314
3324
3315 2002-07-10 Fernando Perez <fperez@colorado.edu>
3325 2002-07-10 Fernando Perez <fperez@colorado.edu>
3316
3326
3317 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3327 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3318 a bug in pdb, which crashes if a line with only whitespace is
3328 a bug in pdb, which crashes if a line with only whitespace is
3319 entered. Bug report submitted to sourceforge.
3329 entered. Bug report submitted to sourceforge.
3320
3330
3321 2002-07-09 Fernando Perez <fperez@colorado.edu>
3331 2002-07-09 Fernando Perez <fperez@colorado.edu>
3322
3332
3323 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3333 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3324 reporting exceptions (it's a bug in inspect.py, I just set a
3334 reporting exceptions (it's a bug in inspect.py, I just set a
3325 workaround).
3335 workaround).
3326
3336
3327 2002-07-08 Fernando Perez <fperez@colorado.edu>
3337 2002-07-08 Fernando Perez <fperez@colorado.edu>
3328
3338
3329 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3339 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3330 __IPYTHON__ in __builtins__ to show up in user_ns.
3340 __IPYTHON__ in __builtins__ to show up in user_ns.
3331
3341
3332 2002-07-03 Fernando Perez <fperez@colorado.edu>
3342 2002-07-03 Fernando Perez <fperez@colorado.edu>
3333
3343
3334 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3344 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3335 name from @gp_set_instance to @gp_set_default.
3345 name from @gp_set_instance to @gp_set_default.
3336
3346
3337 * IPython/ipmaker.py (make_IPython): default editor value set to
3347 * IPython/ipmaker.py (make_IPython): default editor value set to
3338 '0' (a string), to match the rc file. Otherwise will crash when
3348 '0' (a string), to match the rc file. Otherwise will crash when
3339 .strip() is called on it.
3349 .strip() is called on it.
3340
3350
3341
3351
3342 2002-06-28 Fernando Perez <fperez@colorado.edu>
3352 2002-06-28 Fernando Perez <fperez@colorado.edu>
3343
3353
3344 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3354 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3345 of files in current directory when a file is executed via
3355 of files in current directory when a file is executed via
3346 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3356 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3347
3357
3348 * setup.py (manfiles): fix for rpm builds, submitted by RA
3358 * setup.py (manfiles): fix for rpm builds, submitted by RA
3349 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3359 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3350
3360
3351 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3361 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3352 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3362 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3353 string!). A. Schmolck caught this one.
3363 string!). A. Schmolck caught this one.
3354
3364
3355 2002-06-27 Fernando Perez <fperez@colorado.edu>
3365 2002-06-27 Fernando Perez <fperez@colorado.edu>
3356
3366
3357 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3367 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3358 defined files at the cmd line. __name__ wasn't being set to
3368 defined files at the cmd line. __name__ wasn't being set to
3359 __main__.
3369 __main__.
3360
3370
3361 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3371 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3362 regular lists and tuples besides Numeric arrays.
3372 regular lists and tuples besides Numeric arrays.
3363
3373
3364 * IPython/Prompts.py (CachedOutput.__call__): Added output
3374 * IPython/Prompts.py (CachedOutput.__call__): Added output
3365 supression for input ending with ';'. Similar to Mathematica and
3375 supression for input ending with ';'. Similar to Mathematica and
3366 Matlab. The _* vars and Out[] list are still updated, just like
3376 Matlab. The _* vars and Out[] list are still updated, just like
3367 Mathematica behaves.
3377 Mathematica behaves.
3368
3378
3369 2002-06-25 Fernando Perez <fperez@colorado.edu>
3379 2002-06-25 Fernando Perez <fperez@colorado.edu>
3370
3380
3371 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3381 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3372 .ini extensions for profiels under Windows.
3382 .ini extensions for profiels under Windows.
3373
3383
3374 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3384 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3375 string form. Fix contributed by Alexander Schmolck
3385 string form. Fix contributed by Alexander Schmolck
3376 <a.schmolck-AT-gmx.net>
3386 <a.schmolck-AT-gmx.net>
3377
3387
3378 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3388 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3379 pre-configured Gnuplot instance.
3389 pre-configured Gnuplot instance.
3380
3390
3381 2002-06-21 Fernando Perez <fperez@colorado.edu>
3391 2002-06-21 Fernando Perez <fperez@colorado.edu>
3382
3392
3383 * IPython/numutils.py (exp_safe): new function, works around the
3393 * IPython/numutils.py (exp_safe): new function, works around the
3384 underflow problems in Numeric.
3394 underflow problems in Numeric.
3385 (log2): New fn. Safe log in base 2: returns exact integer answer
3395 (log2): New fn. Safe log in base 2: returns exact integer answer
3386 for exact integer powers of 2.
3396 for exact integer powers of 2.
3387
3397
3388 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3398 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3389 properly.
3399 properly.
3390
3400
3391 2002-06-20 Fernando Perez <fperez@colorado.edu>
3401 2002-06-20 Fernando Perez <fperez@colorado.edu>
3392
3402
3393 * IPython/genutils.py (timing): new function like
3403 * IPython/genutils.py (timing): new function like
3394 Mathematica's. Similar to time_test, but returns more info.
3404 Mathematica's. Similar to time_test, but returns more info.
3395
3405
3396 2002-06-18 Fernando Perez <fperez@colorado.edu>
3406 2002-06-18 Fernando Perez <fperez@colorado.edu>
3397
3407
3398 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3408 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3399 according to Mike Heeter's suggestions.
3409 according to Mike Heeter's suggestions.
3400
3410
3401 2002-06-16 Fernando Perez <fperez@colorado.edu>
3411 2002-06-16 Fernando Perez <fperez@colorado.edu>
3402
3412
3403 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3413 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3404 system. GnuplotMagic is gone as a user-directory option. New files
3414 system. GnuplotMagic is gone as a user-directory option. New files
3405 make it easier to use all the gnuplot stuff both from external
3415 make it easier to use all the gnuplot stuff both from external
3406 programs as well as from IPython. Had to rewrite part of
3416 programs as well as from IPython. Had to rewrite part of
3407 hardcopy() b/c of a strange bug: often the ps files simply don't
3417 hardcopy() b/c of a strange bug: often the ps files simply don't
3408 get created, and require a repeat of the command (often several
3418 get created, and require a repeat of the command (often several
3409 times).
3419 times).
3410
3420
3411 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3421 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3412 resolve output channel at call time, so that if sys.stderr has
3422 resolve output channel at call time, so that if sys.stderr has
3413 been redirected by user this gets honored.
3423 been redirected by user this gets honored.
3414
3424
3415 2002-06-13 Fernando Perez <fperez@colorado.edu>
3425 2002-06-13 Fernando Perez <fperez@colorado.edu>
3416
3426
3417 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3427 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3418 IPShell. Kept a copy with the old names to avoid breaking people's
3428 IPShell. Kept a copy with the old names to avoid breaking people's
3419 embedded code.
3429 embedded code.
3420
3430
3421 * IPython/ipython: simplified it to the bare minimum after
3431 * IPython/ipython: simplified it to the bare minimum after
3422 Holger's suggestions. Added info about how to use it in
3432 Holger's suggestions. Added info about how to use it in
3423 PYTHONSTARTUP.
3433 PYTHONSTARTUP.
3424
3434
3425 * IPython/Shell.py (IPythonShell): changed the options passing
3435 * IPython/Shell.py (IPythonShell): changed the options passing
3426 from a string with funky %s replacements to a straight list. Maybe
3436 from a string with funky %s replacements to a straight list. Maybe
3427 a bit more typing, but it follows sys.argv conventions, so there's
3437 a bit more typing, but it follows sys.argv conventions, so there's
3428 less special-casing to remember.
3438 less special-casing to remember.
3429
3439
3430 2002-06-12 Fernando Perez <fperez@colorado.edu>
3440 2002-06-12 Fernando Perez <fperez@colorado.edu>
3431
3441
3432 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3442 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3433 command. Thanks to a suggestion by Mike Heeter.
3443 command. Thanks to a suggestion by Mike Heeter.
3434 (Magic.magic_pfile): added behavior to look at filenames if given
3444 (Magic.magic_pfile): added behavior to look at filenames if given
3435 arg is not a defined object.
3445 arg is not a defined object.
3436 (Magic.magic_save): New @save function to save code snippets. Also
3446 (Magic.magic_save): New @save function to save code snippets. Also
3437 a Mike Heeter idea.
3447 a Mike Heeter idea.
3438
3448
3439 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3449 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3440 plot() and replot(). Much more convenient now, especially for
3450 plot() and replot(). Much more convenient now, especially for
3441 interactive use.
3451 interactive use.
3442
3452
3443 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3453 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3444 filenames.
3454 filenames.
3445
3455
3446 2002-06-02 Fernando Perez <fperez@colorado.edu>
3456 2002-06-02 Fernando Perez <fperez@colorado.edu>
3447
3457
3448 * IPython/Struct.py (Struct.__init__): modified to admit
3458 * IPython/Struct.py (Struct.__init__): modified to admit
3449 initialization via another struct.
3459 initialization via another struct.
3450
3460
3451 * IPython/genutils.py (SystemExec.__init__): New stateful
3461 * IPython/genutils.py (SystemExec.__init__): New stateful
3452 interface to xsys and bq. Useful for writing system scripts.
3462 interface to xsys and bq. Useful for writing system scripts.
3453
3463
3454 2002-05-30 Fernando Perez <fperez@colorado.edu>
3464 2002-05-30 Fernando Perez <fperez@colorado.edu>
3455
3465
3456 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3466 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3457 documents. This will make the user download smaller (it's getting
3467 documents. This will make the user download smaller (it's getting
3458 too big).
3468 too big).
3459
3469
3460 2002-05-29 Fernando Perez <fperez@colorado.edu>
3470 2002-05-29 Fernando Perez <fperez@colorado.edu>
3461
3471
3462 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3472 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3463 fix problems with shelve and pickle. Seems to work, but I don't
3473 fix problems with shelve and pickle. Seems to work, but I don't
3464 know if corner cases break it. Thanks to Mike Heeter
3474 know if corner cases break it. Thanks to Mike Heeter
3465 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3475 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3466
3476
3467 2002-05-24 Fernando Perez <fperez@colorado.edu>
3477 2002-05-24 Fernando Perez <fperez@colorado.edu>
3468
3478
3469 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3479 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3470 macros having broken.
3480 macros having broken.
3471
3481
3472 2002-05-21 Fernando Perez <fperez@colorado.edu>
3482 2002-05-21 Fernando Perez <fperez@colorado.edu>
3473
3483
3474 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3484 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3475 introduced logging bug: all history before logging started was
3485 introduced logging bug: all history before logging started was
3476 being written one character per line! This came from the redesign
3486 being written one character per line! This came from the redesign
3477 of the input history as a special list which slices to strings,
3487 of the input history as a special list which slices to strings,
3478 not to lists.
3488 not to lists.
3479
3489
3480 2002-05-20 Fernando Perez <fperez@colorado.edu>
3490 2002-05-20 Fernando Perez <fperez@colorado.edu>
3481
3491
3482 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3492 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3483 be an attribute of all classes in this module. The design of these
3493 be an attribute of all classes in this module. The design of these
3484 classes needs some serious overhauling.
3494 classes needs some serious overhauling.
3485
3495
3486 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3496 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3487 which was ignoring '_' in option names.
3497 which was ignoring '_' in option names.
3488
3498
3489 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3499 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3490 'Verbose_novars' to 'Context' and made it the new default. It's a
3500 'Verbose_novars' to 'Context' and made it the new default. It's a
3491 bit more readable and also safer than verbose.
3501 bit more readable and also safer than verbose.
3492
3502
3493 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3503 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3494 triple-quoted strings.
3504 triple-quoted strings.
3495
3505
3496 * IPython/OInspect.py (__all__): new module exposing the object
3506 * IPython/OInspect.py (__all__): new module exposing the object
3497 introspection facilities. Now the corresponding magics are dummy
3507 introspection facilities. Now the corresponding magics are dummy
3498 wrappers around this. Having this module will make it much easier
3508 wrappers around this. Having this module will make it much easier
3499 to put these functions into our modified pdb.
3509 to put these functions into our modified pdb.
3500 This new object inspector system uses the new colorizing module,
3510 This new object inspector system uses the new colorizing module,
3501 so source code and other things are nicely syntax highlighted.
3511 so source code and other things are nicely syntax highlighted.
3502
3512
3503 2002-05-18 Fernando Perez <fperez@colorado.edu>
3513 2002-05-18 Fernando Perez <fperez@colorado.edu>
3504
3514
3505 * IPython/ColorANSI.py: Split the coloring tools into a separate
3515 * IPython/ColorANSI.py: Split the coloring tools into a separate
3506 module so I can use them in other code easier (they were part of
3516 module so I can use them in other code easier (they were part of
3507 ultraTB).
3517 ultraTB).
3508
3518
3509 2002-05-17 Fernando Perez <fperez@colorado.edu>
3519 2002-05-17 Fernando Perez <fperez@colorado.edu>
3510
3520
3511 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3521 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3512 fixed it to set the global 'g' also to the called instance, as
3522 fixed it to set the global 'g' also to the called instance, as
3513 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3523 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3514 user's 'g' variables).
3524 user's 'g' variables).
3515
3525
3516 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3526 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3517 global variables (aliases to _ih,_oh) so that users which expect
3527 global variables (aliases to _ih,_oh) so that users which expect
3518 In[5] or Out[7] to work aren't unpleasantly surprised.
3528 In[5] or Out[7] to work aren't unpleasantly surprised.
3519 (InputList.__getslice__): new class to allow executing slices of
3529 (InputList.__getslice__): new class to allow executing slices of
3520 input history directly. Very simple class, complements the use of
3530 input history directly. Very simple class, complements the use of
3521 macros.
3531 macros.
3522
3532
3523 2002-05-16 Fernando Perez <fperez@colorado.edu>
3533 2002-05-16 Fernando Perez <fperez@colorado.edu>
3524
3534
3525 * setup.py (docdirbase): make doc directory be just doc/IPython
3535 * setup.py (docdirbase): make doc directory be just doc/IPython
3526 without version numbers, it will reduce clutter for users.
3536 without version numbers, it will reduce clutter for users.
3527
3537
3528 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3538 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3529 execfile call to prevent possible memory leak. See for details:
3539 execfile call to prevent possible memory leak. See for details:
3530 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3540 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3531
3541
3532 2002-05-15 Fernando Perez <fperez@colorado.edu>
3542 2002-05-15 Fernando Perez <fperez@colorado.edu>
3533
3543
3534 * IPython/Magic.py (Magic.magic_psource): made the object
3544 * IPython/Magic.py (Magic.magic_psource): made the object
3535 introspection names be more standard: pdoc, pdef, pfile and
3545 introspection names be more standard: pdoc, pdef, pfile and
3536 psource. They all print/page their output, and it makes
3546 psource. They all print/page their output, and it makes
3537 remembering them easier. Kept old names for compatibility as
3547 remembering them easier. Kept old names for compatibility as
3538 aliases.
3548 aliases.
3539
3549
3540 2002-05-14 Fernando Perez <fperez@colorado.edu>
3550 2002-05-14 Fernando Perez <fperez@colorado.edu>
3541
3551
3542 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3552 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3543 what the mouse problem was. The trick is to use gnuplot with temp
3553 what the mouse problem was. The trick is to use gnuplot with temp
3544 files and NOT with pipes (for data communication), because having
3554 files and NOT with pipes (for data communication), because having
3545 both pipes and the mouse on is bad news.
3555 both pipes and the mouse on is bad news.
3546
3556
3547 2002-05-13 Fernando Perez <fperez@colorado.edu>
3557 2002-05-13 Fernando Perez <fperez@colorado.edu>
3548
3558
3549 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3559 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3550 bug. Information would be reported about builtins even when
3560 bug. Information would be reported about builtins even when
3551 user-defined functions overrode them.
3561 user-defined functions overrode them.
3552
3562
3553 2002-05-11 Fernando Perez <fperez@colorado.edu>
3563 2002-05-11 Fernando Perez <fperez@colorado.edu>
3554
3564
3555 * IPython/__init__.py (__all__): removed FlexCompleter from
3565 * IPython/__init__.py (__all__): removed FlexCompleter from
3556 __all__ so that things don't fail in platforms without readline.
3566 __all__ so that things don't fail in platforms without readline.
3557
3567
3558 2002-05-10 Fernando Perez <fperez@colorado.edu>
3568 2002-05-10 Fernando Perez <fperez@colorado.edu>
3559
3569
3560 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3570 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3561 it requires Numeric, effectively making Numeric a dependency for
3571 it requires Numeric, effectively making Numeric a dependency for
3562 IPython.
3572 IPython.
3563
3573
3564 * Released 0.2.13
3574 * Released 0.2.13
3565
3575
3566 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3576 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3567 profiler interface. Now all the major options from the profiler
3577 profiler interface. Now all the major options from the profiler
3568 module are directly supported in IPython, both for single
3578 module are directly supported in IPython, both for single
3569 expressions (@prun) and for full programs (@run -p).
3579 expressions (@prun) and for full programs (@run -p).
3570
3580
3571 2002-05-09 Fernando Perez <fperez@colorado.edu>
3581 2002-05-09 Fernando Perez <fperez@colorado.edu>
3572
3582
3573 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3583 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3574 magic properly formatted for screen.
3584 magic properly formatted for screen.
3575
3585
3576 * setup.py (make_shortcut): Changed things to put pdf version in
3586 * setup.py (make_shortcut): Changed things to put pdf version in
3577 doc/ instead of doc/manual (had to change lyxport a bit).
3587 doc/ instead of doc/manual (had to change lyxport a bit).
3578
3588
3579 * IPython/Magic.py (Profile.string_stats): made profile runs go
3589 * IPython/Magic.py (Profile.string_stats): made profile runs go
3580 through pager (they are long and a pager allows searching, saving,
3590 through pager (they are long and a pager allows searching, saving,
3581 etc.)
3591 etc.)
3582
3592
3583 2002-05-08 Fernando Perez <fperez@colorado.edu>
3593 2002-05-08 Fernando Perez <fperez@colorado.edu>
3584
3594
3585 * Released 0.2.12
3595 * Released 0.2.12
3586
3596
3587 2002-05-06 Fernando Perez <fperez@colorado.edu>
3597 2002-05-06 Fernando Perez <fperez@colorado.edu>
3588
3598
3589 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3599 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3590 introduced); 'hist n1 n2' was broken.
3600 introduced); 'hist n1 n2' was broken.
3591 (Magic.magic_pdb): added optional on/off arguments to @pdb
3601 (Magic.magic_pdb): added optional on/off arguments to @pdb
3592 (Magic.magic_run): added option -i to @run, which executes code in
3602 (Magic.magic_run): added option -i to @run, which executes code in
3593 the IPython namespace instead of a clean one. Also added @irun as
3603 the IPython namespace instead of a clean one. Also added @irun as
3594 an alias to @run -i.
3604 an alias to @run -i.
3595
3605
3596 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3606 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3597 fixed (it didn't really do anything, the namespaces were wrong).
3607 fixed (it didn't really do anything, the namespaces were wrong).
3598
3608
3599 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3609 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3600
3610
3601 * IPython/__init__.py (__all__): Fixed package namespace, now
3611 * IPython/__init__.py (__all__): Fixed package namespace, now
3602 'import IPython' does give access to IPython.<all> as
3612 'import IPython' does give access to IPython.<all> as
3603 expected. Also renamed __release__ to Release.
3613 expected. Also renamed __release__ to Release.
3604
3614
3605 * IPython/Debugger.py (__license__): created new Pdb class which
3615 * IPython/Debugger.py (__license__): created new Pdb class which
3606 functions like a drop-in for the normal pdb.Pdb but does NOT
3616 functions like a drop-in for the normal pdb.Pdb but does NOT
3607 import readline by default. This way it doesn't muck up IPython's
3617 import readline by default. This way it doesn't muck up IPython's
3608 readline handling, and now tab-completion finally works in the
3618 readline handling, and now tab-completion finally works in the
3609 debugger -- sort of. It completes things globally visible, but the
3619 debugger -- sort of. It completes things globally visible, but the
3610 completer doesn't track the stack as pdb walks it. That's a bit
3620 completer doesn't track the stack as pdb walks it. That's a bit
3611 tricky, and I'll have to implement it later.
3621 tricky, and I'll have to implement it later.
3612
3622
3613 2002-05-05 Fernando Perez <fperez@colorado.edu>
3623 2002-05-05 Fernando Perez <fperez@colorado.edu>
3614
3624
3615 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3625 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3616 magic docstrings when printed via ? (explicit \'s were being
3626 magic docstrings when printed via ? (explicit \'s were being
3617 printed).
3627 printed).
3618
3628
3619 * IPython/ipmaker.py (make_IPython): fixed namespace
3629 * IPython/ipmaker.py (make_IPython): fixed namespace
3620 identification bug. Now variables loaded via logs or command-line
3630 identification bug. Now variables loaded via logs or command-line
3621 files are recognized in the interactive namespace by @who.
3631 files are recognized in the interactive namespace by @who.
3622
3632
3623 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3633 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3624 log replay system stemming from the string form of Structs.
3634 log replay system stemming from the string form of Structs.
3625
3635
3626 * IPython/Magic.py (Macro.__init__): improved macros to properly
3636 * IPython/Magic.py (Macro.__init__): improved macros to properly
3627 handle magic commands in them.
3637 handle magic commands in them.
3628 (Magic.magic_logstart): usernames are now expanded so 'logstart
3638 (Magic.magic_logstart): usernames are now expanded so 'logstart
3629 ~/mylog' now works.
3639 ~/mylog' now works.
3630
3640
3631 * IPython/iplib.py (complete): fixed bug where paths starting with
3641 * IPython/iplib.py (complete): fixed bug where paths starting with
3632 '/' would be completed as magic names.
3642 '/' would be completed as magic names.
3633
3643
3634 2002-05-04 Fernando Perez <fperez@colorado.edu>
3644 2002-05-04 Fernando Perez <fperez@colorado.edu>
3635
3645
3636 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3646 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3637 allow running full programs under the profiler's control.
3647 allow running full programs under the profiler's control.
3638
3648
3639 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3649 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3640 mode to report exceptions verbosely but without formatting
3650 mode to report exceptions verbosely but without formatting
3641 variables. This addresses the issue of ipython 'freezing' (it's
3651 variables. This addresses the issue of ipython 'freezing' (it's
3642 not frozen, but caught in an expensive formatting loop) when huge
3652 not frozen, but caught in an expensive formatting loop) when huge
3643 variables are in the context of an exception.
3653 variables are in the context of an exception.
3644 (VerboseTB.text): Added '--->' markers at line where exception was
3654 (VerboseTB.text): Added '--->' markers at line where exception was
3645 triggered. Much clearer to read, especially in NoColor modes.
3655 triggered. Much clearer to read, especially in NoColor modes.
3646
3656
3647 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3657 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3648 implemented in reverse when changing to the new parse_options().
3658 implemented in reverse when changing to the new parse_options().
3649
3659
3650 2002-05-03 Fernando Perez <fperez@colorado.edu>
3660 2002-05-03 Fernando Perez <fperez@colorado.edu>
3651
3661
3652 * IPython/Magic.py (Magic.parse_options): new function so that
3662 * IPython/Magic.py (Magic.parse_options): new function so that
3653 magics can parse options easier.
3663 magics can parse options easier.
3654 (Magic.magic_prun): new function similar to profile.run(),
3664 (Magic.magic_prun): new function similar to profile.run(),
3655 suggested by Chris Hart.
3665 suggested by Chris Hart.
3656 (Magic.magic_cd): fixed behavior so that it only changes if
3666 (Magic.magic_cd): fixed behavior so that it only changes if
3657 directory actually is in history.
3667 directory actually is in history.
3658
3668
3659 * IPython/usage.py (__doc__): added information about potential
3669 * IPython/usage.py (__doc__): added information about potential
3660 slowness of Verbose exception mode when there are huge data
3670 slowness of Verbose exception mode when there are huge data
3661 structures to be formatted (thanks to Archie Paulson).
3671 structures to be formatted (thanks to Archie Paulson).
3662
3672
3663 * IPython/ipmaker.py (make_IPython): Changed default logging
3673 * IPython/ipmaker.py (make_IPython): Changed default logging
3664 (when simply called with -log) to use curr_dir/ipython.log in
3674 (when simply called with -log) to use curr_dir/ipython.log in
3665 rotate mode. Fixed crash which was occuring with -log before
3675 rotate mode. Fixed crash which was occuring with -log before
3666 (thanks to Jim Boyle).
3676 (thanks to Jim Boyle).
3667
3677
3668 2002-05-01 Fernando Perez <fperez@colorado.edu>
3678 2002-05-01 Fernando Perez <fperez@colorado.edu>
3669
3679
3670 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3680 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3671 was nasty -- though somewhat of a corner case).
3681 was nasty -- though somewhat of a corner case).
3672
3682
3673 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3683 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3674 text (was a bug).
3684 text (was a bug).
3675
3685
3676 2002-04-30 Fernando Perez <fperez@colorado.edu>
3686 2002-04-30 Fernando Perez <fperez@colorado.edu>
3677
3687
3678 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3688 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3679 a print after ^D or ^C from the user so that the In[] prompt
3689 a print after ^D or ^C from the user so that the In[] prompt
3680 doesn't over-run the gnuplot one.
3690 doesn't over-run the gnuplot one.
3681
3691
3682 2002-04-29 Fernando Perez <fperez@colorado.edu>
3692 2002-04-29 Fernando Perez <fperez@colorado.edu>
3683
3693
3684 * Released 0.2.10
3694 * Released 0.2.10
3685
3695
3686 * IPython/__release__.py (version): get date dynamically.
3696 * IPython/__release__.py (version): get date dynamically.
3687
3697
3688 * Misc. documentation updates thanks to Arnd's comments. Also ran
3698 * Misc. documentation updates thanks to Arnd's comments. Also ran
3689 a full spellcheck on the manual (hadn't been done in a while).
3699 a full spellcheck on the manual (hadn't been done in a while).
3690
3700
3691 2002-04-27 Fernando Perez <fperez@colorado.edu>
3701 2002-04-27 Fernando Perez <fperez@colorado.edu>
3692
3702
3693 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3703 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3694 starting a log in mid-session would reset the input history list.
3704 starting a log in mid-session would reset the input history list.
3695
3705
3696 2002-04-26 Fernando Perez <fperez@colorado.edu>
3706 2002-04-26 Fernando Perez <fperez@colorado.edu>
3697
3707
3698 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3708 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3699 all files were being included in an update. Now anything in
3709 all files were being included in an update. Now anything in
3700 UserConfig that matches [A-Za-z]*.py will go (this excludes
3710 UserConfig that matches [A-Za-z]*.py will go (this excludes
3701 __init__.py)
3711 __init__.py)
3702
3712
3703 2002-04-25 Fernando Perez <fperez@colorado.edu>
3713 2002-04-25 Fernando Perez <fperez@colorado.edu>
3704
3714
3705 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3715 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3706 to __builtins__ so that any form of embedded or imported code can
3716 to __builtins__ so that any form of embedded or imported code can
3707 test for being inside IPython.
3717 test for being inside IPython.
3708
3718
3709 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3719 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3710 changed to GnuplotMagic because it's now an importable module,
3720 changed to GnuplotMagic because it's now an importable module,
3711 this makes the name follow that of the standard Gnuplot module.
3721 this makes the name follow that of the standard Gnuplot module.
3712 GnuplotMagic can now be loaded at any time in mid-session.
3722 GnuplotMagic can now be loaded at any time in mid-session.
3713
3723
3714 2002-04-24 Fernando Perez <fperez@colorado.edu>
3724 2002-04-24 Fernando Perez <fperez@colorado.edu>
3715
3725
3716 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3726 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3717 the globals (IPython has its own namespace) and the
3727 the globals (IPython has its own namespace) and the
3718 PhysicalQuantity stuff is much better anyway.
3728 PhysicalQuantity stuff is much better anyway.
3719
3729
3720 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3730 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3721 embedding example to standard user directory for
3731 embedding example to standard user directory for
3722 distribution. Also put it in the manual.
3732 distribution. Also put it in the manual.
3723
3733
3724 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3734 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3725 instance as first argument (so it doesn't rely on some obscure
3735 instance as first argument (so it doesn't rely on some obscure
3726 hidden global).
3736 hidden global).
3727
3737
3728 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3738 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3729 delimiters. While it prevents ().TAB from working, it allows
3739 delimiters. While it prevents ().TAB from working, it allows
3730 completions in open (... expressions. This is by far a more common
3740 completions in open (... expressions. This is by far a more common
3731 case.
3741 case.
3732
3742
3733 2002-04-23 Fernando Perez <fperez@colorado.edu>
3743 2002-04-23 Fernando Perez <fperez@colorado.edu>
3734
3744
3735 * IPython/Extensions/InterpreterPasteInput.py: new
3745 * IPython/Extensions/InterpreterPasteInput.py: new
3736 syntax-processing module for pasting lines with >>> or ... at the
3746 syntax-processing module for pasting lines with >>> or ... at the
3737 start.
3747 start.
3738
3748
3739 * IPython/Extensions/PhysicalQ_Interactive.py
3749 * IPython/Extensions/PhysicalQ_Interactive.py
3740 (PhysicalQuantityInteractive.__int__): fixed to work with either
3750 (PhysicalQuantityInteractive.__int__): fixed to work with either
3741 Numeric or math.
3751 Numeric or math.
3742
3752
3743 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3753 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3744 provided profiles. Now we have:
3754 provided profiles. Now we have:
3745 -math -> math module as * and cmath with its own namespace.
3755 -math -> math module as * and cmath with its own namespace.
3746 -numeric -> Numeric as *, plus gnuplot & grace
3756 -numeric -> Numeric as *, plus gnuplot & grace
3747 -physics -> same as before
3757 -physics -> same as before
3748
3758
3749 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3759 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3750 user-defined magics wouldn't be found by @magic if they were
3760 user-defined magics wouldn't be found by @magic if they were
3751 defined as class methods. Also cleaned up the namespace search
3761 defined as class methods. Also cleaned up the namespace search
3752 logic and the string building (to use %s instead of many repeated
3762 logic and the string building (to use %s instead of many repeated
3753 string adds).
3763 string adds).
3754
3764
3755 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3765 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3756 of user-defined magics to operate with class methods (cleaner, in
3766 of user-defined magics to operate with class methods (cleaner, in
3757 line with the gnuplot code).
3767 line with the gnuplot code).
3758
3768
3759 2002-04-22 Fernando Perez <fperez@colorado.edu>
3769 2002-04-22 Fernando Perez <fperez@colorado.edu>
3760
3770
3761 * setup.py: updated dependency list so that manual is updated when
3771 * setup.py: updated dependency list so that manual is updated when
3762 all included files change.
3772 all included files change.
3763
3773
3764 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3774 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3765 the delimiter removal option (the fix is ugly right now).
3775 the delimiter removal option (the fix is ugly right now).
3766
3776
3767 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3777 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3768 all of the math profile (quicker loading, no conflict between
3778 all of the math profile (quicker loading, no conflict between
3769 g-9.8 and g-gnuplot).
3779 g-9.8 and g-gnuplot).
3770
3780
3771 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3781 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3772 name of post-mortem files to IPython_crash_report.txt.
3782 name of post-mortem files to IPython_crash_report.txt.
3773
3783
3774 * Cleanup/update of the docs. Added all the new readline info and
3784 * Cleanup/update of the docs. Added all the new readline info and
3775 formatted all lists as 'real lists'.
3785 formatted all lists as 'real lists'.
3776
3786
3777 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3787 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3778 tab-completion options, since the full readline parse_and_bind is
3788 tab-completion options, since the full readline parse_and_bind is
3779 now accessible.
3789 now accessible.
3780
3790
3781 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3791 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3782 handling of readline options. Now users can specify any string to
3792 handling of readline options. Now users can specify any string to
3783 be passed to parse_and_bind(), as well as the delimiters to be
3793 be passed to parse_and_bind(), as well as the delimiters to be
3784 removed.
3794 removed.
3785 (InteractiveShell.__init__): Added __name__ to the global
3795 (InteractiveShell.__init__): Added __name__ to the global
3786 namespace so that things like Itpl which rely on its existence
3796 namespace so that things like Itpl which rely on its existence
3787 don't crash.
3797 don't crash.
3788 (InteractiveShell._prefilter): Defined the default with a _ so
3798 (InteractiveShell._prefilter): Defined the default with a _ so
3789 that prefilter() is easier to override, while the default one
3799 that prefilter() is easier to override, while the default one
3790 remains available.
3800 remains available.
3791
3801
3792 2002-04-18 Fernando Perez <fperez@colorado.edu>
3802 2002-04-18 Fernando Perez <fperez@colorado.edu>
3793
3803
3794 * Added information about pdb in the docs.
3804 * Added information about pdb in the docs.
3795
3805
3796 2002-04-17 Fernando Perez <fperez@colorado.edu>
3806 2002-04-17 Fernando Perez <fperez@colorado.edu>
3797
3807
3798 * IPython/ipmaker.py (make_IPython): added rc_override option to
3808 * IPython/ipmaker.py (make_IPython): added rc_override option to
3799 allow passing config options at creation time which may override
3809 allow passing config options at creation time which may override
3800 anything set in the config files or command line. This is
3810 anything set in the config files or command line. This is
3801 particularly useful for configuring embedded instances.
3811 particularly useful for configuring embedded instances.
3802
3812
3803 2002-04-15 Fernando Perez <fperez@colorado.edu>
3813 2002-04-15 Fernando Perez <fperez@colorado.edu>
3804
3814
3805 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3815 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3806 crash embedded instances because of the input cache falling out of
3816 crash embedded instances because of the input cache falling out of
3807 sync with the output counter.
3817 sync with the output counter.
3808
3818
3809 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3819 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3810 mode which calls pdb after an uncaught exception in IPython itself.
3820 mode which calls pdb after an uncaught exception in IPython itself.
3811
3821
3812 2002-04-14 Fernando Perez <fperez@colorado.edu>
3822 2002-04-14 Fernando Perez <fperez@colorado.edu>
3813
3823
3814 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3824 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3815 readline, fix it back after each call.
3825 readline, fix it back after each call.
3816
3826
3817 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3827 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3818 method to force all access via __call__(), which guarantees that
3828 method to force all access via __call__(), which guarantees that
3819 traceback references are properly deleted.
3829 traceback references are properly deleted.
3820
3830
3821 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3831 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3822 improve printing when pprint is in use.
3832 improve printing when pprint is in use.
3823
3833
3824 2002-04-13 Fernando Perez <fperez@colorado.edu>
3834 2002-04-13 Fernando Perez <fperez@colorado.edu>
3825
3835
3826 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3836 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3827 exceptions aren't caught anymore. If the user triggers one, he
3837 exceptions aren't caught anymore. If the user triggers one, he
3828 should know why he's doing it and it should go all the way up,
3838 should know why he's doing it and it should go all the way up,
3829 just like any other exception. So now @abort will fully kill the
3839 just like any other exception. So now @abort will fully kill the
3830 embedded interpreter and the embedding code (unless that happens
3840 embedded interpreter and the embedding code (unless that happens
3831 to catch SystemExit).
3841 to catch SystemExit).
3832
3842
3833 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3843 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3834 and a debugger() method to invoke the interactive pdb debugger
3844 and a debugger() method to invoke the interactive pdb debugger
3835 after printing exception information. Also added the corresponding
3845 after printing exception information. Also added the corresponding
3836 -pdb option and @pdb magic to control this feature, and updated
3846 -pdb option and @pdb magic to control this feature, and updated
3837 the docs. After a suggestion from Christopher Hart
3847 the docs. After a suggestion from Christopher Hart
3838 (hart-AT-caltech.edu).
3848 (hart-AT-caltech.edu).
3839
3849
3840 2002-04-12 Fernando Perez <fperez@colorado.edu>
3850 2002-04-12 Fernando Perez <fperez@colorado.edu>
3841
3851
3842 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3852 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3843 the exception handlers defined by the user (not the CrashHandler)
3853 the exception handlers defined by the user (not the CrashHandler)
3844 so that user exceptions don't trigger an ipython bug report.
3854 so that user exceptions don't trigger an ipython bug report.
3845
3855
3846 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3856 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3847 configurable (it should have always been so).
3857 configurable (it should have always been so).
3848
3858
3849 2002-03-26 Fernando Perez <fperez@colorado.edu>
3859 2002-03-26 Fernando Perez <fperez@colorado.edu>
3850
3860
3851 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3861 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3852 and there to fix embedding namespace issues. This should all be
3862 and there to fix embedding namespace issues. This should all be
3853 done in a more elegant way.
3863 done in a more elegant way.
3854
3864
3855 2002-03-25 Fernando Perez <fperez@colorado.edu>
3865 2002-03-25 Fernando Perez <fperez@colorado.edu>
3856
3866
3857 * IPython/genutils.py (get_home_dir): Try to make it work under
3867 * IPython/genutils.py (get_home_dir): Try to make it work under
3858 win9x also.
3868 win9x also.
3859
3869
3860 2002-03-20 Fernando Perez <fperez@colorado.edu>
3870 2002-03-20 Fernando Perez <fperez@colorado.edu>
3861
3871
3862 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3872 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3863 sys.displayhook untouched upon __init__.
3873 sys.displayhook untouched upon __init__.
3864
3874
3865 2002-03-19 Fernando Perez <fperez@colorado.edu>
3875 2002-03-19 Fernando Perez <fperez@colorado.edu>
3866
3876
3867 * Released 0.2.9 (for embedding bug, basically).
3877 * Released 0.2.9 (for embedding bug, basically).
3868
3878
3869 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3879 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3870 exceptions so that enclosing shell's state can be restored.
3880 exceptions so that enclosing shell's state can be restored.
3871
3881
3872 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3882 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3873 naming conventions in the .ipython/ dir.
3883 naming conventions in the .ipython/ dir.
3874
3884
3875 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3885 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3876 from delimiters list so filenames with - in them get expanded.
3886 from delimiters list so filenames with - in them get expanded.
3877
3887
3878 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3888 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3879 sys.displayhook not being properly restored after an embedded call.
3889 sys.displayhook not being properly restored after an embedded call.
3880
3890
3881 2002-03-18 Fernando Perez <fperez@colorado.edu>
3891 2002-03-18 Fernando Perez <fperez@colorado.edu>
3882
3892
3883 * Released 0.2.8
3893 * Released 0.2.8
3884
3894
3885 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3895 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3886 some files weren't being included in a -upgrade.
3896 some files weren't being included in a -upgrade.
3887 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3897 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3888 on' so that the first tab completes.
3898 on' so that the first tab completes.
3889 (InteractiveShell.handle_magic): fixed bug with spaces around
3899 (InteractiveShell.handle_magic): fixed bug with spaces around
3890 quotes breaking many magic commands.
3900 quotes breaking many magic commands.
3891
3901
3892 * setup.py: added note about ignoring the syntax error messages at
3902 * setup.py: added note about ignoring the syntax error messages at
3893 installation.
3903 installation.
3894
3904
3895 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3905 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3896 streamlining the gnuplot interface, now there's only one magic @gp.
3906 streamlining the gnuplot interface, now there's only one magic @gp.
3897
3907
3898 2002-03-17 Fernando Perez <fperez@colorado.edu>
3908 2002-03-17 Fernando Perez <fperez@colorado.edu>
3899
3909
3900 * IPython/UserConfig/magic_gnuplot.py: new name for the
3910 * IPython/UserConfig/magic_gnuplot.py: new name for the
3901 example-magic_pm.py file. Much enhanced system, now with a shell
3911 example-magic_pm.py file. Much enhanced system, now with a shell
3902 for communicating directly with gnuplot, one command at a time.
3912 for communicating directly with gnuplot, one command at a time.
3903
3913
3904 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3914 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3905 setting __name__=='__main__'.
3915 setting __name__=='__main__'.
3906
3916
3907 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3917 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3908 mini-shell for accessing gnuplot from inside ipython. Should
3918 mini-shell for accessing gnuplot from inside ipython. Should
3909 extend it later for grace access too. Inspired by Arnd's
3919 extend it later for grace access too. Inspired by Arnd's
3910 suggestion.
3920 suggestion.
3911
3921
3912 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3922 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3913 calling magic functions with () in their arguments. Thanks to Arnd
3923 calling magic functions with () in their arguments. Thanks to Arnd
3914 Baecker for pointing this to me.
3924 Baecker for pointing this to me.
3915
3925
3916 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3926 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3917 infinitely for integer or complex arrays (only worked with floats).
3927 infinitely for integer or complex arrays (only worked with floats).
3918
3928
3919 2002-03-16 Fernando Perez <fperez@colorado.edu>
3929 2002-03-16 Fernando Perez <fperez@colorado.edu>
3920
3930
3921 * setup.py: Merged setup and setup_windows into a single script
3931 * setup.py: Merged setup and setup_windows into a single script
3922 which properly handles things for windows users.
3932 which properly handles things for windows users.
3923
3933
3924 2002-03-15 Fernando Perez <fperez@colorado.edu>
3934 2002-03-15 Fernando Perez <fperez@colorado.edu>
3925
3935
3926 * Big change to the manual: now the magics are all automatically
3936 * Big change to the manual: now the magics are all automatically
3927 documented. This information is generated from their docstrings
3937 documented. This information is generated from their docstrings
3928 and put in a latex file included by the manual lyx file. This way
3938 and put in a latex file included by the manual lyx file. This way
3929 we get always up to date information for the magics. The manual
3939 we get always up to date information for the magics. The manual
3930 now also has proper version information, also auto-synced.
3940 now also has proper version information, also auto-synced.
3931
3941
3932 For this to work, an undocumented --magic_docstrings option was added.
3942 For this to work, an undocumented --magic_docstrings option was added.
3933
3943
3934 2002-03-13 Fernando Perez <fperez@colorado.edu>
3944 2002-03-13 Fernando Perez <fperez@colorado.edu>
3935
3945
3936 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3946 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3937 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3947 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3938
3948
3939 2002-03-12 Fernando Perez <fperez@colorado.edu>
3949 2002-03-12 Fernando Perez <fperez@colorado.edu>
3940
3950
3941 * IPython/ultraTB.py (TermColors): changed color escapes again to
3951 * IPython/ultraTB.py (TermColors): changed color escapes again to
3942 fix the (old, reintroduced) line-wrapping bug. Basically, if
3952 fix the (old, reintroduced) line-wrapping bug. Basically, if
3943 \001..\002 aren't given in the color escapes, lines get wrapped
3953 \001..\002 aren't given in the color escapes, lines get wrapped
3944 weirdly. But giving those screws up old xterms and emacs terms. So
3954 weirdly. But giving those screws up old xterms and emacs terms. So
3945 I added some logic for emacs terms to be ok, but I can't identify old
3955 I added some logic for emacs terms to be ok, but I can't identify old
3946 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3956 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3947
3957
3948 2002-03-10 Fernando Perez <fperez@colorado.edu>
3958 2002-03-10 Fernando Perez <fperez@colorado.edu>
3949
3959
3950 * IPython/usage.py (__doc__): Various documentation cleanups and
3960 * IPython/usage.py (__doc__): Various documentation cleanups and
3951 updates, both in usage docstrings and in the manual.
3961 updates, both in usage docstrings and in the manual.
3952
3962
3953 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3963 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3954 handling of caching. Set minimum acceptabe value for having a
3964 handling of caching. Set minimum acceptabe value for having a
3955 cache at 20 values.
3965 cache at 20 values.
3956
3966
3957 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3967 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3958 install_first_time function to a method, renamed it and added an
3968 install_first_time function to a method, renamed it and added an
3959 'upgrade' mode. Now people can update their config directory with
3969 'upgrade' mode. Now people can update their config directory with
3960 a simple command line switch (-upgrade, also new).
3970 a simple command line switch (-upgrade, also new).
3961
3971
3962 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3972 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3963 @file (convenient for automagic users under Python >= 2.2).
3973 @file (convenient for automagic users under Python >= 2.2).
3964 Removed @files (it seemed more like a plural than an abbrev. of
3974 Removed @files (it seemed more like a plural than an abbrev. of
3965 'file show').
3975 'file show').
3966
3976
3967 * IPython/iplib.py (install_first_time): Fixed crash if there were
3977 * IPython/iplib.py (install_first_time): Fixed crash if there were
3968 backup files ('~') in .ipython/ install directory.
3978 backup files ('~') in .ipython/ install directory.
3969
3979
3970 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3980 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3971 system. Things look fine, but these changes are fairly
3981 system. Things look fine, but these changes are fairly
3972 intrusive. Test them for a few days.
3982 intrusive. Test them for a few days.
3973
3983
3974 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3984 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3975 the prompts system. Now all in/out prompt strings are user
3985 the prompts system. Now all in/out prompt strings are user
3976 controllable. This is particularly useful for embedding, as one
3986 controllable. This is particularly useful for embedding, as one
3977 can tag embedded instances with particular prompts.
3987 can tag embedded instances with particular prompts.
3978
3988
3979 Also removed global use of sys.ps1/2, which now allows nested
3989 Also removed global use of sys.ps1/2, which now allows nested
3980 embeddings without any problems. Added command-line options for
3990 embeddings without any problems. Added command-line options for
3981 the prompt strings.
3991 the prompt strings.
3982
3992
3983 2002-03-08 Fernando Perez <fperez@colorado.edu>
3993 2002-03-08 Fernando Perez <fperez@colorado.edu>
3984
3994
3985 * IPython/UserConfig/example-embed-short.py (ipshell): added
3995 * IPython/UserConfig/example-embed-short.py (ipshell): added
3986 example file with the bare minimum code for embedding.
3996 example file with the bare minimum code for embedding.
3987
3997
3988 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3998 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3989 functionality for the embeddable shell to be activated/deactivated
3999 functionality for the embeddable shell to be activated/deactivated
3990 either globally or at each call.
4000 either globally or at each call.
3991
4001
3992 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4002 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3993 rewriting the prompt with '--->' for auto-inputs with proper
4003 rewriting the prompt with '--->' for auto-inputs with proper
3994 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4004 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3995 this is handled by the prompts class itself, as it should.
4005 this is handled by the prompts class itself, as it should.
3996
4006
3997 2002-03-05 Fernando Perez <fperez@colorado.edu>
4007 2002-03-05 Fernando Perez <fperez@colorado.edu>
3998
4008
3999 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4009 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4000 @logstart to avoid name clashes with the math log function.
4010 @logstart to avoid name clashes with the math log function.
4001
4011
4002 * Big updates to X/Emacs section of the manual.
4012 * Big updates to X/Emacs section of the manual.
4003
4013
4004 * Removed ipython_emacs. Milan explained to me how to pass
4014 * Removed ipython_emacs. Milan explained to me how to pass
4005 arguments to ipython through Emacs. Some day I'm going to end up
4015 arguments to ipython through Emacs. Some day I'm going to end up
4006 learning some lisp...
4016 learning some lisp...
4007
4017
4008 2002-03-04 Fernando Perez <fperez@colorado.edu>
4018 2002-03-04 Fernando Perez <fperez@colorado.edu>
4009
4019
4010 * IPython/ipython_emacs: Created script to be used as the
4020 * IPython/ipython_emacs: Created script to be used as the
4011 py-python-command Emacs variable so we can pass IPython
4021 py-python-command Emacs variable so we can pass IPython
4012 parameters. I can't figure out how to tell Emacs directly to pass
4022 parameters. I can't figure out how to tell Emacs directly to pass
4013 parameters to IPython, so a dummy shell script will do it.
4023 parameters to IPython, so a dummy shell script will do it.
4014
4024
4015 Other enhancements made for things to work better under Emacs'
4025 Other enhancements made for things to work better under Emacs'
4016 various types of terminals. Many thanks to Milan Zamazal
4026 various types of terminals. Many thanks to Milan Zamazal
4017 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4027 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4018
4028
4019 2002-03-01 Fernando Perez <fperez@colorado.edu>
4029 2002-03-01 Fernando Perez <fperez@colorado.edu>
4020
4030
4021 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4031 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4022 that loading of readline is now optional. This gives better
4032 that loading of readline is now optional. This gives better
4023 control to emacs users.
4033 control to emacs users.
4024
4034
4025 * IPython/ultraTB.py (__date__): Modified color escape sequences
4035 * IPython/ultraTB.py (__date__): Modified color escape sequences
4026 and now things work fine under xterm and in Emacs' term buffers
4036 and now things work fine under xterm and in Emacs' term buffers
4027 (though not shell ones). Well, in emacs you get colors, but all
4037 (though not shell ones). Well, in emacs you get colors, but all
4028 seem to be 'light' colors (no difference between dark and light
4038 seem to be 'light' colors (no difference between dark and light
4029 ones). But the garbage chars are gone, and also in xterms. It
4039 ones). But the garbage chars are gone, and also in xterms. It
4030 seems that now I'm using 'cleaner' ansi sequences.
4040 seems that now I'm using 'cleaner' ansi sequences.
4031
4041
4032 2002-02-21 Fernando Perez <fperez@colorado.edu>
4042 2002-02-21 Fernando Perez <fperez@colorado.edu>
4033
4043
4034 * Released 0.2.7 (mainly to publish the scoping fix).
4044 * Released 0.2.7 (mainly to publish the scoping fix).
4035
4045
4036 * IPython/Logger.py (Logger.logstate): added. A corresponding
4046 * IPython/Logger.py (Logger.logstate): added. A corresponding
4037 @logstate magic was created.
4047 @logstate magic was created.
4038
4048
4039 * IPython/Magic.py: fixed nested scoping problem under Python
4049 * IPython/Magic.py: fixed nested scoping problem under Python
4040 2.1.x (automagic wasn't working).
4050 2.1.x (automagic wasn't working).
4041
4051
4042 2002-02-20 Fernando Perez <fperez@colorado.edu>
4052 2002-02-20 Fernando Perez <fperez@colorado.edu>
4043
4053
4044 * Released 0.2.6.
4054 * Released 0.2.6.
4045
4055
4046 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4056 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4047 option so that logs can come out without any headers at all.
4057 option so that logs can come out without any headers at all.
4048
4058
4049 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4059 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4050 SciPy.
4060 SciPy.
4051
4061
4052 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4062 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4053 that embedded IPython calls don't require vars() to be explicitly
4063 that embedded IPython calls don't require vars() to be explicitly
4054 passed. Now they are extracted from the caller's frame (code
4064 passed. Now they are extracted from the caller's frame (code
4055 snatched from Eric Jones' weave). Added better documentation to
4065 snatched from Eric Jones' weave). Added better documentation to
4056 the section on embedding and the example file.
4066 the section on embedding and the example file.
4057
4067
4058 * IPython/genutils.py (page): Changed so that under emacs, it just
4068 * IPython/genutils.py (page): Changed so that under emacs, it just
4059 prints the string. You can then page up and down in the emacs
4069 prints the string. You can then page up and down in the emacs
4060 buffer itself. This is how the builtin help() works.
4070 buffer itself. This is how the builtin help() works.
4061
4071
4062 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4072 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4063 macro scoping: macros need to be executed in the user's namespace
4073 macro scoping: macros need to be executed in the user's namespace
4064 to work as if they had been typed by the user.
4074 to work as if they had been typed by the user.
4065
4075
4066 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4076 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4067 execute automatically (no need to type 'exec...'). They then
4077 execute automatically (no need to type 'exec...'). They then
4068 behave like 'true macros'. The printing system was also modified
4078 behave like 'true macros'. The printing system was also modified
4069 for this to work.
4079 for this to work.
4070
4080
4071 2002-02-19 Fernando Perez <fperez@colorado.edu>
4081 2002-02-19 Fernando Perez <fperez@colorado.edu>
4072
4082
4073 * IPython/genutils.py (page_file): new function for paging files
4083 * IPython/genutils.py (page_file): new function for paging files
4074 in an OS-independent way. Also necessary for file viewing to work
4084 in an OS-independent way. Also necessary for file viewing to work
4075 well inside Emacs buffers.
4085 well inside Emacs buffers.
4076 (page): Added checks for being in an emacs buffer.
4086 (page): Added checks for being in an emacs buffer.
4077 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4087 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4078 same bug in iplib.
4088 same bug in iplib.
4079
4089
4080 2002-02-18 Fernando Perez <fperez@colorado.edu>
4090 2002-02-18 Fernando Perez <fperez@colorado.edu>
4081
4091
4082 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4092 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4083 of readline so that IPython can work inside an Emacs buffer.
4093 of readline so that IPython can work inside an Emacs buffer.
4084
4094
4085 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4095 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4086 method signatures (they weren't really bugs, but it looks cleaner
4096 method signatures (they weren't really bugs, but it looks cleaner
4087 and keeps PyChecker happy).
4097 and keeps PyChecker happy).
4088
4098
4089 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4099 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4090 for implementing various user-defined hooks. Currently only
4100 for implementing various user-defined hooks. Currently only
4091 display is done.
4101 display is done.
4092
4102
4093 * IPython/Prompts.py (CachedOutput._display): changed display
4103 * IPython/Prompts.py (CachedOutput._display): changed display
4094 functions so that they can be dynamically changed by users easily.
4104 functions so that they can be dynamically changed by users easily.
4095
4105
4096 * IPython/Extensions/numeric_formats.py (num_display): added an
4106 * IPython/Extensions/numeric_formats.py (num_display): added an
4097 extension for printing NumPy arrays in flexible manners. It
4107 extension for printing NumPy arrays in flexible manners. It
4098 doesn't do anything yet, but all the structure is in
4108 doesn't do anything yet, but all the structure is in
4099 place. Ultimately the plan is to implement output format control
4109 place. Ultimately the plan is to implement output format control
4100 like in Octave.
4110 like in Octave.
4101
4111
4102 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4112 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4103 methods are found at run-time by all the automatic machinery.
4113 methods are found at run-time by all the automatic machinery.
4104
4114
4105 2002-02-17 Fernando Perez <fperez@colorado.edu>
4115 2002-02-17 Fernando Perez <fperez@colorado.edu>
4106
4116
4107 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4117 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4108 whole file a little.
4118 whole file a little.
4109
4119
4110 * ToDo: closed this document. Now there's a new_design.lyx
4120 * ToDo: closed this document. Now there's a new_design.lyx
4111 document for all new ideas. Added making a pdf of it for the
4121 document for all new ideas. Added making a pdf of it for the
4112 end-user distro.
4122 end-user distro.
4113
4123
4114 * IPython/Logger.py (Logger.switch_log): Created this to replace
4124 * IPython/Logger.py (Logger.switch_log): Created this to replace
4115 logon() and logoff(). It also fixes a nasty crash reported by
4125 logon() and logoff(). It also fixes a nasty crash reported by
4116 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4126 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4117
4127
4118 * IPython/iplib.py (complete): got auto-completion to work with
4128 * IPython/iplib.py (complete): got auto-completion to work with
4119 automagic (I had wanted this for a long time).
4129 automagic (I had wanted this for a long time).
4120
4130
4121 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4131 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4122 to @file, since file() is now a builtin and clashes with automagic
4132 to @file, since file() is now a builtin and clashes with automagic
4123 for @file.
4133 for @file.
4124
4134
4125 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4135 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4126 of this was previously in iplib, which had grown to more than 2000
4136 of this was previously in iplib, which had grown to more than 2000
4127 lines, way too long. No new functionality, but it makes managing
4137 lines, way too long. No new functionality, but it makes managing
4128 the code a bit easier.
4138 the code a bit easier.
4129
4139
4130 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4140 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4131 information to crash reports.
4141 information to crash reports.
4132
4142
4133 2002-02-12 Fernando Perez <fperez@colorado.edu>
4143 2002-02-12 Fernando Perez <fperez@colorado.edu>
4134
4144
4135 * Released 0.2.5.
4145 * Released 0.2.5.
4136
4146
4137 2002-02-11 Fernando Perez <fperez@colorado.edu>
4147 2002-02-11 Fernando Perez <fperez@colorado.edu>
4138
4148
4139 * Wrote a relatively complete Windows installer. It puts
4149 * Wrote a relatively complete Windows installer. It puts
4140 everything in place, creates Start Menu entries and fixes the
4150 everything in place, creates Start Menu entries and fixes the
4141 color issues. Nothing fancy, but it works.
4151 color issues. Nothing fancy, but it works.
4142
4152
4143 2002-02-10 Fernando Perez <fperez@colorado.edu>
4153 2002-02-10 Fernando Perez <fperez@colorado.edu>
4144
4154
4145 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4155 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4146 os.path.expanduser() call so that we can type @run ~/myfile.py and
4156 os.path.expanduser() call so that we can type @run ~/myfile.py and
4147 have thigs work as expected.
4157 have thigs work as expected.
4148
4158
4149 * IPython/genutils.py (page): fixed exception handling so things
4159 * IPython/genutils.py (page): fixed exception handling so things
4150 work both in Unix and Windows correctly. Quitting a pager triggers
4160 work both in Unix and Windows correctly. Quitting a pager triggers
4151 an IOError/broken pipe in Unix, and in windows not finding a pager
4161 an IOError/broken pipe in Unix, and in windows not finding a pager
4152 is also an IOError, so I had to actually look at the return value
4162 is also an IOError, so I had to actually look at the return value
4153 of the exception, not just the exception itself. Should be ok now.
4163 of the exception, not just the exception itself. Should be ok now.
4154
4164
4155 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4165 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4156 modified to allow case-insensitive color scheme changes.
4166 modified to allow case-insensitive color scheme changes.
4157
4167
4158 2002-02-09 Fernando Perez <fperez@colorado.edu>
4168 2002-02-09 Fernando Perez <fperez@colorado.edu>
4159
4169
4160 * IPython/genutils.py (native_line_ends): new function to leave
4170 * IPython/genutils.py (native_line_ends): new function to leave
4161 user config files with os-native line-endings.
4171 user config files with os-native line-endings.
4162
4172
4163 * README and manual updates.
4173 * README and manual updates.
4164
4174
4165 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4175 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4166 instead of StringType to catch Unicode strings.
4176 instead of StringType to catch Unicode strings.
4167
4177
4168 * IPython/genutils.py (filefind): fixed bug for paths with
4178 * IPython/genutils.py (filefind): fixed bug for paths with
4169 embedded spaces (very common in Windows).
4179 embedded spaces (very common in Windows).
4170
4180
4171 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4181 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4172 files under Windows, so that they get automatically associated
4182 files under Windows, so that they get automatically associated
4173 with a text editor. Windows makes it a pain to handle
4183 with a text editor. Windows makes it a pain to handle
4174 extension-less files.
4184 extension-less files.
4175
4185
4176 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4186 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4177 warning about readline only occur for Posix. In Windows there's no
4187 warning about readline only occur for Posix. In Windows there's no
4178 way to get readline, so why bother with the warning.
4188 way to get readline, so why bother with the warning.
4179
4189
4180 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4190 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4181 for __str__ instead of dir(self), since dir() changed in 2.2.
4191 for __str__ instead of dir(self), since dir() changed in 2.2.
4182
4192
4183 * Ported to Windows! Tested on XP, I suspect it should work fine
4193 * Ported to Windows! Tested on XP, I suspect it should work fine
4184 on NT/2000, but I don't think it will work on 98 et al. That
4194 on NT/2000, but I don't think it will work on 98 et al. That
4185 series of Windows is such a piece of junk anyway that I won't try
4195 series of Windows is such a piece of junk anyway that I won't try
4186 porting it there. The XP port was straightforward, showed a few
4196 porting it there. The XP port was straightforward, showed a few
4187 bugs here and there (fixed all), in particular some string
4197 bugs here and there (fixed all), in particular some string
4188 handling stuff which required considering Unicode strings (which
4198 handling stuff which required considering Unicode strings (which
4189 Windows uses). This is good, but hasn't been too tested :) No
4199 Windows uses). This is good, but hasn't been too tested :) No
4190 fancy installer yet, I'll put a note in the manual so people at
4200 fancy installer yet, I'll put a note in the manual so people at
4191 least make manually a shortcut.
4201 least make manually a shortcut.
4192
4202
4193 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4203 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4194 into a single one, "colors". This now controls both prompt and
4204 into a single one, "colors". This now controls both prompt and
4195 exception color schemes, and can be changed both at startup
4205 exception color schemes, and can be changed both at startup
4196 (either via command-line switches or via ipythonrc files) and at
4206 (either via command-line switches or via ipythonrc files) and at
4197 runtime, with @colors.
4207 runtime, with @colors.
4198 (Magic.magic_run): renamed @prun to @run and removed the old
4208 (Magic.magic_run): renamed @prun to @run and removed the old
4199 @run. The two were too similar to warrant keeping both.
4209 @run. The two were too similar to warrant keeping both.
4200
4210
4201 2002-02-03 Fernando Perez <fperez@colorado.edu>
4211 2002-02-03 Fernando Perez <fperez@colorado.edu>
4202
4212
4203 * IPython/iplib.py (install_first_time): Added comment on how to
4213 * IPython/iplib.py (install_first_time): Added comment on how to
4204 configure the color options for first-time users. Put a <return>
4214 configure the color options for first-time users. Put a <return>
4205 request at the end so that small-terminal users get a chance to
4215 request at the end so that small-terminal users get a chance to
4206 read the startup info.
4216 read the startup info.
4207
4217
4208 2002-01-23 Fernando Perez <fperez@colorado.edu>
4218 2002-01-23 Fernando Perez <fperez@colorado.edu>
4209
4219
4210 * IPython/iplib.py (CachedOutput.update): Changed output memory
4220 * IPython/iplib.py (CachedOutput.update): Changed output memory
4211 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4221 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4212 input history we still use _i. Did this b/c these variable are
4222 input history we still use _i. Did this b/c these variable are
4213 very commonly used in interactive work, so the less we need to
4223 very commonly used in interactive work, so the less we need to
4214 type the better off we are.
4224 type the better off we are.
4215 (Magic.magic_prun): updated @prun to better handle the namespaces
4225 (Magic.magic_prun): updated @prun to better handle the namespaces
4216 the file will run in, including a fix for __name__ not being set
4226 the file will run in, including a fix for __name__ not being set
4217 before.
4227 before.
4218
4228
4219 2002-01-20 Fernando Perez <fperez@colorado.edu>
4229 2002-01-20 Fernando Perez <fperez@colorado.edu>
4220
4230
4221 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4231 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4222 extra garbage for Python 2.2. Need to look more carefully into
4232 extra garbage for Python 2.2. Need to look more carefully into
4223 this later.
4233 this later.
4224
4234
4225 2002-01-19 Fernando Perez <fperez@colorado.edu>
4235 2002-01-19 Fernando Perez <fperez@colorado.edu>
4226
4236
4227 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4237 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4228 display SyntaxError exceptions properly formatted when they occur
4238 display SyntaxError exceptions properly formatted when they occur
4229 (they can be triggered by imported code).
4239 (they can be triggered by imported code).
4230
4240
4231 2002-01-18 Fernando Perez <fperez@colorado.edu>
4241 2002-01-18 Fernando Perez <fperez@colorado.edu>
4232
4242
4233 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4243 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4234 SyntaxError exceptions are reported nicely formatted, instead of
4244 SyntaxError exceptions are reported nicely formatted, instead of
4235 spitting out only offset information as before.
4245 spitting out only offset information as before.
4236 (Magic.magic_prun): Added the @prun function for executing
4246 (Magic.magic_prun): Added the @prun function for executing
4237 programs with command line args inside IPython.
4247 programs with command line args inside IPython.
4238
4248
4239 2002-01-16 Fernando Perez <fperez@colorado.edu>
4249 2002-01-16 Fernando Perez <fperez@colorado.edu>
4240
4250
4241 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4251 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4242 to *not* include the last item given in a range. This brings their
4252 to *not* include the last item given in a range. This brings their
4243 behavior in line with Python's slicing:
4253 behavior in line with Python's slicing:
4244 a[n1:n2] -> a[n1]...a[n2-1]
4254 a[n1:n2] -> a[n1]...a[n2-1]
4245 It may be a bit less convenient, but I prefer to stick to Python's
4255 It may be a bit less convenient, but I prefer to stick to Python's
4246 conventions *everywhere*, so users never have to wonder.
4256 conventions *everywhere*, so users never have to wonder.
4247 (Magic.magic_macro): Added @macro function to ease the creation of
4257 (Magic.magic_macro): Added @macro function to ease the creation of
4248 macros.
4258 macros.
4249
4259
4250 2002-01-05 Fernando Perez <fperez@colorado.edu>
4260 2002-01-05 Fernando Perez <fperez@colorado.edu>
4251
4261
4252 * Released 0.2.4.
4262 * Released 0.2.4.
4253
4263
4254 * IPython/iplib.py (Magic.magic_pdef):
4264 * IPython/iplib.py (Magic.magic_pdef):
4255 (InteractiveShell.safe_execfile): report magic lines and error
4265 (InteractiveShell.safe_execfile): report magic lines and error
4256 lines without line numbers so one can easily copy/paste them for
4266 lines without line numbers so one can easily copy/paste them for
4257 re-execution.
4267 re-execution.
4258
4268
4259 * Updated manual with recent changes.
4269 * Updated manual with recent changes.
4260
4270
4261 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4271 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4262 docstring printing when class? is called. Very handy for knowing
4272 docstring printing when class? is called. Very handy for knowing
4263 how to create class instances (as long as __init__ is well
4273 how to create class instances (as long as __init__ is well
4264 documented, of course :)
4274 documented, of course :)
4265 (Magic.magic_doc): print both class and constructor docstrings.
4275 (Magic.magic_doc): print both class and constructor docstrings.
4266 (Magic.magic_pdef): give constructor info if passed a class and
4276 (Magic.magic_pdef): give constructor info if passed a class and
4267 __call__ info for callable object instances.
4277 __call__ info for callable object instances.
4268
4278
4269 2002-01-04 Fernando Perez <fperez@colorado.edu>
4279 2002-01-04 Fernando Perez <fperez@colorado.edu>
4270
4280
4271 * Made deep_reload() off by default. It doesn't always work
4281 * Made deep_reload() off by default. It doesn't always work
4272 exactly as intended, so it's probably safer to have it off. It's
4282 exactly as intended, so it's probably safer to have it off. It's
4273 still available as dreload() anyway, so nothing is lost.
4283 still available as dreload() anyway, so nothing is lost.
4274
4284
4275 2002-01-02 Fernando Perez <fperez@colorado.edu>
4285 2002-01-02 Fernando Perez <fperez@colorado.edu>
4276
4286
4277 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4287 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4278 so I wanted an updated release).
4288 so I wanted an updated release).
4279
4289
4280 2001-12-27 Fernando Perez <fperez@colorado.edu>
4290 2001-12-27 Fernando Perez <fperez@colorado.edu>
4281
4291
4282 * IPython/iplib.py (InteractiveShell.interact): Added the original
4292 * IPython/iplib.py (InteractiveShell.interact): Added the original
4283 code from 'code.py' for this module in order to change the
4293 code from 'code.py' for this module in order to change the
4284 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4294 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4285 the history cache would break when the user hit Ctrl-C, and
4295 the history cache would break when the user hit Ctrl-C, and
4286 interact() offers no way to add any hooks to it.
4296 interact() offers no way to add any hooks to it.
4287
4297
4288 2001-12-23 Fernando Perez <fperez@colorado.edu>
4298 2001-12-23 Fernando Perez <fperez@colorado.edu>
4289
4299
4290 * setup.py: added check for 'MANIFEST' before trying to remove
4300 * setup.py: added check for 'MANIFEST' before trying to remove
4291 it. Thanks to Sean Reifschneider.
4301 it. Thanks to Sean Reifschneider.
4292
4302
4293 2001-12-22 Fernando Perez <fperez@colorado.edu>
4303 2001-12-22 Fernando Perez <fperez@colorado.edu>
4294
4304
4295 * Released 0.2.2.
4305 * Released 0.2.2.
4296
4306
4297 * Finished (reasonably) writing the manual. Later will add the
4307 * Finished (reasonably) writing the manual. Later will add the
4298 python-standard navigation stylesheets, but for the time being
4308 python-standard navigation stylesheets, but for the time being
4299 it's fairly complete. Distribution will include html and pdf
4309 it's fairly complete. Distribution will include html and pdf
4300 versions.
4310 versions.
4301
4311
4302 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4312 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4303 (MayaVi author).
4313 (MayaVi author).
4304
4314
4305 2001-12-21 Fernando Perez <fperez@colorado.edu>
4315 2001-12-21 Fernando Perez <fperez@colorado.edu>
4306
4316
4307 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4317 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4308 good public release, I think (with the manual and the distutils
4318 good public release, I think (with the manual and the distutils
4309 installer). The manual can use some work, but that can go
4319 installer). The manual can use some work, but that can go
4310 slowly. Otherwise I think it's quite nice for end users. Next
4320 slowly. Otherwise I think it's quite nice for end users. Next
4311 summer, rewrite the guts of it...
4321 summer, rewrite the guts of it...
4312
4322
4313 * Changed format of ipythonrc files to use whitespace as the
4323 * Changed format of ipythonrc files to use whitespace as the
4314 separator instead of an explicit '='. Cleaner.
4324 separator instead of an explicit '='. Cleaner.
4315
4325
4316 2001-12-20 Fernando Perez <fperez@colorado.edu>
4326 2001-12-20 Fernando Perez <fperez@colorado.edu>
4317
4327
4318 * Started a manual in LyX. For now it's just a quick merge of the
4328 * Started a manual in LyX. For now it's just a quick merge of the
4319 various internal docstrings and READMEs. Later it may grow into a
4329 various internal docstrings and READMEs. Later it may grow into a
4320 nice, full-blown manual.
4330 nice, full-blown manual.
4321
4331
4322 * Set up a distutils based installer. Installation should now be
4332 * Set up a distutils based installer. Installation should now be
4323 trivially simple for end-users.
4333 trivially simple for end-users.
4324
4334
4325 2001-12-11 Fernando Perez <fperez@colorado.edu>
4335 2001-12-11 Fernando Perez <fperez@colorado.edu>
4326
4336
4327 * Released 0.2.0. First public release, announced it at
4337 * Released 0.2.0. First public release, announced it at
4328 comp.lang.python. From now on, just bugfixes...
4338 comp.lang.python. From now on, just bugfixes...
4329
4339
4330 * Went through all the files, set copyright/license notices and
4340 * Went through all the files, set copyright/license notices and
4331 cleaned up things. Ready for release.
4341 cleaned up things. Ready for release.
4332
4342
4333 2001-12-10 Fernando Perez <fperez@colorado.edu>
4343 2001-12-10 Fernando Perez <fperez@colorado.edu>
4334
4344
4335 * Changed the first-time installer not to use tarfiles. It's more
4345 * Changed the first-time installer not to use tarfiles. It's more
4336 robust now and less unix-dependent. Also makes it easier for
4346 robust now and less unix-dependent. Also makes it easier for
4337 people to later upgrade versions.
4347 people to later upgrade versions.
4338
4348
4339 * Changed @exit to @abort to reflect the fact that it's pretty
4349 * Changed @exit to @abort to reflect the fact that it's pretty
4340 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4350 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4341 becomes significant only when IPyhton is embedded: in that case,
4351 becomes significant only when IPyhton is embedded: in that case,
4342 C-D closes IPython only, but @abort kills the enclosing program
4352 C-D closes IPython only, but @abort kills the enclosing program
4343 too (unless it had called IPython inside a try catching
4353 too (unless it had called IPython inside a try catching
4344 SystemExit).
4354 SystemExit).
4345
4355
4346 * Created Shell module which exposes the actuall IPython Shell
4356 * Created Shell module which exposes the actuall IPython Shell
4347 classes, currently the normal and the embeddable one. This at
4357 classes, currently the normal and the embeddable one. This at
4348 least offers a stable interface we won't need to change when
4358 least offers a stable interface we won't need to change when
4349 (later) the internals are rewritten. That rewrite will be confined
4359 (later) the internals are rewritten. That rewrite will be confined
4350 to iplib and ipmaker, but the Shell interface should remain as is.
4360 to iplib and ipmaker, but the Shell interface should remain as is.
4351
4361
4352 * Added embed module which offers an embeddable IPShell object,
4362 * Added embed module which offers an embeddable IPShell object,
4353 useful to fire up IPython *inside* a running program. Great for
4363 useful to fire up IPython *inside* a running program. Great for
4354 debugging or dynamical data analysis.
4364 debugging or dynamical data analysis.
4355
4365
4356 2001-12-08 Fernando Perez <fperez@colorado.edu>
4366 2001-12-08 Fernando Perez <fperez@colorado.edu>
4357
4367
4358 * Fixed small bug preventing seeing info from methods of defined
4368 * Fixed small bug preventing seeing info from methods of defined
4359 objects (incorrect namespace in _ofind()).
4369 objects (incorrect namespace in _ofind()).
4360
4370
4361 * Documentation cleanup. Moved the main usage docstrings to a
4371 * Documentation cleanup. Moved the main usage docstrings to a
4362 separate file, usage.py (cleaner to maintain, and hopefully in the
4372 separate file, usage.py (cleaner to maintain, and hopefully in the
4363 future some perlpod-like way of producing interactive, man and
4373 future some perlpod-like way of producing interactive, man and
4364 html docs out of it will be found).
4374 html docs out of it will be found).
4365
4375
4366 * Added @profile to see your profile at any time.
4376 * Added @profile to see your profile at any time.
4367
4377
4368 * Added @p as an alias for 'print'. It's especially convenient if
4378 * Added @p as an alias for 'print'. It's especially convenient if
4369 using automagic ('p x' prints x).
4379 using automagic ('p x' prints x).
4370
4380
4371 * Small cleanups and fixes after a pychecker run.
4381 * Small cleanups and fixes after a pychecker run.
4372
4382
4373 * Changed the @cd command to handle @cd - and @cd -<n> for
4383 * Changed the @cd command to handle @cd - and @cd -<n> for
4374 visiting any directory in _dh.
4384 visiting any directory in _dh.
4375
4385
4376 * Introduced _dh, a history of visited directories. @dhist prints
4386 * Introduced _dh, a history of visited directories. @dhist prints
4377 it out with numbers.
4387 it out with numbers.
4378
4388
4379 2001-12-07 Fernando Perez <fperez@colorado.edu>
4389 2001-12-07 Fernando Perez <fperez@colorado.edu>
4380
4390
4381 * Released 0.1.22
4391 * Released 0.1.22
4382
4392
4383 * Made initialization a bit more robust against invalid color
4393 * Made initialization a bit more robust against invalid color
4384 options in user input (exit, not traceback-crash).
4394 options in user input (exit, not traceback-crash).
4385
4395
4386 * Changed the bug crash reporter to write the report only in the
4396 * Changed the bug crash reporter to write the report only in the
4387 user's .ipython directory. That way IPython won't litter people's
4397 user's .ipython directory. That way IPython won't litter people's
4388 hard disks with crash files all over the place. Also print on
4398 hard disks with crash files all over the place. Also print on
4389 screen the necessary mail command.
4399 screen the necessary mail command.
4390
4400
4391 * With the new ultraTB, implemented LightBG color scheme for light
4401 * With the new ultraTB, implemented LightBG color scheme for light
4392 background terminals. A lot of people like white backgrounds, so I
4402 background terminals. A lot of people like white backgrounds, so I
4393 guess we should at least give them something readable.
4403 guess we should at least give them something readable.
4394
4404
4395 2001-12-06 Fernando Perez <fperez@colorado.edu>
4405 2001-12-06 Fernando Perez <fperez@colorado.edu>
4396
4406
4397 * Modified the structure of ultraTB. Now there's a proper class
4407 * Modified the structure of ultraTB. Now there's a proper class
4398 for tables of color schemes which allow adding schemes easily and
4408 for tables of color schemes which allow adding schemes easily and
4399 switching the active scheme without creating a new instance every
4409 switching the active scheme without creating a new instance every
4400 time (which was ridiculous). The syntax for creating new schemes
4410 time (which was ridiculous). The syntax for creating new schemes
4401 is also cleaner. I think ultraTB is finally done, with a clean
4411 is also cleaner. I think ultraTB is finally done, with a clean
4402 class structure. Names are also much cleaner (now there's proper
4412 class structure. Names are also much cleaner (now there's proper
4403 color tables, no need for every variable to also have 'color' in
4413 color tables, no need for every variable to also have 'color' in
4404 its name).
4414 its name).
4405
4415
4406 * Broke down genutils into separate files. Now genutils only
4416 * Broke down genutils into separate files. Now genutils only
4407 contains utility functions, and classes have been moved to their
4417 contains utility functions, and classes have been moved to their
4408 own files (they had enough independent functionality to warrant
4418 own files (they had enough independent functionality to warrant
4409 it): ConfigLoader, OutputTrap, Struct.
4419 it): ConfigLoader, OutputTrap, Struct.
4410
4420
4411 2001-12-05 Fernando Perez <fperez@colorado.edu>
4421 2001-12-05 Fernando Perez <fperez@colorado.edu>
4412
4422
4413 * IPython turns 21! Released version 0.1.21, as a candidate for
4423 * IPython turns 21! Released version 0.1.21, as a candidate for
4414 public consumption. If all goes well, release in a few days.
4424 public consumption. If all goes well, release in a few days.
4415
4425
4416 * Fixed path bug (files in Extensions/ directory wouldn't be found
4426 * Fixed path bug (files in Extensions/ directory wouldn't be found
4417 unless IPython/ was explicitly in sys.path).
4427 unless IPython/ was explicitly in sys.path).
4418
4428
4419 * Extended the FlexCompleter class as MagicCompleter to allow
4429 * Extended the FlexCompleter class as MagicCompleter to allow
4420 completion of @-starting lines.
4430 completion of @-starting lines.
4421
4431
4422 * Created __release__.py file as a central repository for release
4432 * Created __release__.py file as a central repository for release
4423 info that other files can read from.
4433 info that other files can read from.
4424
4434
4425 * Fixed small bug in logging: when logging was turned on in
4435 * Fixed small bug in logging: when logging was turned on in
4426 mid-session, old lines with special meanings (!@?) were being
4436 mid-session, old lines with special meanings (!@?) were being
4427 logged without the prepended comment, which is necessary since
4437 logged without the prepended comment, which is necessary since
4428 they are not truly valid python syntax. This should make session
4438 they are not truly valid python syntax. This should make session
4429 restores produce less errors.
4439 restores produce less errors.
4430
4440
4431 * The namespace cleanup forced me to make a FlexCompleter class
4441 * The namespace cleanup forced me to make a FlexCompleter class
4432 which is nothing but a ripoff of rlcompleter, but with selectable
4442 which is nothing but a ripoff of rlcompleter, but with selectable
4433 namespace (rlcompleter only works in __main__.__dict__). I'll try
4443 namespace (rlcompleter only works in __main__.__dict__). I'll try
4434 to submit a note to the authors to see if this change can be
4444 to submit a note to the authors to see if this change can be
4435 incorporated in future rlcompleter releases (Dec.6: done)
4445 incorporated in future rlcompleter releases (Dec.6: done)
4436
4446
4437 * More fixes to namespace handling. It was a mess! Now all
4447 * More fixes to namespace handling. It was a mess! Now all
4438 explicit references to __main__.__dict__ are gone (except when
4448 explicit references to __main__.__dict__ are gone (except when
4439 really needed) and everything is handled through the namespace
4449 really needed) and everything is handled through the namespace
4440 dicts in the IPython instance. We seem to be getting somewhere
4450 dicts in the IPython instance. We seem to be getting somewhere
4441 with this, finally...
4451 with this, finally...
4442
4452
4443 * Small documentation updates.
4453 * Small documentation updates.
4444
4454
4445 * Created the Extensions directory under IPython (with an
4455 * Created the Extensions directory under IPython (with an
4446 __init__.py). Put the PhysicalQ stuff there. This directory should
4456 __init__.py). Put the PhysicalQ stuff there. This directory should
4447 be used for all special-purpose extensions.
4457 be used for all special-purpose extensions.
4448
4458
4449 * File renaming:
4459 * File renaming:
4450 ipythonlib --> ipmaker
4460 ipythonlib --> ipmaker
4451 ipplib --> iplib
4461 ipplib --> iplib
4452 This makes a bit more sense in terms of what these files actually do.
4462 This makes a bit more sense in terms of what these files actually do.
4453
4463
4454 * Moved all the classes and functions in ipythonlib to ipplib, so
4464 * Moved all the classes and functions in ipythonlib to ipplib, so
4455 now ipythonlib only has make_IPython(). This will ease up its
4465 now ipythonlib only has make_IPython(). This will ease up its
4456 splitting in smaller functional chunks later.
4466 splitting in smaller functional chunks later.
4457
4467
4458 * Cleaned up (done, I think) output of @whos. Better column
4468 * Cleaned up (done, I think) output of @whos. Better column
4459 formatting, and now shows str(var) for as much as it can, which is
4469 formatting, and now shows str(var) for as much as it can, which is
4460 typically what one gets with a 'print var'.
4470 typically what one gets with a 'print var'.
4461
4471
4462 2001-12-04 Fernando Perez <fperez@colorado.edu>
4472 2001-12-04 Fernando Perez <fperez@colorado.edu>
4463
4473
4464 * Fixed namespace problems. Now builtin/IPyhton/user names get
4474 * Fixed namespace problems. Now builtin/IPyhton/user names get
4465 properly reported in their namespace. Internal namespace handling
4475 properly reported in their namespace. Internal namespace handling
4466 is finally getting decent (not perfect yet, but much better than
4476 is finally getting decent (not perfect yet, but much better than
4467 the ad-hoc mess we had).
4477 the ad-hoc mess we had).
4468
4478
4469 * Removed -exit option. If people just want to run a python
4479 * Removed -exit option. If people just want to run a python
4470 script, that's what the normal interpreter is for. Less
4480 script, that's what the normal interpreter is for. Less
4471 unnecessary options, less chances for bugs.
4481 unnecessary options, less chances for bugs.
4472
4482
4473 * Added a crash handler which generates a complete post-mortem if
4483 * Added a crash handler which generates a complete post-mortem if
4474 IPython crashes. This will help a lot in tracking bugs down the
4484 IPython crashes. This will help a lot in tracking bugs down the
4475 road.
4485 road.
4476
4486
4477 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4487 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4478 which were boud to functions being reassigned would bypass the
4488 which were boud to functions being reassigned would bypass the
4479 logger, breaking the sync of _il with the prompt counter. This
4489 logger, breaking the sync of _il with the prompt counter. This
4480 would then crash IPython later when a new line was logged.
4490 would then crash IPython later when a new line was logged.
4481
4491
4482 2001-12-02 Fernando Perez <fperez@colorado.edu>
4492 2001-12-02 Fernando Perez <fperez@colorado.edu>
4483
4493
4484 * Made IPython a package. This means people don't have to clutter
4494 * Made IPython a package. This means people don't have to clutter
4485 their sys.path with yet another directory. Changed the INSTALL
4495 their sys.path with yet another directory. Changed the INSTALL
4486 file accordingly.
4496 file accordingly.
4487
4497
4488 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4498 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4489 sorts its output (so @who shows it sorted) and @whos formats the
4499 sorts its output (so @who shows it sorted) and @whos formats the
4490 table according to the width of the first column. Nicer, easier to
4500 table according to the width of the first column. Nicer, easier to
4491 read. Todo: write a generic table_format() which takes a list of
4501 read. Todo: write a generic table_format() which takes a list of
4492 lists and prints it nicely formatted, with optional row/column
4502 lists and prints it nicely formatted, with optional row/column
4493 separators and proper padding and justification.
4503 separators and proper padding and justification.
4494
4504
4495 * Released 0.1.20
4505 * Released 0.1.20
4496
4506
4497 * Fixed bug in @log which would reverse the inputcache list (a
4507 * Fixed bug in @log which would reverse the inputcache list (a
4498 copy operation was missing).
4508 copy operation was missing).
4499
4509
4500 * Code cleanup. @config was changed to use page(). Better, since
4510 * Code cleanup. @config was changed to use page(). Better, since
4501 its output is always quite long.
4511 its output is always quite long.
4502
4512
4503 * Itpl is back as a dependency. I was having too many problems
4513 * Itpl is back as a dependency. I was having too many problems
4504 getting the parametric aliases to work reliably, and it's just
4514 getting the parametric aliases to work reliably, and it's just
4505 easier to code weird string operations with it than playing %()s
4515 easier to code weird string operations with it than playing %()s
4506 games. It's only ~6k, so I don't think it's too big a deal.
4516 games. It's only ~6k, so I don't think it's too big a deal.
4507
4517
4508 * Found (and fixed) a very nasty bug with history. !lines weren't
4518 * Found (and fixed) a very nasty bug with history. !lines weren't
4509 getting cached, and the out of sync caches would crash
4519 getting cached, and the out of sync caches would crash
4510 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4520 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4511 division of labor a bit better. Bug fixed, cleaner structure.
4521 division of labor a bit better. Bug fixed, cleaner structure.
4512
4522
4513 2001-12-01 Fernando Perez <fperez@colorado.edu>
4523 2001-12-01 Fernando Perez <fperez@colorado.edu>
4514
4524
4515 * Released 0.1.19
4525 * Released 0.1.19
4516
4526
4517 * Added option -n to @hist to prevent line number printing. Much
4527 * Added option -n to @hist to prevent line number printing. Much
4518 easier to copy/paste code this way.
4528 easier to copy/paste code this way.
4519
4529
4520 * Created global _il to hold the input list. Allows easy
4530 * Created global _il to hold the input list. Allows easy
4521 re-execution of blocks of code by slicing it (inspired by Janko's
4531 re-execution of blocks of code by slicing it (inspired by Janko's
4522 comment on 'macros').
4532 comment on 'macros').
4523
4533
4524 * Small fixes and doc updates.
4534 * Small fixes and doc updates.
4525
4535
4526 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4536 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4527 much too fragile with automagic. Handles properly multi-line
4537 much too fragile with automagic. Handles properly multi-line
4528 statements and takes parameters.
4538 statements and takes parameters.
4529
4539
4530 2001-11-30 Fernando Perez <fperez@colorado.edu>
4540 2001-11-30 Fernando Perez <fperez@colorado.edu>
4531
4541
4532 * Version 0.1.18 released.
4542 * Version 0.1.18 released.
4533
4543
4534 * Fixed nasty namespace bug in initial module imports.
4544 * Fixed nasty namespace bug in initial module imports.
4535
4545
4536 * Added copyright/license notes to all code files (except
4546 * Added copyright/license notes to all code files (except
4537 DPyGetOpt). For the time being, LGPL. That could change.
4547 DPyGetOpt). For the time being, LGPL. That could change.
4538
4548
4539 * Rewrote a much nicer README, updated INSTALL, cleaned up
4549 * Rewrote a much nicer README, updated INSTALL, cleaned up
4540 ipythonrc-* samples.
4550 ipythonrc-* samples.
4541
4551
4542 * Overall code/documentation cleanup. Basically ready for
4552 * Overall code/documentation cleanup. Basically ready for
4543 release. Only remaining thing: licence decision (LGPL?).
4553 release. Only remaining thing: licence decision (LGPL?).
4544
4554
4545 * Converted load_config to a class, ConfigLoader. Now recursion
4555 * Converted load_config to a class, ConfigLoader. Now recursion
4546 control is better organized. Doesn't include the same file twice.
4556 control is better organized. Doesn't include the same file twice.
4547
4557
4548 2001-11-29 Fernando Perez <fperez@colorado.edu>
4558 2001-11-29 Fernando Perez <fperez@colorado.edu>
4549
4559
4550 * Got input history working. Changed output history variables from
4560 * Got input history working. Changed output history variables from
4551 _p to _o so that _i is for input and _o for output. Just cleaner
4561 _p to _o so that _i is for input and _o for output. Just cleaner
4552 convention.
4562 convention.
4553
4563
4554 * Implemented parametric aliases. This pretty much allows the
4564 * Implemented parametric aliases. This pretty much allows the
4555 alias system to offer full-blown shell convenience, I think.
4565 alias system to offer full-blown shell convenience, I think.
4556
4566
4557 * Version 0.1.17 released, 0.1.18 opened.
4567 * Version 0.1.17 released, 0.1.18 opened.
4558
4568
4559 * dot_ipython/ipythonrc (alias): added documentation.
4569 * dot_ipython/ipythonrc (alias): added documentation.
4560 (xcolor): Fixed small bug (xcolors -> xcolor)
4570 (xcolor): Fixed small bug (xcolors -> xcolor)
4561
4571
4562 * Changed the alias system. Now alias is a magic command to define
4572 * Changed the alias system. Now alias is a magic command to define
4563 aliases just like the shell. Rationale: the builtin magics should
4573 aliases just like the shell. Rationale: the builtin magics should
4564 be there for things deeply connected to IPython's
4574 be there for things deeply connected to IPython's
4565 architecture. And this is a much lighter system for what I think
4575 architecture. And this is a much lighter system for what I think
4566 is the really important feature: allowing users to define quickly
4576 is the really important feature: allowing users to define quickly
4567 magics that will do shell things for them, so they can customize
4577 magics that will do shell things for them, so they can customize
4568 IPython easily to match their work habits. If someone is really
4578 IPython easily to match their work habits. If someone is really
4569 desperate to have another name for a builtin alias, they can
4579 desperate to have another name for a builtin alias, they can
4570 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4580 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4571 works.
4581 works.
4572
4582
4573 2001-11-28 Fernando Perez <fperez@colorado.edu>
4583 2001-11-28 Fernando Perez <fperez@colorado.edu>
4574
4584
4575 * Changed @file so that it opens the source file at the proper
4585 * Changed @file so that it opens the source file at the proper
4576 line. Since it uses less, if your EDITOR environment is
4586 line. Since it uses less, if your EDITOR environment is
4577 configured, typing v will immediately open your editor of choice
4587 configured, typing v will immediately open your editor of choice
4578 right at the line where the object is defined. Not as quick as
4588 right at the line where the object is defined. Not as quick as
4579 having a direct @edit command, but for all intents and purposes it
4589 having a direct @edit command, but for all intents and purposes it
4580 works. And I don't have to worry about writing @edit to deal with
4590 works. And I don't have to worry about writing @edit to deal with
4581 all the editors, less does that.
4591 all the editors, less does that.
4582
4592
4583 * Version 0.1.16 released, 0.1.17 opened.
4593 * Version 0.1.16 released, 0.1.17 opened.
4584
4594
4585 * Fixed some nasty bugs in the page/page_dumb combo that could
4595 * Fixed some nasty bugs in the page/page_dumb combo that could
4586 crash IPython.
4596 crash IPython.
4587
4597
4588 2001-11-27 Fernando Perez <fperez@colorado.edu>
4598 2001-11-27 Fernando Perez <fperez@colorado.edu>
4589
4599
4590 * Version 0.1.15 released, 0.1.16 opened.
4600 * Version 0.1.15 released, 0.1.16 opened.
4591
4601
4592 * Finally got ? and ?? to work for undefined things: now it's
4602 * Finally got ? and ?? to work for undefined things: now it's
4593 possible to type {}.get? and get information about the get method
4603 possible to type {}.get? and get information about the get method
4594 of dicts, or os.path? even if only os is defined (so technically
4604 of dicts, or os.path? even if only os is defined (so technically
4595 os.path isn't). Works at any level. For example, after import os,
4605 os.path isn't). Works at any level. For example, after import os,
4596 os?, os.path?, os.path.abspath? all work. This is great, took some
4606 os?, os.path?, os.path.abspath? all work. This is great, took some
4597 work in _ofind.
4607 work in _ofind.
4598
4608
4599 * Fixed more bugs with logging. The sanest way to do it was to add
4609 * Fixed more bugs with logging. The sanest way to do it was to add
4600 to @log a 'mode' parameter. Killed two in one shot (this mode
4610 to @log a 'mode' parameter. Killed two in one shot (this mode
4601 option was a request of Janko's). I think it's finally clean
4611 option was a request of Janko's). I think it's finally clean
4602 (famous last words).
4612 (famous last words).
4603
4613
4604 * Added a page_dumb() pager which does a decent job of paging on
4614 * Added a page_dumb() pager which does a decent job of paging on
4605 screen, if better things (like less) aren't available. One less
4615 screen, if better things (like less) aren't available. One less
4606 unix dependency (someday maybe somebody will port this to
4616 unix dependency (someday maybe somebody will port this to
4607 windows).
4617 windows).
4608
4618
4609 * Fixed problem in magic_log: would lock of logging out if log
4619 * Fixed problem in magic_log: would lock of logging out if log
4610 creation failed (because it would still think it had succeeded).
4620 creation failed (because it would still think it had succeeded).
4611
4621
4612 * Improved the page() function using curses to auto-detect screen
4622 * Improved the page() function using curses to auto-detect screen
4613 size. Now it can make a much better decision on whether to print
4623 size. Now it can make a much better decision on whether to print
4614 or page a string. Option screen_length was modified: a value 0
4624 or page a string. Option screen_length was modified: a value 0
4615 means auto-detect, and that's the default now.
4625 means auto-detect, and that's the default now.
4616
4626
4617 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4627 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4618 go out. I'll test it for a few days, then talk to Janko about
4628 go out. I'll test it for a few days, then talk to Janko about
4619 licences and announce it.
4629 licences and announce it.
4620
4630
4621 * Fixed the length of the auto-generated ---> prompt which appears
4631 * Fixed the length of the auto-generated ---> prompt which appears
4622 for auto-parens and auto-quotes. Getting this right isn't trivial,
4632 for auto-parens and auto-quotes. Getting this right isn't trivial,
4623 with all the color escapes, different prompt types and optional
4633 with all the color escapes, different prompt types and optional
4624 separators. But it seems to be working in all the combinations.
4634 separators. But it seems to be working in all the combinations.
4625
4635
4626 2001-11-26 Fernando Perez <fperez@colorado.edu>
4636 2001-11-26 Fernando Perez <fperez@colorado.edu>
4627
4637
4628 * Wrote a regexp filter to get option types from the option names
4638 * Wrote a regexp filter to get option types from the option names
4629 string. This eliminates the need to manually keep two duplicate
4639 string. This eliminates the need to manually keep two duplicate
4630 lists.
4640 lists.
4631
4641
4632 * Removed the unneeded check_option_names. Now options are handled
4642 * Removed the unneeded check_option_names. Now options are handled
4633 in a much saner manner and it's easy to visually check that things
4643 in a much saner manner and it's easy to visually check that things
4634 are ok.
4644 are ok.
4635
4645
4636 * Updated version numbers on all files I modified to carry a
4646 * Updated version numbers on all files I modified to carry a
4637 notice so Janko and Nathan have clear version markers.
4647 notice so Janko and Nathan have clear version markers.
4638
4648
4639 * Updated docstring for ultraTB with my changes. I should send
4649 * Updated docstring for ultraTB with my changes. I should send
4640 this to Nathan.
4650 this to Nathan.
4641
4651
4642 * Lots of small fixes. Ran everything through pychecker again.
4652 * Lots of small fixes. Ran everything through pychecker again.
4643
4653
4644 * Made loading of deep_reload an cmd line option. If it's not too
4654 * Made loading of deep_reload an cmd line option. If it's not too
4645 kosher, now people can just disable it. With -nodeep_reload it's
4655 kosher, now people can just disable it. With -nodeep_reload it's
4646 still available as dreload(), it just won't overwrite reload().
4656 still available as dreload(), it just won't overwrite reload().
4647
4657
4648 * Moved many options to the no| form (-opt and -noopt
4658 * Moved many options to the no| form (-opt and -noopt
4649 accepted). Cleaner.
4659 accepted). Cleaner.
4650
4660
4651 * Changed magic_log so that if called with no parameters, it uses
4661 * Changed magic_log so that if called with no parameters, it uses
4652 'rotate' mode. That way auto-generated logs aren't automatically
4662 'rotate' mode. That way auto-generated logs aren't automatically
4653 over-written. For normal logs, now a backup is made if it exists
4663 over-written. For normal logs, now a backup is made if it exists
4654 (only 1 level of backups). A new 'backup' mode was added to the
4664 (only 1 level of backups). A new 'backup' mode was added to the
4655 Logger class to support this. This was a request by Janko.
4665 Logger class to support this. This was a request by Janko.
4656
4666
4657 * Added @logoff/@logon to stop/restart an active log.
4667 * Added @logoff/@logon to stop/restart an active log.
4658
4668
4659 * Fixed a lot of bugs in log saving/replay. It was pretty
4669 * Fixed a lot of bugs in log saving/replay. It was pretty
4660 broken. Now special lines (!@,/) appear properly in the command
4670 broken. Now special lines (!@,/) appear properly in the command
4661 history after a log replay.
4671 history after a log replay.
4662
4672
4663 * Tried and failed to implement full session saving via pickle. My
4673 * Tried and failed to implement full session saving via pickle. My
4664 idea was to pickle __main__.__dict__, but modules can't be
4674 idea was to pickle __main__.__dict__, but modules can't be
4665 pickled. This would be a better alternative to replaying logs, but
4675 pickled. This would be a better alternative to replaying logs, but
4666 seems quite tricky to get to work. Changed -session to be called
4676 seems quite tricky to get to work. Changed -session to be called
4667 -logplay, which more accurately reflects what it does. And if we
4677 -logplay, which more accurately reflects what it does. And if we
4668 ever get real session saving working, -session is now available.
4678 ever get real session saving working, -session is now available.
4669
4679
4670 * Implemented color schemes for prompts also. As for tracebacks,
4680 * Implemented color schemes for prompts also. As for tracebacks,
4671 currently only NoColor and Linux are supported. But now the
4681 currently only NoColor and Linux are supported. But now the
4672 infrastructure is in place, based on a generic ColorScheme
4682 infrastructure is in place, based on a generic ColorScheme
4673 class. So writing and activating new schemes both for the prompts
4683 class. So writing and activating new schemes both for the prompts
4674 and the tracebacks should be straightforward.
4684 and the tracebacks should be straightforward.
4675
4685
4676 * Version 0.1.13 released, 0.1.14 opened.
4686 * Version 0.1.13 released, 0.1.14 opened.
4677
4687
4678 * Changed handling of options for output cache. Now counter is
4688 * Changed handling of options for output cache. Now counter is
4679 hardwired starting at 1 and one specifies the maximum number of
4689 hardwired starting at 1 and one specifies the maximum number of
4680 entries *in the outcache* (not the max prompt counter). This is
4690 entries *in the outcache* (not the max prompt counter). This is
4681 much better, since many statements won't increase the cache
4691 much better, since many statements won't increase the cache
4682 count. It also eliminated some confusing options, now there's only
4692 count. It also eliminated some confusing options, now there's only
4683 one: cache_size.
4693 one: cache_size.
4684
4694
4685 * Added 'alias' magic function and magic_alias option in the
4695 * Added 'alias' magic function and magic_alias option in the
4686 ipythonrc file. Now the user can easily define whatever names he
4696 ipythonrc file. Now the user can easily define whatever names he
4687 wants for the magic functions without having to play weird
4697 wants for the magic functions without having to play weird
4688 namespace games. This gives IPython a real shell-like feel.
4698 namespace games. This gives IPython a real shell-like feel.
4689
4699
4690 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4700 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4691 @ or not).
4701 @ or not).
4692
4702
4693 This was one of the last remaining 'visible' bugs (that I know
4703 This was one of the last remaining 'visible' bugs (that I know
4694 of). I think if I can clean up the session loading so it works
4704 of). I think if I can clean up the session loading so it works
4695 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4705 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4696 about licensing).
4706 about licensing).
4697
4707
4698 2001-11-25 Fernando Perez <fperez@colorado.edu>
4708 2001-11-25 Fernando Perez <fperez@colorado.edu>
4699
4709
4700 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4710 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4701 there's a cleaner distinction between what ? and ?? show.
4711 there's a cleaner distinction between what ? and ?? show.
4702
4712
4703 * Added screen_length option. Now the user can define his own
4713 * Added screen_length option. Now the user can define his own
4704 screen size for page() operations.
4714 screen size for page() operations.
4705
4715
4706 * Implemented magic shell-like functions with automatic code
4716 * Implemented magic shell-like functions with automatic code
4707 generation. Now adding another function is just a matter of adding
4717 generation. Now adding another function is just a matter of adding
4708 an entry to a dict, and the function is dynamically generated at
4718 an entry to a dict, and the function is dynamically generated at
4709 run-time. Python has some really cool features!
4719 run-time. Python has some really cool features!
4710
4720
4711 * Renamed many options to cleanup conventions a little. Now all
4721 * Renamed many options to cleanup conventions a little. Now all
4712 are lowercase, and only underscores where needed. Also in the code
4722 are lowercase, and only underscores where needed. Also in the code
4713 option name tables are clearer.
4723 option name tables are clearer.
4714
4724
4715 * Changed prompts a little. Now input is 'In [n]:' instead of
4725 * Changed prompts a little. Now input is 'In [n]:' instead of
4716 'In[n]:='. This allows it the numbers to be aligned with the
4726 'In[n]:='. This allows it the numbers to be aligned with the
4717 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4727 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4718 Python (it was a Mathematica thing). The '...' continuation prompt
4728 Python (it was a Mathematica thing). The '...' continuation prompt
4719 was also changed a little to align better.
4729 was also changed a little to align better.
4720
4730
4721 * Fixed bug when flushing output cache. Not all _p<n> variables
4731 * Fixed bug when flushing output cache. Not all _p<n> variables
4722 exist, so their deletion needs to be wrapped in a try:
4732 exist, so their deletion needs to be wrapped in a try:
4723
4733
4724 * Figured out how to properly use inspect.formatargspec() (it
4734 * Figured out how to properly use inspect.formatargspec() (it
4725 requires the args preceded by *). So I removed all the code from
4735 requires the args preceded by *). So I removed all the code from
4726 _get_pdef in Magic, which was just replicating that.
4736 _get_pdef in Magic, which was just replicating that.
4727
4737
4728 * Added test to prefilter to allow redefining magic function names
4738 * Added test to prefilter to allow redefining magic function names
4729 as variables. This is ok, since the @ form is always available,
4739 as variables. This is ok, since the @ form is always available,
4730 but whe should allow the user to define a variable called 'ls' if
4740 but whe should allow the user to define a variable called 'ls' if
4731 he needs it.
4741 he needs it.
4732
4742
4733 * Moved the ToDo information from README into a separate ToDo.
4743 * Moved the ToDo information from README into a separate ToDo.
4734
4744
4735 * General code cleanup and small bugfixes. I think it's close to a
4745 * General code cleanup and small bugfixes. I think it's close to a
4736 state where it can be released, obviously with a big 'beta'
4746 state where it can be released, obviously with a big 'beta'
4737 warning on it.
4747 warning on it.
4738
4748
4739 * Got the magic function split to work. Now all magics are defined
4749 * Got the magic function split to work. Now all magics are defined
4740 in a separate class. It just organizes things a bit, and now
4750 in a separate class. It just organizes things a bit, and now
4741 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4751 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4742 was too long).
4752 was too long).
4743
4753
4744 * Changed @clear to @reset to avoid potential confusions with
4754 * Changed @clear to @reset to avoid potential confusions with
4745 the shell command clear. Also renamed @cl to @clear, which does
4755 the shell command clear. Also renamed @cl to @clear, which does
4746 exactly what people expect it to from their shell experience.
4756 exactly what people expect it to from their shell experience.
4747
4757
4748 Added a check to the @reset command (since it's so
4758 Added a check to the @reset command (since it's so
4749 destructive, it's probably a good idea to ask for confirmation).
4759 destructive, it's probably a good idea to ask for confirmation).
4750 But now reset only works for full namespace resetting. Since the
4760 But now reset only works for full namespace resetting. Since the
4751 del keyword is already there for deleting a few specific
4761 del keyword is already there for deleting a few specific
4752 variables, I don't see the point of having a redundant magic
4762 variables, I don't see the point of having a redundant magic
4753 function for the same task.
4763 function for the same task.
4754
4764
4755 2001-11-24 Fernando Perez <fperez@colorado.edu>
4765 2001-11-24 Fernando Perez <fperez@colorado.edu>
4756
4766
4757 * Updated the builtin docs (esp. the ? ones).
4767 * Updated the builtin docs (esp. the ? ones).
4758
4768
4759 * Ran all the code through pychecker. Not terribly impressed with
4769 * Ran all the code through pychecker. Not terribly impressed with
4760 it: lots of spurious warnings and didn't really find anything of
4770 it: lots of spurious warnings and didn't really find anything of
4761 substance (just a few modules being imported and not used).
4771 substance (just a few modules being imported and not used).
4762
4772
4763 * Implemented the new ultraTB functionality into IPython. New
4773 * Implemented the new ultraTB functionality into IPython. New
4764 option: xcolors. This chooses color scheme. xmode now only selects
4774 option: xcolors. This chooses color scheme. xmode now only selects
4765 between Plain and Verbose. Better orthogonality.
4775 between Plain and Verbose. Better orthogonality.
4766
4776
4767 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4777 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4768 mode and color scheme for the exception handlers. Now it's
4778 mode and color scheme for the exception handlers. Now it's
4769 possible to have the verbose traceback with no coloring.
4779 possible to have the verbose traceback with no coloring.
4770
4780
4771 2001-11-23 Fernando Perez <fperez@colorado.edu>
4781 2001-11-23 Fernando Perez <fperez@colorado.edu>
4772
4782
4773 * Version 0.1.12 released, 0.1.13 opened.
4783 * Version 0.1.12 released, 0.1.13 opened.
4774
4784
4775 * Removed option to set auto-quote and auto-paren escapes by
4785 * Removed option to set auto-quote and auto-paren escapes by
4776 user. The chances of breaking valid syntax are just too high. If
4786 user. The chances of breaking valid syntax are just too high. If
4777 someone *really* wants, they can always dig into the code.
4787 someone *really* wants, they can always dig into the code.
4778
4788
4779 * Made prompt separators configurable.
4789 * Made prompt separators configurable.
4780
4790
4781 2001-11-22 Fernando Perez <fperez@colorado.edu>
4791 2001-11-22 Fernando Perez <fperez@colorado.edu>
4782
4792
4783 * Small bugfixes in many places.
4793 * Small bugfixes in many places.
4784
4794
4785 * Removed the MyCompleter class from ipplib. It seemed redundant
4795 * Removed the MyCompleter class from ipplib. It seemed redundant
4786 with the C-p,C-n history search functionality. Less code to
4796 with the C-p,C-n history search functionality. Less code to
4787 maintain.
4797 maintain.
4788
4798
4789 * Moved all the original ipython.py code into ipythonlib.py. Right
4799 * Moved all the original ipython.py code into ipythonlib.py. Right
4790 now it's just one big dump into a function called make_IPython, so
4800 now it's just one big dump into a function called make_IPython, so
4791 no real modularity has been gained. But at least it makes the
4801 no real modularity has been gained. But at least it makes the
4792 wrapper script tiny, and since ipythonlib is a module, it gets
4802 wrapper script tiny, and since ipythonlib is a module, it gets
4793 compiled and startup is much faster.
4803 compiled and startup is much faster.
4794
4804
4795 This is a reasobably 'deep' change, so we should test it for a
4805 This is a reasobably 'deep' change, so we should test it for a
4796 while without messing too much more with the code.
4806 while without messing too much more with the code.
4797
4807
4798 2001-11-21 Fernando Perez <fperez@colorado.edu>
4808 2001-11-21 Fernando Perez <fperez@colorado.edu>
4799
4809
4800 * Version 0.1.11 released, 0.1.12 opened for further work.
4810 * Version 0.1.11 released, 0.1.12 opened for further work.
4801
4811
4802 * Removed dependency on Itpl. It was only needed in one place. It
4812 * Removed dependency on Itpl. It was only needed in one place. It
4803 would be nice if this became part of python, though. It makes life
4813 would be nice if this became part of python, though. It makes life
4804 *a lot* easier in some cases.
4814 *a lot* easier in some cases.
4805
4815
4806 * Simplified the prefilter code a bit. Now all handlers are
4816 * Simplified the prefilter code a bit. Now all handlers are
4807 expected to explicitly return a value (at least a blank string).
4817 expected to explicitly return a value (at least a blank string).
4808
4818
4809 * Heavy edits in ipplib. Removed the help system altogether. Now
4819 * Heavy edits in ipplib. Removed the help system altogether. Now
4810 obj?/?? is used for inspecting objects, a magic @doc prints
4820 obj?/?? is used for inspecting objects, a magic @doc prints
4811 docstrings, and full-blown Python help is accessed via the 'help'
4821 docstrings, and full-blown Python help is accessed via the 'help'
4812 keyword. This cleans up a lot of code (less to maintain) and does
4822 keyword. This cleans up a lot of code (less to maintain) and does
4813 the job. Since 'help' is now a standard Python component, might as
4823 the job. Since 'help' is now a standard Python component, might as
4814 well use it and remove duplicate functionality.
4824 well use it and remove duplicate functionality.
4815
4825
4816 Also removed the option to use ipplib as a standalone program. By
4826 Also removed the option to use ipplib as a standalone program. By
4817 now it's too dependent on other parts of IPython to function alone.
4827 now it's too dependent on other parts of IPython to function alone.
4818
4828
4819 * Fixed bug in genutils.pager. It would crash if the pager was
4829 * Fixed bug in genutils.pager. It would crash if the pager was
4820 exited immediately after opening (broken pipe).
4830 exited immediately after opening (broken pipe).
4821
4831
4822 * Trimmed down the VerboseTB reporting a little. The header is
4832 * Trimmed down the VerboseTB reporting a little. The header is
4823 much shorter now and the repeated exception arguments at the end
4833 much shorter now and the repeated exception arguments at the end
4824 have been removed. For interactive use the old header seemed a bit
4834 have been removed. For interactive use the old header seemed a bit
4825 excessive.
4835 excessive.
4826
4836
4827 * Fixed small bug in output of @whos for variables with multi-word
4837 * Fixed small bug in output of @whos for variables with multi-word
4828 types (only first word was displayed).
4838 types (only first word was displayed).
4829
4839
4830 2001-11-17 Fernando Perez <fperez@colorado.edu>
4840 2001-11-17 Fernando Perez <fperez@colorado.edu>
4831
4841
4832 * Version 0.1.10 released, 0.1.11 opened for further work.
4842 * Version 0.1.10 released, 0.1.11 opened for further work.
4833
4843
4834 * Modified dirs and friends. dirs now *returns* the stack (not
4844 * Modified dirs and friends. dirs now *returns* the stack (not
4835 prints), so one can manipulate it as a variable. Convenient to
4845 prints), so one can manipulate it as a variable. Convenient to
4836 travel along many directories.
4846 travel along many directories.
4837
4847
4838 * Fixed bug in magic_pdef: would only work with functions with
4848 * Fixed bug in magic_pdef: would only work with functions with
4839 arguments with default values.
4849 arguments with default values.
4840
4850
4841 2001-11-14 Fernando Perez <fperez@colorado.edu>
4851 2001-11-14 Fernando Perez <fperez@colorado.edu>
4842
4852
4843 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4853 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4844 example with IPython. Various other minor fixes and cleanups.
4854 example with IPython. Various other minor fixes and cleanups.
4845
4855
4846 * Version 0.1.9 released, 0.1.10 opened for further work.
4856 * Version 0.1.9 released, 0.1.10 opened for further work.
4847
4857
4848 * Added sys.path to the list of directories searched in the
4858 * Added sys.path to the list of directories searched in the
4849 execfile= option. It used to be the current directory and the
4859 execfile= option. It used to be the current directory and the
4850 user's IPYTHONDIR only.
4860 user's IPYTHONDIR only.
4851
4861
4852 2001-11-13 Fernando Perez <fperez@colorado.edu>
4862 2001-11-13 Fernando Perez <fperez@colorado.edu>
4853
4863
4854 * Reinstated the raw_input/prefilter separation that Janko had
4864 * Reinstated the raw_input/prefilter separation that Janko had
4855 initially. This gives a more convenient setup for extending the
4865 initially. This gives a more convenient setup for extending the
4856 pre-processor from the outside: raw_input always gets a string,
4866 pre-processor from the outside: raw_input always gets a string,
4857 and prefilter has to process it. We can then redefine prefilter
4867 and prefilter has to process it. We can then redefine prefilter
4858 from the outside and implement extensions for special
4868 from the outside and implement extensions for special
4859 purposes.
4869 purposes.
4860
4870
4861 Today I got one for inputting PhysicalQuantity objects
4871 Today I got one for inputting PhysicalQuantity objects
4862 (from Scientific) without needing any function calls at
4872 (from Scientific) without needing any function calls at
4863 all. Extremely convenient, and it's all done as a user-level
4873 all. Extremely convenient, and it's all done as a user-level
4864 extension (no IPython code was touched). Now instead of:
4874 extension (no IPython code was touched). Now instead of:
4865 a = PhysicalQuantity(4.2,'m/s**2')
4875 a = PhysicalQuantity(4.2,'m/s**2')
4866 one can simply say
4876 one can simply say
4867 a = 4.2 m/s**2
4877 a = 4.2 m/s**2
4868 or even
4878 or even
4869 a = 4.2 m/s^2
4879 a = 4.2 m/s^2
4870
4880
4871 I use this, but it's also a proof of concept: IPython really is
4881 I use this, but it's also a proof of concept: IPython really is
4872 fully user-extensible, even at the level of the parsing of the
4882 fully user-extensible, even at the level of the parsing of the
4873 command line. It's not trivial, but it's perfectly doable.
4883 command line. It's not trivial, but it's perfectly doable.
4874
4884
4875 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4885 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4876 the problem of modules being loaded in the inverse order in which
4886 the problem of modules being loaded in the inverse order in which
4877 they were defined in
4887 they were defined in
4878
4888
4879 * Version 0.1.8 released, 0.1.9 opened for further work.
4889 * Version 0.1.8 released, 0.1.9 opened for further work.
4880
4890
4881 * Added magics pdef, source and file. They respectively show the
4891 * Added magics pdef, source and file. They respectively show the
4882 definition line ('prototype' in C), source code and full python
4892 definition line ('prototype' in C), source code and full python
4883 file for any callable object. The object inspector oinfo uses
4893 file for any callable object. The object inspector oinfo uses
4884 these to show the same information.
4894 these to show the same information.
4885
4895
4886 * Version 0.1.7 released, 0.1.8 opened for further work.
4896 * Version 0.1.7 released, 0.1.8 opened for further work.
4887
4897
4888 * Separated all the magic functions into a class called Magic. The
4898 * Separated all the magic functions into a class called Magic. The
4889 InteractiveShell class was becoming too big for Xemacs to handle
4899 InteractiveShell class was becoming too big for Xemacs to handle
4890 (de-indenting a line would lock it up for 10 seconds while it
4900 (de-indenting a line would lock it up for 10 seconds while it
4891 backtracked on the whole class!)
4901 backtracked on the whole class!)
4892
4902
4893 FIXME: didn't work. It can be done, but right now namespaces are
4903 FIXME: didn't work. It can be done, but right now namespaces are
4894 all messed up. Do it later (reverted it for now, so at least
4904 all messed up. Do it later (reverted it for now, so at least
4895 everything works as before).
4905 everything works as before).
4896
4906
4897 * Got the object introspection system (magic_oinfo) working! I
4907 * Got the object introspection system (magic_oinfo) working! I
4898 think this is pretty much ready for release to Janko, so he can
4908 think this is pretty much ready for release to Janko, so he can
4899 test it for a while and then announce it. Pretty much 100% of what
4909 test it for a while and then announce it. Pretty much 100% of what
4900 I wanted for the 'phase 1' release is ready. Happy, tired.
4910 I wanted for the 'phase 1' release is ready. Happy, tired.
4901
4911
4902 2001-11-12 Fernando Perez <fperez@colorado.edu>
4912 2001-11-12 Fernando Perez <fperez@colorado.edu>
4903
4913
4904 * Version 0.1.6 released, 0.1.7 opened for further work.
4914 * Version 0.1.6 released, 0.1.7 opened for further work.
4905
4915
4906 * Fixed bug in printing: it used to test for truth before
4916 * Fixed bug in printing: it used to test for truth before
4907 printing, so 0 wouldn't print. Now checks for None.
4917 printing, so 0 wouldn't print. Now checks for None.
4908
4918
4909 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4919 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4910 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4920 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4911 reaches by hand into the outputcache. Think of a better way to do
4921 reaches by hand into the outputcache. Think of a better way to do
4912 this later.
4922 this later.
4913
4923
4914 * Various small fixes thanks to Nathan's comments.
4924 * Various small fixes thanks to Nathan's comments.
4915
4925
4916 * Changed magic_pprint to magic_Pprint. This way it doesn't
4926 * Changed magic_pprint to magic_Pprint. This way it doesn't
4917 collide with pprint() and the name is consistent with the command
4927 collide with pprint() and the name is consistent with the command
4918 line option.
4928 line option.
4919
4929
4920 * Changed prompt counter behavior to be fully like
4930 * Changed prompt counter behavior to be fully like
4921 Mathematica's. That is, even input that doesn't return a result
4931 Mathematica's. That is, even input that doesn't return a result
4922 raises the prompt counter. The old behavior was kind of confusing
4932 raises the prompt counter. The old behavior was kind of confusing
4923 (getting the same prompt number several times if the operation
4933 (getting the same prompt number several times if the operation
4924 didn't return a result).
4934 didn't return a result).
4925
4935
4926 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4936 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4927
4937
4928 * Fixed -Classic mode (wasn't working anymore).
4938 * Fixed -Classic mode (wasn't working anymore).
4929
4939
4930 * Added colored prompts using Nathan's new code. Colors are
4940 * Added colored prompts using Nathan's new code. Colors are
4931 currently hardwired, they can be user-configurable. For
4941 currently hardwired, they can be user-configurable. For
4932 developers, they can be chosen in file ipythonlib.py, at the
4942 developers, they can be chosen in file ipythonlib.py, at the
4933 beginning of the CachedOutput class def.
4943 beginning of the CachedOutput class def.
4934
4944
4935 2001-11-11 Fernando Perez <fperez@colorado.edu>
4945 2001-11-11 Fernando Perez <fperez@colorado.edu>
4936
4946
4937 * Version 0.1.5 released, 0.1.6 opened for further work.
4947 * Version 0.1.5 released, 0.1.6 opened for further work.
4938
4948
4939 * Changed magic_env to *return* the environment as a dict (not to
4949 * Changed magic_env to *return* the environment as a dict (not to
4940 print it). This way it prints, but it can also be processed.
4950 print it). This way it prints, but it can also be processed.
4941
4951
4942 * Added Verbose exception reporting to interactive
4952 * Added Verbose exception reporting to interactive
4943 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4953 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4944 traceback. Had to make some changes to the ultraTB file. This is
4954 traceback. Had to make some changes to the ultraTB file. This is
4945 probably the last 'big' thing in my mental todo list. This ties
4955 probably the last 'big' thing in my mental todo list. This ties
4946 in with the next entry:
4956 in with the next entry:
4947
4957
4948 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4958 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4949 has to specify is Plain, Color or Verbose for all exception
4959 has to specify is Plain, Color or Verbose for all exception
4950 handling.
4960 handling.
4951
4961
4952 * Removed ShellServices option. All this can really be done via
4962 * Removed ShellServices option. All this can really be done via
4953 the magic system. It's easier to extend, cleaner and has automatic
4963 the magic system. It's easier to extend, cleaner and has automatic
4954 namespace protection and documentation.
4964 namespace protection and documentation.
4955
4965
4956 2001-11-09 Fernando Perez <fperez@colorado.edu>
4966 2001-11-09 Fernando Perez <fperez@colorado.edu>
4957
4967
4958 * Fixed bug in output cache flushing (missing parameter to
4968 * Fixed bug in output cache flushing (missing parameter to
4959 __init__). Other small bugs fixed (found using pychecker).
4969 __init__). Other small bugs fixed (found using pychecker).
4960
4970
4961 * Version 0.1.4 opened for bugfixing.
4971 * Version 0.1.4 opened for bugfixing.
4962
4972
4963 2001-11-07 Fernando Perez <fperez@colorado.edu>
4973 2001-11-07 Fernando Perez <fperez@colorado.edu>
4964
4974
4965 * Version 0.1.3 released, mainly because of the raw_input bug.
4975 * Version 0.1.3 released, mainly because of the raw_input bug.
4966
4976
4967 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4977 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4968 and when testing for whether things were callable, a call could
4978 and when testing for whether things were callable, a call could
4969 actually be made to certain functions. They would get called again
4979 actually be made to certain functions. They would get called again
4970 once 'really' executed, with a resulting double call. A disaster
4980 once 'really' executed, with a resulting double call. A disaster
4971 in many cases (list.reverse() would never work!).
4981 in many cases (list.reverse() would never work!).
4972
4982
4973 * Removed prefilter() function, moved its code to raw_input (which
4983 * Removed prefilter() function, moved its code to raw_input (which
4974 after all was just a near-empty caller for prefilter). This saves
4984 after all was just a near-empty caller for prefilter). This saves
4975 a function call on every prompt, and simplifies the class a tiny bit.
4985 a function call on every prompt, and simplifies the class a tiny bit.
4976
4986
4977 * Fix _ip to __ip name in magic example file.
4987 * Fix _ip to __ip name in magic example file.
4978
4988
4979 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4989 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4980 work with non-gnu versions of tar.
4990 work with non-gnu versions of tar.
4981
4991
4982 2001-11-06 Fernando Perez <fperez@colorado.edu>
4992 2001-11-06 Fernando Perez <fperez@colorado.edu>
4983
4993
4984 * Version 0.1.2. Just to keep track of the recent changes.
4994 * Version 0.1.2. Just to keep track of the recent changes.
4985
4995
4986 * Fixed nasty bug in output prompt routine. It used to check 'if
4996 * Fixed nasty bug in output prompt routine. It used to check 'if
4987 arg != None...'. Problem is, this fails if arg implements a
4997 arg != None...'. Problem is, this fails if arg implements a
4988 special comparison (__cmp__) which disallows comparing to
4998 special comparison (__cmp__) which disallows comparing to
4989 None. Found it when trying to use the PhysicalQuantity module from
4999 None. Found it when trying to use the PhysicalQuantity module from
4990 ScientificPython.
5000 ScientificPython.
4991
5001
4992 2001-11-05 Fernando Perez <fperez@colorado.edu>
5002 2001-11-05 Fernando Perez <fperez@colorado.edu>
4993
5003
4994 * Also added dirs. Now the pushd/popd/dirs family functions
5004 * Also added dirs. Now the pushd/popd/dirs family functions
4995 basically like the shell, with the added convenience of going home
5005 basically like the shell, with the added convenience of going home
4996 when called with no args.
5006 when called with no args.
4997
5007
4998 * pushd/popd slightly modified to mimic shell behavior more
5008 * pushd/popd slightly modified to mimic shell behavior more
4999 closely.
5009 closely.
5000
5010
5001 * Added env,pushd,popd from ShellServices as magic functions. I
5011 * Added env,pushd,popd from ShellServices as magic functions. I
5002 think the cleanest will be to port all desired functions from
5012 think the cleanest will be to port all desired functions from
5003 ShellServices as magics and remove ShellServices altogether. This
5013 ShellServices as magics and remove ShellServices altogether. This
5004 will provide a single, clean way of adding functionality
5014 will provide a single, clean way of adding functionality
5005 (shell-type or otherwise) to IP.
5015 (shell-type or otherwise) to IP.
5006
5016
5007 2001-11-04 Fernando Perez <fperez@colorado.edu>
5017 2001-11-04 Fernando Perez <fperez@colorado.edu>
5008
5018
5009 * Added .ipython/ directory to sys.path. This way users can keep
5019 * Added .ipython/ directory to sys.path. This way users can keep
5010 customizations there and access them via import.
5020 customizations there and access them via import.
5011
5021
5012 2001-11-03 Fernando Perez <fperez@colorado.edu>
5022 2001-11-03 Fernando Perez <fperez@colorado.edu>
5013
5023
5014 * Opened version 0.1.1 for new changes.
5024 * Opened version 0.1.1 for new changes.
5015
5025
5016 * Changed version number to 0.1.0: first 'public' release, sent to
5026 * Changed version number to 0.1.0: first 'public' release, sent to
5017 Nathan and Janko.
5027 Nathan and Janko.
5018
5028
5019 * Lots of small fixes and tweaks.
5029 * Lots of small fixes and tweaks.
5020
5030
5021 * Minor changes to whos format. Now strings are shown, snipped if
5031 * Minor changes to whos format. Now strings are shown, snipped if
5022 too long.
5032 too long.
5023
5033
5024 * Changed ShellServices to work on __main__ so they show up in @who
5034 * Changed ShellServices to work on __main__ so they show up in @who
5025
5035
5026 * Help also works with ? at the end of a line:
5036 * Help also works with ? at the end of a line:
5027 ?sin and sin?
5037 ?sin and sin?
5028 both produce the same effect. This is nice, as often I use the
5038 both produce the same effect. This is nice, as often I use the
5029 tab-complete to find the name of a method, but I used to then have
5039 tab-complete to find the name of a method, but I used to then have
5030 to go to the beginning of the line to put a ? if I wanted more
5040 to go to the beginning of the line to put a ? if I wanted more
5031 info. Now I can just add the ? and hit return. Convenient.
5041 info. Now I can just add the ? and hit return. Convenient.
5032
5042
5033 2001-11-02 Fernando Perez <fperez@colorado.edu>
5043 2001-11-02 Fernando Perez <fperez@colorado.edu>
5034
5044
5035 * Python version check (>=2.1) added.
5045 * Python version check (>=2.1) added.
5036
5046
5037 * Added LazyPython documentation. At this point the docs are quite
5047 * Added LazyPython documentation. At this point the docs are quite
5038 a mess. A cleanup is in order.
5048 a mess. A cleanup is in order.
5039
5049
5040 * Auto-installer created. For some bizarre reason, the zipfiles
5050 * Auto-installer created. For some bizarre reason, the zipfiles
5041 module isn't working on my system. So I made a tar version
5051 module isn't working on my system. So I made a tar version
5042 (hopefully the command line options in various systems won't kill
5052 (hopefully the command line options in various systems won't kill
5043 me).
5053 me).
5044
5054
5045 * Fixes to Struct in genutils. Now all dictionary-like methods are
5055 * Fixes to Struct in genutils. Now all dictionary-like methods are
5046 protected (reasonably).
5056 protected (reasonably).
5047
5057
5048 * Added pager function to genutils and changed ? to print usage
5058 * Added pager function to genutils and changed ? to print usage
5049 note through it (it was too long).
5059 note through it (it was too long).
5050
5060
5051 * Added the LazyPython functionality. Works great! I changed the
5061 * Added the LazyPython functionality. Works great! I changed the
5052 auto-quote escape to ';', it's on home row and next to '. But
5062 auto-quote escape to ';', it's on home row and next to '. But
5053 both auto-quote and auto-paren (still /) escapes are command-line
5063 both auto-quote and auto-paren (still /) escapes are command-line
5054 parameters.
5064 parameters.
5055
5065
5056
5066
5057 2001-11-01 Fernando Perez <fperez@colorado.edu>
5067 2001-11-01 Fernando Perez <fperez@colorado.edu>
5058
5068
5059 * Version changed to 0.0.7. Fairly large change: configuration now
5069 * Version changed to 0.0.7. Fairly large change: configuration now
5060 is all stored in a directory, by default .ipython. There, all
5070 is all stored in a directory, by default .ipython. There, all
5061 config files have normal looking names (not .names)
5071 config files have normal looking names (not .names)
5062
5072
5063 * Version 0.0.6 Released first to Lucas and Archie as a test
5073 * Version 0.0.6 Released first to Lucas and Archie as a test
5064 run. Since it's the first 'semi-public' release, change version to
5074 run. Since it's the first 'semi-public' release, change version to
5065 > 0.0.6 for any changes now.
5075 > 0.0.6 for any changes now.
5066
5076
5067 * Stuff I had put in the ipplib.py changelog:
5077 * Stuff I had put in the ipplib.py changelog:
5068
5078
5069 Changes to InteractiveShell:
5079 Changes to InteractiveShell:
5070
5080
5071 - Made the usage message a parameter.
5081 - Made the usage message a parameter.
5072
5082
5073 - Require the name of the shell variable to be given. It's a bit
5083 - Require the name of the shell variable to be given. It's a bit
5074 of a hack, but allows the name 'shell' not to be hardwire in the
5084 of a hack, but allows the name 'shell' not to be hardwire in the
5075 magic (@) handler, which is problematic b/c it requires
5085 magic (@) handler, which is problematic b/c it requires
5076 polluting the global namespace with 'shell'. This in turn is
5086 polluting the global namespace with 'shell'. This in turn is
5077 fragile: if a user redefines a variable called shell, things
5087 fragile: if a user redefines a variable called shell, things
5078 break.
5088 break.
5079
5089
5080 - magic @: all functions available through @ need to be defined
5090 - magic @: all functions available through @ need to be defined
5081 as magic_<name>, even though they can be called simply as
5091 as magic_<name>, even though they can be called simply as
5082 @<name>. This allows the special command @magic to gather
5092 @<name>. This allows the special command @magic to gather
5083 information automatically about all existing magic functions,
5093 information automatically about all existing magic functions,
5084 even if they are run-time user extensions, by parsing the shell
5094 even if they are run-time user extensions, by parsing the shell
5085 instance __dict__ looking for special magic_ names.
5095 instance __dict__ looking for special magic_ names.
5086
5096
5087 - mainloop: added *two* local namespace parameters. This allows
5097 - mainloop: added *two* local namespace parameters. This allows
5088 the class to differentiate between parameters which were there
5098 the class to differentiate between parameters which were there
5089 before and after command line initialization was processed. This
5099 before and after command line initialization was processed. This
5090 way, later @who can show things loaded at startup by the
5100 way, later @who can show things loaded at startup by the
5091 user. This trick was necessary to make session saving/reloading
5101 user. This trick was necessary to make session saving/reloading
5092 really work: ideally after saving/exiting/reloading a session,
5102 really work: ideally after saving/exiting/reloading a session,
5093 *everythin* should look the same, including the output of @who. I
5103 *everythin* should look the same, including the output of @who. I
5094 was only able to make this work with this double namespace
5104 was only able to make this work with this double namespace
5095 trick.
5105 trick.
5096
5106
5097 - added a header to the logfile which allows (almost) full
5107 - added a header to the logfile which allows (almost) full
5098 session restoring.
5108 session restoring.
5099
5109
5100 - prepend lines beginning with @ or !, with a and log
5110 - prepend lines beginning with @ or !, with a and log
5101 them. Why? !lines: may be useful to know what you did @lines:
5111 them. Why? !lines: may be useful to know what you did @lines:
5102 they may affect session state. So when restoring a session, at
5112 they may affect session state. So when restoring a session, at
5103 least inform the user of their presence. I couldn't quite get
5113 least inform the user of their presence. I couldn't quite get
5104 them to properly re-execute, but at least the user is warned.
5114 them to properly re-execute, but at least the user is warned.
5105
5115
5106 * Started ChangeLog.
5116 * Started ChangeLog.
@@ -1,28 +1,28 b''
1 #!/usr/bin/env ipython
1 #!/usr/bin/env ipython
2 """ Must be launched via ipython not normal python
2 """ Must be launched via ipython not normal python
3
3
4 Run by:
4 Run by:
5
5
6 ipython update_manual.py
6 ipython update_manual.py
7 """
7 """
8
8
9 import sys,IPython,re
9 import sys,IPython,re
10
10
11 fil=open("magic.tex","w")
11 fil=open("magic.tex","w")
12 oldout=sys.stdout
12 oldout=sys.stdout
13 sys.stdout=fil
13 sys.stdout=fil
14 ipmagic("magic -latex")
14 _ip.magic("magic -latex")
15 sys.stdout=oldout
15 sys.stdout=oldout
16 fil.close()
16 fil.close()
17
17
18 fil=open("manual_base.lyx")
18 fil=open("manual_base.lyx")
19 txt=fil.read()
19 txt=fil.read()
20 fil.close()
20 fil.close()
21
21
22 manualtext=re.sub("__version__",IPython.__version__,txt)
22 manualtext=re.sub("__version__",IPython.__version__,txt)
23 fil=open("manual.lyx","w")
23 fil=open("manual.lyx","w")
24 fil.write(manualtext)
24 fil.write(manualtext)
25 fil.close()
25 fil.close()
26 print "Manual (magic.tex, manual.lyx) succesfully updated, exiting..."
26 print "Manual (magic.tex, manual.lyx) succesfully updated, exiting..."
27 import os
27 import os
28 os.abort()
28 os.abort()
General Comments 0
You need to be logged in to leave comments. Login now