##// END OF EJS Templates
a = !ls, a = %alias now work (captures output or gets ret val for aliases)...
vivainio -
Show More
@@ -0,0 +1,66 b''
1 # -*- coding: utf-8 -*-
2 """ IPython extension: new prefilters for output grabbing
3
4 Provides
5
6 var = %magic blah blah
7
8 var = !ls
9
10 $Id: genutils.py 1077 2006-01-24 18:15:27Z vivainio $
11
12 """
13
14 import IPython.ipapi
15 from IPython.genutils import *
16
17 ip = IPython.ipapi.get()
18
19 import re
20
21 def hnd_magic(line,mo):
22 """ Handle a = %mymagic blah blah """
23 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
24 #mag = 'ipmagic
25 #return "%s = %s"
26 var = mo.group('varname')
27 cmd = mo.group('cmd')
28 expr = make_quoted_expr(cmd)
29 return itpl('$var = ipmagic($expr)')
30
31 def hnd_syscmd(line,mo):
32 """ Handle a = !ls """
33 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
34 #mag = 'ipmagic
35 #return "%s = %s"
36 var = mo.group('varname')
37 cmd = mo.group('cmd')
38 expr = make_quoted_expr(itpl("sc -l =$cmd"))
39 return itpl('$var = ipmagic($expr)')
40
41 def install_re_handler(pat, hnd):
42 ip.meta().re_prefilters.append((re.compile(pat), hnd))
43
44 def init_handlers():
45
46 ip.meta().re_prefilters = []
47
48 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*%(?P<cmd>.*)',
49 hnd_magic
50 )
51
52 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*!(?P<cmd>.*)',
53 hnd_syscmd
54 )
55
56 init_handlers()
57
58 def regex_prefilter_f(self,line):
59 for pat, handler in ip.meta().re_prefilters:
60 mo = pat.match(line)
61 if mo:
62 return handler(line,mo)
63
64 raise IPython.ipapi.TryNext
65
66 ip.set_hook('input_prefilter', regex_prefilter_f) No newline at end of file
@@ -1,19 +1,18 b''
1 """ System wide configuration file for IPython.
1 """ System wide configuration file for IPython.
2
2
3 This will be imported by ipython for all users.
3 This will be imported by ipython for all users.
4
4
5 After this ipy_user_conf.py is imported, user specific configuration
5 After this ipy_user_conf.py is imported, user specific configuration
6 should reside there.
6 should reside there.
7
7
8 """
8 """
9
9
10 import IPython.ipapi as ip
10 import IPython.ipapi as ip
11
11
12 # add system wide configuration information, import extensions etc. here.
12 # add system wide configuration information, import extensions etc. here.
13 # nothing here is essential
13 # nothing here is essential
14
14
15 import sys
15 import sys
16
16
17 if sys.version_info >= (2,4):
17 import ext_rehashdir # %rehashdir magic
18 # rehashdir extension requires python 2.4
18 import ext_rescapture # var = !ls and var = %magic
19 import ext_rehashdir No newline at end of file
@@ -1,2824 +1,2839 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 1077 2006-01-24 18:15:27Z vivainio $"""
4 $Id: Magic.py 1089 2006-01-27 19:04:59Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt
36 from getopt import getopt
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54
55 #***************************************************************************
55 #***************************************************************************
56 # Utility functions
56 # Utility functions
57 def on_off(tag):
57 def on_off(tag):
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
60
60
61 class Bunch: pass
61 class Bunch: pass
62
62
63 #***************************************************************************
63 #***************************************************************************
64 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
65 class Magic:
65 class Magic:
66 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
67
67
68 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
69 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
70 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
71 vs. `%cd("../")`
71 vs. `%cd("../")`
72
72
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
75
75
76 # class globals
76 # class globals
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
79
79
80 #......................................................................
80 #......................................................................
81 # some utility functions
81 # some utility functions
82
82
83 def __init__(self,shell):
83 def __init__(self,shell):
84
84
85 self.options_table = {}
85 self.options_table = {}
86 if profile is None:
86 if profile is None:
87 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
88 self.shell = shell
88 self.shell = shell
89
89
90 # namespace for holding state we may need
90 # namespace for holding state we may need
91 self._magic_state = Bunch()
91 self._magic_state = Bunch()
92
92
93 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
94 error("""\
94 error("""\
95 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
96 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98
98
99 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
100 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
101
101
102 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
103 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
104 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
105
105
106 def lsmagic(self):
106 def lsmagic(self):
107 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
108
108
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
111
111
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
113
113
114 # magics in class definition
114 # magics in class definition
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
116 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
117 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
120 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 out = []
126 out = []
127 for fn in magics:
127 for fn in magics:
128 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
129 out.sort()
129 out.sort()
130 return out
130 return out
131
131
132 def extract_input_slices(self,slices):
132 def extract_input_slices(self,slices):
133 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
134
134
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
136 since this function is for use by magic functions which get their
136 since this function is for use by magic functions which get their
137 arguments as strings.
137 arguments as strings.
138
138
139 Note that slices can be called with two notations:
139 Note that slices can be called with two notations:
140
140
141 N:M -> standard python form, means including items N...(M-1).
141 N:M -> standard python form, means including items N...(M-1).
142
142
143 N-M -> include items N..M (closed endpoint)."""
143 N-M -> include items N..M (closed endpoint)."""
144
144
145 cmds = []
145 cmds = []
146 for chunk in slices:
146 for chunk in slices:
147 if ':' in chunk:
147 if ':' in chunk:
148 ini,fin = map(int,chunk.split(':'))
148 ini,fin = map(int,chunk.split(':'))
149 elif '-' in chunk:
149 elif '-' in chunk:
150 ini,fin = map(int,chunk.split('-'))
150 ini,fin = map(int,chunk.split('-'))
151 fin += 1
151 fin += 1
152 else:
152 else:
153 ini = int(chunk)
153 ini = int(chunk)
154 fin = ini+1
154 fin = ini+1
155 cmds.append(self.shell.input_hist[ini:fin])
155 cmds.append(self.shell.input_hist[ini:fin])
156 return cmds
156 return cmds
157
157
158 def _ofind(self,oname):
158 def _ofind(self,oname):
159 """Find an object in the available namespaces.
159 """Find an object in the available namespaces.
160
160
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
162
162
163 Has special code to detect magic functions.
163 Has special code to detect magic functions.
164 """
164 """
165
165
166 oname = oname.strip()
166 oname = oname.strip()
167
167
168 # Namespaces to search in:
168 # Namespaces to search in:
169 user_ns = self.shell.user_ns
169 user_ns = self.shell.user_ns
170 internal_ns = self.shell.internal_ns
170 internal_ns = self.shell.internal_ns
171 builtin_ns = __builtin__.__dict__
171 builtin_ns = __builtin__.__dict__
172 alias_ns = self.shell.alias_table
172 alias_ns = self.shell.alias_table
173
173
174 # Put them in a list. The order is important so that we find things in
174 # Put them in a list. The order is important so that we find things in
175 # the same order that Python finds them.
175 # the same order that Python finds them.
176 namespaces = [ ('Interactive',user_ns),
176 namespaces = [ ('Interactive',user_ns),
177 ('IPython internal',internal_ns),
177 ('IPython internal',internal_ns),
178 ('Python builtin',builtin_ns),
178 ('Python builtin',builtin_ns),
179 ('Alias',alias_ns),
179 ('Alias',alias_ns),
180 ]
180 ]
181
181
182 # initialize results to 'null'
182 # initialize results to 'null'
183 found = 0; obj = None; ospace = None; ds = None;
183 found = 0; obj = None; ospace = None; ds = None;
184 ismagic = 0; isalias = 0
184 ismagic = 0; isalias = 0
185
185
186 # Look for the given name by splitting it in parts. If the head is
186 # Look for the given name by splitting it in parts. If the head is
187 # found, then we look for all the remaining parts as members, and only
187 # found, then we look for all the remaining parts as members, and only
188 # declare success if we can find them all.
188 # declare success if we can find them all.
189 oname_parts = oname.split('.')
189 oname_parts = oname.split('.')
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
191 for nsname,ns in namespaces:
191 for nsname,ns in namespaces:
192 try:
192 try:
193 obj = ns[oname_head]
193 obj = ns[oname_head]
194 except KeyError:
194 except KeyError:
195 continue
195 continue
196 else:
196 else:
197 for part in oname_rest:
197 for part in oname_rest:
198 try:
198 try:
199 obj = getattr(obj,part)
199 obj = getattr(obj,part)
200 except:
200 except:
201 # Blanket except b/c some badly implemented objects
201 # Blanket except b/c some badly implemented objects
202 # allow __getattr__ to raise exceptions other than
202 # allow __getattr__ to raise exceptions other than
203 # AttributeError, which then crashes IPython.
203 # AttributeError, which then crashes IPython.
204 break
204 break
205 else:
205 else:
206 # If we finish the for loop (no break), we got all members
206 # If we finish the for loop (no break), we got all members
207 found = 1
207 found = 1
208 ospace = nsname
208 ospace = nsname
209 if ns == alias_ns:
209 if ns == alias_ns:
210 isalias = 1
210 isalias = 1
211 break # namespace loop
211 break # namespace loop
212
212
213 # Try to see if it's magic
213 # Try to see if it's magic
214 if not found:
214 if not found:
215 if oname.startswith(self.shell.ESC_MAGIC):
215 if oname.startswith(self.shell.ESC_MAGIC):
216 oname = oname[1:]
216 oname = oname[1:]
217 obj = getattr(self,'magic_'+oname,None)
217 obj = getattr(self,'magic_'+oname,None)
218 if obj is not None:
218 if obj is not None:
219 found = 1
219 found = 1
220 ospace = 'IPython internal'
220 ospace = 'IPython internal'
221 ismagic = 1
221 ismagic = 1
222
222
223 # Last try: special-case some literals like '', [], {}, etc:
223 # Last try: special-case some literals like '', [], {}, etc:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
225 obj = eval(oname_head)
225 obj = eval(oname_head)
226 found = 1
226 found = 1
227 ospace = 'Interactive'
227 ospace = 'Interactive'
228
228
229 return {'found':found, 'obj':obj, 'namespace':ospace,
229 return {'found':found, 'obj':obj, 'namespace':ospace,
230 'ismagic':ismagic, 'isalias':isalias}
230 'ismagic':ismagic, 'isalias':isalias}
231
231
232 def arg_err(self,func):
232 def arg_err(self,func):
233 """Print docstring if incorrect arguments were passed"""
233 """Print docstring if incorrect arguments were passed"""
234 print 'Error in arguments:'
234 print 'Error in arguments:'
235 print OInspect.getdoc(func)
235 print OInspect.getdoc(func)
236
236
237 def format_latex(self,strng):
237 def format_latex(self,strng):
238 """Format a string for latex inclusion."""
238 """Format a string for latex inclusion."""
239
239
240 # Characters that need to be escaped for latex:
240 # Characters that need to be escaped for latex:
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
242 # Magic command names as headers:
242 # Magic command names as headers:
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
244 re.MULTILINE)
244 re.MULTILINE)
245 # Magic commands
245 # Magic commands
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
247 re.MULTILINE)
247 re.MULTILINE)
248 # Paragraph continue
248 # Paragraph continue
249 par_re = re.compile(r'\\$',re.MULTILINE)
249 par_re = re.compile(r'\\$',re.MULTILINE)
250
250
251 # The "\n" symbol
251 # The "\n" symbol
252 newline_re = re.compile(r'\\n')
252 newline_re = re.compile(r'\\n')
253
253
254 # Now build the string for output:
254 # Now build the string for output:
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
257 strng)
257 strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
259 strng = par_re.sub(r'\\\\',strng)
259 strng = par_re.sub(r'\\\\',strng)
260 strng = escape_re.sub(r'\\\1',strng)
260 strng = escape_re.sub(r'\\\1',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
262 return strng
262 return strng
263
263
264 def format_screen(self,strng):
264 def format_screen(self,strng):
265 """Format a string for screen printing.
265 """Format a string for screen printing.
266
266
267 This removes some latex-type format codes."""
267 This removes some latex-type format codes."""
268 # Paragraph continue
268 # Paragraph continue
269 par_re = re.compile(r'\\$',re.MULTILINE)
269 par_re = re.compile(r'\\$',re.MULTILINE)
270 strng = par_re.sub('',strng)
270 strng = par_re.sub('',strng)
271 return strng
271 return strng
272
272
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
274 """Parse options passed to an argument string.
274 """Parse options passed to an argument string.
275
275
276 The interface is similar to that of getopt(), but it returns back a
276 The interface is similar to that of getopt(), but it returns back a
277 Struct with the options as keys and the stripped argument string still
277 Struct with the options as keys and the stripped argument string still
278 as a string.
278 as a string.
279
279
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
281 This allows us to easily expand variables, glob files, quote
281 This allows us to easily expand variables, glob files, quote
282 arguments, etc.
282 arguments, etc.
283
283
284 Options:
284 Options:
285 -mode: default 'string'. If given as 'list', the argument string is
285 -mode: default 'string'. If given as 'list', the argument string is
286 returned as a list (split on whitespace) instead of a string.
286 returned as a list (split on whitespace) instead of a string.
287
287
288 -list_all: put all option values in lists. Normally only options
288 -list_all: put all option values in lists. Normally only options
289 appearing more than once are put in a list."""
289 appearing more than once are put in a list."""
290
290
291 # inject default options at the beginning of the input line
291 # inject default options at the beginning of the input line
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
294
294
295 mode = kw.get('mode','string')
295 mode = kw.get('mode','string')
296 if mode not in ['string','list']:
296 if mode not in ['string','list']:
297 raise ValueError,'incorrect mode given: %s' % mode
297 raise ValueError,'incorrect mode given: %s' % mode
298 # Get options
298 # Get options
299 list_all = kw.get('list_all',0)
299 list_all = kw.get('list_all',0)
300
300
301 # Check if we have more than one argument to warrant extra processing:
301 # Check if we have more than one argument to warrant extra processing:
302 odict = {} # Dictionary with options
302 odict = {} # Dictionary with options
303 args = arg_str.split()
303 args = arg_str.split()
304 if len(args) >= 1:
304 if len(args) >= 1:
305 # If the list of inputs only has 0 or 1 thing in it, there's no
305 # If the list of inputs only has 0 or 1 thing in it, there's no
306 # need to look for options
306 # need to look for options
307 argv = shlex_split(arg_str)
307 argv = shlex_split(arg_str)
308 # Do regular option processing
308 # Do regular option processing
309 opts,args = getopt(argv,opt_str,*long_opts)
309 opts,args = getopt(argv,opt_str,*long_opts)
310 for o,a in opts:
310 for o,a in opts:
311 if o.startswith('--'):
311 if o.startswith('--'):
312 o = o[2:]
312 o = o[2:]
313 else:
313 else:
314 o = o[1:]
314 o = o[1:]
315 try:
315 try:
316 odict[o].append(a)
316 odict[o].append(a)
317 except AttributeError:
317 except AttributeError:
318 odict[o] = [odict[o],a]
318 odict[o] = [odict[o],a]
319 except KeyError:
319 except KeyError:
320 if list_all:
320 if list_all:
321 odict[o] = [a]
321 odict[o] = [a]
322 else:
322 else:
323 odict[o] = a
323 odict[o] = a
324
324
325 # Prepare opts,args for return
325 # Prepare opts,args for return
326 opts = Struct(odict)
326 opts = Struct(odict)
327 if mode == 'string':
327 if mode == 'string':
328 args = ' '.join(args)
328 args = ' '.join(args)
329
329
330 return opts,args
330 return opts,args
331
331
332 #......................................................................
332 #......................................................................
333 # And now the actual magic functions
333 # And now the actual magic functions
334
334
335 # Functions for IPython shell work (vars,funcs, config, etc)
335 # Functions for IPython shell work (vars,funcs, config, etc)
336 def magic_lsmagic(self, parameter_s = ''):
336 def magic_lsmagic(self, parameter_s = ''):
337 """List currently available magic functions."""
337 """List currently available magic functions."""
338 mesc = self.shell.ESC_MAGIC
338 mesc = self.shell.ESC_MAGIC
339 print 'Available magic functions:\n'+mesc+\
339 print 'Available magic functions:\n'+mesc+\
340 (' '+mesc).join(self.lsmagic())
340 (' '+mesc).join(self.lsmagic())
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
342 return None
342 return None
343
343
344 def magic_magic(self, parameter_s = ''):
344 def magic_magic(self, parameter_s = ''):
345 """Print information about the magic function system."""
345 """Print information about the magic function system."""
346
346
347 mode = ''
347 mode = ''
348 try:
348 try:
349 if parameter_s.split()[0] == '-latex':
349 if parameter_s.split()[0] == '-latex':
350 mode = 'latex'
350 mode = 'latex'
351 except:
351 except:
352 pass
352 pass
353
353
354 magic_docs = []
354 magic_docs = []
355 for fname in self.lsmagic():
355 for fname in self.lsmagic():
356 mname = 'magic_' + fname
356 mname = 'magic_' + fname
357 for space in (Magic,self,self.__class__):
357 for space in (Magic,self,self.__class__):
358 try:
358 try:
359 fn = space.__dict__[mname]
359 fn = space.__dict__[mname]
360 except KeyError:
360 except KeyError:
361 pass
361 pass
362 else:
362 else:
363 break
363 break
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
365 fname,fn.__doc__))
365 fname,fn.__doc__))
366 magic_docs = ''.join(magic_docs)
366 magic_docs = ''.join(magic_docs)
367
367
368 if mode == 'latex':
368 if mode == 'latex':
369 print self.format_latex(magic_docs)
369 print self.format_latex(magic_docs)
370 return
370 return
371 else:
371 else:
372 magic_docs = self.format_screen(magic_docs)
372 magic_docs = self.format_screen(magic_docs)
373
373
374 outmsg = """
374 outmsg = """
375 IPython's 'magic' functions
375 IPython's 'magic' functions
376 ===========================
376 ===========================
377
377
378 The magic function system provides a series of functions which allow you to
378 The magic function system provides a series of functions which allow you to
379 control the behavior of IPython itself, plus a lot of system-type
379 control the behavior of IPython itself, plus a lot of system-type
380 features. All these functions are prefixed with a % character, but parameters
380 features. All these functions are prefixed with a % character, but parameters
381 are given without parentheses or quotes.
381 are given without parentheses or quotes.
382
382
383 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 NOTE: If you have 'automagic' enabled (via the command line option or with the
384 %automagic function), you don't need to type in the % explicitly. By default,
384 %automagic function), you don't need to type in the % explicitly. By default,
385 IPython ships with automagic on, so you should only rarely need the % escape.
385 IPython ships with automagic on, so you should only rarely need the % escape.
386
386
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
388 to 'mydir', if it exists.
388 to 'mydir', if it exists.
389
389
390 You can define your own magic functions to extend the system. See the supplied
390 You can define your own magic functions to extend the system. See the supplied
391 ipythonrc and example-magic.py files for details (in your ipython
391 ipythonrc and example-magic.py files for details (in your ipython
392 configuration directory, typically $HOME/.ipython/).
392 configuration directory, typically $HOME/.ipython/).
393
393
394 You can also define your own aliased names for magic functions. In your
394 You can also define your own aliased names for magic functions. In your
395 ipythonrc file, placing a line like:
395 ipythonrc file, placing a line like:
396
396
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
398
398
399 will define %pf as a new name for %profile.
399 will define %pf as a new name for %profile.
400
400
401 You can also call magics in code using the ipmagic() function, which IPython
401 You can also call magics in code using the ipmagic() function, which IPython
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
403
403
404 For a list of the available magic functions, use %lsmagic. For a description
404 For a list of the available magic functions, use %lsmagic. For a description
405 of any of them, type %magic_name?, e.g. '%cd?'.
405 of any of them, type %magic_name?, e.g. '%cd?'.
406
406
407 Currently the magic system has the following functions:\n"""
407 Currently the magic system has the following functions:\n"""
408
408
409 mesc = self.shell.ESC_MAGIC
409 mesc = self.shell.ESC_MAGIC
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
411 "\n\n%s%s\n\n%s" % (outmsg,
411 "\n\n%s%s\n\n%s" % (outmsg,
412 magic_docs,mesc,mesc,
412 magic_docs,mesc,mesc,
413 (' '+mesc).join(self.lsmagic()),
413 (' '+mesc).join(self.lsmagic()),
414 Magic.auto_status[self.shell.rc.automagic] ) )
414 Magic.auto_status[self.shell.rc.automagic] ) )
415
415
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
417
417
418 def magic_automagic(self, parameter_s = ''):
418 def magic_automagic(self, parameter_s = ''):
419 """Make magic functions callable without having to type the initial %.
419 """Make magic functions callable without having to type the initial %.
420
420
421 Toggles on/off (when off, you must call it as %automagic, of
421 Toggles on/off (when off, you must call it as %automagic, of
422 course). Note that magic functions have lowest priority, so if there's
422 course). Note that magic functions have lowest priority, so if there's
423 a variable whose name collides with that of a magic fn, automagic
423 a variable whose name collides with that of a magic fn, automagic
424 won't work for that function (you get the variable instead). However,
424 won't work for that function (you get the variable instead). However,
425 if you delete the variable (del var), the previously shadowed magic
425 if you delete the variable (del var), the previously shadowed magic
426 function becomes visible to automagic again."""
426 function becomes visible to automagic again."""
427
427
428 rc = self.shell.rc
428 rc = self.shell.rc
429 rc.automagic = not rc.automagic
429 rc.automagic = not rc.automagic
430 print '\n' + Magic.auto_status[rc.automagic]
430 print '\n' + Magic.auto_status[rc.automagic]
431
431
432 def magic_autocall(self, parameter_s = ''):
432 def magic_autocall(self, parameter_s = ''):
433 """Make functions callable without having to type parentheses.
433 """Make functions callable without having to type parentheses.
434
434
435 Usage:
435 Usage:
436
436
437 %autocall [mode]
437 %autocall [mode]
438
438
439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
440 value is toggled on and off (remembering the previous state)."""
440 value is toggled on and off (remembering the previous state)."""
441
441
442 rc = self.shell.rc
442 rc = self.shell.rc
443
443
444 if parameter_s:
444 if parameter_s:
445 arg = int(parameter_s)
445 arg = int(parameter_s)
446 else:
446 else:
447 arg = 'toggle'
447 arg = 'toggle'
448
448
449 if not arg in (0,1,2,'toggle'):
449 if not arg in (0,1,2,'toggle'):
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
451 return
451 return
452
452
453 if arg in (0,1,2):
453 if arg in (0,1,2):
454 rc.autocall = arg
454 rc.autocall = arg
455 else: # toggle
455 else: # toggle
456 if rc.autocall:
456 if rc.autocall:
457 self._magic_state.autocall_save = rc.autocall
457 self._magic_state.autocall_save = rc.autocall
458 rc.autocall = 0
458 rc.autocall = 0
459 else:
459 else:
460 try:
460 try:
461 rc.autocall = self._magic_state.autocall_save
461 rc.autocall = self._magic_state.autocall_save
462 except AttributeError:
462 except AttributeError:
463 rc.autocall = self._magic_state.autocall_save = 1
463 rc.autocall = self._magic_state.autocall_save = 1
464
464
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
466
466
467 def magic_autoindent(self, parameter_s = ''):
467 def magic_autoindent(self, parameter_s = ''):
468 """Toggle autoindent on/off (if available)."""
468 """Toggle autoindent on/off (if available)."""
469
469
470 self.shell.set_autoindent()
470 self.shell.set_autoindent()
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
472
472
473 def magic_system_verbose(self, parameter_s = ''):
473 def magic_system_verbose(self, parameter_s = ''):
474 """Toggle verbose printing of system calls on/off."""
474 """Toggle verbose printing of system calls on/off."""
475
475
476 self.shell.rc_set_toggle('system_verbose')
476 self.shell.rc_set_toggle('system_verbose')
477 print "System verbose printing is:",\
477 print "System verbose printing is:",\
478 ['OFF','ON'][self.shell.rc.system_verbose]
478 ['OFF','ON'][self.shell.rc.system_verbose]
479
479
480 def magic_history(self, parameter_s = ''):
480 def magic_history(self, parameter_s = ''):
481 """Print input history (_i<n> variables), with most recent last.
481 """Print input history (_i<n> variables), with most recent last.
482
482
483 %history -> print at most 40 inputs (some may be multi-line)\\
483 %history -> print at most 40 inputs (some may be multi-line)\\
484 %history n -> print at most n inputs\\
484 %history n -> print at most n inputs\\
485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
486
486
487 Each input's number <n> is shown, and is accessible as the
487 Each input's number <n> is shown, and is accessible as the
488 automatically generated variable _i<n>. Multi-line statements are
488 automatically generated variable _i<n>. Multi-line statements are
489 printed starting at a new line for easy copy/paste.
489 printed starting at a new line for easy copy/paste.
490
490
491
491
492 Options:
492 Options:
493
493
494 -n: do NOT print line numbers. This is useful if you want to get a
494 -n: do NOT print line numbers. This is useful if you want to get a
495 printout of many lines which can be directly pasted into a text
495 printout of many lines which can be directly pasted into a text
496 editor.
496 editor.
497
497
498 This feature is only available if numbered prompts are in use.
498 This feature is only available if numbered prompts are in use.
499
499
500 -r: print the 'raw' history. IPython filters your input and
500 -r: print the 'raw' history. IPython filters your input and
501 converts it all into valid Python source before executing it (things
501 converts it all into valid Python source before executing it (things
502 like magics or aliases are turned into function calls, for
502 like magics or aliases are turned into function calls, for
503 example). With this option, you'll see the unfiltered history
503 example). With this option, you'll see the unfiltered history
504 instead of the filtered version: '%cd /' will be seen as '%cd /'
504 instead of the filtered version: '%cd /' will be seen as '%cd /'
505 instead of 'ipmagic("%cd /")'.
505 instead of 'ipmagic("%cd /")'.
506 """
506 """
507
507
508 shell = self.shell
508 shell = self.shell
509 if not shell.outputcache.do_full_cache:
509 if not shell.outputcache.do_full_cache:
510 print 'This feature is only available if numbered prompts are in use.'
510 print 'This feature is only available if numbered prompts are in use.'
511 return
511 return
512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
513
513
514 if opts.has_key('r'):
514 if opts.has_key('r'):
515 input_hist = shell.input_hist_raw
515 input_hist = shell.input_hist_raw
516 else:
516 else:
517 input_hist = shell.input_hist
517 input_hist = shell.input_hist
518
518
519 default_length = 40
519 default_length = 40
520 if len(args) == 0:
520 if len(args) == 0:
521 final = len(input_hist)
521 final = len(input_hist)
522 init = max(1,final-default_length)
522 init = max(1,final-default_length)
523 elif len(args) == 1:
523 elif len(args) == 1:
524 final = len(input_hist)
524 final = len(input_hist)
525 init = max(1,final-int(args[0]))
525 init = max(1,final-int(args[0]))
526 elif len(args) == 2:
526 elif len(args) == 2:
527 init,final = map(int,args)
527 init,final = map(int,args)
528 else:
528 else:
529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
530 print self.magic_hist.__doc__
530 print self.magic_hist.__doc__
531 return
531 return
532 width = len(str(final))
532 width = len(str(final))
533 line_sep = ['','\n']
533 line_sep = ['','\n']
534 print_nums = not opts.has_key('n')
534 print_nums = not opts.has_key('n')
535 for in_num in range(init,final):
535 for in_num in range(init,final):
536 inline = input_hist[in_num]
536 inline = input_hist[in_num]
537 multiline = int(inline.count('\n') > 1)
537 multiline = int(inline.count('\n') > 1)
538 if print_nums:
538 if print_nums:
539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
540 print inline,
540 print inline,
541
541
542 def magic_hist(self, parameter_s=''):
542 def magic_hist(self, parameter_s=''):
543 """Alternate name for %history."""
543 """Alternate name for %history."""
544 return self.magic_history(parameter_s)
544 return self.magic_history(parameter_s)
545
545
546 def magic_p(self, parameter_s=''):
546 def magic_p(self, parameter_s=''):
547 """Just a short alias for Python's 'print'."""
547 """Just a short alias for Python's 'print'."""
548 exec 'print ' + parameter_s in self.shell.user_ns
548 exec 'print ' + parameter_s in self.shell.user_ns
549
549
550 def magic_r(self, parameter_s=''):
550 def magic_r(self, parameter_s=''):
551 """Repeat previous input.
551 """Repeat previous input.
552
552
553 If given an argument, repeats the previous command which starts with
553 If given an argument, repeats the previous command which starts with
554 the same string, otherwise it just repeats the previous input.
554 the same string, otherwise it just repeats the previous input.
555
555
556 Shell escaped commands (with ! as first character) are not recognized
556 Shell escaped commands (with ! as first character) are not recognized
557 by this system, only pure python code and magic commands.
557 by this system, only pure python code and magic commands.
558 """
558 """
559
559
560 start = parameter_s.strip()
560 start = parameter_s.strip()
561 esc_magic = self.shell.ESC_MAGIC
561 esc_magic = self.shell.ESC_MAGIC
562 # Identify magic commands even if automagic is on (which means
562 # Identify magic commands even if automagic is on (which means
563 # the in-memory version is different from that typed by the user).
563 # the in-memory version is different from that typed by the user).
564 if self.shell.rc.automagic:
564 if self.shell.rc.automagic:
565 start_magic = esc_magic+start
565 start_magic = esc_magic+start
566 else:
566 else:
567 start_magic = start
567 start_magic = start
568 # Look through the input history in reverse
568 # Look through the input history in reverse
569 for n in range(len(self.shell.input_hist)-2,0,-1):
569 for n in range(len(self.shell.input_hist)-2,0,-1):
570 input = self.shell.input_hist[n]
570 input = self.shell.input_hist[n]
571 # skip plain 'r' lines so we don't recurse to infinity
571 # skip plain 'r' lines so we don't recurse to infinity
572 if input != 'ipmagic("r")\n' and \
572 if input != 'ipmagic("r")\n' and \
573 (input.startswith(start) or input.startswith(start_magic)):
573 (input.startswith(start) or input.startswith(start_magic)):
574 #print 'match',`input` # dbg
574 #print 'match',`input` # dbg
575 print 'Executing:',input,
575 print 'Executing:',input,
576 self.shell.runlines(input)
576 self.shell.runlines(input)
577 return
577 return
578 print 'No previous input matching `%s` found.' % start
578 print 'No previous input matching `%s` found.' % start
579
579
580 def magic_page(self, parameter_s=''):
580 def magic_page(self, parameter_s=''):
581 """Pretty print the object and display it through a pager.
581 """Pretty print the object and display it through a pager.
582
582
583 If no parameter is given, use _ (last output)."""
583 If no parameter is given, use _ (last output)."""
584 # After a function contributed by Olivier Aubert, slightly modified.
584 # After a function contributed by Olivier Aubert, slightly modified.
585
585
586 oname = parameter_s and parameter_s or '_'
586 oname = parameter_s and parameter_s or '_'
587 info = self._ofind(oname)
587 info = self._ofind(oname)
588 if info['found']:
588 if info['found']:
589 page(pformat(info['obj']))
589 page(pformat(info['obj']))
590 else:
590 else:
591 print 'Object `%s` not found' % oname
591 print 'Object `%s` not found' % oname
592
592
593 def magic_profile(self, parameter_s=''):
593 def magic_profile(self, parameter_s=''):
594 """Print your currently active IPyhton profile."""
594 """Print your currently active IPyhton profile."""
595 if self.shell.rc.profile:
595 if self.shell.rc.profile:
596 printpl('Current IPython profile: $self.shell.rc.profile.')
596 printpl('Current IPython profile: $self.shell.rc.profile.')
597 else:
597 else:
598 print 'No profile active.'
598 print 'No profile active.'
599
599
600 def _inspect(self,meth,oname,**kw):
600 def _inspect(self,meth,oname,**kw):
601 """Generic interface to the inspector system.
601 """Generic interface to the inspector system.
602
602
603 This function is meant to be called by pdef, pdoc & friends."""
603 This function is meant to be called by pdef, pdoc & friends."""
604
604
605 oname = oname.strip()
605 oname = oname.strip()
606 info = Struct(self._ofind(oname))
606 info = Struct(self._ofind(oname))
607 if info.found:
607 if info.found:
608 pmethod = getattr(self.shell.inspector,meth)
608 pmethod = getattr(self.shell.inspector,meth)
609 formatter = info.ismagic and self.format_screen or None
609 formatter = info.ismagic and self.format_screen or None
610 if meth == 'pdoc':
610 if meth == 'pdoc':
611 pmethod(info.obj,oname,formatter)
611 pmethod(info.obj,oname,formatter)
612 elif meth == 'pinfo':
612 elif meth == 'pinfo':
613 pmethod(info.obj,oname,formatter,info,**kw)
613 pmethod(info.obj,oname,formatter,info,**kw)
614 else:
614 else:
615 pmethod(info.obj,oname)
615 pmethod(info.obj,oname)
616 else:
616 else:
617 print 'Object `%s` not found.' % oname
617 print 'Object `%s` not found.' % oname
618 return 'not found' # so callers can take other action
618 return 'not found' # so callers can take other action
619
619
620 def magic_pdef(self, parameter_s=''):
620 def magic_pdef(self, parameter_s=''):
621 """Print the definition header for any callable object.
621 """Print the definition header for any callable object.
622
622
623 If the object is a class, print the constructor information."""
623 If the object is a class, print the constructor information."""
624 self._inspect('pdef',parameter_s)
624 self._inspect('pdef',parameter_s)
625
625
626 def magic_pdoc(self, parameter_s=''):
626 def magic_pdoc(self, parameter_s=''):
627 """Print the docstring for an object.
627 """Print the docstring for an object.
628
628
629 If the given object is a class, it will print both the class and the
629 If the given object is a class, it will print both the class and the
630 constructor docstrings."""
630 constructor docstrings."""
631 self._inspect('pdoc',parameter_s)
631 self._inspect('pdoc',parameter_s)
632
632
633 def magic_psource(self, parameter_s=''):
633 def magic_psource(self, parameter_s=''):
634 """Print (or run through pager) the source code for an object."""
634 """Print (or run through pager) the source code for an object."""
635 self._inspect('psource',parameter_s)
635 self._inspect('psource',parameter_s)
636
636
637 def magic_pfile(self, parameter_s=''):
637 def magic_pfile(self, parameter_s=''):
638 """Print (or run through pager) the file where an object is defined.
638 """Print (or run through pager) the file where an object is defined.
639
639
640 The file opens at the line where the object definition begins. IPython
640 The file opens at the line where the object definition begins. IPython
641 will honor the environment variable PAGER if set, and otherwise will
641 will honor the environment variable PAGER if set, and otherwise will
642 do its best to print the file in a convenient form.
642 do its best to print the file in a convenient form.
643
643
644 If the given argument is not an object currently defined, IPython will
644 If the given argument is not an object currently defined, IPython will
645 try to interpret it as a filename (automatically adding a .py extension
645 try to interpret it as a filename (automatically adding a .py extension
646 if needed). You can thus use %pfile as a syntax highlighting code
646 if needed). You can thus use %pfile as a syntax highlighting code
647 viewer."""
647 viewer."""
648
648
649 # first interpret argument as an object name
649 # first interpret argument as an object name
650 out = self._inspect('pfile',parameter_s)
650 out = self._inspect('pfile',parameter_s)
651 # if not, try the input as a filename
651 # if not, try the input as a filename
652 if out == 'not found':
652 if out == 'not found':
653 try:
653 try:
654 filename = get_py_filename(parameter_s)
654 filename = get_py_filename(parameter_s)
655 except IOError,msg:
655 except IOError,msg:
656 print msg
656 print msg
657 return
657 return
658 page(self.shell.inspector.format(file(filename).read()))
658 page(self.shell.inspector.format(file(filename).read()))
659
659
660 def magic_pinfo(self, parameter_s=''):
660 def magic_pinfo(self, parameter_s=''):
661 """Provide detailed information about an object.
661 """Provide detailed information about an object.
662
662
663 '%pinfo object' is just a synonym for object? or ?object."""
663 '%pinfo object' is just a synonym for object? or ?object."""
664
664
665 #print 'pinfo par: <%s>' % parameter_s # dbg
665 #print 'pinfo par: <%s>' % parameter_s # dbg
666
666
667 # detail_level: 0 -> obj? , 1 -> obj??
667 # detail_level: 0 -> obj? , 1 -> obj??
668 detail_level = 0
668 detail_level = 0
669 # We need to detect if we got called as 'pinfo pinfo foo', which can
669 # We need to detect if we got called as 'pinfo pinfo foo', which can
670 # happen if the user types 'pinfo foo?' at the cmd line.
670 # happen if the user types 'pinfo foo?' at the cmd line.
671 pinfo,qmark1,oname,qmark2 = \
671 pinfo,qmark1,oname,qmark2 = \
672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
673 if pinfo or qmark1 or qmark2:
673 if pinfo or qmark1 or qmark2:
674 detail_level = 1
674 detail_level = 1
675 if "*" in oname:
675 if "*" in oname:
676 self.magic_psearch(oname)
676 self.magic_psearch(oname)
677 else:
677 else:
678 self._inspect('pinfo',oname,detail_level=detail_level)
678 self._inspect('pinfo',oname,detail_level=detail_level)
679
679
680 def magic_psearch(self, parameter_s=''):
680 def magic_psearch(self, parameter_s=''):
681 """Search for object in namespaces by wildcard.
681 """Search for object in namespaces by wildcard.
682
682
683 %psearch [options] PATTERN [OBJECT TYPE]
683 %psearch [options] PATTERN [OBJECT TYPE]
684
684
685 Note: ? can be used as a synonym for %psearch, at the beginning or at
685 Note: ? can be used as a synonym for %psearch, at the beginning or at
686 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
686 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
687 rest of the command line must be unchanged (options come first), so
687 rest of the command line must be unchanged (options come first), so
688 for example the following forms are equivalent
688 for example the following forms are equivalent
689
689
690 %psearch -i a* function
690 %psearch -i a* function
691 -i a* function?
691 -i a* function?
692 ?-i a* function
692 ?-i a* function
693
693
694 Arguments:
694 Arguments:
695
695
696 PATTERN
696 PATTERN
697
697
698 where PATTERN is a string containing * as a wildcard similar to its
698 where PATTERN is a string containing * as a wildcard similar to its
699 use in a shell. The pattern is matched in all namespaces on the
699 use in a shell. The pattern is matched in all namespaces on the
700 search path. By default objects starting with a single _ are not
700 search path. By default objects starting with a single _ are not
701 matched, many IPython generated objects have a single
701 matched, many IPython generated objects have a single
702 underscore. The default is case insensitive matching. Matching is
702 underscore. The default is case insensitive matching. Matching is
703 also done on the attributes of objects and not only on the objects
703 also done on the attributes of objects and not only on the objects
704 in a module.
704 in a module.
705
705
706 [OBJECT TYPE]
706 [OBJECT TYPE]
707
707
708 Is the name of a python type from the types module. The name is
708 Is the name of a python type from the types module. The name is
709 given in lowercase without the ending type, ex. StringType is
709 given in lowercase without the ending type, ex. StringType is
710 written string. By adding a type here only objects matching the
710 written string. By adding a type here only objects matching the
711 given type are matched. Using all here makes the pattern match all
711 given type are matched. Using all here makes the pattern match all
712 types (this is the default).
712 types (this is the default).
713
713
714 Options:
714 Options:
715
715
716 -a: makes the pattern match even objects whose names start with a
716 -a: makes the pattern match even objects whose names start with a
717 single underscore. These names are normally ommitted from the
717 single underscore. These names are normally ommitted from the
718 search.
718 search.
719
719
720 -i/-c: make the pattern case insensitive/sensitive. If neither of
720 -i/-c: make the pattern case insensitive/sensitive. If neither of
721 these options is given, the default is read from your ipythonrc
721 these options is given, the default is read from your ipythonrc
722 file. The option name which sets this value is
722 file. The option name which sets this value is
723 'wildcards_case_sensitive'. If this option is not specified in your
723 'wildcards_case_sensitive'. If this option is not specified in your
724 ipythonrc file, IPython's internal default is to do a case sensitive
724 ipythonrc file, IPython's internal default is to do a case sensitive
725 search.
725 search.
726
726
727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
728 specifiy can be searched in any of the following namespaces:
728 specifiy can be searched in any of the following namespaces:
729 'builtin', 'user', 'user_global','internal', 'alias', where
729 'builtin', 'user', 'user_global','internal', 'alias', where
730 'builtin' and 'user' are the search defaults. Note that you should
730 'builtin' and 'user' are the search defaults. Note that you should
731 not use quotes when specifying namespaces.
731 not use quotes when specifying namespaces.
732
732
733 'Builtin' contains the python module builtin, 'user' contains all
733 'Builtin' contains the python module builtin, 'user' contains all
734 user data, 'alias' only contain the shell aliases and no python
734 user data, 'alias' only contain the shell aliases and no python
735 objects, 'internal' contains objects used by IPython. The
735 objects, 'internal' contains objects used by IPython. The
736 'user_global' namespace is only used by embedded IPython instances,
736 'user_global' namespace is only used by embedded IPython instances,
737 and it contains module-level globals. You can add namespaces to the
737 and it contains module-level globals. You can add namespaces to the
738 search with -s or exclude them with -e (these options can be given
738 search with -s or exclude them with -e (these options can be given
739 more than once).
739 more than once).
740
740
741 Examples:
741 Examples:
742
742
743 %psearch a* -> objects beginning with an a
743 %psearch a* -> objects beginning with an a
744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
745 %psearch a* function -> all functions beginning with an a
745 %psearch a* function -> all functions beginning with an a
746 %psearch re.e* -> objects beginning with an e in module re
746 %psearch re.e* -> objects beginning with an e in module re
747 %psearch r*.e* -> objects that start with e in modules starting in r
747 %psearch r*.e* -> objects that start with e in modules starting in r
748 %psearch r*.* string -> all strings in modules beginning with r
748 %psearch r*.* string -> all strings in modules beginning with r
749
749
750 Case sensitve search:
750 Case sensitve search:
751
751
752 %psearch -c a* list all object beginning with lower case a
752 %psearch -c a* list all object beginning with lower case a
753
753
754 Show objects beginning with a single _:
754 Show objects beginning with a single _:
755
755
756 %psearch -a _* list objects beginning with a single underscore"""
756 %psearch -a _* list objects beginning with a single underscore"""
757
757
758 # default namespaces to be searched
758 # default namespaces to be searched
759 def_search = ['user','builtin']
759 def_search = ['user','builtin']
760
760
761 # Process options/args
761 # Process options/args
762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
763 opt = opts.get
763 opt = opts.get
764 shell = self.shell
764 shell = self.shell
765 psearch = shell.inspector.psearch
765 psearch = shell.inspector.psearch
766
766
767 # select case options
767 # select case options
768 if opts.has_key('i'):
768 if opts.has_key('i'):
769 ignore_case = True
769 ignore_case = True
770 elif opts.has_key('c'):
770 elif opts.has_key('c'):
771 ignore_case = False
771 ignore_case = False
772 else:
772 else:
773 ignore_case = not shell.rc.wildcards_case_sensitive
773 ignore_case = not shell.rc.wildcards_case_sensitive
774
774
775 # Build list of namespaces to search from user options
775 # Build list of namespaces to search from user options
776 def_search.extend(opt('s',[]))
776 def_search.extend(opt('s',[]))
777 ns_exclude = ns_exclude=opt('e',[])
777 ns_exclude = ns_exclude=opt('e',[])
778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
779
779
780 # Call the actual search
780 # Call the actual search
781 try:
781 try:
782 psearch(args,shell.ns_table,ns_search,
782 psearch(args,shell.ns_table,ns_search,
783 show_all=opt('a'),ignore_case=ignore_case)
783 show_all=opt('a'),ignore_case=ignore_case)
784 except:
784 except:
785 shell.showtraceback()
785 shell.showtraceback()
786
786
787 def magic_who_ls(self, parameter_s=''):
787 def magic_who_ls(self, parameter_s=''):
788 """Return a sorted list of all interactive variables.
788 """Return a sorted list of all interactive variables.
789
789
790 If arguments are given, only variables of types matching these
790 If arguments are given, only variables of types matching these
791 arguments are returned."""
791 arguments are returned."""
792
792
793 user_ns = self.shell.user_ns
793 user_ns = self.shell.user_ns
794 internal_ns = self.shell.internal_ns
794 internal_ns = self.shell.internal_ns
795 user_config_ns = self.shell.user_config_ns
795 user_config_ns = self.shell.user_config_ns
796 out = []
796 out = []
797 typelist = parameter_s.split()
797 typelist = parameter_s.split()
798
798
799 for i in user_ns:
799 for i in user_ns:
800 if not (i.startswith('_') or i.startswith('_i')) \
800 if not (i.startswith('_') or i.startswith('_i')) \
801 and not (i in internal_ns or i in user_config_ns):
801 and not (i in internal_ns or i in user_config_ns):
802 if typelist:
802 if typelist:
803 if type(user_ns[i]).__name__ in typelist:
803 if type(user_ns[i]).__name__ in typelist:
804 out.append(i)
804 out.append(i)
805 else:
805 else:
806 out.append(i)
806 out.append(i)
807 out.sort()
807 out.sort()
808 return out
808 return out
809
809
810 def magic_who(self, parameter_s=''):
810 def magic_who(self, parameter_s=''):
811 """Print all interactive variables, with some minimal formatting.
811 """Print all interactive variables, with some minimal formatting.
812
812
813 If any arguments are given, only variables whose type matches one of
813 If any arguments are given, only variables whose type matches one of
814 these are printed. For example:
814 these are printed. For example:
815
815
816 %who function str
816 %who function str
817
817
818 will only list functions and strings, excluding all other types of
818 will only list functions and strings, excluding all other types of
819 variables. To find the proper type names, simply use type(var) at a
819 variables. To find the proper type names, simply use type(var) at a
820 command line to see how python prints type names. For example:
820 command line to see how python prints type names. For example:
821
821
822 In [1]: type('hello')\\
822 In [1]: type('hello')\\
823 Out[1]: <type 'str'>
823 Out[1]: <type 'str'>
824
824
825 indicates that the type name for strings is 'str'.
825 indicates that the type name for strings is 'str'.
826
826
827 %who always excludes executed names loaded through your configuration
827 %who always excludes executed names loaded through your configuration
828 file and things which are internal to IPython.
828 file and things which are internal to IPython.
829
829
830 This is deliberate, as typically you may load many modules and the
830 This is deliberate, as typically you may load many modules and the
831 purpose of %who is to show you only what you've manually defined."""
831 purpose of %who is to show you only what you've manually defined."""
832
832
833 varlist = self.magic_who_ls(parameter_s)
833 varlist = self.magic_who_ls(parameter_s)
834 if not varlist:
834 if not varlist:
835 print 'Interactive namespace is empty.'
835 print 'Interactive namespace is empty.'
836 return
836 return
837
837
838 # if we have variables, move on...
838 # if we have variables, move on...
839
839
840 # stupid flushing problem: when prompts have no separators, stdout is
840 # stupid flushing problem: when prompts have no separators, stdout is
841 # getting lost. I'm starting to think this is a python bug. I'm having
841 # getting lost. I'm starting to think this is a python bug. I'm having
842 # to force a flush with a print because even a sys.stdout.flush
842 # to force a flush with a print because even a sys.stdout.flush
843 # doesn't seem to do anything!
843 # doesn't seem to do anything!
844
844
845 count = 0
845 count = 0
846 for i in varlist:
846 for i in varlist:
847 print i+'\t',
847 print i+'\t',
848 count += 1
848 count += 1
849 if count > 8:
849 if count > 8:
850 count = 0
850 count = 0
851 print
851 print
852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
853
853
854 print # well, this does force a flush at the expense of an extra \n
854 print # well, this does force a flush at the expense of an extra \n
855
855
856 def magic_whos(self, parameter_s=''):
856 def magic_whos(self, parameter_s=''):
857 """Like %who, but gives some extra information about each variable.
857 """Like %who, but gives some extra information about each variable.
858
858
859 The same type filtering of %who can be applied here.
859 The same type filtering of %who can be applied here.
860
860
861 For all variables, the type is printed. Additionally it prints:
861 For all variables, the type is printed. Additionally it prints:
862
862
863 - For {},[],(): their length.
863 - For {},[],(): their length.
864
864
865 - For Numeric arrays, a summary with shape, number of elements,
865 - For Numeric arrays, a summary with shape, number of elements,
866 typecode and size in memory.
866 typecode and size in memory.
867
867
868 - Everything else: a string representation, snipping their middle if
868 - Everything else: a string representation, snipping their middle if
869 too long."""
869 too long."""
870
870
871 varnames = self.magic_who_ls(parameter_s)
871 varnames = self.magic_who_ls(parameter_s)
872 if not varnames:
872 if not varnames:
873 print 'Interactive namespace is empty.'
873 print 'Interactive namespace is empty.'
874 return
874 return
875
875
876 # if we have variables, move on...
876 # if we have variables, move on...
877
877
878 # for these types, show len() instead of data:
878 # for these types, show len() instead of data:
879 seq_types = [types.DictType,types.ListType,types.TupleType]
879 seq_types = [types.DictType,types.ListType,types.TupleType]
880
880
881 # for Numeric arrays, display summary info
881 # for Numeric arrays, display summary info
882 try:
882 try:
883 import Numeric
883 import Numeric
884 except ImportError:
884 except ImportError:
885 array_type = None
885 array_type = None
886 else:
886 else:
887 array_type = Numeric.ArrayType.__name__
887 array_type = Numeric.ArrayType.__name__
888
888
889 # Find all variable names and types so we can figure out column sizes
889 # Find all variable names and types so we can figure out column sizes
890 get_vars = lambda i: self.shell.user_ns[i]
890 get_vars = lambda i: self.shell.user_ns[i]
891 type_name = lambda v: type(v).__name__
891 type_name = lambda v: type(v).__name__
892 varlist = map(get_vars,varnames)
892 varlist = map(get_vars,varnames)
893
893
894 typelist = []
894 typelist = []
895 for vv in varlist:
895 for vv in varlist:
896 tt = type_name(vv)
896 tt = type_name(vv)
897 if tt=='instance':
897 if tt=='instance':
898 typelist.append(str(vv.__class__))
898 typelist.append(str(vv.__class__))
899 else:
899 else:
900 typelist.append(tt)
900 typelist.append(tt)
901
901
902 # column labels and # of spaces as separator
902 # column labels and # of spaces as separator
903 varlabel = 'Variable'
903 varlabel = 'Variable'
904 typelabel = 'Type'
904 typelabel = 'Type'
905 datalabel = 'Data/Info'
905 datalabel = 'Data/Info'
906 colsep = 3
906 colsep = 3
907 # variable format strings
907 # variable format strings
908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
910 aformat = "%s: %s elems, type `%s`, %s bytes"
910 aformat = "%s: %s elems, type `%s`, %s bytes"
911 # find the size of the columns to format the output nicely
911 # find the size of the columns to format the output nicely
912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
914 # table header
914 # table header
915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
917 # and the table itself
917 # and the table itself
918 kb = 1024
918 kb = 1024
919 Mb = 1048576 # kb**2
919 Mb = 1048576 # kb**2
920 for vname,var,vtype in zip(varnames,varlist,typelist):
920 for vname,var,vtype in zip(varnames,varlist,typelist):
921 print itpl(vformat),
921 print itpl(vformat),
922 if vtype in seq_types:
922 if vtype in seq_types:
923 print len(var)
923 print len(var)
924 elif vtype==array_type:
924 elif vtype==array_type:
925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
926 vsize = Numeric.size(var)
926 vsize = Numeric.size(var)
927 vbytes = vsize*var.itemsize()
927 vbytes = vsize*var.itemsize()
928 if vbytes < 100000:
928 if vbytes < 100000:
929 print aformat % (vshape,vsize,var.typecode(),vbytes)
929 print aformat % (vshape,vsize,var.typecode(),vbytes)
930 else:
930 else:
931 print aformat % (vshape,vsize,var.typecode(),vbytes),
931 print aformat % (vshape,vsize,var.typecode(),vbytes),
932 if vbytes < Mb:
932 if vbytes < Mb:
933 print '(%s kb)' % (vbytes/kb,)
933 print '(%s kb)' % (vbytes/kb,)
934 else:
934 else:
935 print '(%s Mb)' % (vbytes/Mb,)
935 print '(%s Mb)' % (vbytes/Mb,)
936 else:
936 else:
937 vstr = str(var).replace('\n','\\n')
937 vstr = str(var).replace('\n','\\n')
938 if len(vstr) < 50:
938 if len(vstr) < 50:
939 print vstr
939 print vstr
940 else:
940 else:
941 printpl(vfmt_short)
941 printpl(vfmt_short)
942
942
943 def magic_reset(self, parameter_s=''):
943 def magic_reset(self, parameter_s=''):
944 """Resets the namespace by removing all names defined by the user.
944 """Resets the namespace by removing all names defined by the user.
945
945
946 Input/Output history are left around in case you need them."""
946 Input/Output history are left around in case you need them."""
947
947
948 ans = raw_input(
948 ans = raw_input(
949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
950 if not ans.lower() == 'y':
950 if not ans.lower() == 'y':
951 print 'Nothing done.'
951 print 'Nothing done.'
952 return
952 return
953 user_ns = self.shell.user_ns
953 user_ns = self.shell.user_ns
954 for i in self.magic_who_ls():
954 for i in self.magic_who_ls():
955 del(user_ns[i])
955 del(user_ns[i])
956
956
957 def magic_config(self,parameter_s=''):
957 def magic_config(self,parameter_s=''):
958 """Show IPython's internal configuration."""
958 """Show IPython's internal configuration."""
959
959
960 page('Current configuration structure:\n'+
960 page('Current configuration structure:\n'+
961 pformat(self.shell.rc.dict()))
961 pformat(self.shell.rc.dict()))
962
962
963 def magic_logstart(self,parameter_s=''):
963 def magic_logstart(self,parameter_s=''):
964 """Start logging anywhere in a session.
964 """Start logging anywhere in a session.
965
965
966 %logstart [-o|-t] [log_name [log_mode]]
966 %logstart [-o|-t] [log_name [log_mode]]
967
967
968 If no name is given, it defaults to a file named 'ipython_log.py' in your
968 If no name is given, it defaults to a file named 'ipython_log.py' in your
969 current directory, in 'rotate' mode (see below).
969 current directory, in 'rotate' mode (see below).
970
970
971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
972 history up to that point and then continues logging.
972 history up to that point and then continues logging.
973
973
974 %logstart takes a second optional parameter: logging mode. This can be one
974 %logstart takes a second optional parameter: logging mode. This can be one
975 of (note that the modes are given unquoted):\\
975 of (note that the modes are given unquoted):\\
976 append: well, that says it.\\
976 append: well, that says it.\\
977 backup: rename (if exists) to name~ and start name.\\
977 backup: rename (if exists) to name~ and start name.\\
978 global: single logfile in your home dir, appended to.\\
978 global: single logfile in your home dir, appended to.\\
979 over : overwrite existing log.\\
979 over : overwrite existing log.\\
980 rotate: create rotating logs name.1~, name.2~, etc.
980 rotate: create rotating logs name.1~, name.2~, etc.
981
981
982 Options:
982 Options:
983
983
984 -o: log also IPython's output. In this mode, all commands which
984 -o: log also IPython's output. In this mode, all commands which
985 generate an Out[NN] prompt are recorded to the logfile, right after
985 generate an Out[NN] prompt are recorded to the logfile, right after
986 their corresponding input line. The output lines are always
986 their corresponding input line. The output lines are always
987 prepended with a '#[Out]# ' marker, so that the log remains valid
987 prepended with a '#[Out]# ' marker, so that the log remains valid
988 Python code.
988 Python code.
989
989
990 Since this marker is always the same, filtering only the output from
990 Since this marker is always the same, filtering only the output from
991 a log is very easy, using for example a simple awk call:
991 a log is very easy, using for example a simple awk call:
992
992
993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
994
994
995 -t: put timestamps before each input line logged (these are put in
995 -t: put timestamps before each input line logged (these are put in
996 comments)."""
996 comments)."""
997
997
998 opts,par = self.parse_options(parameter_s,'ot')
998 opts,par = self.parse_options(parameter_s,'ot')
999 log_output = 'o' in opts
999 log_output = 'o' in opts
1000 timestamp = 't' in opts
1000 timestamp = 't' in opts
1001
1001
1002 rc = self.shell.rc
1002 rc = self.shell.rc
1003 logger = self.shell.logger
1003 logger = self.shell.logger
1004
1004
1005 # if no args are given, the defaults set in the logger constructor by
1005 # if no args are given, the defaults set in the logger constructor by
1006 # ipytohn remain valid
1006 # ipytohn remain valid
1007 if par:
1007 if par:
1008 try:
1008 try:
1009 logfname,logmode = par.split()
1009 logfname,logmode = par.split()
1010 except:
1010 except:
1011 logfname = par
1011 logfname = par
1012 logmode = 'backup'
1012 logmode = 'backup'
1013 else:
1013 else:
1014 logfname = logger.logfname
1014 logfname = logger.logfname
1015 logmode = logger.logmode
1015 logmode = logger.logmode
1016 # put logfname into rc struct as if it had been called on the command
1016 # put logfname into rc struct as if it had been called on the command
1017 # line, so it ends up saved in the log header Save it in case we need
1017 # line, so it ends up saved in the log header Save it in case we need
1018 # to restore it...
1018 # to restore it...
1019 old_logfile = rc.opts.get('logfile','')
1019 old_logfile = rc.opts.get('logfile','')
1020 if logfname:
1020 if logfname:
1021 logfname = os.path.expanduser(logfname)
1021 logfname = os.path.expanduser(logfname)
1022 rc.opts.logfile = logfname
1022 rc.opts.logfile = logfname
1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1024 try:
1024 try:
1025 started = logger.logstart(logfname,loghead,logmode,
1025 started = logger.logstart(logfname,loghead,logmode,
1026 log_output,timestamp)
1026 log_output,timestamp)
1027 except:
1027 except:
1028 rc.opts.logfile = old_logfile
1028 rc.opts.logfile = old_logfile
1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1030 else:
1030 else:
1031 # log input history up to this point, optionally interleaving
1031 # log input history up to this point, optionally interleaving
1032 # output if requested
1032 # output if requested
1033
1033
1034 if timestamp:
1034 if timestamp:
1035 # disable timestamping for the previous history, since we've
1035 # disable timestamping for the previous history, since we've
1036 # lost those already (no time machine here).
1036 # lost those already (no time machine here).
1037 logger.timestamp = False
1037 logger.timestamp = False
1038 if log_output:
1038 if log_output:
1039 log_write = logger.log_write
1039 log_write = logger.log_write
1040 input_hist = self.shell.input_hist
1040 input_hist = self.shell.input_hist
1041 output_hist = self.shell.output_hist
1041 output_hist = self.shell.output_hist
1042 for n in range(1,len(input_hist)-1):
1042 for n in range(1,len(input_hist)-1):
1043 log_write(input_hist[n].rstrip())
1043 log_write(input_hist[n].rstrip())
1044 if n in output_hist:
1044 if n in output_hist:
1045 log_write(repr(output_hist[n]),'output')
1045 log_write(repr(output_hist[n]),'output')
1046 else:
1046 else:
1047 logger.log_write(self.shell.input_hist[1:])
1047 logger.log_write(self.shell.input_hist[1:])
1048 if timestamp:
1048 if timestamp:
1049 # re-enable timestamping
1049 # re-enable timestamping
1050 logger.timestamp = True
1050 logger.timestamp = True
1051
1051
1052 print ('Activating auto-logging. '
1052 print ('Activating auto-logging. '
1053 'Current session state plus future input saved.')
1053 'Current session state plus future input saved.')
1054 logger.logstate()
1054 logger.logstate()
1055
1055
1056 def magic_logoff(self,parameter_s=''):
1056 def magic_logoff(self,parameter_s=''):
1057 """Temporarily stop logging.
1057 """Temporarily stop logging.
1058
1058
1059 You must have previously started logging."""
1059 You must have previously started logging."""
1060 self.shell.logger.switch_log(0)
1060 self.shell.logger.switch_log(0)
1061
1061
1062 def magic_logon(self,parameter_s=''):
1062 def magic_logon(self,parameter_s=''):
1063 """Restart logging.
1063 """Restart logging.
1064
1064
1065 This function is for restarting logging which you've temporarily
1065 This function is for restarting logging which you've temporarily
1066 stopped with %logoff. For starting logging for the first time, you
1066 stopped with %logoff. For starting logging for the first time, you
1067 must use the %logstart function, which allows you to specify an
1067 must use the %logstart function, which allows you to specify an
1068 optional log filename."""
1068 optional log filename."""
1069
1069
1070 self.shell.logger.switch_log(1)
1070 self.shell.logger.switch_log(1)
1071
1071
1072 def magic_logstate(self,parameter_s=''):
1072 def magic_logstate(self,parameter_s=''):
1073 """Print the status of the logging system."""
1073 """Print the status of the logging system."""
1074
1074
1075 self.shell.logger.logstate()
1075 self.shell.logger.logstate()
1076
1076
1077 def magic_pdb(self, parameter_s=''):
1077 def magic_pdb(self, parameter_s=''):
1078 """Control the calling of the pdb interactive debugger.
1078 """Control the calling of the pdb interactive debugger.
1079
1079
1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1081 argument it works as a toggle.
1081 argument it works as a toggle.
1082
1082
1083 When an exception is triggered, IPython can optionally call the
1083 When an exception is triggered, IPython can optionally call the
1084 interactive pdb debugger after the traceback printout. %pdb toggles
1084 interactive pdb debugger after the traceback printout. %pdb toggles
1085 this feature on and off."""
1085 this feature on and off."""
1086
1086
1087 par = parameter_s.strip().lower()
1087 par = parameter_s.strip().lower()
1088
1088
1089 if par:
1089 if par:
1090 try:
1090 try:
1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1092 except KeyError:
1092 except KeyError:
1093 print ('Incorrect argument. Use on/1, off/0, '
1093 print ('Incorrect argument. Use on/1, off/0, '
1094 'or nothing for a toggle.')
1094 'or nothing for a toggle.')
1095 return
1095 return
1096 else:
1096 else:
1097 # toggle
1097 # toggle
1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1099
1099
1100 # set on the shell
1100 # set on the shell
1101 self.shell.call_pdb = new_pdb
1101 self.shell.call_pdb = new_pdb
1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1103
1103
1104 def magic_prun(self, parameter_s ='',user_mode=1,
1104 def magic_prun(self, parameter_s ='',user_mode=1,
1105 opts=None,arg_lst=None,prog_ns=None):
1105 opts=None,arg_lst=None,prog_ns=None):
1106
1106
1107 """Run a statement through the python code profiler.
1107 """Run a statement through the python code profiler.
1108
1108
1109 Usage:\\
1109 Usage:\\
1110 %prun [options] statement
1110 %prun [options] statement
1111
1111
1112 The given statement (which doesn't require quote marks) is run via the
1112 The given statement (which doesn't require quote marks) is run via the
1113 python profiler in a manner similar to the profile.run() function.
1113 python profiler in a manner similar to the profile.run() function.
1114 Namespaces are internally managed to work correctly; profile.run
1114 Namespaces are internally managed to work correctly; profile.run
1115 cannot be used in IPython because it makes certain assumptions about
1115 cannot be used in IPython because it makes certain assumptions about
1116 namespaces which do not hold under IPython.
1116 namespaces which do not hold under IPython.
1117
1117
1118 Options:
1118 Options:
1119
1119
1120 -l <limit>: you can place restrictions on what or how much of the
1120 -l <limit>: you can place restrictions on what or how much of the
1121 profile gets printed. The limit value can be:
1121 profile gets printed. The limit value can be:
1122
1122
1123 * A string: only information for function names containing this string
1123 * A string: only information for function names containing this string
1124 is printed.
1124 is printed.
1125
1125
1126 * An integer: only these many lines are printed.
1126 * An integer: only these many lines are printed.
1127
1127
1128 * A float (between 0 and 1): this fraction of the report is printed
1128 * A float (between 0 and 1): this fraction of the report is printed
1129 (for example, use a limit of 0.4 to see the topmost 40% only).
1129 (for example, use a limit of 0.4 to see the topmost 40% only).
1130
1130
1131 You can combine several limits with repeated use of the option. For
1131 You can combine several limits with repeated use of the option. For
1132 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1132 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1133 information about class constructors.
1133 information about class constructors.
1134
1134
1135 -r: return the pstats.Stats object generated by the profiling. This
1135 -r: return the pstats.Stats object generated by the profiling. This
1136 object has all the information about the profile in it, and you can
1136 object has all the information about the profile in it, and you can
1137 later use it for further analysis or in other functions.
1137 later use it for further analysis or in other functions.
1138
1138
1139 Since magic functions have a particular form of calling which prevents
1139 Since magic functions have a particular form of calling which prevents
1140 you from writing something like:\\
1140 you from writing something like:\\
1141 In [1]: p = %prun -r print 4 # invalid!\\
1141 In [1]: p = %prun -r print 4 # invalid!\\
1142 you must instead use IPython's automatic variables to assign this:\\
1142 you must instead use IPython's automatic variables to assign this:\\
1143 In [1]: %prun -r print 4 \\
1143 In [1]: %prun -r print 4 \\
1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1145 In [2]: stats = _
1145 In [2]: stats = _
1146
1146
1147 If you really need to assign this value via an explicit function call,
1147 If you really need to assign this value via an explicit function call,
1148 you can always tap directly into the true name of the magic function
1148 you can always tap directly into the true name of the magic function
1149 by using the ipmagic function (which IPython automatically adds to the
1149 by using the ipmagic function (which IPython automatically adds to the
1150 builtins):\\
1150 builtins):\\
1151 In [3]: stats = ipmagic('prun','-r print 4')
1151 In [3]: stats = ipmagic('prun','-r print 4')
1152
1152
1153 You can type ipmagic? for more details on ipmagic.
1153 You can type ipmagic? for more details on ipmagic.
1154
1154
1155 -s <key>: sort profile by given key. You can provide more than one key
1155 -s <key>: sort profile by given key. You can provide more than one key
1156 by using the option several times: '-s key1 -s key2 -s key3...'. The
1156 by using the option several times: '-s key1 -s key2 -s key3...'. The
1157 default sorting key is 'time'.
1157 default sorting key is 'time'.
1158
1158
1159 The following is copied verbatim from the profile documentation
1159 The following is copied verbatim from the profile documentation
1160 referenced below:
1160 referenced below:
1161
1161
1162 When more than one key is provided, additional keys are used as
1162 When more than one key is provided, additional keys are used as
1163 secondary criteria when the there is equality in all keys selected
1163 secondary criteria when the there is equality in all keys selected
1164 before them.
1164 before them.
1165
1165
1166 Abbreviations can be used for any key names, as long as the
1166 Abbreviations can be used for any key names, as long as the
1167 abbreviation is unambiguous. The following are the keys currently
1167 abbreviation is unambiguous. The following are the keys currently
1168 defined:
1168 defined:
1169
1169
1170 Valid Arg Meaning\\
1170 Valid Arg Meaning\\
1171 "calls" call count\\
1171 "calls" call count\\
1172 "cumulative" cumulative time\\
1172 "cumulative" cumulative time\\
1173 "file" file name\\
1173 "file" file name\\
1174 "module" file name\\
1174 "module" file name\\
1175 "pcalls" primitive call count\\
1175 "pcalls" primitive call count\\
1176 "line" line number\\
1176 "line" line number\\
1177 "name" function name\\
1177 "name" function name\\
1178 "nfl" name/file/line\\
1178 "nfl" name/file/line\\
1179 "stdname" standard name\\
1179 "stdname" standard name\\
1180 "time" internal time
1180 "time" internal time
1181
1181
1182 Note that all sorts on statistics are in descending order (placing
1182 Note that all sorts on statistics are in descending order (placing
1183 most time consuming items first), where as name, file, and line number
1183 most time consuming items first), where as name, file, and line number
1184 searches are in ascending order (i.e., alphabetical). The subtle
1184 searches are in ascending order (i.e., alphabetical). The subtle
1185 distinction between "nfl" and "stdname" is that the standard name is a
1185 distinction between "nfl" and "stdname" is that the standard name is a
1186 sort of the name as printed, which means that the embedded line
1186 sort of the name as printed, which means that the embedded line
1187 numbers get compared in an odd way. For example, lines 3, 20, and 40
1187 numbers get compared in an odd way. For example, lines 3, 20, and 40
1188 would (if the file names were the same) appear in the string order
1188 would (if the file names were the same) appear in the string order
1189 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1189 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1190 line numbers. In fact, sort_stats("nfl") is the same as
1190 line numbers. In fact, sort_stats("nfl") is the same as
1191 sort_stats("name", "file", "line").
1191 sort_stats("name", "file", "line").
1192
1192
1193 -T <filename>: save profile results as shown on screen to a text
1193 -T <filename>: save profile results as shown on screen to a text
1194 file. The profile is still shown on screen.
1194 file. The profile is still shown on screen.
1195
1195
1196 -D <filename>: save (via dump_stats) profile statistics to given
1196 -D <filename>: save (via dump_stats) profile statistics to given
1197 filename. This data is in a format understod by the pstats module, and
1197 filename. This data is in a format understod by the pstats module, and
1198 is generated by a call to the dump_stats() method of profile
1198 is generated by a call to the dump_stats() method of profile
1199 objects. The profile is still shown on screen.
1199 objects. The profile is still shown on screen.
1200
1200
1201 If you want to run complete programs under the profiler's control, use
1201 If you want to run complete programs under the profiler's control, use
1202 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1202 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1203 contains profiler specific options as described here.
1203 contains profiler specific options as described here.
1204
1204
1205 You can read the complete documentation for the profile module with:\\
1205 You can read the complete documentation for the profile module with:\\
1206 In [1]: import profile; profile.help() """
1206 In [1]: import profile; profile.help() """
1207
1207
1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1209 # protect user quote marks
1209 # protect user quote marks
1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1211
1211
1212 if user_mode: # regular user call
1212 if user_mode: # regular user call
1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1214 list_all=1)
1214 list_all=1)
1215 namespace = self.shell.user_ns
1215 namespace = self.shell.user_ns
1216 else: # called to run a program by %run -p
1216 else: # called to run a program by %run -p
1217 try:
1217 try:
1218 filename = get_py_filename(arg_lst[0])
1218 filename = get_py_filename(arg_lst[0])
1219 except IOError,msg:
1219 except IOError,msg:
1220 error(msg)
1220 error(msg)
1221 return
1221 return
1222
1222
1223 arg_str = 'execfile(filename,prog_ns)'
1223 arg_str = 'execfile(filename,prog_ns)'
1224 namespace = locals()
1224 namespace = locals()
1225
1225
1226 opts.merge(opts_def)
1226 opts.merge(opts_def)
1227
1227
1228 prof = profile.Profile()
1228 prof = profile.Profile()
1229 try:
1229 try:
1230 prof = prof.runctx(arg_str,namespace,namespace)
1230 prof = prof.runctx(arg_str,namespace,namespace)
1231 sys_exit = ''
1231 sys_exit = ''
1232 except SystemExit:
1232 except SystemExit:
1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1234
1234
1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1236
1236
1237 lims = opts.l
1237 lims = opts.l
1238 if lims:
1238 if lims:
1239 lims = [] # rebuild lims with ints/floats/strings
1239 lims = [] # rebuild lims with ints/floats/strings
1240 for lim in opts.l:
1240 for lim in opts.l:
1241 try:
1241 try:
1242 lims.append(int(lim))
1242 lims.append(int(lim))
1243 except ValueError:
1243 except ValueError:
1244 try:
1244 try:
1245 lims.append(float(lim))
1245 lims.append(float(lim))
1246 except ValueError:
1246 except ValueError:
1247 lims.append(lim)
1247 lims.append(lim)
1248
1248
1249 # trap output
1249 # trap output
1250 sys_stdout = sys.stdout
1250 sys_stdout = sys.stdout
1251 stdout_trap = StringIO()
1251 stdout_trap = StringIO()
1252 try:
1252 try:
1253 sys.stdout = stdout_trap
1253 sys.stdout = stdout_trap
1254 stats.print_stats(*lims)
1254 stats.print_stats(*lims)
1255 finally:
1255 finally:
1256 sys.stdout = sys_stdout
1256 sys.stdout = sys_stdout
1257 output = stdout_trap.getvalue()
1257 output = stdout_trap.getvalue()
1258 output = output.rstrip()
1258 output = output.rstrip()
1259
1259
1260 page(output,screen_lines=self.shell.rc.screen_length)
1260 page(output,screen_lines=self.shell.rc.screen_length)
1261 print sys_exit,
1261 print sys_exit,
1262
1262
1263 dump_file = opts.D[0]
1263 dump_file = opts.D[0]
1264 text_file = opts.T[0]
1264 text_file = opts.T[0]
1265 if dump_file:
1265 if dump_file:
1266 prof.dump_stats(dump_file)
1266 prof.dump_stats(dump_file)
1267 print '\n*** Profile stats marshalled to file',\
1267 print '\n*** Profile stats marshalled to file',\
1268 `dump_file`+'.',sys_exit
1268 `dump_file`+'.',sys_exit
1269 if text_file:
1269 if text_file:
1270 file(text_file,'w').write(output)
1270 file(text_file,'w').write(output)
1271 print '\n*** Profile printout saved to text file',\
1271 print '\n*** Profile printout saved to text file',\
1272 `text_file`+'.',sys_exit
1272 `text_file`+'.',sys_exit
1273
1273
1274 if opts.has_key('r'):
1274 if opts.has_key('r'):
1275 return stats
1275 return stats
1276 else:
1276 else:
1277 return None
1277 return None
1278
1278
1279 def magic_run(self, parameter_s ='',runner=None):
1279 def magic_run(self, parameter_s ='',runner=None):
1280 """Run the named file inside IPython as a program.
1280 """Run the named file inside IPython as a program.
1281
1281
1282 Usage:\\
1282 Usage:\\
1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1284
1284
1285 Parameters after the filename are passed as command-line arguments to
1285 Parameters after the filename are passed as command-line arguments to
1286 the program (put in sys.argv). Then, control returns to IPython's
1286 the program (put in sys.argv). Then, control returns to IPython's
1287 prompt.
1287 prompt.
1288
1288
1289 This is similar to running at a system prompt:\\
1289 This is similar to running at a system prompt:\\
1290 $ python file args\\
1290 $ python file args\\
1291 but with the advantage of giving you IPython's tracebacks, and of
1291 but with the advantage of giving you IPython's tracebacks, and of
1292 loading all variables into your interactive namespace for further use
1292 loading all variables into your interactive namespace for further use
1293 (unless -p is used, see below).
1293 (unless -p is used, see below).
1294
1294
1295 The file is executed in a namespace initially consisting only of
1295 The file is executed in a namespace initially consisting only of
1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1297 sees its environment as if it were being run as a stand-alone
1297 sees its environment as if it were being run as a stand-alone
1298 program. But after execution, the IPython interactive namespace gets
1298 program. But after execution, the IPython interactive namespace gets
1299 updated with all variables defined in the program (except for __name__
1299 updated with all variables defined in the program (except for __name__
1300 and sys.argv). This allows for very convenient loading of code for
1300 and sys.argv). This allows for very convenient loading of code for
1301 interactive work, while giving each program a 'clean sheet' to run in.
1301 interactive work, while giving each program a 'clean sheet' to run in.
1302
1302
1303 Options:
1303 Options:
1304
1304
1305 -n: __name__ is NOT set to '__main__', but to the running file's name
1305 -n: __name__ is NOT set to '__main__', but to the running file's name
1306 without extension (as python does under import). This allows running
1306 without extension (as python does under import). This allows running
1307 scripts and reloading the definitions in them without calling code
1307 scripts and reloading the definitions in them without calling code
1308 protected by an ' if __name__ == "__main__" ' clause.
1308 protected by an ' if __name__ == "__main__" ' clause.
1309
1309
1310 -i: run the file in IPython's namespace instead of an empty one. This
1310 -i: run the file in IPython's namespace instead of an empty one. This
1311 is useful if you are experimenting with code written in a text editor
1311 is useful if you are experimenting with code written in a text editor
1312 which depends on variables defined interactively.
1312 which depends on variables defined interactively.
1313
1313
1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1315 being run. This is particularly useful if IPython is being used to
1315 being run. This is particularly useful if IPython is being used to
1316 run unittests, which always exit with a sys.exit() call. In such
1316 run unittests, which always exit with a sys.exit() call. In such
1317 cases you are interested in the output of the test results, not in
1317 cases you are interested in the output of the test results, not in
1318 seeing a traceback of the unittest module.
1318 seeing a traceback of the unittest module.
1319
1319
1320 -t: print timing information at the end of the run. IPython will give
1320 -t: print timing information at the end of the run. IPython will give
1321 you an estimated CPU time consumption for your script, which under
1321 you an estimated CPU time consumption for your script, which under
1322 Unix uses the resource module to avoid the wraparound problems of
1322 Unix uses the resource module to avoid the wraparound problems of
1323 time.clock(). Under Unix, an estimate of time spent on system tasks
1323 time.clock(). Under Unix, an estimate of time spent on system tasks
1324 is also given (for Windows platforms this is reported as 0.0).
1324 is also given (for Windows platforms this is reported as 0.0).
1325
1325
1326 If -t is given, an additional -N<N> option can be given, where <N>
1326 If -t is given, an additional -N<N> option can be given, where <N>
1327 must be an integer indicating how many times you want the script to
1327 must be an integer indicating how many times you want the script to
1328 run. The final timing report will include total and per run results.
1328 run. The final timing report will include total and per run results.
1329
1329
1330 For example (testing the script uniq_stable.py):
1330 For example (testing the script uniq_stable.py):
1331
1331
1332 In [1]: run -t uniq_stable
1332 In [1]: run -t uniq_stable
1333
1333
1334 IPython CPU timings (estimated):\\
1334 IPython CPU timings (estimated):\\
1335 User : 0.19597 s.\\
1335 User : 0.19597 s.\\
1336 System: 0.0 s.\\
1336 System: 0.0 s.\\
1337
1337
1338 In [2]: run -t -N5 uniq_stable
1338 In [2]: run -t -N5 uniq_stable
1339
1339
1340 IPython CPU timings (estimated):\\
1340 IPython CPU timings (estimated):\\
1341 Total runs performed: 5\\
1341 Total runs performed: 5\\
1342 Times : Total Per run\\
1342 Times : Total Per run\\
1343 User : 0.910862 s, 0.1821724 s.\\
1343 User : 0.910862 s, 0.1821724 s.\\
1344 System: 0.0 s, 0.0 s.
1344 System: 0.0 s, 0.0 s.
1345
1345
1346 -d: run your program under the control of pdb, the Python debugger.
1346 -d: run your program under the control of pdb, the Python debugger.
1347 This allows you to execute your program step by step, watch variables,
1347 This allows you to execute your program step by step, watch variables,
1348 etc. Internally, what IPython does is similar to calling:
1348 etc. Internally, what IPython does is similar to calling:
1349
1349
1350 pdb.run('execfile("YOURFILENAME")')
1350 pdb.run('execfile("YOURFILENAME")')
1351
1351
1352 with a breakpoint set on line 1 of your file. You can change the line
1352 with a breakpoint set on line 1 of your file. You can change the line
1353 number for this automatic breakpoint to be <N> by using the -bN option
1353 number for this automatic breakpoint to be <N> by using the -bN option
1354 (where N must be an integer). For example:
1354 (where N must be an integer). For example:
1355
1355
1356 %run -d -b40 myscript
1356 %run -d -b40 myscript
1357
1357
1358 will set the first breakpoint at line 40 in myscript.py. Note that
1358 will set the first breakpoint at line 40 in myscript.py. Note that
1359 the first breakpoint must be set on a line which actually does
1359 the first breakpoint must be set on a line which actually does
1360 something (not a comment or docstring) for it to stop execution.
1360 something (not a comment or docstring) for it to stop execution.
1361
1361
1362 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1362 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1363 first enter 'c' (without qoutes) to start execution up to the first
1363 first enter 'c' (without qoutes) to start execution up to the first
1364 breakpoint.
1364 breakpoint.
1365
1365
1366 Entering 'help' gives information about the use of the debugger. You
1366 Entering 'help' gives information about the use of the debugger. You
1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1368 at a prompt.
1368 at a prompt.
1369
1369
1370 -p: run program under the control of the Python profiler module (which
1370 -p: run program under the control of the Python profiler module (which
1371 prints a detailed report of execution times, function calls, etc).
1371 prints a detailed report of execution times, function calls, etc).
1372
1372
1373 You can pass other options after -p which affect the behavior of the
1373 You can pass other options after -p which affect the behavior of the
1374 profiler itself. See the docs for %prun for details.
1374 profiler itself. See the docs for %prun for details.
1375
1375
1376 In this mode, the program's variables do NOT propagate back to the
1376 In this mode, the program's variables do NOT propagate back to the
1377 IPython interactive namespace (because they remain in the namespace
1377 IPython interactive namespace (because they remain in the namespace
1378 where the profiler executes them).
1378 where the profiler executes them).
1379
1379
1380 Internally this triggers a call to %prun, see its documentation for
1380 Internally this triggers a call to %prun, see its documentation for
1381 details on the options available specifically for profiling."""
1381 details on the options available specifically for profiling."""
1382
1382
1383 # get arguments and set sys.argv for program to be run.
1383 # get arguments and set sys.argv for program to be run.
1384 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1384 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1385 mode='list',list_all=1)
1385 mode='list',list_all=1)
1386
1386
1387 try:
1387 try:
1388 filename = get_py_filename(arg_lst[0])
1388 filename = get_py_filename(arg_lst[0])
1389 except IndexError:
1389 except IndexError:
1390 warn('you must provide at least a filename.')
1390 warn('you must provide at least a filename.')
1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1392 return
1392 return
1393 except IOError,msg:
1393 except IOError,msg:
1394 error(msg)
1394 error(msg)
1395 return
1395 return
1396
1396
1397 # Control the response to exit() calls made by the script being run
1397 # Control the response to exit() calls made by the script being run
1398 exit_ignore = opts.has_key('e')
1398 exit_ignore = opts.has_key('e')
1399
1399
1400 # Make sure that the running script gets a proper sys.argv as if it
1400 # Make sure that the running script gets a proper sys.argv as if it
1401 # were run from a system shell.
1401 # were run from a system shell.
1402 save_argv = sys.argv # save it for later restoring
1402 save_argv = sys.argv # save it for later restoring
1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1404
1404
1405 if opts.has_key('i'):
1405 if opts.has_key('i'):
1406 prog_ns = self.shell.user_ns
1406 prog_ns = self.shell.user_ns
1407 __name__save = self.shell.user_ns['__name__']
1407 __name__save = self.shell.user_ns['__name__']
1408 prog_ns['__name__'] = '__main__'
1408 prog_ns['__name__'] = '__main__'
1409 else:
1409 else:
1410 if opts.has_key('n'):
1410 if opts.has_key('n'):
1411 name = os.path.splitext(os.path.basename(filename))[0]
1411 name = os.path.splitext(os.path.basename(filename))[0]
1412 else:
1412 else:
1413 name = '__main__'
1413 name = '__main__'
1414 prog_ns = {'__name__':name}
1414 prog_ns = {'__name__':name}
1415
1415
1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1417 # set the __file__ global in the script's namespace
1417 # set the __file__ global in the script's namespace
1418 prog_ns['__file__'] = filename
1418 prog_ns['__file__'] = filename
1419
1419
1420 # pickle fix. See iplib for an explanation. But we need to make sure
1420 # pickle fix. See iplib for an explanation. But we need to make sure
1421 # that, if we overwrite __main__, we replace it at the end
1421 # that, if we overwrite __main__, we replace it at the end
1422 if prog_ns['__name__'] == '__main__':
1422 if prog_ns['__name__'] == '__main__':
1423 restore_main = sys.modules['__main__']
1423 restore_main = sys.modules['__main__']
1424 else:
1424 else:
1425 restore_main = False
1425 restore_main = False
1426
1426
1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1428
1428
1429 stats = None
1429 stats = None
1430 try:
1430 try:
1431 if opts.has_key('p'):
1431 if opts.has_key('p'):
1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1433 else:
1433 else:
1434 if opts.has_key('d'):
1434 if opts.has_key('d'):
1435 deb = Debugger.Pdb(self.shell.rc.colors)
1435 deb = Debugger.Pdb(self.shell.rc.colors)
1436 # reset Breakpoint state, which is moronically kept
1436 # reset Breakpoint state, which is moronically kept
1437 # in a class
1437 # in a class
1438 bdb.Breakpoint.next = 1
1438 bdb.Breakpoint.next = 1
1439 bdb.Breakpoint.bplist = {}
1439 bdb.Breakpoint.bplist = {}
1440 bdb.Breakpoint.bpbynumber = [None]
1440 bdb.Breakpoint.bpbynumber = [None]
1441 # Set an initial breakpoint to stop execution
1441 # Set an initial breakpoint to stop execution
1442 maxtries = 10
1442 maxtries = 10
1443 bp = int(opts.get('b',[1])[0])
1443 bp = int(opts.get('b',[1])[0])
1444 checkline = deb.checkline(filename,bp)
1444 checkline = deb.checkline(filename,bp)
1445 if not checkline:
1445 if not checkline:
1446 for bp in range(bp+1,bp+maxtries+1):
1446 for bp in range(bp+1,bp+maxtries+1):
1447 if deb.checkline(filename,bp):
1447 if deb.checkline(filename,bp):
1448 break
1448 break
1449 else:
1449 else:
1450 msg = ("\nI failed to find a valid line to set "
1450 msg = ("\nI failed to find a valid line to set "
1451 "a breakpoint\n"
1451 "a breakpoint\n"
1452 "after trying up to line: %s.\n"
1452 "after trying up to line: %s.\n"
1453 "Please set a valid breakpoint manually "
1453 "Please set a valid breakpoint manually "
1454 "with the -b option." % bp)
1454 "with the -b option." % bp)
1455 error(msg)
1455 error(msg)
1456 return
1456 return
1457 # if we find a good linenumber, set the breakpoint
1457 # if we find a good linenumber, set the breakpoint
1458 deb.do_break('%s:%s' % (filename,bp))
1458 deb.do_break('%s:%s' % (filename,bp))
1459 # Start file run
1459 # Start file run
1460 print "NOTE: Enter 'c' at the",
1460 print "NOTE: Enter 'c' at the",
1461 print "ipdb> prompt to start your script."
1461 print "ipdb> prompt to start your script."
1462 try:
1462 try:
1463 deb.run('execfile("%s")' % filename,prog_ns)
1463 deb.run('execfile("%s")' % filename,prog_ns)
1464 except:
1464 except:
1465 etype, value, tb = sys.exc_info()
1465 etype, value, tb = sys.exc_info()
1466 # Skip three frames in the traceback: the %run one,
1466 # Skip three frames in the traceback: the %run one,
1467 # one inside bdb.py, and the command-line typed by the
1467 # one inside bdb.py, and the command-line typed by the
1468 # user (run by exec in pdb itself).
1468 # user (run by exec in pdb itself).
1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1470 else:
1470 else:
1471 if runner is None:
1471 if runner is None:
1472 runner = self.shell.safe_execfile
1472 runner = self.shell.safe_execfile
1473 if opts.has_key('t'):
1473 if opts.has_key('t'):
1474 try:
1474 try:
1475 nruns = int(opts['N'][0])
1475 nruns = int(opts['N'][0])
1476 if nruns < 1:
1476 if nruns < 1:
1477 error('Number of runs must be >=1')
1477 error('Number of runs must be >=1')
1478 return
1478 return
1479 except (KeyError):
1479 except (KeyError):
1480 nruns = 1
1480 nruns = 1
1481 if nruns == 1:
1481 if nruns == 1:
1482 t0 = clock2()
1482 t0 = clock2()
1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1484 t1 = clock2()
1484 t1 = clock2()
1485 t_usr = t1[0]-t0[0]
1485 t_usr = t1[0]-t0[0]
1486 t_sys = t1[1]-t1[1]
1486 t_sys = t1[1]-t1[1]
1487 print "\nIPython CPU timings (estimated):"
1487 print "\nIPython CPU timings (estimated):"
1488 print " User : %10s s." % t_usr
1488 print " User : %10s s." % t_usr
1489 print " System: %10s s." % t_sys
1489 print " System: %10s s." % t_sys
1490 else:
1490 else:
1491 runs = range(nruns)
1491 runs = range(nruns)
1492 t0 = clock2()
1492 t0 = clock2()
1493 for nr in runs:
1493 for nr in runs:
1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1495 t1 = clock2()
1495 t1 = clock2()
1496 t_usr = t1[0]-t0[0]
1496 t_usr = t1[0]-t0[0]
1497 t_sys = t1[1]-t1[1]
1497 t_sys = t1[1]-t1[1]
1498 print "\nIPython CPU timings (estimated):"
1498 print "\nIPython CPU timings (estimated):"
1499 print "Total runs performed:",nruns
1499 print "Total runs performed:",nruns
1500 print " Times : %10s %10s" % ('Total','Per run')
1500 print " Times : %10s %10s" % ('Total','Per run')
1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1503
1503
1504 else:
1504 else:
1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1506 if opts.has_key('i'):
1506 if opts.has_key('i'):
1507 self.shell.user_ns['__name__'] = __name__save
1507 self.shell.user_ns['__name__'] = __name__save
1508 else:
1508 else:
1509 # update IPython interactive namespace
1509 # update IPython interactive namespace
1510 del prog_ns['__name__']
1510 del prog_ns['__name__']
1511 self.shell.user_ns.update(prog_ns)
1511 self.shell.user_ns.update(prog_ns)
1512 finally:
1512 finally:
1513 sys.argv = save_argv
1513 sys.argv = save_argv
1514 if restore_main:
1514 if restore_main:
1515 sys.modules['__main__'] = restore_main
1515 sys.modules['__main__'] = restore_main
1516 return stats
1516 return stats
1517
1517
1518 def magic_runlog(self, parameter_s =''):
1518 def magic_runlog(self, parameter_s =''):
1519 """Run files as logs.
1519 """Run files as logs.
1520
1520
1521 Usage:\\
1521 Usage:\\
1522 %runlog file1 file2 ...
1522 %runlog file1 file2 ...
1523
1523
1524 Run the named files (treating them as log files) in sequence inside
1524 Run the named files (treating them as log files) in sequence inside
1525 the interpreter, and return to the prompt. This is much slower than
1525 the interpreter, and return to the prompt. This is much slower than
1526 %run because each line is executed in a try/except block, but it
1526 %run because each line is executed in a try/except block, but it
1527 allows running files with syntax errors in them.
1527 allows running files with syntax errors in them.
1528
1528
1529 Normally IPython will guess when a file is one of its own logfiles, so
1529 Normally IPython will guess when a file is one of its own logfiles, so
1530 you can typically use %run even for logs. This shorthand allows you to
1530 you can typically use %run even for logs. This shorthand allows you to
1531 force any file to be treated as a log file."""
1531 force any file to be treated as a log file."""
1532
1532
1533 for f in parameter_s.split():
1533 for f in parameter_s.split():
1534 self.shell.safe_execfile(f,self.shell.user_ns,
1534 self.shell.safe_execfile(f,self.shell.user_ns,
1535 self.shell.user_ns,islog=1)
1535 self.shell.user_ns,islog=1)
1536
1536
1537 def magic_time(self,parameter_s = ''):
1537 def magic_time(self,parameter_s = ''):
1538 """Time execution of a Python statement or expression.
1538 """Time execution of a Python statement or expression.
1539
1539
1540 The CPU and wall clock times are printed, and the value of the
1540 The CPU and wall clock times are printed, and the value of the
1541 expression (if any) is returned. Note that under Win32, system time
1541 expression (if any) is returned. Note that under Win32, system time
1542 is always reported as 0, since it can not be measured.
1542 is always reported as 0, since it can not be measured.
1543
1543
1544 This function provides very basic timing functionality. In Python
1544 This function provides very basic timing functionality. In Python
1545 2.3, the timeit module offers more control and sophistication, but for
1545 2.3, the timeit module offers more control and sophistication, but for
1546 now IPython supports Python 2.2, so we can not rely on timeit being
1546 now IPython supports Python 2.2, so we can not rely on timeit being
1547 present.
1547 present.
1548
1548
1549 Some examples:
1549 Some examples:
1550
1550
1551 In [1]: time 2**128
1551 In [1]: time 2**128
1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1553 Wall time: 0.00
1553 Wall time: 0.00
1554 Out[1]: 340282366920938463463374607431768211456L
1554 Out[1]: 340282366920938463463374607431768211456L
1555
1555
1556 In [2]: n = 1000000
1556 In [2]: n = 1000000
1557
1557
1558 In [3]: time sum(range(n))
1558 In [3]: time sum(range(n))
1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1560 Wall time: 1.37
1560 Wall time: 1.37
1561 Out[3]: 499999500000L
1561 Out[3]: 499999500000L
1562
1562
1563 In [4]: time print 'hello world'
1563 In [4]: time print 'hello world'
1564 hello world
1564 hello world
1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1566 Wall time: 0.00
1566 Wall time: 0.00
1567 """
1567 """
1568
1568
1569 # fail immediately if the given expression can't be compiled
1569 # fail immediately if the given expression can't be compiled
1570 try:
1570 try:
1571 mode = 'eval'
1571 mode = 'eval'
1572 code = compile(parameter_s,'<timed eval>',mode)
1572 code = compile(parameter_s,'<timed eval>',mode)
1573 except SyntaxError:
1573 except SyntaxError:
1574 mode = 'exec'
1574 mode = 'exec'
1575 code = compile(parameter_s,'<timed exec>',mode)
1575 code = compile(parameter_s,'<timed exec>',mode)
1576 # skew measurement as little as possible
1576 # skew measurement as little as possible
1577 glob = self.shell.user_ns
1577 glob = self.shell.user_ns
1578 clk = clock2
1578 clk = clock2
1579 wtime = time.time
1579 wtime = time.time
1580 # time execution
1580 # time execution
1581 wall_st = wtime()
1581 wall_st = wtime()
1582 if mode=='eval':
1582 if mode=='eval':
1583 st = clk()
1583 st = clk()
1584 out = eval(code,glob)
1584 out = eval(code,glob)
1585 end = clk()
1585 end = clk()
1586 else:
1586 else:
1587 st = clk()
1587 st = clk()
1588 exec code in glob
1588 exec code in glob
1589 end = clk()
1589 end = clk()
1590 out = None
1590 out = None
1591 wall_end = wtime()
1591 wall_end = wtime()
1592 # Compute actual times and report
1592 # Compute actual times and report
1593 wall_time = wall_end-wall_st
1593 wall_time = wall_end-wall_st
1594 cpu_user = end[0]-st[0]
1594 cpu_user = end[0]-st[0]
1595 cpu_sys = end[1]-st[1]
1595 cpu_sys = end[1]-st[1]
1596 cpu_tot = cpu_user+cpu_sys
1596 cpu_tot = cpu_user+cpu_sys
1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1598 (cpu_user,cpu_sys,cpu_tot)
1598 (cpu_user,cpu_sys,cpu_tot)
1599 print "Wall time: %.2f" % wall_time
1599 print "Wall time: %.2f" % wall_time
1600 return out
1600 return out
1601
1601
1602 def magic_macro(self,parameter_s = ''):
1602 def magic_macro(self,parameter_s = ''):
1603 """Define a set of input lines as a macro for future re-execution.
1603 """Define a set of input lines as a macro for future re-execution.
1604
1604
1605 Usage:\\
1605 Usage:\\
1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1607
1607
1608 This will define a global variable called `name` which is a string
1608 This will define a global variable called `name` which is a string
1609 made of joining the slices and lines you specify (n1,n2,... numbers
1609 made of joining the slices and lines you specify (n1,n2,... numbers
1610 above) from your input history into a single string. This variable
1610 above) from your input history into a single string. This variable
1611 acts like an automatic function which re-executes those lines as if
1611 acts like an automatic function which re-executes those lines as if
1612 you had typed them. You just type 'name' at the prompt and the code
1612 you had typed them. You just type 'name' at the prompt and the code
1613 executes.
1613 executes.
1614
1614
1615 The notation for indicating number ranges is: n1-n2 means 'use line
1615 The notation for indicating number ranges is: n1-n2 means 'use line
1616 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1616 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1617 using the lines numbered 5,6 and 7.
1617 using the lines numbered 5,6 and 7.
1618
1618
1619 Note: as a 'hidden' feature, you can also use traditional python slice
1619 Note: as a 'hidden' feature, you can also use traditional python slice
1620 notation, where N:M means numbers N through M-1.
1620 notation, where N:M means numbers N through M-1.
1621
1621
1622 For example, if your history contains (%hist prints it):
1622 For example, if your history contains (%hist prints it):
1623
1623
1624 44: x=1\\
1624 44: x=1\\
1625 45: y=3\\
1625 45: y=3\\
1626 46: z=x+y\\
1626 46: z=x+y\\
1627 47: print x\\
1627 47: print x\\
1628 48: a=5\\
1628 48: a=5\\
1629 49: print 'x',x,'y',y\\
1629 49: print 'x',x,'y',y\\
1630
1630
1631 you can create a macro with lines 44 through 47 (included) and line 49
1631 you can create a macro with lines 44 through 47 (included) and line 49
1632 called my_macro with:
1632 called my_macro with:
1633
1633
1634 In [51]: %macro my_macro 44-47 49
1634 In [51]: %macro my_macro 44-47 49
1635
1635
1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1637 in one pass.
1637 in one pass.
1638
1638
1639 You don't need to give the line-numbers in order, and any given line
1639 You don't need to give the line-numbers in order, and any given line
1640 number can appear multiple times. You can assemble macros with any
1640 number can appear multiple times. You can assemble macros with any
1641 lines from your input history in any order.
1641 lines from your input history in any order.
1642
1642
1643 The macro is a simple object which holds its value in an attribute,
1643 The macro is a simple object which holds its value in an attribute,
1644 but IPython's display system checks for macros and executes them as
1644 but IPython's display system checks for macros and executes them as
1645 code instead of printing them when you type their name.
1645 code instead of printing them when you type their name.
1646
1646
1647 You can view a macro's contents by explicitly printing it with:
1647 You can view a macro's contents by explicitly printing it with:
1648
1648
1649 'print macro_name'.
1649 'print macro_name'.
1650
1650
1651 For one-off cases which DON'T contain magic function calls in them you
1651 For one-off cases which DON'T contain magic function calls in them you
1652 can obtain similar results by explicitly executing slices from your
1652 can obtain similar results by explicitly executing slices from your
1653 input history with:
1653 input history with:
1654
1654
1655 In [60]: exec In[44:48]+In[49]"""
1655 In [60]: exec In[44:48]+In[49]"""
1656
1656
1657 args = parameter_s.split()
1657 args = parameter_s.split()
1658 name,ranges = args[0], args[1:]
1658 name,ranges = args[0], args[1:]
1659 #print 'rng',ranges # dbg
1659 #print 'rng',ranges # dbg
1660 lines = self.extract_input_slices(ranges)
1660 lines = self.extract_input_slices(ranges)
1661 macro = Macro(lines)
1661 macro = Macro(lines)
1662 self.shell.user_ns.update({name:macro})
1662 self.shell.user_ns.update({name:macro})
1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1664 print 'Macro contents:'
1664 print 'Macro contents:'
1665 print macro,
1665 print macro,
1666
1666
1667 def magic_save(self,parameter_s = ''):
1667 def magic_save(self,parameter_s = ''):
1668 """Save a set of lines to a given filename.
1668 """Save a set of lines to a given filename.
1669
1669
1670 Usage:\\
1670 Usage:\\
1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1672
1672
1673 This function uses the same syntax as %macro for line extraction, but
1673 This function uses the same syntax as %macro for line extraction, but
1674 instead of creating a macro it saves the resulting string to the
1674 instead of creating a macro it saves the resulting string to the
1675 filename you specify.
1675 filename you specify.
1676
1676
1677 It adds a '.py' extension to the file if you don't do so yourself, and
1677 It adds a '.py' extension to the file if you don't do so yourself, and
1678 it asks for confirmation before overwriting existing files."""
1678 it asks for confirmation before overwriting existing files."""
1679
1679
1680 args = parameter_s.split()
1680 args = parameter_s.split()
1681 fname,ranges = args[0], args[1:]
1681 fname,ranges = args[0], args[1:]
1682 if not fname.endswith('.py'):
1682 if not fname.endswith('.py'):
1683 fname += '.py'
1683 fname += '.py'
1684 if os.path.isfile(fname):
1684 if os.path.isfile(fname):
1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1686 if ans.lower() not in ['y','yes']:
1686 if ans.lower() not in ['y','yes']:
1687 print 'Operation cancelled.'
1687 print 'Operation cancelled.'
1688 return
1688 return
1689 cmds = ''.join(self.extract_input_slices(ranges))
1689 cmds = ''.join(self.extract_input_slices(ranges))
1690 f = file(fname,'w')
1690 f = file(fname,'w')
1691 f.write(cmds)
1691 f.write(cmds)
1692 f.close()
1692 f.close()
1693 print 'The following commands were written to file `%s`:' % fname
1693 print 'The following commands were written to file `%s`:' % fname
1694 print cmds
1694 print cmds
1695
1695
1696 def _edit_macro(self,mname,macro):
1696 def _edit_macro(self,mname,macro):
1697 """open an editor with the macro data in a file"""
1697 """open an editor with the macro data in a file"""
1698 filename = self.shell.mktempfile(macro.value)
1698 filename = self.shell.mktempfile(macro.value)
1699 self.shell.hooks.editor(filename)
1699 self.shell.hooks.editor(filename)
1700
1700
1701 # and make a new macro object, to replace the old one
1701 # and make a new macro object, to replace the old one
1702 mfile = open(filename)
1702 mfile = open(filename)
1703 mvalue = mfile.read()
1703 mvalue = mfile.read()
1704 mfile.close()
1704 mfile.close()
1705 self.shell.user_ns[mname] = Macro(mvalue)
1705 self.shell.user_ns[mname] = Macro(mvalue)
1706
1706
1707 def magic_ed(self,parameter_s=''):
1707 def magic_ed(self,parameter_s=''):
1708 """Alias to %edit."""
1708 """Alias to %edit."""
1709 return self.magic_edit(parameter_s)
1709 return self.magic_edit(parameter_s)
1710
1710
1711 def magic_edit(self,parameter_s='',last_call=['','']):
1711 def magic_edit(self,parameter_s='',last_call=['','']):
1712 """Bring up an editor and execute the resulting code.
1712 """Bring up an editor and execute the resulting code.
1713
1713
1714 Usage:
1714 Usage:
1715 %edit [options] [args]
1715 %edit [options] [args]
1716
1716
1717 %edit runs IPython's editor hook. The default version of this hook is
1717 %edit runs IPython's editor hook. The default version of this hook is
1718 set to call the __IPYTHON__.rc.editor command. This is read from your
1718 set to call the __IPYTHON__.rc.editor command. This is read from your
1719 environment variable $EDITOR. If this isn't found, it will default to
1719 environment variable $EDITOR. If this isn't found, it will default to
1720 vi under Linux/Unix and to notepad under Windows. See the end of this
1720 vi under Linux/Unix and to notepad under Windows. See the end of this
1721 docstring for how to change the editor hook.
1721 docstring for how to change the editor hook.
1722
1722
1723 You can also set the value of this editor via the command line option
1723 You can also set the value of this editor via the command line option
1724 '-editor' or in your ipythonrc file. This is useful if you wish to use
1724 '-editor' or in your ipythonrc file. This is useful if you wish to use
1725 specifically for IPython an editor different from your typical default
1725 specifically for IPython an editor different from your typical default
1726 (and for Windows users who typically don't set environment variables).
1726 (and for Windows users who typically don't set environment variables).
1727
1727
1728 This command allows you to conveniently edit multi-line code right in
1728 This command allows you to conveniently edit multi-line code right in
1729 your IPython session.
1729 your IPython session.
1730
1730
1731 If called without arguments, %edit opens up an empty editor with a
1731 If called without arguments, %edit opens up an empty editor with a
1732 temporary file and will execute the contents of this file when you
1732 temporary file and will execute the contents of this file when you
1733 close it (don't forget to save it!).
1733 close it (don't forget to save it!).
1734
1734
1735
1735
1736 Options:
1736 Options:
1737
1737
1738 -p: this will call the editor with the same data as the previous time
1738 -p: this will call the editor with the same data as the previous time
1739 it was used, regardless of how long ago (in your current session) it
1739 it was used, regardless of how long ago (in your current session) it
1740 was.
1740 was.
1741
1741
1742 -x: do not execute the edited code immediately upon exit. This is
1742 -x: do not execute the edited code immediately upon exit. This is
1743 mainly useful if you are editing programs which need to be called with
1743 mainly useful if you are editing programs which need to be called with
1744 command line arguments, which you can then do using %run.
1744 command line arguments, which you can then do using %run.
1745
1745
1746
1746
1747 Arguments:
1747 Arguments:
1748
1748
1749 If arguments are given, the following possibilites exist:
1749 If arguments are given, the following possibilites exist:
1750
1750
1751 - The arguments are numbers or pairs of colon-separated numbers (like
1751 - The arguments are numbers or pairs of colon-separated numbers (like
1752 1 4:8 9). These are interpreted as lines of previous input to be
1752 1 4:8 9). These are interpreted as lines of previous input to be
1753 loaded into the editor. The syntax is the same of the %macro command.
1753 loaded into the editor. The syntax is the same of the %macro command.
1754
1754
1755 - If the argument doesn't start with a number, it is evaluated as a
1755 - If the argument doesn't start with a number, it is evaluated as a
1756 variable and its contents loaded into the editor. You can thus edit
1756 variable and its contents loaded into the editor. You can thus edit
1757 any string which contains python code (including the result of
1757 any string which contains python code (including the result of
1758 previous edits).
1758 previous edits).
1759
1759
1760 - If the argument is the name of an object (other than a string),
1760 - If the argument is the name of an object (other than a string),
1761 IPython will try to locate the file where it was defined and open the
1761 IPython will try to locate the file where it was defined and open the
1762 editor at the point where it is defined. You can use `%edit function`
1762 editor at the point where it is defined. You can use `%edit function`
1763 to load an editor exactly at the point where 'function' is defined,
1763 to load an editor exactly at the point where 'function' is defined,
1764 edit it and have the file be executed automatically.
1764 edit it and have the file be executed automatically.
1765
1765
1766 If the object is a macro (see %macro for details), this opens up your
1766 If the object is a macro (see %macro for details), this opens up your
1767 specified editor with a temporary file containing the macro's data.
1767 specified editor with a temporary file containing the macro's data.
1768 Upon exit, the macro is reloaded with the contents of the file.
1768 Upon exit, the macro is reloaded with the contents of the file.
1769
1769
1770 Note: opening at an exact line is only supported under Unix, and some
1770 Note: opening at an exact line is only supported under Unix, and some
1771 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1771 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1772 '+NUMBER' parameter necessary for this feature. Good editors like
1772 '+NUMBER' parameter necessary for this feature. Good editors like
1773 (X)Emacs, vi, jed, pico and joe all do.
1773 (X)Emacs, vi, jed, pico and joe all do.
1774
1774
1775 - If the argument is not found as a variable, IPython will look for a
1775 - If the argument is not found as a variable, IPython will look for a
1776 file with that name (adding .py if necessary) and load it into the
1776 file with that name (adding .py if necessary) and load it into the
1777 editor. It will execute its contents with execfile() when you exit,
1777 editor. It will execute its contents with execfile() when you exit,
1778 loading any code in the file into your interactive namespace.
1778 loading any code in the file into your interactive namespace.
1779
1779
1780 After executing your code, %edit will return as output the code you
1780 After executing your code, %edit will return as output the code you
1781 typed in the editor (except when it was an existing file). This way
1781 typed in the editor (except when it was an existing file). This way
1782 you can reload the code in further invocations of %edit as a variable,
1782 you can reload the code in further invocations of %edit as a variable,
1783 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1783 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1784 the output.
1784 the output.
1785
1785
1786 Note that %edit is also available through the alias %ed.
1786 Note that %edit is also available through the alias %ed.
1787
1787
1788 This is an example of creating a simple function inside the editor and
1788 This is an example of creating a simple function inside the editor and
1789 then modifying it. First, start up the editor:
1789 then modifying it. First, start up the editor:
1790
1790
1791 In [1]: ed\\
1791 In [1]: ed\\
1792 Editing... done. Executing edited code...\\
1792 Editing... done. Executing edited code...\\
1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1794
1794
1795 We can then call the function foo():
1795 We can then call the function foo():
1796
1796
1797 In [2]: foo()\\
1797 In [2]: foo()\\
1798 foo() was defined in an editing session
1798 foo() was defined in an editing session
1799
1799
1800 Now we edit foo. IPython automatically loads the editor with the
1800 Now we edit foo. IPython automatically loads the editor with the
1801 (temporary) file where foo() was previously defined:
1801 (temporary) file where foo() was previously defined:
1802
1802
1803 In [3]: ed foo\\
1803 In [3]: ed foo\\
1804 Editing... done. Executing edited code...
1804 Editing... done. Executing edited code...
1805
1805
1806 And if we call foo() again we get the modified version:
1806 And if we call foo() again we get the modified version:
1807
1807
1808 In [4]: foo()\\
1808 In [4]: foo()\\
1809 foo() has now been changed!
1809 foo() has now been changed!
1810
1810
1811 Here is an example of how to edit a code snippet successive
1811 Here is an example of how to edit a code snippet successive
1812 times. First we call the editor:
1812 times. First we call the editor:
1813
1813
1814 In [8]: ed\\
1814 In [8]: ed\\
1815 Editing... done. Executing edited code...\\
1815 Editing... done. Executing edited code...\\
1816 hello\\
1816 hello\\
1817 Out[8]: "print 'hello'\\n"
1817 Out[8]: "print 'hello'\\n"
1818
1818
1819 Now we call it again with the previous output (stored in _):
1819 Now we call it again with the previous output (stored in _):
1820
1820
1821 In [9]: ed _\\
1821 In [9]: ed _\\
1822 Editing... done. Executing edited code...\\
1822 Editing... done. Executing edited code...\\
1823 hello world\\
1823 hello world\\
1824 Out[9]: "print 'hello world'\\n"
1824 Out[9]: "print 'hello world'\\n"
1825
1825
1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1827
1827
1828 In [10]: ed _8\\
1828 In [10]: ed _8\\
1829 Editing... done. Executing edited code...\\
1829 Editing... done. Executing edited code...\\
1830 hello again\\
1830 hello again\\
1831 Out[10]: "print 'hello again'\\n"
1831 Out[10]: "print 'hello again'\\n"
1832
1832
1833
1833
1834 Changing the default editor hook:
1834 Changing the default editor hook:
1835
1835
1836 If you wish to write your own editor hook, you can put it in a
1836 If you wish to write your own editor hook, you can put it in a
1837 configuration file which you load at startup time. The default hook
1837 configuration file which you load at startup time. The default hook
1838 is defined in the IPython.hooks module, and you can use that as a
1838 is defined in the IPython.hooks module, and you can use that as a
1839 starting example for further modifications. That file also has
1839 starting example for further modifications. That file also has
1840 general instructions on how to set a new hook for use once you've
1840 general instructions on how to set a new hook for use once you've
1841 defined it."""
1841 defined it."""
1842
1842
1843 # FIXME: This function has become a convoluted mess. It needs a
1843 # FIXME: This function has become a convoluted mess. It needs a
1844 # ground-up rewrite with clean, simple logic.
1844 # ground-up rewrite with clean, simple logic.
1845
1845
1846 def make_filename(arg):
1846 def make_filename(arg):
1847 "Make a filename from the given args"
1847 "Make a filename from the given args"
1848 try:
1848 try:
1849 filename = get_py_filename(arg)
1849 filename = get_py_filename(arg)
1850 except IOError:
1850 except IOError:
1851 if args.endswith('.py'):
1851 if args.endswith('.py'):
1852 filename = arg
1852 filename = arg
1853 else:
1853 else:
1854 filename = None
1854 filename = None
1855 return filename
1855 return filename
1856
1856
1857 # custom exceptions
1857 # custom exceptions
1858 class DataIsObject(Exception): pass
1858 class DataIsObject(Exception): pass
1859
1859
1860 opts,args = self.parse_options(parameter_s,'px')
1860 opts,args = self.parse_options(parameter_s,'px')
1861
1861
1862 # Default line number value
1862 # Default line number value
1863 lineno = None
1863 lineno = None
1864 if opts.has_key('p'):
1864 if opts.has_key('p'):
1865 args = '_%s' % last_call[0]
1865 args = '_%s' % last_call[0]
1866 if not self.shell.user_ns.has_key(args):
1866 if not self.shell.user_ns.has_key(args):
1867 args = last_call[1]
1867 args = last_call[1]
1868
1868
1869 # use last_call to remember the state of the previous call, but don't
1869 # use last_call to remember the state of the previous call, but don't
1870 # let it be clobbered by successive '-p' calls.
1870 # let it be clobbered by successive '-p' calls.
1871 try:
1871 try:
1872 last_call[0] = self.shell.outputcache.prompt_count
1872 last_call[0] = self.shell.outputcache.prompt_count
1873 if not opts.has_key('p'):
1873 if not opts.has_key('p'):
1874 last_call[1] = parameter_s
1874 last_call[1] = parameter_s
1875 except:
1875 except:
1876 pass
1876 pass
1877
1877
1878 # by default this is done with temp files, except when the given
1878 # by default this is done with temp files, except when the given
1879 # arg is a filename
1879 # arg is a filename
1880 use_temp = 1
1880 use_temp = 1
1881
1881
1882 if re.match(r'\d',args):
1882 if re.match(r'\d',args):
1883 # Mode where user specifies ranges of lines, like in %macro.
1883 # Mode where user specifies ranges of lines, like in %macro.
1884 # This means that you can't edit files whose names begin with
1884 # This means that you can't edit files whose names begin with
1885 # numbers this way. Tough.
1885 # numbers this way. Tough.
1886 ranges = args.split()
1886 ranges = args.split()
1887 data = ''.join(self.extract_input_slices(ranges))
1887 data = ''.join(self.extract_input_slices(ranges))
1888 elif args.endswith('.py'):
1888 elif args.endswith('.py'):
1889 filename = make_filename(args)
1889 filename = make_filename(args)
1890 data = ''
1890 data = ''
1891 use_temp = 0
1891 use_temp = 0
1892 elif args:
1892 elif args:
1893 try:
1893 try:
1894 # Load the parameter given as a variable. If not a string,
1894 # Load the parameter given as a variable. If not a string,
1895 # process it as an object instead (below)
1895 # process it as an object instead (below)
1896
1896
1897 #print '*** args',args,'type',type(args) # dbg
1897 #print '*** args',args,'type',type(args) # dbg
1898 data = eval(args,self.shell.user_ns)
1898 data = eval(args,self.shell.user_ns)
1899 if not type(data) in StringTypes:
1899 if not type(data) in StringTypes:
1900 raise DataIsObject
1900 raise DataIsObject
1901
1901
1902 except (NameError,SyntaxError):
1902 except (NameError,SyntaxError):
1903 # given argument is not a variable, try as a filename
1903 # given argument is not a variable, try as a filename
1904 filename = make_filename(args)
1904 filename = make_filename(args)
1905 if filename is None:
1905 if filename is None:
1906 warn("Argument given (%s) can't be found as a variable "
1906 warn("Argument given (%s) can't be found as a variable "
1907 "or as a filename." % args)
1907 "or as a filename." % args)
1908 return
1908 return
1909
1909
1910 data = ''
1910 data = ''
1911 use_temp = 0
1911 use_temp = 0
1912 except DataIsObject:
1912 except DataIsObject:
1913
1913
1914 # macros have a special edit function
1914 # macros have a special edit function
1915 if isinstance(data,Macro):
1915 if isinstance(data,Macro):
1916 self._edit_macro(args,data)
1916 self._edit_macro(args,data)
1917 return
1917 return
1918
1918
1919 # For objects, try to edit the file where they are defined
1919 # For objects, try to edit the file where they are defined
1920 try:
1920 try:
1921 filename = inspect.getabsfile(data)
1921 filename = inspect.getabsfile(data)
1922 datafile = 1
1922 datafile = 1
1923 except TypeError:
1923 except TypeError:
1924 filename = make_filename(args)
1924 filename = make_filename(args)
1925 datafile = 1
1925 datafile = 1
1926 warn('Could not find file where `%s` is defined.\n'
1926 warn('Could not find file where `%s` is defined.\n'
1927 'Opening a file named `%s`' % (args,filename))
1927 'Opening a file named `%s`' % (args,filename))
1928 # Now, make sure we can actually read the source (if it was in
1928 # Now, make sure we can actually read the source (if it was in
1929 # a temp file it's gone by now).
1929 # a temp file it's gone by now).
1930 if datafile:
1930 if datafile:
1931 try:
1931 try:
1932 lineno = inspect.getsourcelines(data)[1]
1932 lineno = inspect.getsourcelines(data)[1]
1933 except IOError:
1933 except IOError:
1934 filename = make_filename(args)
1934 filename = make_filename(args)
1935 if filename is None:
1935 if filename is None:
1936 warn('The file `%s` where `%s` was defined cannot '
1936 warn('The file `%s` where `%s` was defined cannot '
1937 'be read.' % (filename,data))
1937 'be read.' % (filename,data))
1938 return
1938 return
1939 use_temp = 0
1939 use_temp = 0
1940 else:
1940 else:
1941 data = ''
1941 data = ''
1942
1942
1943 if use_temp:
1943 if use_temp:
1944 filename = self.shell.mktempfile(data)
1944 filename = self.shell.mktempfile(data)
1945 print 'IPython will make a temporary file named:',filename
1945 print 'IPython will make a temporary file named:',filename
1946
1946
1947 # do actual editing here
1947 # do actual editing here
1948 print 'Editing...',
1948 print 'Editing...',
1949 sys.stdout.flush()
1949 sys.stdout.flush()
1950 self.shell.hooks.editor(filename,lineno)
1950 self.shell.hooks.editor(filename,lineno)
1951 if opts.has_key('x'): # -x prevents actual execution
1951 if opts.has_key('x'): # -x prevents actual execution
1952 print
1952 print
1953 else:
1953 else:
1954 print 'done. Executing edited code...'
1954 print 'done. Executing edited code...'
1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1956 if use_temp:
1956 if use_temp:
1957 try:
1957 try:
1958 return open(filename).read()
1958 return open(filename).read()
1959 except IOError,msg:
1959 except IOError,msg:
1960 if msg.filename == filename:
1960 if msg.filename == filename:
1961 warn('File not found. Did you forget to save?')
1961 warn('File not found. Did you forget to save?')
1962 return
1962 return
1963 else:
1963 else:
1964 self.shell.showtraceback()
1964 self.shell.showtraceback()
1965
1965
1966 def magic_xmode(self,parameter_s = ''):
1966 def magic_xmode(self,parameter_s = ''):
1967 """Switch modes for the exception handlers.
1967 """Switch modes for the exception handlers.
1968
1968
1969 Valid modes: Plain, Context and Verbose.
1969 Valid modes: Plain, Context and Verbose.
1970
1970
1971 If called without arguments, acts as a toggle."""
1971 If called without arguments, acts as a toggle."""
1972
1972
1973 def xmode_switch_err(name):
1973 def xmode_switch_err(name):
1974 warn('Error changing %s exception modes.\n%s' %
1974 warn('Error changing %s exception modes.\n%s' %
1975 (name,sys.exc_info()[1]))
1975 (name,sys.exc_info()[1]))
1976
1976
1977 shell = self.shell
1977 shell = self.shell
1978 new_mode = parameter_s.strip().capitalize()
1978 new_mode = parameter_s.strip().capitalize()
1979 try:
1979 try:
1980 shell.InteractiveTB.set_mode(mode=new_mode)
1980 shell.InteractiveTB.set_mode(mode=new_mode)
1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1982 except:
1982 except:
1983 xmode_switch_err('user')
1983 xmode_switch_err('user')
1984
1984
1985 # threaded shells use a special handler in sys.excepthook
1985 # threaded shells use a special handler in sys.excepthook
1986 if shell.isthreaded:
1986 if shell.isthreaded:
1987 try:
1987 try:
1988 shell.sys_excepthook.set_mode(mode=new_mode)
1988 shell.sys_excepthook.set_mode(mode=new_mode)
1989 except:
1989 except:
1990 xmode_switch_err('threaded')
1990 xmode_switch_err('threaded')
1991
1991
1992 def magic_colors(self,parameter_s = ''):
1992 def magic_colors(self,parameter_s = ''):
1993 """Switch color scheme for prompts, info system and exception handlers.
1993 """Switch color scheme for prompts, info system and exception handlers.
1994
1994
1995 Currently implemented schemes: NoColor, Linux, LightBG.
1995 Currently implemented schemes: NoColor, Linux, LightBG.
1996
1996
1997 Color scheme names are not case-sensitive."""
1997 Color scheme names are not case-sensitive."""
1998
1998
1999 def color_switch_err(name):
1999 def color_switch_err(name):
2000 warn('Error changing %s color schemes.\n%s' %
2000 warn('Error changing %s color schemes.\n%s' %
2001 (name,sys.exc_info()[1]))
2001 (name,sys.exc_info()[1]))
2002
2002
2003
2003
2004 new_scheme = parameter_s.strip()
2004 new_scheme = parameter_s.strip()
2005 if not new_scheme:
2005 if not new_scheme:
2006 print 'You must specify a color scheme.'
2006 print 'You must specify a color scheme.'
2007 return
2007 return
2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2009 # for ANSI coloring
2009 # for ANSI coloring
2010 if os.name in ['nt','dos']:
2010 if os.name in ['nt','dos']:
2011 try:
2011 try:
2012 import readline
2012 import readline
2013 except ImportError:
2013 except ImportError:
2014 has_readline = 0
2014 has_readline = 0
2015 else:
2015 else:
2016 try:
2016 try:
2017 readline.GetOutputFile()
2017 readline.GetOutputFile()
2018 except AttributeError:
2018 except AttributeError:
2019 has_readline = 0
2019 has_readline = 0
2020 else:
2020 else:
2021 has_readline = 1
2021 has_readline = 1
2022 if not has_readline:
2022 if not has_readline:
2023 msg = """\
2023 msg = """\
2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2025 You can find it at:
2025 You can find it at:
2026 http://sourceforge.net/projects/uncpythontools
2026 http://sourceforge.net/projects/uncpythontools
2027 Gary's readline needs the ctypes module, from:
2027 Gary's readline needs the ctypes module, from:
2028 http://starship.python.net/crew/theller/ctypes
2028 http://starship.python.net/crew/theller/ctypes
2029
2029
2030 Defaulting color scheme to 'NoColor'"""
2030 Defaulting color scheme to 'NoColor'"""
2031 new_scheme = 'NoColor'
2031 new_scheme = 'NoColor'
2032 warn(msg)
2032 warn(msg)
2033 # local shortcut
2033 # local shortcut
2034 shell = self.shell
2034 shell = self.shell
2035
2035
2036 # Set prompt colors
2036 # Set prompt colors
2037 try:
2037 try:
2038 shell.outputcache.set_colors(new_scheme)
2038 shell.outputcache.set_colors(new_scheme)
2039 except:
2039 except:
2040 color_switch_err('prompt')
2040 color_switch_err('prompt')
2041 else:
2041 else:
2042 shell.rc.colors = \
2042 shell.rc.colors = \
2043 shell.outputcache.color_table.active_scheme_name
2043 shell.outputcache.color_table.active_scheme_name
2044 # Set exception colors
2044 # Set exception colors
2045 try:
2045 try:
2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2048 except:
2048 except:
2049 color_switch_err('exception')
2049 color_switch_err('exception')
2050
2050
2051 # threaded shells use a verbose traceback in sys.excepthook
2051 # threaded shells use a verbose traceback in sys.excepthook
2052 if shell.isthreaded:
2052 if shell.isthreaded:
2053 try:
2053 try:
2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2055 except:
2055 except:
2056 color_switch_err('system exception handler')
2056 color_switch_err('system exception handler')
2057
2057
2058 # Set info (for 'object?') colors
2058 # Set info (for 'object?') colors
2059 if shell.rc.color_info:
2059 if shell.rc.color_info:
2060 try:
2060 try:
2061 shell.inspector.set_active_scheme(new_scheme)
2061 shell.inspector.set_active_scheme(new_scheme)
2062 except:
2062 except:
2063 color_switch_err('object inspector')
2063 color_switch_err('object inspector')
2064 else:
2064 else:
2065 shell.inspector.set_active_scheme('NoColor')
2065 shell.inspector.set_active_scheme('NoColor')
2066
2066
2067 def magic_color_info(self,parameter_s = ''):
2067 def magic_color_info(self,parameter_s = ''):
2068 """Toggle color_info.
2068 """Toggle color_info.
2069
2069
2070 The color_info configuration parameter controls whether colors are
2070 The color_info configuration parameter controls whether colors are
2071 used for displaying object details (by things like %psource, %pfile or
2071 used for displaying object details (by things like %psource, %pfile or
2072 the '?' system). This function toggles this value with each call.
2072 the '?' system). This function toggles this value with each call.
2073
2073
2074 Note that unless you have a fairly recent pager (less works better
2074 Note that unless you have a fairly recent pager (less works better
2075 than more) in your system, using colored object information displays
2075 than more) in your system, using colored object information displays
2076 will not work properly. Test it and see."""
2076 will not work properly. Test it and see."""
2077
2077
2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2079 self.magic_colors(self.shell.rc.colors)
2079 self.magic_colors(self.shell.rc.colors)
2080 print 'Object introspection functions have now coloring:',
2080 print 'Object introspection functions have now coloring:',
2081 print ['OFF','ON'][self.shell.rc.color_info]
2081 print ['OFF','ON'][self.shell.rc.color_info]
2082
2082
2083 def magic_Pprint(self, parameter_s=''):
2083 def magic_Pprint(self, parameter_s=''):
2084 """Toggle pretty printing on/off."""
2084 """Toggle pretty printing on/off."""
2085
2085
2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2087 print 'Pretty printing has been turned', \
2087 print 'Pretty printing has been turned', \
2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2089
2089
2090 def magic_exit(self, parameter_s=''):
2090 def magic_exit(self, parameter_s=''):
2091 """Exit IPython, confirming if configured to do so.
2091 """Exit IPython, confirming if configured to do so.
2092
2092
2093 You can configure whether IPython asks for confirmation upon exit by
2093 You can configure whether IPython asks for confirmation upon exit by
2094 setting the confirm_exit flag in the ipythonrc file."""
2094 setting the confirm_exit flag in the ipythonrc file."""
2095
2095
2096 self.shell.exit()
2096 self.shell.exit()
2097
2097
2098 def magic_quit(self, parameter_s=''):
2098 def magic_quit(self, parameter_s=''):
2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2100
2100
2101 self.shell.exit()
2101 self.shell.exit()
2102
2102
2103 def magic_Exit(self, parameter_s=''):
2103 def magic_Exit(self, parameter_s=''):
2104 """Exit IPython without confirmation."""
2104 """Exit IPython without confirmation."""
2105
2105
2106 self.shell.exit_now = True
2106 self.shell.exit_now = True
2107
2107
2108 def magic_Quit(self, parameter_s=''):
2108 def magic_Quit(self, parameter_s=''):
2109 """Exit IPython without confirmation (like %Exit)."""
2109 """Exit IPython without confirmation (like %Exit)."""
2110
2110
2111 self.shell.exit_now = True
2111 self.shell.exit_now = True
2112
2112
2113 #......................................................................
2113 #......................................................................
2114 # Functions to implement unix shell-type things
2114 # Functions to implement unix shell-type things
2115
2115
2116 def magic_alias(self, parameter_s = ''):
2116 def magic_alias(self, parameter_s = ''):
2117 """Define an alias for a system command.
2117 """Define an alias for a system command.
2118
2118
2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2120
2120
2121 Then, typing 'alias_name params' will execute the system command 'cmd
2121 Then, typing 'alias_name params' will execute the system command 'cmd
2122 params' (from your underlying operating system).
2122 params' (from your underlying operating system).
2123
2123
2124 Aliases have lower precedence than magic functions and Python normal
2124 Aliases have lower precedence than magic functions and Python normal
2125 variables, so if 'foo' is both a Python variable and an alias, the
2125 variables, so if 'foo' is both a Python variable and an alias, the
2126 alias can not be executed until 'del foo' removes the Python variable.
2126 alias can not be executed until 'del foo' removes the Python variable.
2127
2127
2128 You can use the %l specifier in an alias definition to represent the
2128 You can use the %l specifier in an alias definition to represent the
2129 whole line when the alias is called. For example:
2129 whole line when the alias is called. For example:
2130
2130
2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2132 In [3]: all hello world\\
2132 In [3]: all hello world\\
2133 Input in brackets: <hello world>
2133 Input in brackets: <hello world>
2134
2134
2135 You can also define aliases with parameters using %s specifiers (one
2135 You can also define aliases with parameters using %s specifiers (one
2136 per parameter):
2136 per parameter):
2137
2137
2138 In [1]: alias parts echo first %s second %s\\
2138 In [1]: alias parts echo first %s second %s\\
2139 In [2]: %parts A B\\
2139 In [2]: %parts A B\\
2140 first A second B\\
2140 first A second B\\
2141 In [3]: %parts A\\
2141 In [3]: %parts A\\
2142 Incorrect number of arguments: 2 expected.\\
2142 Incorrect number of arguments: 2 expected.\\
2143 parts is an alias to: 'echo first %s second %s'
2143 parts is an alias to: 'echo first %s second %s'
2144
2144
2145 Note that %l and %s are mutually exclusive. You can only use one or
2145 Note that %l and %s are mutually exclusive. You can only use one or
2146 the other in your aliases.
2146 the other in your aliases.
2147
2147
2148 Aliases expand Python variables just like system calls using ! or !!
2148 Aliases expand Python variables just like system calls using ! or !!
2149 do: all expressions prefixed with '$' get expanded. For details of
2149 do: all expressions prefixed with '$' get expanded. For details of
2150 the semantic rules, see PEP-215:
2150 the semantic rules, see PEP-215:
2151 http://www.python.org/peps/pep-0215.html. This is the library used by
2151 http://www.python.org/peps/pep-0215.html. This is the library used by
2152 IPython for variable expansion. If you want to access a true shell
2152 IPython for variable expansion. If you want to access a true shell
2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2154
2154
2155 In [6]: alias show echo\\
2155 In [6]: alias show echo\\
2156 In [7]: PATH='A Python string'\\
2156 In [7]: PATH='A Python string'\\
2157 In [8]: show $PATH\\
2157 In [8]: show $PATH\\
2158 A Python string\\
2158 A Python string\\
2159 In [9]: show $$PATH\\
2159 In [9]: show $$PATH\\
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2161
2161
2162 You can use the alias facility to acess all of $PATH. See the %rehash
2162 You can use the alias facility to acess all of $PATH. See the %rehash
2163 and %rehashx functions, which automatically create aliases for the
2163 and %rehashx functions, which automatically create aliases for the
2164 contents of your $PATH.
2164 contents of your $PATH.
2165
2165
2166 If called with no parameters, %alias prints the current alias table."""
2166 If called with no parameters, %alias prints the current alias table."""
2167
2167
2168 par = parameter_s.strip()
2168 par = parameter_s.strip()
2169 if not par:
2169 if not par:
2170 if self.shell.rc.automagic:
2170 if self.shell.rc.automagic:
2171 prechar = ''
2171 prechar = ''
2172 else:
2172 else:
2173 prechar = self.shell.ESC_MAGIC
2173 prechar = self.shell.ESC_MAGIC
2174 print 'Alias\t\tSystem Command\n'+'-'*30
2174 #print 'Alias\t\tSystem Command\n'+'-'*30
2175 atab = self.shell.alias_table
2175 atab = self.shell.alias_table
2176 aliases = atab.keys()
2176 aliases = atab.keys()
2177 aliases.sort()
2177 aliases.sort()
2178 res = []
2178 for alias in aliases:
2179 for alias in aliases:
2179 print prechar+alias+'\t\t'+atab[alias][1]
2180 res.append((alias, atab[alias][1]))
2180 print '-'*30+'\nTotal number of aliases:',len(aliases)
2181 print "Total number of aliases:",len(aliases)
2181 return
2182 return res
2182 try:
2183 try:
2183 alias,cmd = par.split(None,1)
2184 alias,cmd = par.split(None,1)
2184 except:
2185 except:
2185 print OInspect.getdoc(self.magic_alias)
2186 print OInspect.getdoc(self.magic_alias)
2186 else:
2187 else:
2187 nargs = cmd.count('%s')
2188 nargs = cmd.count('%s')
2188 if nargs>0 and cmd.find('%l')>=0:
2189 if nargs>0 and cmd.find('%l')>=0:
2189 error('The %s and %l specifiers are mutually exclusive '
2190 error('The %s and %l specifiers are mutually exclusive '
2190 'in alias definitions.')
2191 'in alias definitions.')
2191 else: # all looks OK
2192 else: # all looks OK
2192 self.shell.alias_table[alias] = (nargs,cmd)
2193 self.shell.alias_table[alias] = (nargs,cmd)
2193 self.shell.alias_table_validate(verbose=1)
2194 self.shell.alias_table_validate(verbose=1)
2194 # end magic_alias
2195 # end magic_alias
2195
2196
2196 def magic_unalias(self, parameter_s = ''):
2197 def magic_unalias(self, parameter_s = ''):
2197 """Remove an alias"""
2198 """Remove an alias"""
2198
2199
2199 aname = parameter_s.strip()
2200 aname = parameter_s.strip()
2200 if aname in self.shell.alias_table:
2201 if aname in self.shell.alias_table:
2201 del self.shell.alias_table[aname]
2202 del self.shell.alias_table[aname]
2202
2203
2203 def magic_rehash(self, parameter_s = ''):
2204 def magic_rehash(self, parameter_s = ''):
2204 """Update the alias table with all entries in $PATH.
2205 """Update the alias table with all entries in $PATH.
2205
2206
2206 This version does no checks on execute permissions or whether the
2207 This version does no checks on execute permissions or whether the
2207 contents of $PATH are truly files (instead of directories or something
2208 contents of $PATH are truly files (instead of directories or something
2208 else). For such a safer (but slower) version, use %rehashx."""
2209 else). For such a safer (but slower) version, use %rehashx."""
2209
2210
2210 # This function (and rehashx) manipulate the alias_table directly
2211 # This function (and rehashx) manipulate the alias_table directly
2211 # rather than calling magic_alias, for speed reasons. A rehash on a
2212 # rather than calling magic_alias, for speed reasons. A rehash on a
2212 # typical Linux box involves several thousand entries, so efficiency
2213 # typical Linux box involves several thousand entries, so efficiency
2213 # here is a top concern.
2214 # here is a top concern.
2214
2215
2215 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2216 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2216 alias_table = self.shell.alias_table
2217 alias_table = self.shell.alias_table
2217 for pdir in path:
2218 for pdir in path:
2218 for ff in os.listdir(pdir):
2219 for ff in os.listdir(pdir):
2219 # each entry in the alias table must be (N,name), where
2220 # each entry in the alias table must be (N,name), where
2220 # N is the number of positional arguments of the alias.
2221 # N is the number of positional arguments of the alias.
2221 alias_table[ff] = (0,ff)
2222 alias_table[ff] = (0,ff)
2222 # Make sure the alias table doesn't contain keywords or builtins
2223 # Make sure the alias table doesn't contain keywords or builtins
2223 self.shell.alias_table_validate()
2224 self.shell.alias_table_validate()
2224 # Call again init_auto_alias() so we get 'rm -i' and other modified
2225 # Call again init_auto_alias() so we get 'rm -i' and other modified
2225 # aliases since %rehash will probably clobber them
2226 # aliases since %rehash will probably clobber them
2226 self.shell.init_auto_alias()
2227 self.shell.init_auto_alias()
2227
2228
2228 def magic_rehashx(self, parameter_s = ''):
2229 def magic_rehashx(self, parameter_s = ''):
2229 """Update the alias table with all executable files in $PATH.
2230 """Update the alias table with all executable files in $PATH.
2230
2231
2231 This version explicitly checks that every entry in $PATH is a file
2232 This version explicitly checks that every entry in $PATH is a file
2232 with execute access (os.X_OK), so it is much slower than %rehash.
2233 with execute access (os.X_OK), so it is much slower than %rehash.
2233
2234
2234 Under Windows, it checks executability as a match agains a
2235 Under Windows, it checks executability as a match agains a
2235 '|'-separated string of extensions, stored in the IPython config
2236 '|'-separated string of extensions, stored in the IPython config
2236 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2237 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2237
2238
2238 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2239 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2239 alias_table = self.shell.alias_table
2240 alias_table = self.shell.alias_table
2240
2241
2241 if os.name == 'posix':
2242 if os.name == 'posix':
2242 isexec = lambda fname:os.path.isfile(fname) and \
2243 isexec = lambda fname:os.path.isfile(fname) and \
2243 os.access(fname,os.X_OK)
2244 os.access(fname,os.X_OK)
2244 else:
2245 else:
2245
2246
2246 try:
2247 try:
2247 winext = os.environ['pathext'].replace(';','|').replace('.','')
2248 winext = os.environ['pathext'].replace(';','|').replace('.','')
2248 except KeyError:
2249 except KeyError:
2249 winext = 'exe|com|bat'
2250 winext = 'exe|com|bat'
2250
2251
2251 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2252 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2252 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2253 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2253 savedir = os.getcwd()
2254 savedir = os.getcwd()
2254 try:
2255 try:
2255 # write the whole loop for posix/Windows so we don't have an if in
2256 # write the whole loop for posix/Windows so we don't have an if in
2256 # the innermost part
2257 # the innermost part
2257 if os.name == 'posix':
2258 if os.name == 'posix':
2258 for pdir in path:
2259 for pdir in path:
2259 os.chdir(pdir)
2260 os.chdir(pdir)
2260 for ff in os.listdir(pdir):
2261 for ff in os.listdir(pdir):
2261 if isexec(ff):
2262 if isexec(ff):
2262 # each entry in the alias table must be (N,name),
2263 # each entry in the alias table must be (N,name),
2263 # where N is the number of positional arguments of the
2264 # where N is the number of positional arguments of the
2264 # alias.
2265 # alias.
2265 alias_table[ff] = (0,ff)
2266 alias_table[ff] = (0,ff)
2266 else:
2267 else:
2267 for pdir in path:
2268 for pdir in path:
2268 os.chdir(pdir)
2269 os.chdir(pdir)
2269 for ff in os.listdir(pdir):
2270 for ff in os.listdir(pdir):
2270 if isexec(ff):
2271 if isexec(ff):
2271 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2272 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2272 # Make sure the alias table doesn't contain keywords or builtins
2273 # Make sure the alias table doesn't contain keywords or builtins
2273 self.shell.alias_table_validate()
2274 self.shell.alias_table_validate()
2274 # Call again init_auto_alias() so we get 'rm -i' and other
2275 # Call again init_auto_alias() so we get 'rm -i' and other
2275 # modified aliases since %rehashx will probably clobber them
2276 # modified aliases since %rehashx will probably clobber them
2276 self.shell.init_auto_alias()
2277 self.shell.init_auto_alias()
2277 finally:
2278 finally:
2278 os.chdir(savedir)
2279 os.chdir(savedir)
2279
2280
2280 def magic_pwd(self, parameter_s = ''):
2281 def magic_pwd(self, parameter_s = ''):
2281 """Return the current working directory path."""
2282 """Return the current working directory path."""
2282 return os.getcwd()
2283 return os.getcwd()
2283
2284
2284 def magic_cd(self, parameter_s=''):
2285 def magic_cd(self, parameter_s=''):
2285 """Change the current working directory.
2286 """Change the current working directory.
2286
2287
2287 This command automatically maintains an internal list of directories
2288 This command automatically maintains an internal list of directories
2288 you visit during your IPython session, in the variable _dh. The
2289 you visit during your IPython session, in the variable _dh. The
2289 command %dhist shows this history nicely formatted.
2290 command %dhist shows this history nicely formatted.
2290
2291
2291 Usage:
2292 Usage:
2292
2293
2293 cd 'dir': changes to directory 'dir'.
2294 cd 'dir': changes to directory 'dir'.
2294
2295
2295 cd -: changes to the last visited directory.
2296 cd -: changes to the last visited directory.
2296
2297
2297 cd -<n>: changes to the n-th directory in the directory history.
2298 cd -<n>: changes to the n-th directory in the directory history.
2298
2299
2299 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2300 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2300 (note: cd <bookmark_name> is enough if there is no
2301 (note: cd <bookmark_name> is enough if there is no
2301 directory <bookmark_name>, but a bookmark with the name exists.)
2302 directory <bookmark_name>, but a bookmark with the name exists.)
2302
2303
2303 Options:
2304 Options:
2304
2305
2305 -q: quiet. Do not print the working directory after the cd command is
2306 -q: quiet. Do not print the working directory after the cd command is
2306 executed. By default IPython's cd command does print this directory,
2307 executed. By default IPython's cd command does print this directory,
2307 since the default prompts do not display path information.
2308 since the default prompts do not display path information.
2308
2309
2309 Note that !cd doesn't work for this purpose because the shell where
2310 Note that !cd doesn't work for this purpose because the shell where
2310 !command runs is immediately discarded after executing 'command'."""
2311 !command runs is immediately discarded after executing 'command'."""
2311
2312
2312 parameter_s = parameter_s.strip()
2313 parameter_s = parameter_s.strip()
2313 bkms = self.shell.persist.get("bookmarks",{})
2314 bkms = self.shell.persist.get("bookmarks",{})
2314
2315
2315 numcd = re.match(r'(-)(\d+)$',parameter_s)
2316 numcd = re.match(r'(-)(\d+)$',parameter_s)
2316 # jump in directory history by number
2317 # jump in directory history by number
2317 if numcd:
2318 if numcd:
2318 nn = int(numcd.group(2))
2319 nn = int(numcd.group(2))
2319 try:
2320 try:
2320 ps = self.shell.user_ns['_dh'][nn]
2321 ps = self.shell.user_ns['_dh'][nn]
2321 except IndexError:
2322 except IndexError:
2322 print 'The requested directory does not exist in history.'
2323 print 'The requested directory does not exist in history.'
2323 return
2324 return
2324 else:
2325 else:
2325 opts = {}
2326 opts = {}
2326 else:
2327 else:
2327 #turn all non-space-escaping backslashes to slashes,
2328 #turn all non-space-escaping backslashes to slashes,
2328 # for c:\windows\directory\names\
2329 # for c:\windows\directory\names\
2329 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2330 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2330 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2331 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2331 # jump to previous
2332 # jump to previous
2332 if ps == '-':
2333 if ps == '-':
2333 try:
2334 try:
2334 ps = self.shell.user_ns['_dh'][-2]
2335 ps = self.shell.user_ns['_dh'][-2]
2335 except IndexError:
2336 except IndexError:
2336 print 'No previous directory to change to.'
2337 print 'No previous directory to change to.'
2337 return
2338 return
2338 # jump to bookmark
2339 # jump to bookmark
2339 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2340 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2340 if bkms.has_key(ps):
2341 if bkms.has_key(ps):
2341 target = bkms[ps]
2342 target = bkms[ps]
2342 print '(bookmark:%s) -> %s' % (ps,target)
2343 print '(bookmark:%s) -> %s' % (ps,target)
2343 ps = target
2344 ps = target
2344 else:
2345 else:
2345 if bkms:
2346 if bkms:
2346 error("Bookmark '%s' not found. "
2347 error("Bookmark '%s' not found. "
2347 "Use '%%bookmark -l' to see your bookmarks." % ps)
2348 "Use '%%bookmark -l' to see your bookmarks." % ps)
2348 else:
2349 else:
2349 print "Bookmarks not set - use %bookmark <bookmarkname>"
2350 print "Bookmarks not set - use %bookmark <bookmarkname>"
2350 return
2351 return
2351
2352
2352 # at this point ps should point to the target dir
2353 # at this point ps should point to the target dir
2353 if ps:
2354 if ps:
2354 try:
2355 try:
2355 os.chdir(os.path.expanduser(ps))
2356 os.chdir(os.path.expanduser(ps))
2356 ttitle = ("IPy:" + (
2357 ttitle = ("IPy:" + (
2357 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2358 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2358 platutils.set_term_title(ttitle)
2359 platutils.set_term_title(ttitle)
2359 except OSError:
2360 except OSError:
2360 print sys.exc_info()[1]
2361 print sys.exc_info()[1]
2361 else:
2362 else:
2362 self.shell.user_ns['_dh'].append(os.getcwd())
2363 self.shell.user_ns['_dh'].append(os.getcwd())
2363 else:
2364 else:
2364 os.chdir(self.shell.home_dir)
2365 os.chdir(self.shell.home_dir)
2365 platutils.set_term_title("IPy:~")
2366 platutils.set_term_title("IPy:~")
2366 self.shell.user_ns['_dh'].append(os.getcwd())
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2367 if not 'q' in opts:
2368 if not 'q' in opts:
2368 print self.shell.user_ns['_dh'][-1]
2369 print self.shell.user_ns['_dh'][-1]
2369
2370
2370 def magic_dhist(self, parameter_s=''):
2371 def magic_dhist(self, parameter_s=''):
2371 """Print your history of visited directories.
2372 """Print your history of visited directories.
2372
2373
2373 %dhist -> print full history\\
2374 %dhist -> print full history\\
2374 %dhist n -> print last n entries only\\
2375 %dhist n -> print last n entries only\\
2375 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2376 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2376
2377
2377 This history is automatically maintained by the %cd command, and
2378 This history is automatically maintained by the %cd command, and
2378 always available as the global list variable _dh. You can use %cd -<n>
2379 always available as the global list variable _dh. You can use %cd -<n>
2379 to go to directory number <n>."""
2380 to go to directory number <n>."""
2380
2381
2381 dh = self.shell.user_ns['_dh']
2382 dh = self.shell.user_ns['_dh']
2382 if parameter_s:
2383 if parameter_s:
2383 try:
2384 try:
2384 args = map(int,parameter_s.split())
2385 args = map(int,parameter_s.split())
2385 except:
2386 except:
2386 self.arg_err(Magic.magic_dhist)
2387 self.arg_err(Magic.magic_dhist)
2387 return
2388 return
2388 if len(args) == 1:
2389 if len(args) == 1:
2389 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2390 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2390 elif len(args) == 2:
2391 elif len(args) == 2:
2391 ini,fin = args
2392 ini,fin = args
2392 else:
2393 else:
2393 self.arg_err(Magic.magic_dhist)
2394 self.arg_err(Magic.magic_dhist)
2394 return
2395 return
2395 else:
2396 else:
2396 ini,fin = 0,len(dh)
2397 ini,fin = 0,len(dh)
2397 nlprint(dh,
2398 nlprint(dh,
2398 header = 'Directory history (kept in _dh)',
2399 header = 'Directory history (kept in _dh)',
2399 start=ini,stop=fin)
2400 start=ini,stop=fin)
2400
2401
2401 def magic_env(self, parameter_s=''):
2402 def magic_env(self, parameter_s=''):
2402 """List environment variables."""
2403 """List environment variables."""
2403
2404
2404 return os.environ.data
2405 return os.environ.data
2405
2406
2406 def magic_pushd(self, parameter_s=''):
2407 def magic_pushd(self, parameter_s=''):
2407 """Place the current dir on stack and change directory.
2408 """Place the current dir on stack and change directory.
2408
2409
2409 Usage:\\
2410 Usage:\\
2410 %pushd ['dirname']
2411 %pushd ['dirname']
2411
2412
2412 %pushd with no arguments does a %pushd to your home directory.
2413 %pushd with no arguments does a %pushd to your home directory.
2413 """
2414 """
2414 if parameter_s == '': parameter_s = '~'
2415 if parameter_s == '': parameter_s = '~'
2415 dir_s = self.shell.dir_stack
2416 dir_s = self.shell.dir_stack
2416 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2417 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2417 os.path.expanduser(self.shell.dir_stack[0]):
2418 os.path.expanduser(self.shell.dir_stack[0]):
2418 try:
2419 try:
2419 self.magic_cd(parameter_s)
2420 self.magic_cd(parameter_s)
2420 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2421 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2421 self.magic_dirs()
2422 self.magic_dirs()
2422 except:
2423 except:
2423 print 'Invalid directory'
2424 print 'Invalid directory'
2424 else:
2425 else:
2425 print 'You are already there!'
2426 print 'You are already there!'
2426
2427
2427 def magic_popd(self, parameter_s=''):
2428 def magic_popd(self, parameter_s=''):
2428 """Change to directory popped off the top of the stack.
2429 """Change to directory popped off the top of the stack.
2429 """
2430 """
2430 if len (self.shell.dir_stack) > 1:
2431 if len (self.shell.dir_stack) > 1:
2431 self.shell.dir_stack.pop(0)
2432 self.shell.dir_stack.pop(0)
2432 self.magic_cd(self.shell.dir_stack[0])
2433 self.magic_cd(self.shell.dir_stack[0])
2433 print self.shell.dir_stack[0]
2434 print self.shell.dir_stack[0]
2434 else:
2435 else:
2435 print "You can't remove the starting directory from the stack:",\
2436 print "You can't remove the starting directory from the stack:",\
2436 self.shell.dir_stack
2437 self.shell.dir_stack
2437
2438
2438 def magic_dirs(self, parameter_s=''):
2439 def magic_dirs(self, parameter_s=''):
2439 """Return the current directory stack."""
2440 """Return the current directory stack."""
2440
2441
2441 return self.shell.dir_stack[:]
2442 return self.shell.dir_stack[:]
2442
2443
2443 def magic_sc(self, parameter_s=''):
2444 def magic_sc(self, parameter_s=''):
2444 """Shell capture - execute a shell command and capture its output.
2445 """Shell capture - execute a shell command and capture its output.
2445
2446
2447 DEPRECATED. Suboptimal, retained for backwards compatibility.
2448
2449 You should use the form 'var = !command' instead. Example:
2450
2451 "%sc -l myfiles = ls ~" should now be written as
2452
2453 "myfiles = !ls ~"
2454
2455 myfiles.s, myfiles.l and myfiles.n still apply as documented
2456 below.
2457
2458 --
2446 %sc [options] varname=command
2459 %sc [options] varname=command
2447
2460
2448 IPython will run the given command using commands.getoutput(), and
2461 IPython will run the given command using commands.getoutput(), and
2449 will then update the user's interactive namespace with a variable
2462 will then update the user's interactive namespace with a variable
2450 called varname, containing the value of the call. Your command can
2463 called varname, containing the value of the call. Your command can
2451 contain shell wildcards, pipes, etc.
2464 contain shell wildcards, pipes, etc.
2452
2465
2453 The '=' sign in the syntax is mandatory, and the variable name you
2466 The '=' sign in the syntax is mandatory, and the variable name you
2454 supply must follow Python's standard conventions for valid names.
2467 supply must follow Python's standard conventions for valid names.
2468
2469 (A special format without variable name exists for internal use)
2455
2470
2456 Options:
2471 Options:
2457
2472
2458 -l: list output. Split the output on newlines into a list before
2473 -l: list output. Split the output on newlines into a list before
2459 assigning it to the given variable. By default the output is stored
2474 assigning it to the given variable. By default the output is stored
2460 as a single string.
2475 as a single string.
2461
2476
2462 -v: verbose. Print the contents of the variable.
2477 -v: verbose. Print the contents of the variable.
2463
2478
2464 In most cases you should not need to split as a list, because the
2479 In most cases you should not need to split as a list, because the
2465 returned value is a special type of string which can automatically
2480 returned value is a special type of string which can automatically
2466 provide its contents either as a list (split on newlines) or as a
2481 provide its contents either as a list (split on newlines) or as a
2467 space-separated string. These are convenient, respectively, either
2482 space-separated string. These are convenient, respectively, either
2468 for sequential processing or to be passed to a shell command.
2483 for sequential processing or to be passed to a shell command.
2469
2484
2470 For example:
2485 For example:
2471
2486
2472 # Capture into variable a
2487 # Capture into variable a
2473 In [9]: sc a=ls *py
2488 In [9]: sc a=ls *py
2474
2489
2475 # a is a string with embedded newlines
2490 # a is a string with embedded newlines
2476 In [10]: a
2491 In [10]: a
2477 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2492 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2478
2493
2479 # which can be seen as a list:
2494 # which can be seen as a list:
2480 In [11]: a.l
2495 In [11]: a.l
2481 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2496 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2482
2497
2483 # or as a whitespace-separated string:
2498 # or as a whitespace-separated string:
2484 In [12]: a.s
2499 In [12]: a.s
2485 Out[12]: 'setup.py win32_manual_post_install.py'
2500 Out[12]: 'setup.py win32_manual_post_install.py'
2486
2501
2487 # a.s is useful to pass as a single command line:
2502 # a.s is useful to pass as a single command line:
2488 In [13]: !wc -l $a.s
2503 In [13]: !wc -l $a.s
2489 146 setup.py
2504 146 setup.py
2490 130 win32_manual_post_install.py
2505 130 win32_manual_post_install.py
2491 276 total
2506 276 total
2492
2507
2493 # while the list form is useful to loop over:
2508 # while the list form is useful to loop over:
2494 In [14]: for f in a.l:
2509 In [14]: for f in a.l:
2495 ....: !wc -l $f
2510 ....: !wc -l $f
2496 ....:
2511 ....:
2497 146 setup.py
2512 146 setup.py
2498 130 win32_manual_post_install.py
2513 130 win32_manual_post_install.py
2499
2514
2500 Similiarly, the lists returned by the -l option are also special, in
2515 Similiarly, the lists returned by the -l option are also special, in
2501 the sense that you can equally invoke the .s attribute on them to
2516 the sense that you can equally invoke the .s attribute on them to
2502 automatically get a whitespace-separated string from their contents:
2517 automatically get a whitespace-separated string from their contents:
2503
2518
2504 In [1]: sc -l b=ls *py
2519 In [1]: sc -l b=ls *py
2505
2520
2506 In [2]: b
2521 In [2]: b
2507 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2522 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2508
2523
2509 In [3]: b.s
2524 In [3]: b.s
2510 Out[3]: 'setup.py win32_manual_post_install.py'
2525 Out[3]: 'setup.py win32_manual_post_install.py'
2511
2526
2512 In summary, both the lists and strings used for ouptut capture have
2527 In summary, both the lists and strings used for ouptut capture have
2513 the following special attributes:
2528 the following special attributes:
2514
2529
2515 .l (or .list) : value as list.
2530 .l (or .list) : value as list.
2516 .n (or .nlstr): value as newline-separated string.
2531 .n (or .nlstr): value as newline-separated string.
2517 .s (or .spstr): value as space-separated string.
2532 .s (or .spstr): value as space-separated string.
2518 """
2533 """
2519
2534
2520 opts,args = self.parse_options(parameter_s,'lv')
2535 opts,args = self.parse_options(parameter_s,'lv')
2521 # Try to get a variable name and command to run
2536 # Try to get a variable name and command to run
2522 try:
2537 try:
2523 # the variable name must be obtained from the parse_options
2538 # the variable name must be obtained from the parse_options
2524 # output, which uses shlex.split to strip options out.
2539 # output, which uses shlex.split to strip options out.
2525 var,_ = args.split('=',1)
2540 var,_ = args.split('=',1)
2526 var = var.strip()
2541 var = var.strip()
2527 # But the the command has to be extracted from the original input
2542 # But the the command has to be extracted from the original input
2528 # parameter_s, not on what parse_options returns, to avoid the
2543 # parameter_s, not on what parse_options returns, to avoid the
2529 # quote stripping which shlex.split performs on it.
2544 # quote stripping which shlex.split performs on it.
2530 _,cmd = parameter_s.split('=',1)
2545 _,cmd = parameter_s.split('=',1)
2531 except ValueError:
2546 except ValueError:
2532 var,cmd = '',''
2547 var,cmd = '',''
2533 if not var:
2534 error('you must specify a variable to assign the command to.')
2535 return
2536 # If all looks ok, proceed
2548 # If all looks ok, proceed
2537 out,err = self.shell.getoutputerror(cmd)
2549 out,err = self.shell.getoutputerror(cmd)
2538 if err:
2550 if err:
2539 print >> Term.cerr,err
2551 print >> Term.cerr,err
2540 if opts.has_key('l'):
2552 if opts.has_key('l'):
2541 out = SList(out.split('\n'))
2553 out = SList(out.split('\n'))
2542 else:
2554 else:
2543 out = LSString(out)
2555 out = LSString(out)
2544 if opts.has_key('v'):
2556 if opts.has_key('v'):
2545 print '%s ==\n%s' % (var,pformat(out))
2557 print '%s ==\n%s' % (var,pformat(out))
2546 self.shell.user_ns.update({var:out})
2558 if var:
2559 self.shell.user_ns.update({var:out})
2560 else:
2561 return out
2547
2562
2548 def magic_sx(self, parameter_s=''):
2563 def magic_sx(self, parameter_s=''):
2549 """Shell execute - run a shell command and capture its output.
2564 """Shell execute - run a shell command and capture its output.
2550
2565
2551 %sx command
2566 %sx command
2552
2567
2553 IPython will run the given command using commands.getoutput(), and
2568 IPython will run the given command using commands.getoutput(), and
2554 return the result formatted as a list (split on '\\n'). Since the
2569 return the result formatted as a list (split on '\\n'). Since the
2555 output is _returned_, it will be stored in ipython's regular output
2570 output is _returned_, it will be stored in ipython's regular output
2556 cache Out[N] and in the '_N' automatic variables.
2571 cache Out[N] and in the '_N' automatic variables.
2557
2572
2558 Notes:
2573 Notes:
2559
2574
2560 1) If an input line begins with '!!', then %sx is automatically
2575 1) If an input line begins with '!!', then %sx is automatically
2561 invoked. That is, while:
2576 invoked. That is, while:
2562 !ls
2577 !ls
2563 causes ipython to simply issue system('ls'), typing
2578 causes ipython to simply issue system('ls'), typing
2564 !!ls
2579 !!ls
2565 is a shorthand equivalent to:
2580 is a shorthand equivalent to:
2566 %sx ls
2581 %sx ls
2567
2582
2568 2) %sx differs from %sc in that %sx automatically splits into a list,
2583 2) %sx differs from %sc in that %sx automatically splits into a list,
2569 like '%sc -l'. The reason for this is to make it as easy as possible
2584 like '%sc -l'. The reason for this is to make it as easy as possible
2570 to process line-oriented shell output via further python commands.
2585 to process line-oriented shell output via further python commands.
2571 %sc is meant to provide much finer control, but requires more
2586 %sc is meant to provide much finer control, but requires more
2572 typing.
2587 typing.
2573
2588
2574 3) Just like %sc -l, this is a list with special attributes:
2589 3) Just like %sc -l, this is a list with special attributes:
2575
2590
2576 .l (or .list) : value as list.
2591 .l (or .list) : value as list.
2577 .n (or .nlstr): value as newline-separated string.
2592 .n (or .nlstr): value as newline-separated string.
2578 .s (or .spstr): value as whitespace-separated string.
2593 .s (or .spstr): value as whitespace-separated string.
2579
2594
2580 This is very useful when trying to use such lists as arguments to
2595 This is very useful when trying to use such lists as arguments to
2581 system commands."""
2596 system commands."""
2582
2597
2583 if parameter_s:
2598 if parameter_s:
2584 out,err = self.shell.getoutputerror(parameter_s)
2599 out,err = self.shell.getoutputerror(parameter_s)
2585 if err:
2600 if err:
2586 print >> Term.cerr,err
2601 print >> Term.cerr,err
2587 return SList(out.split('\n'))
2602 return SList(out.split('\n'))
2588
2603
2589 def magic_bg(self, parameter_s=''):
2604 def magic_bg(self, parameter_s=''):
2590 """Run a job in the background, in a separate thread.
2605 """Run a job in the background, in a separate thread.
2591
2606
2592 For example,
2607 For example,
2593
2608
2594 %bg myfunc(x,y,z=1)
2609 %bg myfunc(x,y,z=1)
2595
2610
2596 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2611 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2597 execution starts, a message will be printed indicating the job
2612 execution starts, a message will be printed indicating the job
2598 number. If your job number is 5, you can use
2613 number. If your job number is 5, you can use
2599
2614
2600 myvar = jobs.result(5) or myvar = jobs[5].result
2615 myvar = jobs.result(5) or myvar = jobs[5].result
2601
2616
2602 to assign this result to variable 'myvar'.
2617 to assign this result to variable 'myvar'.
2603
2618
2604 IPython has a job manager, accessible via the 'jobs' object. You can
2619 IPython has a job manager, accessible via the 'jobs' object. You can
2605 type jobs? to get more information about it, and use jobs.<TAB> to see
2620 type jobs? to get more information about it, and use jobs.<TAB> to see
2606 its attributes. All attributes not starting with an underscore are
2621 its attributes. All attributes not starting with an underscore are
2607 meant for public use.
2622 meant for public use.
2608
2623
2609 In particular, look at the jobs.new() method, which is used to create
2624 In particular, look at the jobs.new() method, which is used to create
2610 new jobs. This magic %bg function is just a convenience wrapper
2625 new jobs. This magic %bg function is just a convenience wrapper
2611 around jobs.new(), for expression-based jobs. If you want to create a
2626 around jobs.new(), for expression-based jobs. If you want to create a
2612 new job with an explicit function object and arguments, you must call
2627 new job with an explicit function object and arguments, you must call
2613 jobs.new() directly.
2628 jobs.new() directly.
2614
2629
2615 The jobs.new docstring also describes in detail several important
2630 The jobs.new docstring also describes in detail several important
2616 caveats associated with a thread-based model for background job
2631 caveats associated with a thread-based model for background job
2617 execution. Type jobs.new? for details.
2632 execution. Type jobs.new? for details.
2618
2633
2619 You can check the status of all jobs with jobs.status().
2634 You can check the status of all jobs with jobs.status().
2620
2635
2621 The jobs variable is set by IPython into the Python builtin namespace.
2636 The jobs variable is set by IPython into the Python builtin namespace.
2622 If you ever declare a variable named 'jobs', you will shadow this
2637 If you ever declare a variable named 'jobs', you will shadow this
2623 name. You can either delete your global jobs variable to regain
2638 name. You can either delete your global jobs variable to regain
2624 access to the job manager, or make a new name and assign it manually
2639 access to the job manager, or make a new name and assign it manually
2625 to the manager (stored in IPython's namespace). For example, to
2640 to the manager (stored in IPython's namespace). For example, to
2626 assign the job manager to the Jobs name, use:
2641 assign the job manager to the Jobs name, use:
2627
2642
2628 Jobs = __builtins__.jobs"""
2643 Jobs = __builtins__.jobs"""
2629
2644
2630 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2645 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2631
2646
2632 def magic_store(self, parameter_s=''):
2647 def magic_store(self, parameter_s=''):
2633 """Lightweight persistence for python variables.
2648 """Lightweight persistence for python variables.
2634
2649
2635 Example:
2650 Example:
2636
2651
2637 ville@badger[~]|1> A = ['hello',10,'world']\\
2652 ville@badger[~]|1> A = ['hello',10,'world']\\
2638 ville@badger[~]|2> %store A\\
2653 ville@badger[~]|2> %store A\\
2639 ville@badger[~]|3> Exit
2654 ville@badger[~]|3> Exit
2640
2655
2641 (IPython session is closed and started again...)
2656 (IPython session is closed and started again...)
2642
2657
2643 ville@badger:~$ ipython -p pysh\\
2658 ville@badger:~$ ipython -p pysh\\
2644 ville@badger[~]|1> print A
2659 ville@badger[~]|1> print A
2645
2660
2646 ['hello', 10, 'world']
2661 ['hello', 10, 'world']
2647
2662
2648 Usage:
2663 Usage:
2649
2664
2650 %store - Show list of all variables and their current values\\
2665 %store - Show list of all variables and their current values\\
2651 %store <var> - Store the *current* value of the variable to disk\\
2666 %store <var> - Store the *current* value of the variable to disk\\
2652 %store -d <var> - Remove the variable and its value from storage\\
2667 %store -d <var> - Remove the variable and its value from storage\\
2653 %store -r - Remove all variables from storage
2668 %store -r - Remove all variables from storage
2654
2669
2655 It should be noted that if you change the value of a variable, you
2670 It should be noted that if you change the value of a variable, you
2656 need to %store it again if you want to persist the new value.
2671 need to %store it again if you want to persist the new value.
2657
2672
2658 Note also that the variables will need to be pickleable; most basic
2673 Note also that the variables will need to be pickleable; most basic
2659 python types can be safely %stored.
2674 python types can be safely %stored.
2660 """
2675 """
2661
2676
2662 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2677 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2663 # delete
2678 # delete
2664 if opts.has_key('d'):
2679 if opts.has_key('d'):
2665 try:
2680 try:
2666 todel = args[0]
2681 todel = args[0]
2667 except IndexError:
2682 except IndexError:
2668 error('You must provide the variable to forget')
2683 error('You must provide the variable to forget')
2669 else:
2684 else:
2670 try:
2685 try:
2671 del self.shell.persist['S:' + todel]
2686 del self.shell.persist['S:' + todel]
2672 except:
2687 except:
2673 error("Can't delete variable '%s'" % todel)
2688 error("Can't delete variable '%s'" % todel)
2674 # reset
2689 # reset
2675 elif opts.has_key('r'):
2690 elif opts.has_key('r'):
2676 for k in self.shell.persist.keys():
2691 for k in self.shell.persist.keys():
2677 if k.startswith('S:'):
2692 if k.startswith('S:'):
2678 del self.shell.persist[k]
2693 del self.shell.persist[k]
2679
2694
2680 # run without arguments -> list variables & values
2695 # run without arguments -> list variables & values
2681 elif not args:
2696 elif not args:
2682 vars = [v[2:] for v in self.shell.persist.keys()
2697 vars = [v[2:] for v in self.shell.persist.keys()
2683 if v.startswith('S:')]
2698 if v.startswith('S:')]
2684 vars.sort()
2699 vars.sort()
2685 if vars:
2700 if vars:
2686 size = max(map(len,vars))
2701 size = max(map(len,vars))
2687 else:
2702 else:
2688 size = 0
2703 size = 0
2689
2704
2690 print 'Stored variables and their in-memory values:'
2705 print 'Stored variables and their in-memory values:'
2691 fmt = '%-'+str(size)+'s -> %s'
2706 fmt = '%-'+str(size)+'s -> %s'
2692 get = self.shell.user_ns.get
2707 get = self.shell.user_ns.get
2693 for var in vars:
2708 for var in vars:
2694 # print 30 first characters from every var
2709 # print 30 first characters from every var
2695 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2710 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2696
2711
2697 # default action - store the variable
2712 # default action - store the variable
2698 else:
2713 else:
2699 obj = self.shell.user_ns[args[0] ]
2714 obj = self.shell.user_ns[args[0] ]
2700 if isinstance(inspect.getmodule(obj), FakeModule):
2715 if isinstance(inspect.getmodule(obj), FakeModule):
2701 print textwrap.dedent("""\
2716 print textwrap.dedent("""\
2702 Warning:%s is %s
2717 Warning:%s is %s
2703 Proper storage of interactively declared classes (or instances
2718 Proper storage of interactively declared classes (or instances
2704 of those classes) is not possible! Only instances
2719 of those classes) is not possible! Only instances
2705 of classes in real modules on file system can be %%store'd.
2720 of classes in real modules on file system can be %%store'd.
2706 """ % (args[0], obj) )
2721 """ % (args[0], obj) )
2707 return
2722 return
2708 pickled = pickle.dumps(obj)
2723 pickled = pickle.dumps(obj)
2709 self.shell.persist[ 'S:' + args[0] ] = pickled
2724 self.shell.persist[ 'S:' + args[0] ] = pickled
2710 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2725 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2711
2726
2712 def magic_bookmark(self, parameter_s=''):
2727 def magic_bookmark(self, parameter_s=''):
2713 """Manage IPython's bookmark system.
2728 """Manage IPython's bookmark system.
2714
2729
2715 %bookmark <name> - set bookmark to current dir
2730 %bookmark <name> - set bookmark to current dir
2716 %bookmark <name> <dir> - set bookmark to <dir>
2731 %bookmark <name> <dir> - set bookmark to <dir>
2717 %bookmark -l - list all bookmarks
2732 %bookmark -l - list all bookmarks
2718 %bookmark -d <name> - remove bookmark
2733 %bookmark -d <name> - remove bookmark
2719 %bookmark -r - remove all bookmarks
2734 %bookmark -r - remove all bookmarks
2720
2735
2721 You can later on access a bookmarked folder with:
2736 You can later on access a bookmarked folder with:
2722 %cd -b <name>
2737 %cd -b <name>
2723 or simply '%cd <name>' if there is no directory called <name> AND
2738 or simply '%cd <name>' if there is no directory called <name> AND
2724 there is such a bookmark defined.
2739 there is such a bookmark defined.
2725
2740
2726 Your bookmarks persist through IPython sessions, but they are
2741 Your bookmarks persist through IPython sessions, but they are
2727 associated with each profile."""
2742 associated with each profile."""
2728
2743
2729 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2744 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2730 if len(args) > 2:
2745 if len(args) > 2:
2731 error('You can only give at most two arguments')
2746 error('You can only give at most two arguments')
2732 return
2747 return
2733
2748
2734 bkms = self.shell.persist.get('bookmarks',{})
2749 bkms = self.shell.persist.get('bookmarks',{})
2735
2750
2736 if opts.has_key('d'):
2751 if opts.has_key('d'):
2737 try:
2752 try:
2738 todel = args[0]
2753 todel = args[0]
2739 except IndexError:
2754 except IndexError:
2740 error('You must provide a bookmark to delete')
2755 error('You must provide a bookmark to delete')
2741 else:
2756 else:
2742 try:
2757 try:
2743 del bkms[todel]
2758 del bkms[todel]
2744 except:
2759 except:
2745 error("Can't delete bookmark '%s'" % todel)
2760 error("Can't delete bookmark '%s'" % todel)
2746 elif opts.has_key('r'):
2761 elif opts.has_key('r'):
2747 bkms = {}
2762 bkms = {}
2748 elif opts.has_key('l'):
2763 elif opts.has_key('l'):
2749 bks = bkms.keys()
2764 bks = bkms.keys()
2750 bks.sort()
2765 bks.sort()
2751 if bks:
2766 if bks:
2752 size = max(map(len,bks))
2767 size = max(map(len,bks))
2753 else:
2768 else:
2754 size = 0
2769 size = 0
2755 fmt = '%-'+str(size)+'s -> %s'
2770 fmt = '%-'+str(size)+'s -> %s'
2756 print 'Current bookmarks:'
2771 print 'Current bookmarks:'
2757 for bk in bks:
2772 for bk in bks:
2758 print fmt % (bk,bkms[bk])
2773 print fmt % (bk,bkms[bk])
2759 else:
2774 else:
2760 if not args:
2775 if not args:
2761 error("You must specify the bookmark name")
2776 error("You must specify the bookmark name")
2762 elif len(args)==1:
2777 elif len(args)==1:
2763 bkms[args[0]] = os.getcwd()
2778 bkms[args[0]] = os.getcwd()
2764 elif len(args)==2:
2779 elif len(args)==2:
2765 bkms[args[0]] = args[1]
2780 bkms[args[0]] = args[1]
2766 self.shell.persist['bookmarks'] = bkms
2781 self.shell.persist['bookmarks'] = bkms
2767
2782
2768 def magic_pycat(self, parameter_s=''):
2783 def magic_pycat(self, parameter_s=''):
2769 """Show a syntax-highlighted file through a pager.
2784 """Show a syntax-highlighted file through a pager.
2770
2785
2771 This magic is similar to the cat utility, but it will assume the file
2786 This magic is similar to the cat utility, but it will assume the file
2772 to be Python source and will show it with syntax highlighting. """
2787 to be Python source and will show it with syntax highlighting. """
2773
2788
2774 filename = get_py_filename(parameter_s)
2789 filename = get_py_filename(parameter_s)
2775 page(self.shell.pycolorize(file_read(filename)),
2790 page(self.shell.pycolorize(file_read(filename)),
2776 screen_lines=self.shell.rc.screen_length)
2791 screen_lines=self.shell.rc.screen_length)
2777
2792
2778 def magic_cpaste(self, parameter_s=''):
2793 def magic_cpaste(self, parameter_s=''):
2779 """Allows you to paste & execute a pre-formatted code block from
2794 """Allows you to paste & execute a pre-formatted code block from
2780 clipboard.
2795 clipboard.
2781
2796
2782 You must terminate the block with '--' (two minus-signs) alone on the
2797 You must terminate the block with '--' (two minus-signs) alone on the
2783 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2798 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2784 is the new sentinel for this operation)
2799 is the new sentinel for this operation)
2785
2800
2786 The block is dedented prior to execution to enable execution of
2801 The block is dedented prior to execution to enable execution of
2787 method definitions. The executed block is also assigned to variable
2802 method definitions. The executed block is also assigned to variable
2788 named 'pasted_block' for later editing with '%edit pasted_block'.
2803 named 'pasted_block' for later editing with '%edit pasted_block'.
2789
2804
2790 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2805 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2791 This assigns the pasted block to variable 'foo' as string, without
2806 This assigns the pasted block to variable 'foo' as string, without
2792 dedenting or executing it.
2807 dedenting or executing it.
2793
2808
2794 Do not be alarmed by garbled output on Windows (it's a readline bug).
2809 Do not be alarmed by garbled output on Windows (it's a readline bug).
2795 Just press enter and type -- (and press enter again) and the block
2810 Just press enter and type -- (and press enter again) and the block
2796 will be what was just pasted.
2811 will be what was just pasted.
2797
2812
2798 IPython statements (magics, shell escapes) are not supported (yet).
2813 IPython statements (magics, shell escapes) are not supported (yet).
2799 """
2814 """
2800 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2815 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2801 par = args.strip()
2816 par = args.strip()
2802 sentinel = opts.get('s','--')
2817 sentinel = opts.get('s','--')
2803
2818
2804 from IPython import iplib
2819 from IPython import iplib
2805 lines = []
2820 lines = []
2806 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2821 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2807 while 1:
2822 while 1:
2808 l = iplib.raw_input_original(':')
2823 l = iplib.raw_input_original(':')
2809 if l ==sentinel:
2824 if l ==sentinel:
2810 break
2825 break
2811 lines.append(l)
2826 lines.append(l)
2812 block = "\n".join(lines)
2827 block = "\n".join(lines)
2813 #print "block:\n",block
2828 #print "block:\n",block
2814 if not par:
2829 if not par:
2815 b = textwrap.dedent(block)
2830 b = textwrap.dedent(block)
2816 exec b in self.user_ns
2831 exec b in self.user_ns
2817 self.user_ns['pasted_block'] = b
2832 self.user_ns['pasted_block'] = b
2818 else:
2833 else:
2819 self.user_ns[par] = block
2834 self.user_ns[par] = block
2820 print "Block assigned to '%s'" % par
2835 print "Block assigned to '%s'" % par
2821
2836
2822
2837
2823
2838
2824 # end Magic
2839 # end Magic
@@ -1,168 +1,177 b''
1 ''' IPython customization API
1 ''' IPython customization API
2
2
3 Your one-stop module for configuring & extending ipython
3 Your one-stop module for configuring & extending ipython
4
4
5 The API will probably break when ipython 1.0 is released, but so
5 The API will probably break when ipython 1.0 is released, but so
6 will the other configuration method (rc files).
6 will the other configuration method (rc files).
7
7
8 All names prefixed by underscores are for internal use, not part
8 All names prefixed by underscores are for internal use, not part
9 of the public api.
9 of the public api.
10
10
11 Below is an example that you can just put to a module and import from ipython.
11 Below is an example that you can just put to a module and import from ipython.
12
12
13 A good practice is to install the config script below as e.g.
13 A good practice is to install the config script below as e.g.
14
14
15 ~/.ipython/my_private_conf.py
15 ~/.ipython/my_private_conf.py
16
16
17 And do
17 And do
18
18
19 import_mod my_private_conf
19 import_mod my_private_conf
20
20
21 in ~/.ipython/ipythonrc
21 in ~/.ipython/ipythonrc
22
22
23 That way the module is imported at startup and you can have all your
23 That way the module is imported at startup and you can have all your
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
25 stuff) in there.
25 stuff) in there.
26
26
27 -----------------------------------------------
27 -----------------------------------------------
28 import IPython.ipapi as ip
28 import IPython.ipapi as ip
29
29
30 def ankka_f(self, arg):
30 def ankka_f(self, arg):
31 print "Ankka",self,"says uppercase:",arg.upper()
31 print "Ankka",self,"says uppercase:",arg.upper()
32
32
33 ip.expose_magic("ankka",ankka_f)
33 ip.expose_magic("ankka",ankka_f)
34
34
35 ip.magic('alias sayhi echo "Testing, hi ok"')
35 ip.magic('alias sayhi echo "Testing, hi ok"')
36 ip.magic('alias helloworld echo "Hello world"')
36 ip.magic('alias helloworld echo "Hello world"')
37 ip.system('pwd')
37 ip.system('pwd')
38
38
39 ip.ex('import re')
39 ip.ex('import re')
40 ip.ex("""
40 ip.ex("""
41 def funcci(a,b):
41 def funcci(a,b):
42 print a+b
42 print a+b
43 print funcci(3,4)
43 print funcci(3,4)
44 """)
44 """)
45 ip.ex("funcci(348,9)")
45 ip.ex("funcci(348,9)")
46
46
47 def jed_editor(self,filename, linenum=None):
47 def jed_editor(self,filename, linenum=None):
48 print "Calling my own editor, jed ... via hook!"
48 print "Calling my own editor, jed ... via hook!"
49 import os
49 import os
50 if linenum is None: linenum = 0
50 if linenum is None: linenum = 0
51 os.system('jed +%d %s' % (linenum, filename))
51 os.system('jed +%d %s' % (linenum, filename))
52 print "exiting jed"
52 print "exiting jed"
53
53
54 ip.set_hook('editor',jed_editor)
54 ip.set_hook('editor',jed_editor)
55
55
56 o = ip.options()
56 o = ip.options()
57 o.autocall = 2 # FULL autocall mode
57 o.autocall = 2 # FULL autocall mode
58
58
59 print "done!"
59 print "done!"
60
60
61 '''
61 '''
62
62
63
63
64 class TryNext(Exception):
64 class TryNext(Exception):
65 """ Try next hook exception.
65 """ Try next hook exception.
66
66
67 Raise this in your hook function to indicate that the next
67 Raise this in your hook function to indicate that the next
68 hook handler should be used to handle the operation.
68 hook handler should be used to handle the operation.
69 """
69 """
70
70
71
71
72 # contains the most recently instantiated IPApi
72 # contains the most recently instantiated IPApi
73 _recent = None
73 _recent = None
74
74
75 def get():
75 def get():
76 """ Get an IPApi object, or None if not running under ipython
76 """ Get an IPApi object, or None if not running under ipython
77
77
78 Running this should be the first thing you do when writing
78 Running this should be the first thing you do when writing
79 extensions that can be imported as normal modules. You can then
79 extensions that can be imported as normal modules. You can then
80 direct all the configuration operations against the returned
80 direct all the configuration operations against the returned
81 object.
81 object.
82
82
83 """
83 """
84
84
85 return _recent
85 return _recent
86
86
87
87
88
88
89 class IPApi:
89 class IPApi:
90 """ The actual API class for configuring IPython
90 """ The actual API class for configuring IPython
91
91
92 You should do all of the IPython configuration by getting
92 You should do all of the IPython configuration by getting
93 an IPApi object with IPython.ipapi.get() and using the provided
93 an IPApi object with IPython.ipapi.get() and using the provided
94 methods.
94 methods.
95
95
96 """
96 """
97 def __init__(self,ip):
97 def __init__(self,ip):
98
98
99 self.magic = ip.ipmagic
99 self.magic = ip.ipmagic
100
100
101 self.system = ip.ipsystem
101 self.system = ip.ipsystem
102
102
103 self.set_hook = ip.set_hook
103 self.set_hook = ip.set_hook
104
104
105 self.IP = ip
105 self.IP = ip
106 global _recent
106 global _recent
107 _recent = self
107 _recent = self
108
108
109
109
110
110
111 def options(self):
111 def options(self):
112 """ All configurable variables """
112 """ All configurable variables """
113 return self.IP.rc
113 return self.IP.rc
114
114
115 def user_ns(self):
115 def user_ns(self):
116 return self.IP.user_ns
116 return self.IP.user_ns
117
117
118 def expose_magic(self,magicname, func):
118 def expose_magic(self,magicname, func):
119 ''' Expose own function as magic function for ipython
119 ''' Expose own function as magic function for ipython
120
120
121 def foo_impl(self,parameter_s=''):
121 def foo_impl(self,parameter_s=''):
122 """My very own magic!. (Use docstrings, IPython reads them)."""
122 """My very own magic!. (Use docstrings, IPython reads them)."""
123 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
123 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
124 print 'The self object is:',self
124 print 'The self object is:',self
125
125
126 ipapi.expose_magic("foo",foo_impl)
126 ipapi.expose_magic("foo",foo_impl)
127 '''
127 '''
128
128
129 import new
129 import new
130 im = new.instancemethod(func,self.IP, self.IP.__class__)
130 im = new.instancemethod(func,self.IP, self.IP.__class__)
131 setattr(self.IP, "magic_" + magicname, im)
131 setattr(self.IP, "magic_" + magicname, im)
132
132
133
133
134 def ex(self,cmd):
134 def ex(self,cmd):
135 """ Execute a normal python statement in user namespace """
135 """ Execute a normal python statement in user namespace """
136 exec cmd in self.user_ns()
136 exec cmd in self.user_ns()
137
137
138 def ev(self,expr):
138 def ev(self,expr):
139 """ Evaluate python expression expr in user namespace
139 """ Evaluate python expression expr in user namespace
140
140
141 Returns the result of evaluation"""
141 Returns the result of evaluation"""
142 return eval(expr,self.user_ns())
142 return eval(expr,self.user_ns())
143
144 def meta(self):
145 """ Get a session-specific data store
146
147 Object returned by this method can be used to store
148 data that should persist through the ipython session.
149 """
150 return self.IP.meta
151
143
152
144 def launch_new_instance(user_ns = None):
153 def launch_new_instance(user_ns = None):
145 """ Create and start a new ipython instance.
154 """ Create and start a new ipython instance.
146
155
147 This can be called even without having an already initialized
156 This can be called even without having an already initialized
148 ipython session running.
157 ipython session running.
149
158
150 This is also used as the egg entry point for the 'ipython' script.
159 This is also used as the egg entry point for the 'ipython' script.
151
160
152 """
161 """
153 ses = create_session(user_ns)
162 ses = create_session(user_ns)
154 ses.mainloop()
163 ses.mainloop()
155
164
156
165
157 def create_session(user_ns = None):
166 def create_session(user_ns = None):
158 """ Creates, but does not launch an IPython session.
167 """ Creates, but does not launch an IPython session.
159
168
160 Later on you can call obj.mainloop() on the returned object.
169 Later on you can call obj.mainloop() on the returned object.
161
170
162 This should *not* be run when a session exists already.
171 This should *not* be run when a session exists already.
163
172
164 """
173 """
165 if user_ns is not None:
174 if user_ns is not None:
166 user_ns["__name__"] = user_ns.get("__name__",'ipy_session')
175 user_ns["__name__"] = user_ns.get("__name__",'ipy_session')
167 import IPython
176 import IPython
168 return IPython.Shell.start(user_ns = user_ns) No newline at end of file
177 return IPython.Shell.start(user_ns = user_ns)
@@ -1,2249 +1,2251 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 1088 2006-01-27 17:16:45Z vivainio $
9 $Id: iplib.py 1089 2006-01-27 19:04:59Z 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 = Bunch()
245 self.meta = Struct()
246
246
247 # Create the namespace where the user will operate. user_ns is
247 # Create the namespace where the user will operate. user_ns is
248 # normally the only one used, and it is passed to the exec calls as
248 # normally the only one used, and it is passed to the exec calls as
249 # the locals argument. But we do carry a user_global_ns namespace
249 # the locals argument. But we do carry a user_global_ns namespace
250 # given as the exec 'globals' argument, This is useful in embedding
250 # given as the exec 'globals' argument, This is useful in embedding
251 # situations where the ipython shell opens in a context where the
251 # situations where the ipython shell opens in a context where the
252 # distinction between locals and globals is meaningful.
252 # distinction between locals and globals is meaningful.
253
253
254 # FIXME. For some strange reason, __builtins__ is showing up at user
254 # FIXME. For some strange reason, __builtins__ is showing up at user
255 # level as a dict instead of a module. This is a manual fix, but I
255 # level as a dict instead of a module. This is a manual fix, but I
256 # should really track down where the problem is coming from. Alex
256 # should really track down where the problem is coming from. Alex
257 # Schmolck reported this problem first.
257 # Schmolck reported this problem first.
258
258
259 # A useful post by Alex Martelli on this topic:
259 # A useful post by Alex Martelli on this topic:
260 # Re: inconsistent value from __builtins__
260 # Re: inconsistent value from __builtins__
261 # Von: Alex Martelli <aleaxit@yahoo.com>
261 # Von: Alex Martelli <aleaxit@yahoo.com>
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
263 # Gruppen: comp.lang.python
263 # Gruppen: comp.lang.python
264
264
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
267 # > <type 'dict'>
267 # > <type 'dict'>
268 # > >>> print type(__builtins__)
268 # > >>> print type(__builtins__)
269 # > <type 'module'>
269 # > <type 'module'>
270 # > Is this difference in return value intentional?
270 # > Is this difference in return value intentional?
271
271
272 # Well, it's documented that '__builtins__' can be either a dictionary
272 # Well, it's documented that '__builtins__' can be either a dictionary
273 # or a module, and it's been that way for a long time. Whether it's
273 # or a module, and it's been that way for a long time. Whether it's
274 # intentional (or sensible), I don't know. In any case, the idea is
274 # intentional (or sensible), I don't know. In any case, the idea is
275 # that if you need to access the built-in namespace directly, you
275 # that if you need to access the built-in namespace directly, you
276 # should start with "import __builtin__" (note, no 's') which will
276 # should start with "import __builtin__" (note, no 's') which will
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
278
278
279 if user_ns is None:
279 if user_ns is None:
280 # Set __name__ to __main__ to better match the behavior of the
280 # Set __name__ to __main__ to better match the behavior of the
281 # normal interpreter.
281 # normal interpreter.
282 user_ns = {'__name__' :'__main__',
282 user_ns = {'__name__' :'__main__',
283 '__builtins__' : __builtin__,
283 '__builtins__' : __builtin__,
284 }
284 }
285
285
286 if user_global_ns is None:
286 if user_global_ns is None:
287 user_global_ns = {}
287 user_global_ns = {}
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 # Set all default hooks, defined in the IPython.hooks module.
408 # Set all default hooks, defined in the IPython.hooks module.
409 hooks = IPython.hooks
409 hooks = IPython.hooks
410 for hook_name in hooks.__all__:
410 for hook_name in hooks.__all__:
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
413 #print "bound hook",hook_name
413 #print "bound hook",hook_name
414
414
415 # Flag to mark unconditional exit
415 # Flag to mark unconditional exit
416 self.exit_now = False
416 self.exit_now = False
417
417
418 self.usage_min = """\
418 self.usage_min = """\
419 An enhanced console for Python.
419 An enhanced console for Python.
420 Some of its features are:
420 Some of its features are:
421 - Readline support if the readline library is present.
421 - Readline support if the readline library is present.
422 - Tab completion in the local namespace.
422 - Tab completion in the local namespace.
423 - Logging of input, see command-line options.
423 - Logging of input, see command-line options.
424 - System shell escape via ! , eg !ls.
424 - System shell escape via ! , eg !ls.
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
426 - Keeps track of locally defined variables via %who, %whos.
426 - Keeps track of locally defined variables via %who, %whos.
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
428 """
428 """
429 if usage: self.usage = usage
429 if usage: self.usage = usage
430 else: self.usage = self.usage_min
430 else: self.usage = self.usage_min
431
431
432 # Storage
432 # Storage
433 self.rc = rc # This will hold all configuration information
433 self.rc = rc # This will hold all configuration information
434 self.pager = 'less'
434 self.pager = 'less'
435 # temporary files used for various purposes. Deleted at exit.
435 # temporary files used for various purposes. Deleted at exit.
436 self.tempfiles = []
436 self.tempfiles = []
437
437
438 # Keep track of readline usage (later set by init_readline)
438 # Keep track of readline usage (later set by init_readline)
439 self.has_readline = False
439 self.has_readline = False
440
440
441 # template for logfile headers. It gets resolved at runtime by the
441 # template for logfile headers. It gets resolved at runtime by the
442 # logstart method.
442 # logstart method.
443 self.loghead_tpl = \
443 self.loghead_tpl = \
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
446 #log# opts = %s
446 #log# opts = %s
447 #log# args = %s
447 #log# args = %s
448 #log# It is safe to make manual edits below here.
448 #log# It is safe to make manual edits below here.
449 #log#-----------------------------------------------------------------------
449 #log#-----------------------------------------------------------------------
450 """
450 """
451 # for pushd/popd management
451 # for pushd/popd management
452 try:
452 try:
453 self.home_dir = get_home_dir()
453 self.home_dir = get_home_dir()
454 except HomeDirError,msg:
454 except HomeDirError,msg:
455 fatal(msg)
455 fatal(msg)
456
456
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
458
458
459 # Functions to call the underlying shell.
459 # Functions to call the underlying shell.
460
460
461 # utility to expand user variables via Itpl
461 # utility to expand user variables via Itpl
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
463 self.user_ns))
463 self.user_ns))
464 # The first is similar to os.system, but it doesn't return a value,
464 # The first is similar to os.system, but it doesn't return a value,
465 # and it allows interpolation of variables in the user's namespace.
465 # and it allows interpolation of variables in the user's namespace.
466 self.system = lambda cmd: shell(self.var_expand(cmd),
466 self.system = lambda cmd: shell(self.var_expand(cmd),
467 header='IPython system call: ',
467 header='IPython system call: ',
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469 # These are for getoutput and getoutputerror:
469 # These are for getoutput and getoutputerror:
470 self.getoutput = lambda cmd: \
470 self.getoutput = lambda cmd: \
471 getoutput(self.var_expand(cmd),
471 getoutput(self.var_expand(cmd),
472 header='IPython system call: ',
472 header='IPython system call: ',
473 verbose=self.rc.system_verbose)
473 verbose=self.rc.system_verbose)
474 self.getoutputerror = lambda cmd: \
474 self.getoutputerror = lambda cmd: \
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
476 self.user_ns)),
476 self.user_ns)),
477 header='IPython system call: ',
477 header='IPython system call: ',
478 verbose=self.rc.system_verbose)
478 verbose=self.rc.system_verbose)
479
479
480 # RegExp for splitting line contents into pre-char//first
480 # RegExp for splitting line contents into pre-char//first
481 # word-method//rest. For clarity, each group in on one line.
481 # word-method//rest. For clarity, each group in on one line.
482
482
483 # WARNING: update the regexp if the above escapes are changed, as they
483 # WARNING: update the regexp if the above escapes are changed, as they
484 # are hardwired in.
484 # are hardwired in.
485
485
486 # Don't get carried away with trying to make the autocalling catch too
486 # Don't get carried away with trying to make the autocalling catch too
487 # much: it's better to be conservative rather than to trigger hidden
487 # much: it's better to be conservative rather than to trigger hidden
488 # evals() somewhere and end up causing side effects.
488 # evals() somewhere and end up causing side effects.
489
489
490 self.line_split = re.compile(r'^([\s*,;/])'
490 self.line_split = re.compile(r'^([\s*,;/])'
491 r'([\?\w\.]+\w*\s*)'
491 r'([\?\w\.]+\w*\s*)'
492 r'(\(?.*$)')
492 r'(\(?.*$)')
493
493
494 # Original re, keep around for a while in case changes break something
494 # Original re, keep around for a while in case changes break something
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
497 # r'(\(?.*$)')
497 # r'(\(?.*$)')
498
498
499 # RegExp to identify potential function names
499 # RegExp to identify potential function names
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501
501
502 # RegExp to exclude strings with this start from autocalling. In
502 # RegExp to exclude strings with this start from autocalling. In
503 # particular, all binary operators should be excluded, so that if foo
503 # particular, all binary operators should be excluded, so that if foo
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 # invalid. The characters '!=()' don't need to be checked for, as the
505 # invalid. The characters '!=()' don't need to be checked for, as the
506 # _prefilter routine explicitely does so, to catch direct calls and
506 # _prefilter routine explicitely does so, to catch direct calls and
507 # rebindings of existing names.
507 # rebindings of existing names.
508
508
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 # it affects the rest of the group in square brackets.
510 # it affects the rest of the group in square brackets.
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 '|^is |^not |^in |^and |^or ')
512 '|^is |^not |^in |^and |^or ')
513
513
514 # try to catch also methods for stuff in lists/tuples/dicts: off
514 # try to catch also methods for stuff in lists/tuples/dicts: off
515 # (experimental). For this to work, the line_split regexp would need
515 # (experimental). For this to work, the line_split regexp would need
516 # to be modified so it wouldn't break things at '['. That line is
516 # to be modified so it wouldn't break things at '['. That line is
517 # nasty enough that I shouldn't change it until I can test it _well_.
517 # nasty enough that I shouldn't change it until I can test it _well_.
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519
519
520 # keep track of where we started running (mainly for crash post-mortem)
520 # keep track of where we started running (mainly for crash post-mortem)
521 self.starting_dir = os.getcwd()
521 self.starting_dir = os.getcwd()
522
522
523 # Various switches which can be set
523 # Various switches which can be set
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 self.banner2 = banner2
526 self.banner2 = banner2
527
527
528 # TraceBack handlers:
528 # TraceBack handlers:
529
529
530 # Syntax error handler.
530 # Syntax error handler.
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532
532
533 # The interactive one is initialized with an offset, meaning we always
533 # The interactive one is initialized with an offset, meaning we always
534 # want to remove the topmost item in the traceback, which is our own
534 # want to remove the topmost item in the traceback, which is our own
535 # internal code. Valid modes: ['Plain','Context','Verbose']
535 # internal code. Valid modes: ['Plain','Context','Verbose']
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 color_scheme='NoColor',
537 color_scheme='NoColor',
538 tb_offset = 1)
538 tb_offset = 1)
539
539
540 # IPython itself shouldn't crash. This will produce a detailed
540 # IPython itself shouldn't crash. This will produce a detailed
541 # post-mortem if it does. But we only install the crash handler for
541 # post-mortem if it does. But we only install the crash handler for
542 # non-threaded shells, the threaded ones use a normal verbose reporter
542 # non-threaded shells, the threaded ones use a normal verbose reporter
543 # and lose the crash handler. This is because exceptions in the main
543 # and lose the crash handler. This is because exceptions in the main
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 # and there's no point in printing crash dumps for every user exception.
545 # and there's no point in printing crash dumps for every user exception.
546 if self.isthreaded:
546 if self.isthreaded:
547 sys.excepthook = ultraTB.FormattedTB()
547 sys.excepthook = ultraTB.FormattedTB()
548 else:
548 else:
549 from IPython import CrashHandler
549 from IPython import CrashHandler
550 sys.excepthook = CrashHandler.CrashHandler(self)
550 sys.excepthook = CrashHandler.CrashHandler(self)
551
551
552 # The instance will store a pointer to this, so that runtime code
552 # The instance will store a pointer to this, so that runtime code
553 # (such as magics) can access it. This is because during the
553 # (such as magics) can access it. This is because during the
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
555 # frameworks).
555 # frameworks).
556 self.sys_excepthook = sys.excepthook
556 self.sys_excepthook = sys.excepthook
557
557
558 # and add any custom exception handlers the user may have specified
558 # and add any custom exception handlers the user may have specified
559 self.set_custom_exc(*custom_exceptions)
559 self.set_custom_exc(*custom_exceptions)
560
560
561 # Object inspector
561 # Object inspector
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
563 PyColorize.ANSICodeColors,
563 PyColorize.ANSICodeColors,
564 'NoColor')
564 'NoColor')
565 # indentation management
565 # indentation management
566 self.autoindent = False
566 self.autoindent = False
567 self.indent_current_nsp = 0
567 self.indent_current_nsp = 0
568
568
569 # Make some aliases automatically
569 # Make some aliases automatically
570 # Prepare list of shell aliases to auto-define
570 # Prepare list of shell aliases to auto-define
571 if os.name == 'posix':
571 if os.name == 'posix':
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 'mv mv -i','rm rm -i','cp cp -i',
573 'mv mv -i','rm rm -i','cp cp -i',
574 'cat cat','less less','clear clear',
574 'cat cat','less less','clear clear',
575 # a better ls
575 # a better ls
576 'ls ls -F',
576 'ls ls -F',
577 # long ls
577 # long ls
578 'll ls -lF',
578 'll ls -lF',
579 # color ls
579 # color ls
580 'lc ls -F -o --color',
580 'lc ls -F -o --color',
581 # ls normal files only
581 # ls normal files only
582 'lf ls -F -o --color %l | grep ^-',
582 'lf ls -F -o --color %l | grep ^-',
583 # ls symbolic links
583 # ls symbolic links
584 'lk ls -F -o --color %l | grep ^l',
584 'lk ls -F -o --color %l | grep ^l',
585 # directories or links to directories,
585 # directories or links to directories,
586 'ldir ls -F -o --color %l | grep /$',
586 'ldir ls -F -o --color %l | grep /$',
587 # things which are executable
587 # things which are executable
588 'lx ls -F -o --color %l | grep ^-..x',
588 'lx ls -F -o --color %l | grep ^-..x',
589 )
589 )
590 elif os.name in ['nt','dos']:
590 elif os.name in ['nt','dos']:
591 auto_alias = ('dir dir /on', 'ls dir /on',
591 auto_alias = ('dir dir /on', 'ls dir /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
593 'mkdir mkdir','rmdir rmdir','echo echo',
593 'mkdir mkdir','rmdir rmdir','echo echo',
594 'ren ren','cls cls','copy copy')
594 'ren ren','cls cls','copy copy')
595 else:
595 else:
596 auto_alias = ()
596 auto_alias = ()
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
598 # Call the actual (public) initializer
598 # Call the actual (public) initializer
599 self.init_auto_alias()
599 self.init_auto_alias()
600 # end __init__
600 # end __init__
601
601
602 def post_config_initialization(self):
602 def post_config_initialization(self):
603 """Post configuration init method
603 """Post configuration init method
604
604
605 This is called after the configuration files have been processed to
605 This is called after the configuration files have been processed to
606 'finalize' the initialization."""
606 'finalize' the initialization."""
607
607
608 rc = self.rc
608 rc = self.rc
609
609
610 # Load readline proper
610 # Load readline proper
611 if rc.readline:
611 if rc.readline:
612 self.init_readline()
612 self.init_readline()
613
613
614 # local shortcut, this is used a LOT
614 # local shortcut, this is used a LOT
615 self.log = self.logger.log
615 self.log = self.logger.log
616
616
617 # Initialize cache, set in/out prompts and printing system
617 # Initialize cache, set in/out prompts and printing system
618 self.outputcache = CachedOutput(self,
618 self.outputcache = CachedOutput(self,
619 rc.cache_size,
619 rc.cache_size,
620 rc.pprint,
620 rc.pprint,
621 input_sep = rc.separate_in,
621 input_sep = rc.separate_in,
622 output_sep = rc.separate_out,
622 output_sep = rc.separate_out,
623 output_sep2 = rc.separate_out2,
623 output_sep2 = rc.separate_out2,
624 ps1 = rc.prompt_in1,
624 ps1 = rc.prompt_in1,
625 ps2 = rc.prompt_in2,
625 ps2 = rc.prompt_in2,
626 ps_out = rc.prompt_out,
626 ps_out = rc.prompt_out,
627 pad_left = rc.prompts_pad_left)
627 pad_left = rc.prompts_pad_left)
628
628
629 # user may have over-ridden the default print hook:
629 # user may have over-ridden the default print hook:
630 try:
630 try:
631 self.outputcache.__class__.display = self.hooks.display
631 self.outputcache.__class__.display = self.hooks.display
632 except AttributeError:
632 except AttributeError:
633 pass
633 pass
634
634
635 # I don't like assigning globally to sys, because it means when embedding
635 # I don't like assigning globally to sys, because it means when embedding
636 # instances, each embedded instance overrides the previous choice. But
636 # instances, each embedded instance overrides the previous choice. But
637 # sys.displayhook seems to be called internally by exec, so I don't see a
637 # sys.displayhook seems to be called internally by exec, so I don't see a
638 # way around it.
638 # way around it.
639 sys.displayhook = self.outputcache
639 sys.displayhook = self.outputcache
640
640
641 # Set user colors (don't do it in the constructor above so that it
641 # Set user colors (don't do it in the constructor above so that it
642 # doesn't crash if colors option is invalid)
642 # doesn't crash if colors option is invalid)
643 self.magic_colors(rc.colors)
643 self.magic_colors(rc.colors)
644
644
645 # Set calling of pdb on exceptions
645 # Set calling of pdb on exceptions
646 self.call_pdb = rc.pdb
646 self.call_pdb = rc.pdb
647
647
648 # Load user aliases
648 # Load user aliases
649 for alias in rc.alias:
649 for alias in rc.alias:
650 self.magic_alias(alias)
650 self.magic_alias(alias)
651
651
652 # dynamic data that survives through sessions
652 # dynamic data that survives through sessions
653 # XXX make the filename a config option?
653 # XXX make the filename a config option?
654 persist_base = 'persist'
654 persist_base = 'persist'
655 if rc.profile:
655 if rc.profile:
656 persist_base += '_%s' % rc.profile
656 persist_base += '_%s' % rc.profile
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
658
658
659 try:
659 try:
660 self.persist = pickle.load(file(self.persist_fname))
660 self.persist = pickle.load(file(self.persist_fname))
661 except:
661 except:
662 self.persist = {}
662 self.persist = {}
663
663
664
664
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
666 try:
666 try:
667 obj = pickle.loads(value)
667 obj = pickle.loads(value)
668 except:
668 except:
669
669
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
671 print "The error was:",sys.exc_info()[0]
671 print "The error was:",sys.exc_info()[0]
672 continue
672 continue
673
673
674
674
675 self.user_ns[key] = obj
675 self.user_ns[key] = obj
676
676
677 def add_builtins(self):
677 def add_builtins(self):
678 """Store ipython references into the builtin namespace.
678 """Store ipython references into the builtin namespace.
679
679
680 Some parts of ipython operate via builtins injected here, which hold a
680 Some parts of ipython operate via builtins injected here, which hold a
681 reference to IPython itself."""
681 reference to IPython itself."""
682
682
683 builtins_new = dict(__IPYTHON__ = self,
683 builtins_new = dict(__IPYTHON__ = self,
684 ip_set_hook = self.set_hook,
684 ip_set_hook = self.set_hook,
685 jobs = self.jobs,
685 jobs = self.jobs,
686 ipmagic = self.ipmagic,
686 ipmagic = self.ipmagic,
687 ipalias = self.ipalias,
687 ipalias = self.ipalias,
688 ipsystem = self.ipsystem,
688 ipsystem = self.ipsystem,
689 )
689 )
690 for biname,bival in builtins_new.items():
690 for biname,bival in builtins_new.items():
691 try:
691 try:
692 # store the orignal value so we can restore it
692 # store the orignal value so we can restore it
693 self.builtins_added[biname] = __builtin__.__dict__[biname]
693 self.builtins_added[biname] = __builtin__.__dict__[biname]
694 except KeyError:
694 except KeyError:
695 # or mark that it wasn't defined, and we'll just delete it at
695 # or mark that it wasn't defined, and we'll just delete it at
696 # cleanup
696 # cleanup
697 self.builtins_added[biname] = Undefined
697 self.builtins_added[biname] = Undefined
698 __builtin__.__dict__[biname] = bival
698 __builtin__.__dict__[biname] = bival
699
699
700 # Keep in the builtins a flag for when IPython is active. We set it
700 # Keep in the builtins a flag for when IPython is active. We set it
701 # with setdefault so that multiple nested IPythons don't clobber one
701 # with setdefault so that multiple nested IPythons don't clobber one
702 # another. Each will increase its value by one upon being activated,
702 # another. Each will increase its value by one upon being activated,
703 # which also gives us a way to determine the nesting level.
703 # which also gives us a way to determine the nesting level.
704 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
704 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
705
705
706 def clean_builtins(self):
706 def clean_builtins(self):
707 """Remove any builtins which might have been added by add_builtins, or
707 """Remove any builtins which might have been added by add_builtins, or
708 restore overwritten ones to their previous values."""
708 restore overwritten ones to their previous values."""
709 for biname,bival in self.builtins_added.items():
709 for biname,bival in self.builtins_added.items():
710 if bival is Undefined:
710 if bival is Undefined:
711 del __builtin__.__dict__[biname]
711 del __builtin__.__dict__[biname]
712 else:
712 else:
713 __builtin__.__dict__[biname] = bival
713 __builtin__.__dict__[biname] = bival
714 self.builtins_added.clear()
714 self.builtins_added.clear()
715
715
716 def set_hook(self,name,hook, priority = 50):
716 def set_hook(self,name,hook, priority = 50):
717 """set_hook(name,hook) -> sets an internal IPython hook.
717 """set_hook(name,hook) -> sets an internal IPython hook.
718
718
719 IPython exposes some of its internal API as user-modifiable hooks. By
719 IPython exposes some of its internal API as user-modifiable hooks. By
720 adding your function to one of these hooks, you can modify IPython's
720 adding your function to one of these hooks, you can modify IPython's
721 behavior to call at runtime your own routines."""
721 behavior to call at runtime your own routines."""
722
722
723 # At some point in the future, this should validate the hook before it
723 # At some point in the future, this should validate the hook before it
724 # accepts it. Probably at least check that the hook takes the number
724 # accepts it. Probably at least check that the hook takes the number
725 # of args it's supposed to.
725 # of args it's supposed to.
726 dp = getattr(self.hooks, name, None)
726 dp = getattr(self.hooks, name, None)
727 if name not in IPython.hooks.__all__:
728 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
727 if not dp:
729 if not dp:
728 dp = IPython.hooks.CommandChainDispatcher()
730 dp = IPython.hooks.CommandChainDispatcher()
729
731
730 f = new.instancemethod(hook,self,self.__class__)
732 f = new.instancemethod(hook,self,self.__class__)
731 try:
733 try:
732 dp.add(f,priority)
734 dp.add(f,priority)
733 except AttributeError:
735 except AttributeError:
734 # it was not commandchain, plain old func - replace
736 # it was not commandchain, plain old func - replace
735 dp = f
737 dp = f
736
738
737 setattr(self.hooks,name, dp)
739 setattr(self.hooks,name, dp)
738
740
739
741
740 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
742 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
741
743
742 def set_custom_exc(self,exc_tuple,handler):
744 def set_custom_exc(self,exc_tuple,handler):
743 """set_custom_exc(exc_tuple,handler)
745 """set_custom_exc(exc_tuple,handler)
744
746
745 Set a custom exception handler, which will be called if any of the
747 Set a custom exception handler, which will be called if any of the
746 exceptions in exc_tuple occur in the mainloop (specifically, in the
748 exceptions in exc_tuple occur in the mainloop (specifically, in the
747 runcode() method.
749 runcode() method.
748
750
749 Inputs:
751 Inputs:
750
752
751 - exc_tuple: a *tuple* of valid exceptions to call the defined
753 - exc_tuple: a *tuple* of valid exceptions to call the defined
752 handler for. It is very important that you use a tuple, and NOT A
754 handler for. It is very important that you use a tuple, and NOT A
753 LIST here, because of the way Python's except statement works. If
755 LIST here, because of the way Python's except statement works. If
754 you only want to trap a single exception, use a singleton tuple:
756 you only want to trap a single exception, use a singleton tuple:
755
757
756 exc_tuple == (MyCustomException,)
758 exc_tuple == (MyCustomException,)
757
759
758 - handler: this must be defined as a function with the following
760 - handler: this must be defined as a function with the following
759 basic interface: def my_handler(self,etype,value,tb).
761 basic interface: def my_handler(self,etype,value,tb).
760
762
761 This will be made into an instance method (via new.instancemethod)
763 This will be made into an instance method (via new.instancemethod)
762 of IPython itself, and it will be called if any of the exceptions
764 of IPython itself, and it will be called if any of the exceptions
763 listed in the exc_tuple are caught. If the handler is None, an
765 listed in the exc_tuple are caught. If the handler is None, an
764 internal basic one is used, which just prints basic info.
766 internal basic one is used, which just prints basic info.
765
767
766 WARNING: by putting in your own exception handler into IPython's main
768 WARNING: by putting in your own exception handler into IPython's main
767 execution loop, you run a very good chance of nasty crashes. This
769 execution loop, you run a very good chance of nasty crashes. This
768 facility should only be used if you really know what you are doing."""
770 facility should only be used if you really know what you are doing."""
769
771
770 assert type(exc_tuple)==type(()) , \
772 assert type(exc_tuple)==type(()) , \
771 "The custom exceptions must be given AS A TUPLE."
773 "The custom exceptions must be given AS A TUPLE."
772
774
773 def dummy_handler(self,etype,value,tb):
775 def dummy_handler(self,etype,value,tb):
774 print '*** Simple custom exception handler ***'
776 print '*** Simple custom exception handler ***'
775 print 'Exception type :',etype
777 print 'Exception type :',etype
776 print 'Exception value:',value
778 print 'Exception value:',value
777 print 'Traceback :',tb
779 print 'Traceback :',tb
778 print 'Source code :','\n'.join(self.buffer)
780 print 'Source code :','\n'.join(self.buffer)
779
781
780 if handler is None: handler = dummy_handler
782 if handler is None: handler = dummy_handler
781
783
782 self.CustomTB = new.instancemethod(handler,self,self.__class__)
784 self.CustomTB = new.instancemethod(handler,self,self.__class__)
783 self.custom_exceptions = exc_tuple
785 self.custom_exceptions = exc_tuple
784
786
785 def set_custom_completer(self,completer,pos=0):
787 def set_custom_completer(self,completer,pos=0):
786 """set_custom_completer(completer,pos=0)
788 """set_custom_completer(completer,pos=0)
787
789
788 Adds a new custom completer function.
790 Adds a new custom completer function.
789
791
790 The position argument (defaults to 0) is the index in the completers
792 The position argument (defaults to 0) is the index in the completers
791 list where you want the completer to be inserted."""
793 list where you want the completer to be inserted."""
792
794
793 newcomp = new.instancemethod(completer,self.Completer,
795 newcomp = new.instancemethod(completer,self.Completer,
794 self.Completer.__class__)
796 self.Completer.__class__)
795 self.Completer.matchers.insert(pos,newcomp)
797 self.Completer.matchers.insert(pos,newcomp)
796
798
797 def _get_call_pdb(self):
799 def _get_call_pdb(self):
798 return self._call_pdb
800 return self._call_pdb
799
801
800 def _set_call_pdb(self,val):
802 def _set_call_pdb(self,val):
801
803
802 if val not in (0,1,False,True):
804 if val not in (0,1,False,True):
803 raise ValueError,'new call_pdb value must be boolean'
805 raise ValueError,'new call_pdb value must be boolean'
804
806
805 # store value in instance
807 # store value in instance
806 self._call_pdb = val
808 self._call_pdb = val
807
809
808 # notify the actual exception handlers
810 # notify the actual exception handlers
809 self.InteractiveTB.call_pdb = val
811 self.InteractiveTB.call_pdb = val
810 if self.isthreaded:
812 if self.isthreaded:
811 try:
813 try:
812 self.sys_excepthook.call_pdb = val
814 self.sys_excepthook.call_pdb = val
813 except:
815 except:
814 warn('Failed to activate pdb for threaded exception handler')
816 warn('Failed to activate pdb for threaded exception handler')
815
817
816 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
818 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
817 'Control auto-activation of pdb at exceptions')
819 'Control auto-activation of pdb at exceptions')
818
820
819
821
820 # These special functions get installed in the builtin namespace, to
822 # These special functions get installed in the builtin namespace, to
821 # provide programmatic (pure python) access to magics, aliases and system
823 # provide programmatic (pure python) access to magics, aliases and system
822 # calls. This is important for logging, user scripting, and more.
824 # calls. This is important for logging, user scripting, and more.
823
825
824 # We are basically exposing, via normal python functions, the three
826 # We are basically exposing, via normal python functions, the three
825 # mechanisms in which ipython offers special call modes (magics for
827 # mechanisms in which ipython offers special call modes (magics for
826 # internal control, aliases for direct system access via pre-selected
828 # internal control, aliases for direct system access via pre-selected
827 # names, and !cmd for calling arbitrary system commands).
829 # names, and !cmd for calling arbitrary system commands).
828
830
829 def ipmagic(self,arg_s):
831 def ipmagic(self,arg_s):
830 """Call a magic function by name.
832 """Call a magic function by name.
831
833
832 Input: a string containing the name of the magic function to call and any
834 Input: a string containing the name of the magic function to call and any
833 additional arguments to be passed to the magic.
835 additional arguments to be passed to the magic.
834
836
835 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
837 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
836 prompt:
838 prompt:
837
839
838 In[1]: %name -opt foo bar
840 In[1]: %name -opt foo bar
839
841
840 To call a magic without arguments, simply use ipmagic('name').
842 To call a magic without arguments, simply use ipmagic('name').
841
843
842 This provides a proper Python function to call IPython's magics in any
844 This provides a proper Python function to call IPython's magics in any
843 valid Python code you can type at the interpreter, including loops and
845 valid Python code you can type at the interpreter, including loops and
844 compound statements. It is added by IPython to the Python builtin
846 compound statements. It is added by IPython to the Python builtin
845 namespace upon initialization."""
847 namespace upon initialization."""
846
848
847 args = arg_s.split(' ',1)
849 args = arg_s.split(' ',1)
848 magic_name = args[0]
850 magic_name = args[0]
849 magic_name = magic_name.lstrip(self.ESC_MAGIC)
851 magic_name = magic_name.lstrip(self.ESC_MAGIC)
850
852
851 try:
853 try:
852 magic_args = args[1]
854 magic_args = args[1]
853 except IndexError:
855 except IndexError:
854 magic_args = ''
856 magic_args = ''
855 fn = getattr(self,'magic_'+magic_name,None)
857 fn = getattr(self,'magic_'+magic_name,None)
856 if fn is None:
858 if fn is None:
857 error("Magic function `%s` not found." % magic_name)
859 error("Magic function `%s` not found." % magic_name)
858 else:
860 else:
859 magic_args = self.var_expand(magic_args)
861 magic_args = self.var_expand(magic_args)
860 return fn(magic_args)
862 return fn(magic_args)
861
863
862 def ipalias(self,arg_s):
864 def ipalias(self,arg_s):
863 """Call an alias by name.
865 """Call an alias by name.
864
866
865 Input: a string containing the name of the alias to call and any
867 Input: a string containing the name of the alias to call and any
866 additional arguments to be passed to the magic.
868 additional arguments to be passed to the magic.
867
869
868 ipalias('name -opt foo bar') is equivalent to typing at the ipython
870 ipalias('name -opt foo bar') is equivalent to typing at the ipython
869 prompt:
871 prompt:
870
872
871 In[1]: name -opt foo bar
873 In[1]: name -opt foo bar
872
874
873 To call an alias without arguments, simply use ipalias('name').
875 To call an alias without arguments, simply use ipalias('name').
874
876
875 This provides a proper Python function to call IPython's aliases in any
877 This provides a proper Python function to call IPython's aliases in any
876 valid Python code you can type at the interpreter, including loops and
878 valid Python code you can type at the interpreter, including loops and
877 compound statements. It is added by IPython to the Python builtin
879 compound statements. It is added by IPython to the Python builtin
878 namespace upon initialization."""
880 namespace upon initialization."""
879
881
880 args = arg_s.split(' ',1)
882 args = arg_s.split(' ',1)
881 alias_name = args[0]
883 alias_name = args[0]
882 try:
884 try:
883 alias_args = args[1]
885 alias_args = args[1]
884 except IndexError:
886 except IndexError:
885 alias_args = ''
887 alias_args = ''
886 if alias_name in self.alias_table:
888 if alias_name in self.alias_table:
887 self.call_alias(alias_name,alias_args)
889 self.call_alias(alias_name,alias_args)
888 else:
890 else:
889 error("Alias `%s` not found." % alias_name)
891 error("Alias `%s` not found." % alias_name)
890
892
891 def ipsystem(self,arg_s):
893 def ipsystem(self,arg_s):
892 """Make a system call, using IPython."""
894 """Make a system call, using IPython."""
893
895
894 self.system(arg_s)
896 self.system(arg_s)
895
897
896 def complete(self,text):
898 def complete(self,text):
897 """Return a sorted list of all possible completions on text.
899 """Return a sorted list of all possible completions on text.
898
900
899 Inputs:
901 Inputs:
900
902
901 - text: a string of text to be completed on.
903 - text: a string of text to be completed on.
902
904
903 This is a wrapper around the completion mechanism, similar to what
905 This is a wrapper around the completion mechanism, similar to what
904 readline does at the command line when the TAB key is hit. By
906 readline does at the command line when the TAB key is hit. By
905 exposing it as a method, it can be used by other non-readline
907 exposing it as a method, it can be used by other non-readline
906 environments (such as GUIs) for text completion.
908 environments (such as GUIs) for text completion.
907
909
908 Simple usage example:
910 Simple usage example:
909
911
910 In [1]: x = 'hello'
912 In [1]: x = 'hello'
911
913
912 In [2]: __IP.complete('x.l')
914 In [2]: __IP.complete('x.l')
913 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
915 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
914
916
915 complete = self.Completer.complete
917 complete = self.Completer.complete
916 state = 0
918 state = 0
917 # use a dict so we get unique keys, since ipyhton's multiple
919 # use a dict so we get unique keys, since ipyhton's multiple
918 # completers can return duplicates.
920 # completers can return duplicates.
919 comps = {}
921 comps = {}
920 while True:
922 while True:
921 newcomp = complete(text,state)
923 newcomp = complete(text,state)
922 if newcomp is None:
924 if newcomp is None:
923 break
925 break
924 comps[newcomp] = 1
926 comps[newcomp] = 1
925 state += 1
927 state += 1
926 outcomps = comps.keys()
928 outcomps = comps.keys()
927 outcomps.sort()
929 outcomps.sort()
928 return outcomps
930 return outcomps
929
931
930 def set_completer_frame(self, frame=None):
932 def set_completer_frame(self, frame=None):
931 if frame:
933 if frame:
932 self.Completer.namespace = frame.f_locals
934 self.Completer.namespace = frame.f_locals
933 self.Completer.global_namespace = frame.f_globals
935 self.Completer.global_namespace = frame.f_globals
934 else:
936 else:
935 self.Completer.namespace = self.user_ns
937 self.Completer.namespace = self.user_ns
936 self.Completer.global_namespace = self.user_global_ns
938 self.Completer.global_namespace = self.user_global_ns
937
939
938 def init_auto_alias(self):
940 def init_auto_alias(self):
939 """Define some aliases automatically.
941 """Define some aliases automatically.
940
942
941 These are ALL parameter-less aliases"""
943 These are ALL parameter-less aliases"""
942
944
943 for alias,cmd in self.auto_alias:
945 for alias,cmd in self.auto_alias:
944 self.alias_table[alias] = (0,cmd)
946 self.alias_table[alias] = (0,cmd)
945
947
946 def alias_table_validate(self,verbose=0):
948 def alias_table_validate(self,verbose=0):
947 """Update information about the alias table.
949 """Update information about the alias table.
948
950
949 In particular, make sure no Python keywords/builtins are in it."""
951 In particular, make sure no Python keywords/builtins are in it."""
950
952
951 no_alias = self.no_alias
953 no_alias = self.no_alias
952 for k in self.alias_table.keys():
954 for k in self.alias_table.keys():
953 if k in no_alias:
955 if k in no_alias:
954 del self.alias_table[k]
956 del self.alias_table[k]
955 if verbose:
957 if verbose:
956 print ("Deleting alias <%s>, it's a Python "
958 print ("Deleting alias <%s>, it's a Python "
957 "keyword or builtin." % k)
959 "keyword or builtin." % k)
958
960
959 def set_autoindent(self,value=None):
961 def set_autoindent(self,value=None):
960 """Set the autoindent flag, checking for readline support.
962 """Set the autoindent flag, checking for readline support.
961
963
962 If called with no arguments, it acts as a toggle."""
964 If called with no arguments, it acts as a toggle."""
963
965
964 if not self.has_readline:
966 if not self.has_readline:
965 if os.name == 'posix':
967 if os.name == 'posix':
966 warn("The auto-indent feature requires the readline library")
968 warn("The auto-indent feature requires the readline library")
967 self.autoindent = 0
969 self.autoindent = 0
968 return
970 return
969 if value is None:
971 if value is None:
970 self.autoindent = not self.autoindent
972 self.autoindent = not self.autoindent
971 else:
973 else:
972 self.autoindent = value
974 self.autoindent = value
973
975
974 def rc_set_toggle(self,rc_field,value=None):
976 def rc_set_toggle(self,rc_field,value=None):
975 """Set or toggle a field in IPython's rc config. structure.
977 """Set or toggle a field in IPython's rc config. structure.
976
978
977 If called with no arguments, it acts as a toggle.
979 If called with no arguments, it acts as a toggle.
978
980
979 If called with a non-existent field, the resulting AttributeError
981 If called with a non-existent field, the resulting AttributeError
980 exception will propagate out."""
982 exception will propagate out."""
981
983
982 rc_val = getattr(self.rc,rc_field)
984 rc_val = getattr(self.rc,rc_field)
983 if value is None:
985 if value is None:
984 value = not rc_val
986 value = not rc_val
985 setattr(self.rc,rc_field,value)
987 setattr(self.rc,rc_field,value)
986
988
987 def user_setup(self,ipythondir,rc_suffix,mode='install'):
989 def user_setup(self,ipythondir,rc_suffix,mode='install'):
988 """Install the user configuration directory.
990 """Install the user configuration directory.
989
991
990 Can be called when running for the first time or to upgrade the user's
992 Can be called when running for the first time or to upgrade the user's
991 .ipython/ directory with the mode parameter. Valid modes are 'install'
993 .ipython/ directory with the mode parameter. Valid modes are 'install'
992 and 'upgrade'."""
994 and 'upgrade'."""
993
995
994 def wait():
996 def wait():
995 try:
997 try:
996 raw_input("Please press <RETURN> to start IPython.")
998 raw_input("Please press <RETURN> to start IPython.")
997 except EOFError:
999 except EOFError:
998 print >> Term.cout
1000 print >> Term.cout
999 print '*'*70
1001 print '*'*70
1000
1002
1001 cwd = os.getcwd() # remember where we started
1003 cwd = os.getcwd() # remember where we started
1002 glb = glob.glob
1004 glb = glob.glob
1003 print '*'*70
1005 print '*'*70
1004 if mode == 'install':
1006 if mode == 'install':
1005 print \
1007 print \
1006 """Welcome to IPython. I will try to create a personal configuration directory
1008 """Welcome to IPython. I will try to create a personal configuration directory
1007 where you can customize many aspects of IPython's functionality in:\n"""
1009 where you can customize many aspects of IPython's functionality in:\n"""
1008 else:
1010 else:
1009 print 'I am going to upgrade your configuration in:'
1011 print 'I am going to upgrade your configuration in:'
1010
1012
1011 print ipythondir
1013 print ipythondir
1012
1014
1013 rcdirend = os.path.join('IPython','UserConfig')
1015 rcdirend = os.path.join('IPython','UserConfig')
1014 cfg = lambda d: os.path.join(d,rcdirend)
1016 cfg = lambda d: os.path.join(d,rcdirend)
1015 try:
1017 try:
1016 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1018 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1017 except IOError:
1019 except IOError:
1018 warning = """
1020 warning = """
1019 Installation error. IPython's directory was not found.
1021 Installation error. IPython's directory was not found.
1020
1022
1021 Check the following:
1023 Check the following:
1022
1024
1023 The ipython/IPython directory should be in a directory belonging to your
1025 The ipython/IPython directory should be in a directory belonging to your
1024 PYTHONPATH environment variable (that is, it should be in a directory
1026 PYTHONPATH environment variable (that is, it should be in a directory
1025 belonging to sys.path). You can copy it explicitly there or just link to it.
1027 belonging to sys.path). You can copy it explicitly there or just link to it.
1026
1028
1027 IPython will proceed with builtin defaults.
1029 IPython will proceed with builtin defaults.
1028 """
1030 """
1029 warn(warning)
1031 warn(warning)
1030 wait()
1032 wait()
1031 return
1033 return
1032
1034
1033 if mode == 'install':
1035 if mode == 'install':
1034 try:
1036 try:
1035 shutil.copytree(rcdir,ipythondir)
1037 shutil.copytree(rcdir,ipythondir)
1036 os.chdir(ipythondir)
1038 os.chdir(ipythondir)
1037 rc_files = glb("ipythonrc*")
1039 rc_files = glb("ipythonrc*")
1038 for rc_file in rc_files:
1040 for rc_file in rc_files:
1039 os.rename(rc_file,rc_file+rc_suffix)
1041 os.rename(rc_file,rc_file+rc_suffix)
1040 except:
1042 except:
1041 warning = """
1043 warning = """
1042
1044
1043 There was a problem with the installation:
1045 There was a problem with the installation:
1044 %s
1046 %s
1045 Try to correct it or contact the developers if you think it's a bug.
1047 Try to correct it or contact the developers if you think it's a bug.
1046 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1048 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1047 warn(warning)
1049 warn(warning)
1048 wait()
1050 wait()
1049 return
1051 return
1050
1052
1051 elif mode == 'upgrade':
1053 elif mode == 'upgrade':
1052 try:
1054 try:
1053 os.chdir(ipythondir)
1055 os.chdir(ipythondir)
1054 except:
1056 except:
1055 print """
1057 print """
1056 Can not upgrade: changing to directory %s failed. Details:
1058 Can not upgrade: changing to directory %s failed. Details:
1057 %s
1059 %s
1058 """ % (ipythondir,sys.exc_info()[1])
1060 """ % (ipythondir,sys.exc_info()[1])
1059 wait()
1061 wait()
1060 return
1062 return
1061 else:
1063 else:
1062 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1064 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1063 for new_full_path in sources:
1065 for new_full_path in sources:
1064 new_filename = os.path.basename(new_full_path)
1066 new_filename = os.path.basename(new_full_path)
1065 if new_filename.startswith('ipythonrc'):
1067 if new_filename.startswith('ipythonrc'):
1066 new_filename = new_filename + rc_suffix
1068 new_filename = new_filename + rc_suffix
1067 # The config directory should only contain files, skip any
1069 # The config directory should only contain files, skip any
1068 # directories which may be there (like CVS)
1070 # directories which may be there (like CVS)
1069 if os.path.isdir(new_full_path):
1071 if os.path.isdir(new_full_path):
1070 continue
1072 continue
1071 if os.path.exists(new_filename):
1073 if os.path.exists(new_filename):
1072 old_file = new_filename+'.old'
1074 old_file = new_filename+'.old'
1073 if os.path.exists(old_file):
1075 if os.path.exists(old_file):
1074 os.remove(old_file)
1076 os.remove(old_file)
1075 os.rename(new_filename,old_file)
1077 os.rename(new_filename,old_file)
1076 shutil.copy(new_full_path,new_filename)
1078 shutil.copy(new_full_path,new_filename)
1077 else:
1079 else:
1078 raise ValueError,'unrecognized mode for install:',`mode`
1080 raise ValueError,'unrecognized mode for install:',`mode`
1079
1081
1080 # Fix line-endings to those native to each platform in the config
1082 # Fix line-endings to those native to each platform in the config
1081 # directory.
1083 # directory.
1082 try:
1084 try:
1083 os.chdir(ipythondir)
1085 os.chdir(ipythondir)
1084 except:
1086 except:
1085 print """
1087 print """
1086 Problem: changing to directory %s failed.
1088 Problem: changing to directory %s failed.
1087 Details:
1089 Details:
1088 %s
1090 %s
1089
1091
1090 Some configuration files may have incorrect line endings. This should not
1092 Some configuration files may have incorrect line endings. This should not
1091 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1093 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1092 wait()
1094 wait()
1093 else:
1095 else:
1094 for fname in glb('ipythonrc*'):
1096 for fname in glb('ipythonrc*'):
1095 try:
1097 try:
1096 native_line_ends(fname,backup=0)
1098 native_line_ends(fname,backup=0)
1097 except IOError:
1099 except IOError:
1098 pass
1100 pass
1099
1101
1100 if mode == 'install':
1102 if mode == 'install':
1101 print """
1103 print """
1102 Successful installation!
1104 Successful installation!
1103
1105
1104 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1106 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1105 IPython manual (there are both HTML and PDF versions supplied with the
1107 IPython manual (there are both HTML and PDF versions supplied with the
1106 distribution) to make sure that your system environment is properly configured
1108 distribution) to make sure that your system environment is properly configured
1107 to take advantage of IPython's features.
1109 to take advantage of IPython's features.
1108
1110
1109 Important note: the configuration system has changed! The old system is
1111 Important note: the configuration system has changed! The old system is
1110 still in place, but its setting may be partly overridden by the settings in
1112 still in place, but its setting may be partly overridden by the settings in
1111 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1113 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1112 if some of the new settings bother you.
1114 if some of the new settings bother you.
1113
1115
1114 """
1116 """
1115 else:
1117 else:
1116 print """
1118 print """
1117 Successful upgrade!
1119 Successful upgrade!
1118
1120
1119 All files in your directory:
1121 All files in your directory:
1120 %(ipythondir)s
1122 %(ipythondir)s
1121 which would have been overwritten by the upgrade were backed up with a .old
1123 which would have been overwritten by the upgrade were backed up with a .old
1122 extension. If you had made particular customizations in those files you may
1124 extension. If you had made particular customizations in those files you may
1123 want to merge them back into the new files.""" % locals()
1125 want to merge them back into the new files.""" % locals()
1124 wait()
1126 wait()
1125 os.chdir(cwd)
1127 os.chdir(cwd)
1126 # end user_setup()
1128 # end user_setup()
1127
1129
1128 def atexit_operations(self):
1130 def atexit_operations(self):
1129 """This will be executed at the time of exit.
1131 """This will be executed at the time of exit.
1130
1132
1131 Saving of persistent data should be performed here. """
1133 Saving of persistent data should be performed here. """
1132
1134
1133 #print '*** IPython exit cleanup ***' # dbg
1135 #print '*** IPython exit cleanup ***' # dbg
1134 # input history
1136 # input history
1135 self.savehist()
1137 self.savehist()
1136
1138
1137 # Cleanup all tempfiles left around
1139 # Cleanup all tempfiles left around
1138 for tfile in self.tempfiles:
1140 for tfile in self.tempfiles:
1139 try:
1141 try:
1140 os.unlink(tfile)
1142 os.unlink(tfile)
1141 except OSError:
1143 except OSError:
1142 pass
1144 pass
1143
1145
1144 # save the "persistent data" catch-all dictionary
1146 # save the "persistent data" catch-all dictionary
1145 try:
1147 try:
1146 pickle.dump(self.persist, open(self.persist_fname,"w"))
1148 pickle.dump(self.persist, open(self.persist_fname,"w"))
1147 except:
1149 except:
1148 print "*** ERROR *** persistent data saving failed."
1150 print "*** ERROR *** persistent data saving failed."
1149
1151
1150 def savehist(self):
1152 def savehist(self):
1151 """Save input history to a file (via readline library)."""
1153 """Save input history to a file (via readline library)."""
1152 try:
1154 try:
1153 self.readline.write_history_file(self.histfile)
1155 self.readline.write_history_file(self.histfile)
1154 except:
1156 except:
1155 print 'Unable to save IPython command history to file: ' + \
1157 print 'Unable to save IPython command history to file: ' + \
1156 `self.histfile`
1158 `self.histfile`
1157
1159
1158 def pre_readline(self):
1160 def pre_readline(self):
1159 """readline hook to be used at the start of each line.
1161 """readline hook to be used at the start of each line.
1160
1162
1161 Currently it handles auto-indent only."""
1163 Currently it handles auto-indent only."""
1162
1164
1163 #debugx('self.indent_current_nsp','pre_readline:')
1165 #debugx('self.indent_current_nsp','pre_readline:')
1164 self.readline.insert_text(self.indent_current_str())
1166 self.readline.insert_text(self.indent_current_str())
1165
1167
1166 def init_readline(self):
1168 def init_readline(self):
1167 """Command history completion/saving/reloading."""
1169 """Command history completion/saving/reloading."""
1168 try:
1170 try:
1169 import readline
1171 import readline
1170 except ImportError:
1172 except ImportError:
1171 self.has_readline = 0
1173 self.has_readline = 0
1172 self.readline = None
1174 self.readline = None
1173 # no point in bugging windows users with this every time:
1175 # no point in bugging windows users with this every time:
1174 if os.name == 'posix':
1176 if os.name == 'posix':
1175 warn('Readline services not available on this platform.')
1177 warn('Readline services not available on this platform.')
1176 else:
1178 else:
1177 import atexit
1179 import atexit
1178 from IPython.completer import IPCompleter
1180 from IPython.completer import IPCompleter
1179 self.Completer = IPCompleter(self,
1181 self.Completer = IPCompleter(self,
1180 self.user_ns,
1182 self.user_ns,
1181 self.user_global_ns,
1183 self.user_global_ns,
1182 self.rc.readline_omit__names,
1184 self.rc.readline_omit__names,
1183 self.alias_table)
1185 self.alias_table)
1184
1186
1185 # Platform-specific configuration
1187 # Platform-specific configuration
1186 if os.name == 'nt':
1188 if os.name == 'nt':
1187 self.readline_startup_hook = readline.set_pre_input_hook
1189 self.readline_startup_hook = readline.set_pre_input_hook
1188 else:
1190 else:
1189 self.readline_startup_hook = readline.set_startup_hook
1191 self.readline_startup_hook = readline.set_startup_hook
1190
1192
1191 # Load user's initrc file (readline config)
1193 # Load user's initrc file (readline config)
1192 inputrc_name = os.environ.get('INPUTRC')
1194 inputrc_name = os.environ.get('INPUTRC')
1193 if inputrc_name is None:
1195 if inputrc_name is None:
1194 home_dir = get_home_dir()
1196 home_dir = get_home_dir()
1195 if home_dir is not None:
1197 if home_dir is not None:
1196 inputrc_name = os.path.join(home_dir,'.inputrc')
1198 inputrc_name = os.path.join(home_dir,'.inputrc')
1197 if os.path.isfile(inputrc_name):
1199 if os.path.isfile(inputrc_name):
1198 try:
1200 try:
1199 readline.read_init_file(inputrc_name)
1201 readline.read_init_file(inputrc_name)
1200 except:
1202 except:
1201 warn('Problems reading readline initialization file <%s>'
1203 warn('Problems reading readline initialization file <%s>'
1202 % inputrc_name)
1204 % inputrc_name)
1203
1205
1204 self.has_readline = 1
1206 self.has_readline = 1
1205 self.readline = readline
1207 self.readline = readline
1206 # save this in sys so embedded copies can restore it properly
1208 # save this in sys so embedded copies can restore it properly
1207 sys.ipcompleter = self.Completer.complete
1209 sys.ipcompleter = self.Completer.complete
1208 readline.set_completer(self.Completer.complete)
1210 readline.set_completer(self.Completer.complete)
1209
1211
1210 # Configure readline according to user's prefs
1212 # Configure readline according to user's prefs
1211 for rlcommand in self.rc.readline_parse_and_bind:
1213 for rlcommand in self.rc.readline_parse_and_bind:
1212 readline.parse_and_bind(rlcommand)
1214 readline.parse_and_bind(rlcommand)
1213
1215
1214 # remove some chars from the delimiters list
1216 # remove some chars from the delimiters list
1215 delims = readline.get_completer_delims()
1217 delims = readline.get_completer_delims()
1216 delims = delims.translate(string._idmap,
1218 delims = delims.translate(string._idmap,
1217 self.rc.readline_remove_delims)
1219 self.rc.readline_remove_delims)
1218 readline.set_completer_delims(delims)
1220 readline.set_completer_delims(delims)
1219 # otherwise we end up with a monster history after a while:
1221 # otherwise we end up with a monster history after a while:
1220 readline.set_history_length(1000)
1222 readline.set_history_length(1000)
1221 try:
1223 try:
1222 #print '*** Reading readline history' # dbg
1224 #print '*** Reading readline history' # dbg
1223 readline.read_history_file(self.histfile)
1225 readline.read_history_file(self.histfile)
1224 except IOError:
1226 except IOError:
1225 pass # It doesn't exist yet.
1227 pass # It doesn't exist yet.
1226
1228
1227 atexit.register(self.atexit_operations)
1229 atexit.register(self.atexit_operations)
1228 del atexit
1230 del atexit
1229
1231
1230 # Configure auto-indent for all platforms
1232 # Configure auto-indent for all platforms
1231 self.set_autoindent(self.rc.autoindent)
1233 self.set_autoindent(self.rc.autoindent)
1232
1234
1233 def _should_recompile(self,e):
1235 def _should_recompile(self,e):
1234 """Utility routine for edit_syntax_error"""
1236 """Utility routine for edit_syntax_error"""
1235
1237
1236 if e.filename in ('<ipython console>','<input>','<string>',
1238 if e.filename in ('<ipython console>','<input>','<string>',
1237 '<console>',None):
1239 '<console>',None):
1238
1240
1239 return False
1241 return False
1240 try:
1242 try:
1241 if not ask_yes_no('Return to editor to correct syntax error? '
1243 if not ask_yes_no('Return to editor to correct syntax error? '
1242 '[Y/n] ','y'):
1244 '[Y/n] ','y'):
1243 return False
1245 return False
1244 except EOFError:
1246 except EOFError:
1245 return False
1247 return False
1246
1248
1247 def int0(x):
1249 def int0(x):
1248 try:
1250 try:
1249 return int(x)
1251 return int(x)
1250 except TypeError:
1252 except TypeError:
1251 return 0
1253 return 0
1252 # always pass integer line and offset values to editor hook
1254 # always pass integer line and offset values to editor hook
1253 self.hooks.fix_error_editor(e.filename,
1255 self.hooks.fix_error_editor(e.filename,
1254 int0(e.lineno),int0(e.offset),e.msg)
1256 int0(e.lineno),int0(e.offset),e.msg)
1255 return True
1257 return True
1256
1258
1257 def edit_syntax_error(self):
1259 def edit_syntax_error(self):
1258 """The bottom half of the syntax error handler called in the main loop.
1260 """The bottom half of the syntax error handler called in the main loop.
1259
1261
1260 Loop until syntax error is fixed or user cancels.
1262 Loop until syntax error is fixed or user cancels.
1261 """
1263 """
1262
1264
1263 while self.SyntaxTB.last_syntax_error:
1265 while self.SyntaxTB.last_syntax_error:
1264 # copy and clear last_syntax_error
1266 # copy and clear last_syntax_error
1265 err = self.SyntaxTB.clear_err_state()
1267 err = self.SyntaxTB.clear_err_state()
1266 if not self._should_recompile(err):
1268 if not self._should_recompile(err):
1267 return
1269 return
1268 try:
1270 try:
1269 # may set last_syntax_error again if a SyntaxError is raised
1271 # may set last_syntax_error again if a SyntaxError is raised
1270 self.safe_execfile(err.filename,self.shell.user_ns)
1272 self.safe_execfile(err.filename,self.shell.user_ns)
1271 except:
1273 except:
1272 self.showtraceback()
1274 self.showtraceback()
1273 else:
1275 else:
1274 f = file(err.filename)
1276 f = file(err.filename)
1275 try:
1277 try:
1276 sys.displayhook(f.read())
1278 sys.displayhook(f.read())
1277 finally:
1279 finally:
1278 f.close()
1280 f.close()
1279
1281
1280 def showsyntaxerror(self, filename=None):
1282 def showsyntaxerror(self, filename=None):
1281 """Display the syntax error that just occurred.
1283 """Display the syntax error that just occurred.
1282
1284
1283 This doesn't display a stack trace because there isn't one.
1285 This doesn't display a stack trace because there isn't one.
1284
1286
1285 If a filename is given, it is stuffed in the exception instead
1287 If a filename is given, it is stuffed in the exception instead
1286 of what was there before (because Python's parser always uses
1288 of what was there before (because Python's parser always uses
1287 "<string>" when reading from a string).
1289 "<string>" when reading from a string).
1288 """
1290 """
1289 etype, value, last_traceback = sys.exc_info()
1291 etype, value, last_traceback = sys.exc_info()
1290 if filename and etype is SyntaxError:
1292 if filename and etype is SyntaxError:
1291 # Work hard to stuff the correct filename in the exception
1293 # Work hard to stuff the correct filename in the exception
1292 try:
1294 try:
1293 msg, (dummy_filename, lineno, offset, line) = value
1295 msg, (dummy_filename, lineno, offset, line) = value
1294 except:
1296 except:
1295 # Not the format we expect; leave it alone
1297 # Not the format we expect; leave it alone
1296 pass
1298 pass
1297 else:
1299 else:
1298 # Stuff in the right filename
1300 # Stuff in the right filename
1299 try:
1301 try:
1300 # Assume SyntaxError is a class exception
1302 # Assume SyntaxError is a class exception
1301 value = SyntaxError(msg, (filename, lineno, offset, line))
1303 value = SyntaxError(msg, (filename, lineno, offset, line))
1302 except:
1304 except:
1303 # If that failed, assume SyntaxError is a string
1305 # If that failed, assume SyntaxError is a string
1304 value = msg, (filename, lineno, offset, line)
1306 value = msg, (filename, lineno, offset, line)
1305 self.SyntaxTB(etype,value,[])
1307 self.SyntaxTB(etype,value,[])
1306
1308
1307 def debugger(self):
1309 def debugger(self):
1308 """Call the pdb debugger."""
1310 """Call the pdb debugger."""
1309
1311
1310 if not self.rc.pdb:
1312 if not self.rc.pdb:
1311 return
1313 return
1312 pdb.pm()
1314 pdb.pm()
1313
1315
1314 def showtraceback(self,exc_tuple = None,filename=None):
1316 def showtraceback(self,exc_tuple = None,filename=None):
1315 """Display the exception that just occurred."""
1317 """Display the exception that just occurred."""
1316
1318
1317 # Though this won't be called by syntax errors in the input line,
1319 # Though this won't be called by syntax errors in the input line,
1318 # there may be SyntaxError cases whith imported code.
1320 # there may be SyntaxError cases whith imported code.
1319 if exc_tuple is None:
1321 if exc_tuple is None:
1320 type, value, tb = sys.exc_info()
1322 type, value, tb = sys.exc_info()
1321 else:
1323 else:
1322 type, value, tb = exc_tuple
1324 type, value, tb = exc_tuple
1323 if type is SyntaxError:
1325 if type is SyntaxError:
1324 self.showsyntaxerror(filename)
1326 self.showsyntaxerror(filename)
1325 else:
1327 else:
1326 self.InteractiveTB()
1328 self.InteractiveTB()
1327 if self.InteractiveTB.call_pdb and self.has_readline:
1329 if self.InteractiveTB.call_pdb and self.has_readline:
1328 # pdb mucks up readline, fix it back
1330 # pdb mucks up readline, fix it back
1329 self.readline.set_completer(self.Completer.complete)
1331 self.readline.set_completer(self.Completer.complete)
1330
1332
1331 def mainloop(self,banner=None):
1333 def mainloop(self,banner=None):
1332 """Creates the local namespace and starts the mainloop.
1334 """Creates the local namespace and starts the mainloop.
1333
1335
1334 If an optional banner argument is given, it will override the
1336 If an optional banner argument is given, it will override the
1335 internally created default banner."""
1337 internally created default banner."""
1336
1338
1337 if self.rc.c: # Emulate Python's -c option
1339 if self.rc.c: # Emulate Python's -c option
1338 self.exec_init_cmd()
1340 self.exec_init_cmd()
1339 if banner is None:
1341 if banner is None:
1340 if self.rc.banner:
1342 if self.rc.banner:
1341 banner = self.BANNER+self.banner2
1343 banner = self.BANNER+self.banner2
1342 else:
1344 else:
1343 banner = ''
1345 banner = ''
1344 self.interact(banner)
1346 self.interact(banner)
1345
1347
1346 def exec_init_cmd(self):
1348 def exec_init_cmd(self):
1347 """Execute a command given at the command line.
1349 """Execute a command given at the command line.
1348
1350
1349 This emulates Python's -c option."""
1351 This emulates Python's -c option."""
1350
1352
1351 sys.argv = ['-c']
1353 sys.argv = ['-c']
1352 self.push(self.rc.c)
1354 self.push(self.rc.c)
1353
1355
1354 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1356 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1355 """Embeds IPython into a running python program.
1357 """Embeds IPython into a running python program.
1356
1358
1357 Input:
1359 Input:
1358
1360
1359 - header: An optional header message can be specified.
1361 - header: An optional header message can be specified.
1360
1362
1361 - local_ns, global_ns: working namespaces. If given as None, the
1363 - local_ns, global_ns: working namespaces. If given as None, the
1362 IPython-initialized one is updated with __main__.__dict__, so that
1364 IPython-initialized one is updated with __main__.__dict__, so that
1363 program variables become visible but user-specific configuration
1365 program variables become visible but user-specific configuration
1364 remains possible.
1366 remains possible.
1365
1367
1366 - stack_depth: specifies how many levels in the stack to go to
1368 - stack_depth: specifies how many levels in the stack to go to
1367 looking for namespaces (when local_ns and global_ns are None). This
1369 looking for namespaces (when local_ns and global_ns are None). This
1368 allows an intermediate caller to make sure that this function gets
1370 allows an intermediate caller to make sure that this function gets
1369 the namespace from the intended level in the stack. By default (0)
1371 the namespace from the intended level in the stack. By default (0)
1370 it will get its locals and globals from the immediate caller.
1372 it will get its locals and globals from the immediate caller.
1371
1373
1372 Warning: it's possible to use this in a program which is being run by
1374 Warning: it's possible to use this in a program which is being run by
1373 IPython itself (via %run), but some funny things will happen (a few
1375 IPython itself (via %run), but some funny things will happen (a few
1374 globals get overwritten). In the future this will be cleaned up, as
1376 globals get overwritten). In the future this will be cleaned up, as
1375 there is no fundamental reason why it can't work perfectly."""
1377 there is no fundamental reason why it can't work perfectly."""
1376
1378
1377 # Get locals and globals from caller
1379 # Get locals and globals from caller
1378 if local_ns is None or global_ns is None:
1380 if local_ns is None or global_ns is None:
1379 call_frame = sys._getframe(stack_depth).f_back
1381 call_frame = sys._getframe(stack_depth).f_back
1380
1382
1381 if local_ns is None:
1383 if local_ns is None:
1382 local_ns = call_frame.f_locals
1384 local_ns = call_frame.f_locals
1383 if global_ns is None:
1385 if global_ns is None:
1384 global_ns = call_frame.f_globals
1386 global_ns = call_frame.f_globals
1385
1387
1386 # Update namespaces and fire up interpreter
1388 # Update namespaces and fire up interpreter
1387
1389
1388 # The global one is easy, we can just throw it in
1390 # The global one is easy, we can just throw it in
1389 self.user_global_ns = global_ns
1391 self.user_global_ns = global_ns
1390
1392
1391 # but the user/local one is tricky: ipython needs it to store internal
1393 # but the user/local one is tricky: ipython needs it to store internal
1392 # data, but we also need the locals. We'll copy locals in the user
1394 # data, but we also need the locals. We'll copy locals in the user
1393 # one, but will track what got copied so we can delete them at exit.
1395 # one, but will track what got copied so we can delete them at exit.
1394 # This is so that a later embedded call doesn't see locals from a
1396 # This is so that a later embedded call doesn't see locals from a
1395 # previous call (which most likely existed in a separate scope).
1397 # previous call (which most likely existed in a separate scope).
1396 local_varnames = local_ns.keys()
1398 local_varnames = local_ns.keys()
1397 self.user_ns.update(local_ns)
1399 self.user_ns.update(local_ns)
1398
1400
1399 # Patch for global embedding to make sure that things don't overwrite
1401 # Patch for global embedding to make sure that things don't overwrite
1400 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1402 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1401 # FIXME. Test this a bit more carefully (the if.. is new)
1403 # FIXME. Test this a bit more carefully (the if.. is new)
1402 if local_ns is None and global_ns is None:
1404 if local_ns is None and global_ns is None:
1403 self.user_global_ns.update(__main__.__dict__)
1405 self.user_global_ns.update(__main__.__dict__)
1404
1406
1405 # make sure the tab-completer has the correct frame information, so it
1407 # make sure the tab-completer has the correct frame information, so it
1406 # actually completes using the frame's locals/globals
1408 # actually completes using the frame's locals/globals
1407 self.set_completer_frame()
1409 self.set_completer_frame()
1408
1410
1409 # before activating the interactive mode, we need to make sure that
1411 # before activating the interactive mode, we need to make sure that
1410 # all names in the builtin namespace needed by ipython point to
1412 # all names in the builtin namespace needed by ipython point to
1411 # ourselves, and not to other instances.
1413 # ourselves, and not to other instances.
1412 self.add_builtins()
1414 self.add_builtins()
1413
1415
1414 self.interact(header)
1416 self.interact(header)
1415
1417
1416 # now, purge out the user namespace from anything we might have added
1418 # now, purge out the user namespace from anything we might have added
1417 # from the caller's local namespace
1419 # from the caller's local namespace
1418 delvar = self.user_ns.pop
1420 delvar = self.user_ns.pop
1419 for var in local_varnames:
1421 for var in local_varnames:
1420 delvar(var,None)
1422 delvar(var,None)
1421 # and clean builtins we may have overridden
1423 # and clean builtins we may have overridden
1422 self.clean_builtins()
1424 self.clean_builtins()
1423
1425
1424 def interact(self, banner=None):
1426 def interact(self, banner=None):
1425 """Closely emulate the interactive Python console.
1427 """Closely emulate the interactive Python console.
1426
1428
1427 The optional banner argument specify the banner to print
1429 The optional banner argument specify the banner to print
1428 before the first interaction; by default it prints a banner
1430 before the first interaction; by default it prints a banner
1429 similar to the one printed by the real Python interpreter,
1431 similar to the one printed by the real Python interpreter,
1430 followed by the current class name in parentheses (so as not
1432 followed by the current class name in parentheses (so as not
1431 to confuse this with the real interpreter -- since it's so
1433 to confuse this with the real interpreter -- since it's so
1432 close!).
1434 close!).
1433
1435
1434 """
1436 """
1435 cprt = 'Type "copyright", "credits" or "license" for more information.'
1437 cprt = 'Type "copyright", "credits" or "license" for more information.'
1436 if banner is None:
1438 if banner is None:
1437 self.write("Python %s on %s\n%s\n(%s)\n" %
1439 self.write("Python %s on %s\n%s\n(%s)\n" %
1438 (sys.version, sys.platform, cprt,
1440 (sys.version, sys.platform, cprt,
1439 self.__class__.__name__))
1441 self.__class__.__name__))
1440 else:
1442 else:
1441 self.write(banner)
1443 self.write(banner)
1442
1444
1443 more = 0
1445 more = 0
1444
1446
1445 # Mark activity in the builtins
1447 # Mark activity in the builtins
1446 __builtin__.__dict__['__IPYTHON__active'] += 1
1448 __builtin__.__dict__['__IPYTHON__active'] += 1
1447
1449
1448 # exit_now is set by a call to %Exit or %Quit
1450 # exit_now is set by a call to %Exit or %Quit
1449 self.exit_now = False
1451 self.exit_now = False
1450 while not self.exit_now:
1452 while not self.exit_now:
1451
1453
1452 try:
1454 try:
1453 if more:
1455 if more:
1454 prompt = self.outputcache.prompt2
1456 prompt = self.outputcache.prompt2
1455 if self.autoindent:
1457 if self.autoindent:
1456 self.readline_startup_hook(self.pre_readline)
1458 self.readline_startup_hook(self.pre_readline)
1457 else:
1459 else:
1458 prompt = self.outputcache.prompt1
1460 prompt = self.outputcache.prompt1
1459 try:
1461 try:
1460 line = self.raw_input(prompt,more)
1462 line = self.raw_input(prompt,more)
1461 if self.autoindent:
1463 if self.autoindent:
1462 self.readline_startup_hook(None)
1464 self.readline_startup_hook(None)
1463 except EOFError:
1465 except EOFError:
1464 if self.autoindent:
1466 if self.autoindent:
1465 self.readline_startup_hook(None)
1467 self.readline_startup_hook(None)
1466 self.write("\n")
1468 self.write("\n")
1467 self.exit()
1469 self.exit()
1468 except:
1470 except:
1469 # exceptions here are VERY RARE, but they can be triggered
1471 # exceptions here are VERY RARE, but they can be triggered
1470 # asynchronously by signal handlers, for example.
1472 # asynchronously by signal handlers, for example.
1471 self.showtraceback()
1473 self.showtraceback()
1472 else:
1474 else:
1473 more = self.push(line)
1475 more = self.push(line)
1474
1476
1475 if (self.SyntaxTB.last_syntax_error and
1477 if (self.SyntaxTB.last_syntax_error and
1476 self.rc.autoedit_syntax):
1478 self.rc.autoedit_syntax):
1477 self.edit_syntax_error()
1479 self.edit_syntax_error()
1478
1480
1479 except KeyboardInterrupt:
1481 except KeyboardInterrupt:
1480 self.write("\nKeyboardInterrupt\n")
1482 self.write("\nKeyboardInterrupt\n")
1481 self.resetbuffer()
1483 self.resetbuffer()
1482 more = 0
1484 more = 0
1483 # keep cache in sync with the prompt counter:
1485 # keep cache in sync with the prompt counter:
1484 self.outputcache.prompt_count -= 1
1486 self.outputcache.prompt_count -= 1
1485
1487
1486 if self.autoindent:
1488 if self.autoindent:
1487 self.indent_current_nsp = 0
1489 self.indent_current_nsp = 0
1488
1490
1489 except bdb.BdbQuit:
1491 except bdb.BdbQuit:
1490 warn("The Python debugger has exited with a BdbQuit exception.\n"
1492 warn("The Python debugger has exited with a BdbQuit exception.\n"
1491 "Because of how pdb handles the stack, it is impossible\n"
1493 "Because of how pdb handles the stack, it is impossible\n"
1492 "for IPython to properly format this particular exception.\n"
1494 "for IPython to properly format this particular exception.\n"
1493 "IPython will resume normal operation.")
1495 "IPython will resume normal operation.")
1494
1496
1495 # We are off again...
1497 # We are off again...
1496 __builtin__.__dict__['__IPYTHON__active'] -= 1
1498 __builtin__.__dict__['__IPYTHON__active'] -= 1
1497
1499
1498 def excepthook(self, type, value, tb):
1500 def excepthook(self, type, value, tb):
1499 """One more defense for GUI apps that call sys.excepthook.
1501 """One more defense for GUI apps that call sys.excepthook.
1500
1502
1501 GUI frameworks like wxPython trap exceptions and call
1503 GUI frameworks like wxPython trap exceptions and call
1502 sys.excepthook themselves. I guess this is a feature that
1504 sys.excepthook themselves. I guess this is a feature that
1503 enables them to keep running after exceptions that would
1505 enables them to keep running after exceptions that would
1504 otherwise kill their mainloop. This is a bother for IPython
1506 otherwise kill their mainloop. This is a bother for IPython
1505 which excepts to catch all of the program exceptions with a try:
1507 which excepts to catch all of the program exceptions with a try:
1506 except: statement.
1508 except: statement.
1507
1509
1508 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1510 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1509 any app directly invokes sys.excepthook, it will look to the user like
1511 any app directly invokes sys.excepthook, it will look to the user like
1510 IPython crashed. In order to work around this, we can disable the
1512 IPython crashed. In order to work around this, we can disable the
1511 CrashHandler and replace it with this excepthook instead, which prints a
1513 CrashHandler and replace it with this excepthook instead, which prints a
1512 regular traceback using our InteractiveTB. In this fashion, apps which
1514 regular traceback using our InteractiveTB. In this fashion, apps which
1513 call sys.excepthook will generate a regular-looking exception from
1515 call sys.excepthook will generate a regular-looking exception from
1514 IPython, and the CrashHandler will only be triggered by real IPython
1516 IPython, and the CrashHandler will only be triggered by real IPython
1515 crashes.
1517 crashes.
1516
1518
1517 This hook should be used sparingly, only in places which are not likely
1519 This hook should be used sparingly, only in places which are not likely
1518 to be true IPython errors.
1520 to be true IPython errors.
1519 """
1521 """
1520
1522
1521 self.InteractiveTB(type, value, tb, tb_offset=0)
1523 self.InteractiveTB(type, value, tb, tb_offset=0)
1522 if self.InteractiveTB.call_pdb and self.has_readline:
1524 if self.InteractiveTB.call_pdb and self.has_readline:
1523 self.readline.set_completer(self.Completer.complete)
1525 self.readline.set_completer(self.Completer.complete)
1524
1526
1525 def call_alias(self,alias,rest=''):
1527 def call_alias(self,alias,rest=''):
1526 """Call an alias given its name and the rest of the line.
1528 """Call an alias given its name and the rest of the line.
1527
1529
1528 This function MUST be given a proper alias, because it doesn't make
1530 This function MUST be given a proper alias, because it doesn't make
1529 any checks when looking up into the alias table. The caller is
1531 any checks when looking up into the alias table. The caller is
1530 responsible for invoking it only with a valid alias."""
1532 responsible for invoking it only with a valid alias."""
1531
1533
1532 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1534 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1533 nargs,cmd = self.alias_table[alias]
1535 nargs,cmd = self.alias_table[alias]
1534 # Expand the %l special to be the user's input line
1536 # Expand the %l special to be the user's input line
1535 if cmd.find('%l') >= 0:
1537 if cmd.find('%l') >= 0:
1536 cmd = cmd.replace('%l',rest)
1538 cmd = cmd.replace('%l',rest)
1537 rest = ''
1539 rest = ''
1538 if nargs==0:
1540 if nargs==0:
1539 # Simple, argument-less aliases
1541 # Simple, argument-less aliases
1540 cmd = '%s %s' % (cmd,rest)
1542 cmd = '%s %s' % (cmd,rest)
1541 else:
1543 else:
1542 # Handle aliases with positional arguments
1544 # Handle aliases with positional arguments
1543 args = rest.split(None,nargs)
1545 args = rest.split(None,nargs)
1544 if len(args)< nargs:
1546 if len(args)< nargs:
1545 error('Alias <%s> requires %s arguments, %s given.' %
1547 error('Alias <%s> requires %s arguments, %s given.' %
1546 (alias,nargs,len(args)))
1548 (alias,nargs,len(args)))
1547 return
1549 return
1548 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1550 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1549 # Now call the macro, evaluating in the user's namespace
1551 # Now call the macro, evaluating in the user's namespace
1550 try:
1552 try:
1551 self.system(cmd)
1553 self.system(cmd)
1552 except:
1554 except:
1553 self.showtraceback()
1555 self.showtraceback()
1554
1556
1555 def indent_current_str(self):
1557 def indent_current_str(self):
1556 """return the current level of indentation as a string"""
1558 """return the current level of indentation as a string"""
1557 return self.indent_current_nsp * ' '
1559 return self.indent_current_nsp * ' '
1558
1560
1559 def autoindent_update(self,line):
1561 def autoindent_update(self,line):
1560 """Keep track of the indent level."""
1562 """Keep track of the indent level."""
1561
1563
1562 #debugx('line')
1564 #debugx('line')
1563 #debugx('self.indent_current_nsp')
1565 #debugx('self.indent_current_nsp')
1564 if self.autoindent:
1566 if self.autoindent:
1565 if line:
1567 if line:
1566 inisp = num_ini_spaces(line)
1568 inisp = num_ini_spaces(line)
1567 if inisp < self.indent_current_nsp:
1569 if inisp < self.indent_current_nsp:
1568 self.indent_current_nsp = inisp
1570 self.indent_current_nsp = inisp
1569
1571
1570 if line[-1] == ':':
1572 if line[-1] == ':':
1571 self.indent_current_nsp += 4
1573 self.indent_current_nsp += 4
1572 elif dedent_re.match(line):
1574 elif dedent_re.match(line):
1573 self.indent_current_nsp -= 4
1575 self.indent_current_nsp -= 4
1574 else:
1576 else:
1575 self.indent_current_nsp = 0
1577 self.indent_current_nsp = 0
1576
1578
1577 def runlines(self,lines):
1579 def runlines(self,lines):
1578 """Run a string of one or more lines of source.
1580 """Run a string of one or more lines of source.
1579
1581
1580 This method is capable of running a string containing multiple source
1582 This method is capable of running a string containing multiple source
1581 lines, as if they had been entered at the IPython prompt. Since it
1583 lines, as if they had been entered at the IPython prompt. Since it
1582 exposes IPython's processing machinery, the given strings can contain
1584 exposes IPython's processing machinery, the given strings can contain
1583 magic calls (%magic), special shell access (!cmd), etc."""
1585 magic calls (%magic), special shell access (!cmd), etc."""
1584
1586
1585 # We must start with a clean buffer, in case this is run from an
1587 # We must start with a clean buffer, in case this is run from an
1586 # interactive IPython session (via a magic, for example).
1588 # interactive IPython session (via a magic, for example).
1587 self.resetbuffer()
1589 self.resetbuffer()
1588 lines = lines.split('\n')
1590 lines = lines.split('\n')
1589 more = 0
1591 more = 0
1590 for line in lines:
1592 for line in lines:
1591 # skip blank lines so we don't mess up the prompt counter, but do
1593 # skip blank lines so we don't mess up the prompt counter, but do
1592 # NOT skip even a blank line if we are in a code block (more is
1594 # NOT skip even a blank line if we are in a code block (more is
1593 # true)
1595 # true)
1594 if line or more:
1596 if line or more:
1595 more = self.push(self.prefilter(line,more))
1597 more = self.push(self.prefilter(line,more))
1596 # IPython's runsource returns None if there was an error
1598 # IPython's runsource returns None if there was an error
1597 # compiling the code. This allows us to stop processing right
1599 # compiling the code. This allows us to stop processing right
1598 # away, so the user gets the error message at the right place.
1600 # away, so the user gets the error message at the right place.
1599 if more is None:
1601 if more is None:
1600 break
1602 break
1601 # final newline in case the input didn't have it, so that the code
1603 # final newline in case the input didn't have it, so that the code
1602 # actually does get executed
1604 # actually does get executed
1603 if more:
1605 if more:
1604 self.push('\n')
1606 self.push('\n')
1605
1607
1606 def runsource(self, source, filename='<input>', symbol='single'):
1608 def runsource(self, source, filename='<input>', symbol='single'):
1607 """Compile and run some source in the interpreter.
1609 """Compile and run some source in the interpreter.
1608
1610
1609 Arguments are as for compile_command().
1611 Arguments are as for compile_command().
1610
1612
1611 One several things can happen:
1613 One several things can happen:
1612
1614
1613 1) The input is incorrect; compile_command() raised an
1615 1) The input is incorrect; compile_command() raised an
1614 exception (SyntaxError or OverflowError). A syntax traceback
1616 exception (SyntaxError or OverflowError). A syntax traceback
1615 will be printed by calling the showsyntaxerror() method.
1617 will be printed by calling the showsyntaxerror() method.
1616
1618
1617 2) The input is incomplete, and more input is required;
1619 2) The input is incomplete, and more input is required;
1618 compile_command() returned None. Nothing happens.
1620 compile_command() returned None. Nothing happens.
1619
1621
1620 3) The input is complete; compile_command() returned a code
1622 3) The input is complete; compile_command() returned a code
1621 object. The code is executed by calling self.runcode() (which
1623 object. The code is executed by calling self.runcode() (which
1622 also handles run-time exceptions, except for SystemExit).
1624 also handles run-time exceptions, except for SystemExit).
1623
1625
1624 The return value is:
1626 The return value is:
1625
1627
1626 - True in case 2
1628 - True in case 2
1627
1629
1628 - False in the other cases, unless an exception is raised, where
1630 - False in the other cases, unless an exception is raised, where
1629 None is returned instead. This can be used by external callers to
1631 None is returned instead. This can be used by external callers to
1630 know whether to continue feeding input or not.
1632 know whether to continue feeding input or not.
1631
1633
1632 The return value can be used to decide whether to use sys.ps1 or
1634 The return value can be used to decide whether to use sys.ps1 or
1633 sys.ps2 to prompt the next line."""
1635 sys.ps2 to prompt the next line."""
1634
1636
1635 try:
1637 try:
1636 code = self.compile(source,filename,symbol)
1638 code = self.compile(source,filename,symbol)
1637 except (OverflowError, SyntaxError, ValueError):
1639 except (OverflowError, SyntaxError, ValueError):
1638 # Case 1
1640 # Case 1
1639 self.showsyntaxerror(filename)
1641 self.showsyntaxerror(filename)
1640 return None
1642 return None
1641
1643
1642 if code is None:
1644 if code is None:
1643 # Case 2
1645 # Case 2
1644 return True
1646 return True
1645
1647
1646 # Case 3
1648 # Case 3
1647 # We store the code object so that threaded shells and
1649 # We store the code object so that threaded shells and
1648 # custom exception handlers can access all this info if needed.
1650 # custom exception handlers can access all this info if needed.
1649 # The source corresponding to this can be obtained from the
1651 # The source corresponding to this can be obtained from the
1650 # buffer attribute as '\n'.join(self.buffer).
1652 # buffer attribute as '\n'.join(self.buffer).
1651 self.code_to_run = code
1653 self.code_to_run = code
1652 # now actually execute the code object
1654 # now actually execute the code object
1653 if self.runcode(code) == 0:
1655 if self.runcode(code) == 0:
1654 return False
1656 return False
1655 else:
1657 else:
1656 return None
1658 return None
1657
1659
1658 def runcode(self,code_obj):
1660 def runcode(self,code_obj):
1659 """Execute a code object.
1661 """Execute a code object.
1660
1662
1661 When an exception occurs, self.showtraceback() is called to display a
1663 When an exception occurs, self.showtraceback() is called to display a
1662 traceback.
1664 traceback.
1663
1665
1664 Return value: a flag indicating whether the code to be run completed
1666 Return value: a flag indicating whether the code to be run completed
1665 successfully:
1667 successfully:
1666
1668
1667 - 0: successful execution.
1669 - 0: successful execution.
1668 - 1: an error occurred.
1670 - 1: an error occurred.
1669 """
1671 """
1670
1672
1671 # Set our own excepthook in case the user code tries to call it
1673 # Set our own excepthook in case the user code tries to call it
1672 # directly, so that the IPython crash handler doesn't get triggered
1674 # directly, so that the IPython crash handler doesn't get triggered
1673 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1675 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1674
1676
1675 # we save the original sys.excepthook in the instance, in case config
1677 # we save the original sys.excepthook in the instance, in case config
1676 # code (such as magics) needs access to it.
1678 # code (such as magics) needs access to it.
1677 self.sys_excepthook = old_excepthook
1679 self.sys_excepthook = old_excepthook
1678 outflag = 1 # happens in more places, so it's easier as default
1680 outflag = 1 # happens in more places, so it's easier as default
1679 try:
1681 try:
1680 try:
1682 try:
1681 # Embedded instances require separate global/local namespaces
1683 # Embedded instances require separate global/local namespaces
1682 # so they can see both the surrounding (local) namespace and
1684 # so they can see both the surrounding (local) namespace and
1683 # the module-level globals when called inside another function.
1685 # the module-level globals when called inside another function.
1684 if self.embedded:
1686 if self.embedded:
1685 exec code_obj in self.user_global_ns, self.user_ns
1687 exec code_obj in self.user_global_ns, self.user_ns
1686 # Normal (non-embedded) instances should only have a single
1688 # Normal (non-embedded) instances should only have a single
1687 # namespace for user code execution, otherwise functions won't
1689 # namespace for user code execution, otherwise functions won't
1688 # see interactive top-level globals.
1690 # see interactive top-level globals.
1689 else:
1691 else:
1690 exec code_obj in self.user_ns
1692 exec code_obj in self.user_ns
1691 finally:
1693 finally:
1692 # Reset our crash handler in place
1694 # Reset our crash handler in place
1693 sys.excepthook = old_excepthook
1695 sys.excepthook = old_excepthook
1694 except SystemExit:
1696 except SystemExit:
1695 self.resetbuffer()
1697 self.resetbuffer()
1696 self.showtraceback()
1698 self.showtraceback()
1697 warn("Type exit or quit to exit IPython "
1699 warn("Type exit or quit to exit IPython "
1698 "(%Exit or %Quit do so unconditionally).",level=1)
1700 "(%Exit or %Quit do so unconditionally).",level=1)
1699 except self.custom_exceptions:
1701 except self.custom_exceptions:
1700 etype,value,tb = sys.exc_info()
1702 etype,value,tb = sys.exc_info()
1701 self.CustomTB(etype,value,tb)
1703 self.CustomTB(etype,value,tb)
1702 except:
1704 except:
1703 self.showtraceback()
1705 self.showtraceback()
1704 else:
1706 else:
1705 outflag = 0
1707 outflag = 0
1706 if softspace(sys.stdout, 0):
1708 if softspace(sys.stdout, 0):
1707 print
1709 print
1708 # Flush out code object which has been run (and source)
1710 # Flush out code object which has been run (and source)
1709 self.code_to_run = None
1711 self.code_to_run = None
1710 return outflag
1712 return outflag
1711
1713
1712 def push(self, line):
1714 def push(self, line):
1713 """Push a line to the interpreter.
1715 """Push a line to the interpreter.
1714
1716
1715 The line should not have a trailing newline; it may have
1717 The line should not have a trailing newline; it may have
1716 internal newlines. The line is appended to a buffer and the
1718 internal newlines. The line is appended to a buffer and the
1717 interpreter's runsource() method is called with the
1719 interpreter's runsource() method is called with the
1718 concatenated contents of the buffer as source. If this
1720 concatenated contents of the buffer as source. If this
1719 indicates that the command was executed or invalid, the buffer
1721 indicates that the command was executed or invalid, the buffer
1720 is reset; otherwise, the command is incomplete, and the buffer
1722 is reset; otherwise, the command is incomplete, and the buffer
1721 is left as it was after the line was appended. The return
1723 is left as it was after the line was appended. The return
1722 value is 1 if more input is required, 0 if the line was dealt
1724 value is 1 if more input is required, 0 if the line was dealt
1723 with in some way (this is the same as runsource()).
1725 with in some way (this is the same as runsource()).
1724 """
1726 """
1725
1727
1726 # autoindent management should be done here, and not in the
1728 # autoindent management should be done here, and not in the
1727 # interactive loop, since that one is only seen by keyboard input. We
1729 # interactive loop, since that one is only seen by keyboard input. We
1728 # need this done correctly even for code run via runlines (which uses
1730 # need this done correctly even for code run via runlines (which uses
1729 # push).
1731 # push).
1730
1732
1731 #print 'push line: <%s>' % line # dbg
1733 #print 'push line: <%s>' % line # dbg
1732 self.autoindent_update(line)
1734 self.autoindent_update(line)
1733
1735
1734 self.buffer.append(line)
1736 self.buffer.append(line)
1735 more = self.runsource('\n'.join(self.buffer), self.filename)
1737 more = self.runsource('\n'.join(self.buffer), self.filename)
1736 if not more:
1738 if not more:
1737 self.resetbuffer()
1739 self.resetbuffer()
1738 return more
1740 return more
1739
1741
1740 def resetbuffer(self):
1742 def resetbuffer(self):
1741 """Reset the input buffer."""
1743 """Reset the input buffer."""
1742 self.buffer[:] = []
1744 self.buffer[:] = []
1743
1745
1744 def raw_input(self,prompt='',continue_prompt=False):
1746 def raw_input(self,prompt='',continue_prompt=False):
1745 """Write a prompt and read a line.
1747 """Write a prompt and read a line.
1746
1748
1747 The returned line does not include the trailing newline.
1749 The returned line does not include the trailing newline.
1748 When the user enters the EOF key sequence, EOFError is raised.
1750 When the user enters the EOF key sequence, EOFError is raised.
1749
1751
1750 Optional inputs:
1752 Optional inputs:
1751
1753
1752 - prompt(''): a string to be printed to prompt the user.
1754 - prompt(''): a string to be printed to prompt the user.
1753
1755
1754 - continue_prompt(False): whether this line is the first one or a
1756 - continue_prompt(False): whether this line is the first one or a
1755 continuation in a sequence of inputs.
1757 continuation in a sequence of inputs.
1756 """
1758 """
1757
1759
1758 line = raw_input_original(prompt)
1760 line = raw_input_original(prompt)
1759 # Try to be reasonably smart about not re-indenting pasted input more
1761 # Try to be reasonably smart about not re-indenting pasted input more
1760 # than necessary. We do this by trimming out the auto-indent initial
1762 # than necessary. We do this by trimming out the auto-indent initial
1761 # spaces, if the user's actual input started itself with whitespace.
1763 # spaces, if the user's actual input started itself with whitespace.
1762 #debugx('self.buffer[-1]')
1764 #debugx('self.buffer[-1]')
1763
1765
1764 if self.autoindent:
1766 if self.autoindent:
1765 if num_ini_spaces(line) > self.indent_current_nsp:
1767 if num_ini_spaces(line) > self.indent_current_nsp:
1766 line = line[self.indent_current_nsp:]
1768 line = line[self.indent_current_nsp:]
1767 self.indent_current_nsp = 0
1769 self.indent_current_nsp = 0
1768
1770
1769 # store the unfiltered input before the user has any chance to modify
1771 # store the unfiltered input before the user has any chance to modify
1770 # it.
1772 # it.
1771 if line.strip():
1773 if line.strip():
1772 if continue_prompt:
1774 if continue_prompt:
1773 self.input_hist_raw[-1] += '%s\n' % line
1775 self.input_hist_raw[-1] += '%s\n' % line
1774 else:
1776 else:
1775 self.input_hist_raw.append('%s\n' % line)
1777 self.input_hist_raw.append('%s\n' % line)
1776
1778
1777 lineout = self.prefilter(line,continue_prompt)
1779 lineout = self.prefilter(line,continue_prompt)
1778 return lineout
1780 return lineout
1779
1781
1780 def split_user_input(self,line):
1782 def split_user_input(self,line):
1781 """Split user input into pre-char, function part and rest."""
1783 """Split user input into pre-char, function part and rest."""
1782
1784
1783 lsplit = self.line_split.match(line)
1785 lsplit = self.line_split.match(line)
1784 if lsplit is None: # no regexp match returns None
1786 if lsplit is None: # no regexp match returns None
1785 try:
1787 try:
1786 iFun,theRest = line.split(None,1)
1788 iFun,theRest = line.split(None,1)
1787 except ValueError:
1789 except ValueError:
1788 iFun,theRest = line,''
1790 iFun,theRest = line,''
1789 pre = re.match('^(\s*)(.*)',line).groups()[0]
1791 pre = re.match('^(\s*)(.*)',line).groups()[0]
1790 else:
1792 else:
1791 pre,iFun,theRest = lsplit.groups()
1793 pre,iFun,theRest = lsplit.groups()
1792
1794
1793 #print 'line:<%s>' % line # dbg
1795 #print 'line:<%s>' % line # dbg
1794 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1796 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1795 return pre,iFun.strip(),theRest
1797 return pre,iFun.strip(),theRest
1796
1798
1797 def _prefilter(self, line, continue_prompt):
1799 def _prefilter(self, line, continue_prompt):
1798 """Calls different preprocessors, depending on the form of line."""
1800 """Calls different preprocessors, depending on the form of line."""
1799
1801
1800 # All handlers *must* return a value, even if it's blank ('').
1802 # All handlers *must* return a value, even if it's blank ('').
1801
1803
1802 # Lines are NOT logged here. Handlers should process the line as
1804 # Lines are NOT logged here. Handlers should process the line as
1803 # needed, update the cache AND log it (so that the input cache array
1805 # needed, update the cache AND log it (so that the input cache array
1804 # stays synced).
1806 # stays synced).
1805
1807
1806 # This function is _very_ delicate, and since it's also the one which
1808 # This function is _very_ delicate, and since it's also the one which
1807 # determines IPython's response to user input, it must be as efficient
1809 # determines IPython's response to user input, it must be as efficient
1808 # as possible. For this reason it has _many_ returns in it, trying
1810 # as possible. For this reason it has _many_ returns in it, trying
1809 # always to exit as quickly as it can figure out what it needs to do.
1811 # always to exit as quickly as it can figure out what it needs to do.
1810
1812
1811 # This function is the main responsible for maintaining IPython's
1813 # This function is the main responsible for maintaining IPython's
1812 # behavior respectful of Python's semantics. So be _very_ careful if
1814 # behavior respectful of Python's semantics. So be _very_ careful if
1813 # making changes to anything here.
1815 # making changes to anything here.
1814
1816
1815 #.....................................................................
1817 #.....................................................................
1816 # Code begins
1818 # Code begins
1817
1819
1818 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1820 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1819
1821
1820 # save the line away in case we crash, so the post-mortem handler can
1822 # save the line away in case we crash, so the post-mortem handler can
1821 # record it
1823 # record it
1822 self._last_input_line = line
1824 self._last_input_line = line
1823
1825
1824 #print '***line: <%s>' % line # dbg
1826 #print '***line: <%s>' % line # dbg
1825
1827
1826 # the input history needs to track even empty lines
1828 # the input history needs to track even empty lines
1827 stripped = line.strip()
1829 stripped = line.strip()
1828
1830
1829 if not stripped:
1831 if not stripped:
1830 if not continue_prompt:
1832 if not continue_prompt:
1831 self.outputcache.prompt_count -= 1
1833 self.outputcache.prompt_count -= 1
1832 return self.handle_normal(line,continue_prompt)
1834 return self.handle_normal(line,continue_prompt)
1833 #return self.handle_normal('',continue_prompt)
1835 #return self.handle_normal('',continue_prompt)
1834
1836
1835 # print '***cont',continue_prompt # dbg
1837 # print '***cont',continue_prompt # dbg
1836 # special handlers are only allowed for single line statements
1838 # special handlers are only allowed for single line statements
1837 if continue_prompt and not self.rc.multi_line_specials:
1839 if continue_prompt and not self.rc.multi_line_specials:
1838 return self.handle_normal(line,continue_prompt)
1840 return self.handle_normal(line,continue_prompt)
1839
1841
1840
1842
1841 # For the rest, we need the structure of the input
1843 # For the rest, we need the structure of the input
1842 pre,iFun,theRest = self.split_user_input(line)
1844 pre,iFun,theRest = self.split_user_input(line)
1843
1845
1844 # See whether any pre-existing handler can take care of it
1846 # See whether any pre-existing handler can take care of it
1845
1847
1846 rewritten = self.hooks.input_prefilter(stripped)
1848 rewritten = self.hooks.input_prefilter(stripped)
1847 if rewritten != stripped: # ok, some prefilter did something
1849 if rewritten != stripped: # ok, some prefilter did something
1848 rewritten = pre + rewritten # add indentation
1850 rewritten = pre + rewritten # add indentation
1849 return self.handle_normal(rewritten)
1851 return self.handle_normal(rewritten)
1850
1852
1851
1853
1852
1854
1853
1855
1854 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1856 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1855
1857
1856 # First check for explicit escapes in the last/first character
1858 # First check for explicit escapes in the last/first character
1857 handler = None
1859 handler = None
1858 if line[-1] == self.ESC_HELP:
1860 if line[-1] == self.ESC_HELP:
1859 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1861 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1860 if handler is None:
1862 if handler is None:
1861 # look at the first character of iFun, NOT of line, so we skip
1863 # look at the first character of iFun, NOT of line, so we skip
1862 # leading whitespace in multiline input
1864 # leading whitespace in multiline input
1863 handler = self.esc_handlers.get(iFun[0:1])
1865 handler = self.esc_handlers.get(iFun[0:1])
1864 if handler is not None:
1866 if handler is not None:
1865 return handler(line,continue_prompt,pre,iFun,theRest)
1867 return handler(line,continue_prompt,pre,iFun,theRest)
1866 # Emacs ipython-mode tags certain input lines
1868 # Emacs ipython-mode tags certain input lines
1867 if line.endswith('# PYTHON-MODE'):
1869 if line.endswith('# PYTHON-MODE'):
1868 return self.handle_emacs(line,continue_prompt)
1870 return self.handle_emacs(line,continue_prompt)
1869
1871
1870 # Next, check if we can automatically execute this thing
1872 # Next, check if we can automatically execute this thing
1871
1873
1872 # Allow ! in multi-line statements if multi_line_specials is on:
1874 # Allow ! in multi-line statements if multi_line_specials is on:
1873 if continue_prompt and self.rc.multi_line_specials and \
1875 if continue_prompt and self.rc.multi_line_specials and \
1874 iFun.startswith(self.ESC_SHELL):
1876 iFun.startswith(self.ESC_SHELL):
1875 return self.handle_shell_escape(line,continue_prompt,
1877 return self.handle_shell_escape(line,continue_prompt,
1876 pre=pre,iFun=iFun,
1878 pre=pre,iFun=iFun,
1877 theRest=theRest)
1879 theRest=theRest)
1878
1880
1879 # Let's try to find if the input line is a magic fn
1881 # Let's try to find if the input line is a magic fn
1880 oinfo = None
1882 oinfo = None
1881 if hasattr(self,'magic_'+iFun):
1883 if hasattr(self,'magic_'+iFun):
1882 # WARNING: _ofind uses getattr(), so it can consume generators and
1884 # WARNING: _ofind uses getattr(), so it can consume generators and
1883 # cause other side effects.
1885 # cause other side effects.
1884 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1886 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1885 if oinfo['ismagic']:
1887 if oinfo['ismagic']:
1886 # Be careful not to call magics when a variable assignment is
1888 # Be careful not to call magics when a variable assignment is
1887 # being made (ls='hi', for example)
1889 # being made (ls='hi', for example)
1888 if self.rc.automagic and \
1890 if self.rc.automagic and \
1889 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1891 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1890 (self.rc.multi_line_specials or not continue_prompt):
1892 (self.rc.multi_line_specials or not continue_prompt):
1891 return self.handle_magic(line,continue_prompt,
1893 return self.handle_magic(line,continue_prompt,
1892 pre,iFun,theRest)
1894 pre,iFun,theRest)
1893 else:
1895 else:
1894 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1895
1897
1896 # If the rest of the line begins with an (in)equality, assginment or
1898 # If the rest of the line begins with an (in)equality, assginment or
1897 # function call, we should not call _ofind but simply execute it.
1899 # function call, we should not call _ofind but simply execute it.
1898 # This avoids spurious geattr() accesses on objects upon assignment.
1900 # This avoids spurious geattr() accesses on objects upon assignment.
1899 #
1901 #
1900 # It also allows users to assign to either alias or magic names true
1902 # It also allows users to assign to either alias or magic names true
1901 # python variables (the magic/alias systems always take second seat to
1903 # python variables (the magic/alias systems always take second seat to
1902 # true python code).
1904 # true python code).
1903 if theRest and theRest[0] in '!=()':
1905 if theRest and theRest[0] in '!=()':
1904 return self.handle_normal(line,continue_prompt)
1906 return self.handle_normal(line,continue_prompt)
1905
1907
1906 if oinfo is None:
1908 if oinfo is None:
1907 # let's try to ensure that _oinfo is ONLY called when autocall is
1909 # let's try to ensure that _oinfo is ONLY called when autocall is
1908 # on. Since it has inevitable potential side effects, at least
1910 # on. Since it has inevitable potential side effects, at least
1909 # having autocall off should be a guarantee to the user that no
1911 # having autocall off should be a guarantee to the user that no
1910 # weird things will happen.
1912 # weird things will happen.
1911
1913
1912 if self.rc.autocall:
1914 if self.rc.autocall:
1913 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1915 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1914 else:
1916 else:
1915 # in this case, all that's left is either an alias or
1917 # in this case, all that's left is either an alias or
1916 # processing the line normally.
1918 # processing the line normally.
1917 if iFun in self.alias_table:
1919 if iFun in self.alias_table:
1918 return self.handle_alias(line,continue_prompt,
1920 return self.handle_alias(line,continue_prompt,
1919 pre,iFun,theRest)
1921 pre,iFun,theRest)
1920
1922
1921 else:
1923 else:
1922 return self.handle_normal(line,continue_prompt)
1924 return self.handle_normal(line,continue_prompt)
1923
1925
1924 if not oinfo['found']:
1926 if not oinfo['found']:
1925 return self.handle_normal(line,continue_prompt)
1927 return self.handle_normal(line,continue_prompt)
1926 else:
1928 else:
1927 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1929 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1928 if oinfo['isalias']:
1930 if oinfo['isalias']:
1929 return self.handle_alias(line,continue_prompt,
1931 return self.handle_alias(line,continue_prompt,
1930 pre,iFun,theRest)
1932 pre,iFun,theRest)
1931
1933
1932 if (self.rc.autocall
1934 if (self.rc.autocall
1933 and
1935 and
1934 (
1936 (
1935 #only consider exclusion re if not "," or ";" autoquoting
1937 #only consider exclusion re if not "," or ";" autoquoting
1936 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2) or
1938 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2) or
1937 (not self.re_exclude_auto.match(theRest)))
1939 (not self.re_exclude_auto.match(theRest)))
1938 and
1940 and
1939 self.re_fun_name.match(iFun) and
1941 self.re_fun_name.match(iFun) and
1940 callable(oinfo['obj'])) :
1942 callable(oinfo['obj'])) :
1941 #print 'going auto' # dbg
1943 #print 'going auto' # dbg
1942 return self.handle_auto(line,continue_prompt,
1944 return self.handle_auto(line,continue_prompt,
1943 pre,iFun,theRest,oinfo['obj'])
1945 pre,iFun,theRest,oinfo['obj'])
1944 else:
1946 else:
1945 #print 'was callable?', callable(oinfo['obj']) # dbg
1947 #print 'was callable?', callable(oinfo['obj']) # dbg
1946 return self.handle_normal(line,continue_prompt)
1948 return self.handle_normal(line,continue_prompt)
1947
1949
1948 # If we get here, we have a normal Python line. Log and return.
1950 # If we get here, we have a normal Python line. Log and return.
1949 return self.handle_normal(line,continue_prompt)
1951 return self.handle_normal(line,continue_prompt)
1950
1952
1951 def _prefilter_dumb(self, line, continue_prompt):
1953 def _prefilter_dumb(self, line, continue_prompt):
1952 """simple prefilter function, for debugging"""
1954 """simple prefilter function, for debugging"""
1953 return self.handle_normal(line,continue_prompt)
1955 return self.handle_normal(line,continue_prompt)
1954
1956
1955 # Set the default prefilter() function (this can be user-overridden)
1957 # Set the default prefilter() function (this can be user-overridden)
1956 prefilter = _prefilter
1958 prefilter = _prefilter
1957
1959
1958 def handle_normal(self,line,continue_prompt=None,
1960 def handle_normal(self,line,continue_prompt=None,
1959 pre=None,iFun=None,theRest=None):
1961 pre=None,iFun=None,theRest=None):
1960 """Handle normal input lines. Use as a template for handlers."""
1962 """Handle normal input lines. Use as a template for handlers."""
1961
1963
1962 # With autoindent on, we need some way to exit the input loop, and I
1964 # With autoindent on, we need some way to exit the input loop, and I
1963 # don't want to force the user to have to backspace all the way to
1965 # don't want to force the user to have to backspace all the way to
1964 # clear the line. The rule will be in this case, that either two
1966 # clear the line. The rule will be in this case, that either two
1965 # lines of pure whitespace in a row, or a line of pure whitespace but
1967 # lines of pure whitespace in a row, or a line of pure whitespace but
1966 # of a size different to the indent level, will exit the input loop.
1968 # of a size different to the indent level, will exit the input loop.
1967
1969
1968 if (continue_prompt and self.autoindent and line.isspace() and
1970 if (continue_prompt and self.autoindent and line.isspace() and
1969 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1971 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1970 (self.buffer[-1]).isspace() )):
1972 (self.buffer[-1]).isspace() )):
1971 line = ''
1973 line = ''
1972
1974
1973 self.log(line,continue_prompt)
1975 self.log(line,continue_prompt)
1974 return line
1976 return line
1975
1977
1976 def handle_alias(self,line,continue_prompt=None,
1978 def handle_alias(self,line,continue_prompt=None,
1977 pre=None,iFun=None,theRest=None):
1979 pre=None,iFun=None,theRest=None):
1978 """Handle alias input lines. """
1980 """Handle alias input lines. """
1979
1981
1980 # pre is needed, because it carries the leading whitespace. Otherwise
1982 # pre is needed, because it carries the leading whitespace. Otherwise
1981 # aliases won't work in indented sections.
1983 # aliases won't work in indented sections.
1982 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1984 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1983 self.log(line_out,continue_prompt)
1985 self.log(line_out,continue_prompt)
1984 return line_out
1986 return line_out
1985
1987
1986 def handle_shell_escape(self, line, continue_prompt=None,
1988 def handle_shell_escape(self, line, continue_prompt=None,
1987 pre=None,iFun=None,theRest=None):
1989 pre=None,iFun=None,theRest=None):
1988 """Execute the line in a shell, empty return value"""
1990 """Execute the line in a shell, empty return value"""
1989
1991
1990 #print 'line in :', `line` # dbg
1992 #print 'line in :', `line` # dbg
1991 # Example of a special handler. Others follow a similar pattern.
1993 # Example of a special handler. Others follow a similar pattern.
1992 if line.lstrip().startswith('!!'):
1994 if line.lstrip().startswith('!!'):
1993 # rewrite iFun/theRest to properly hold the call to %sx and
1995 # rewrite iFun/theRest to properly hold the call to %sx and
1994 # the actual command to be executed, so handle_magic can work
1996 # the actual command to be executed, so handle_magic can work
1995 # correctly
1997 # correctly
1996 theRest = '%s %s' % (iFun[2:],theRest)
1998 theRest = '%s %s' % (iFun[2:],theRest)
1997 iFun = 'sx'
1999 iFun = 'sx'
1998 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2000 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1999 line.lstrip()[2:]),
2001 line.lstrip()[2:]),
2000 continue_prompt,pre,iFun,theRest)
2002 continue_prompt,pre,iFun,theRest)
2001 else:
2003 else:
2002 cmd=line.lstrip().lstrip('!')
2004 cmd=line.lstrip().lstrip('!')
2003 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2005 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2004 # update cache/log and return
2006 # update cache/log and return
2005 self.log(line_out,continue_prompt)
2007 self.log(line_out,continue_prompt)
2006 return line_out
2008 return line_out
2007
2009
2008 def handle_magic(self, line, continue_prompt=None,
2010 def handle_magic(self, line, continue_prompt=None,
2009 pre=None,iFun=None,theRest=None):
2011 pre=None,iFun=None,theRest=None):
2010 """Execute magic functions."""
2012 """Execute magic functions."""
2011
2013
2012
2014
2013 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2015 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2014 self.log(cmd,continue_prompt)
2016 self.log(cmd,continue_prompt)
2015 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2017 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2016 return cmd
2018 return cmd
2017
2019
2018 def handle_auto(self, line, continue_prompt=None,
2020 def handle_auto(self, line, continue_prompt=None,
2019 pre=None,iFun=None,theRest=None,obj=None):
2021 pre=None,iFun=None,theRest=None,obj=None):
2020 """Hande lines which can be auto-executed, quoting if requested."""
2022 """Hande lines which can be auto-executed, quoting if requested."""
2021
2023
2022 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2024 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2023
2025
2024 # This should only be active for single-line input!
2026 # This should only be active for single-line input!
2025 if continue_prompt:
2027 if continue_prompt:
2026 self.log(line,continue_prompt)
2028 self.log(line,continue_prompt)
2027 return line
2029 return line
2028
2030
2029 auto_rewrite = True
2031 auto_rewrite = True
2030 if pre == self.ESC_QUOTE:
2032 if pre == self.ESC_QUOTE:
2031 # Auto-quote splitting on whitespace
2033 # Auto-quote splitting on whitespace
2032 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2034 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2033 elif pre == self.ESC_QUOTE2:
2035 elif pre == self.ESC_QUOTE2:
2034 # Auto-quote whole string
2036 # Auto-quote whole string
2035 newcmd = '%s("%s")' % (iFun,theRest)
2037 newcmd = '%s("%s")' % (iFun,theRest)
2036 else:
2038 else:
2037 # Auto-paren.
2039 # Auto-paren.
2038 # We only apply it to argument-less calls if the autocall
2040 # We only apply it to argument-less calls if the autocall
2039 # parameter is set to 2. We only need to check that autocall is <
2041 # parameter is set to 2. We only need to check that autocall is <
2040 # 2, since this function isn't called unless it's at least 1.
2042 # 2, since this function isn't called unless it's at least 1.
2041 if not theRest and (self.rc.autocall < 2):
2043 if not theRest and (self.rc.autocall < 2):
2042 newcmd = '%s %s' % (iFun,theRest)
2044 newcmd = '%s %s' % (iFun,theRest)
2043 auto_rewrite = False
2045 auto_rewrite = False
2044 else:
2046 else:
2045 if theRest.startswith('['):
2047 if theRest.startswith('['):
2046 if hasattr(obj,'__getitem__'):
2048 if hasattr(obj,'__getitem__'):
2047 # Don't autocall in this case: item access for an object
2049 # Don't autocall in this case: item access for an object
2048 # which is BOTH callable and implements __getitem__.
2050 # which is BOTH callable and implements __getitem__.
2049 newcmd = '%s %s' % (iFun,theRest)
2051 newcmd = '%s %s' % (iFun,theRest)
2050 auto_rewrite = False
2052 auto_rewrite = False
2051 else:
2053 else:
2052 # if the object doesn't support [] access, go ahead and
2054 # if the object doesn't support [] access, go ahead and
2053 # autocall
2055 # autocall
2054 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2056 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2055 elif theRest.endswith(';'):
2057 elif theRest.endswith(';'):
2056 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2058 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2057 else:
2059 else:
2058 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2060 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2059
2061
2060 if auto_rewrite:
2062 if auto_rewrite:
2061 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2063 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2062 # log what is now valid Python, not the actual user input (without the
2064 # log what is now valid Python, not the actual user input (without the
2063 # final newline)
2065 # final newline)
2064 self.log(newcmd,continue_prompt)
2066 self.log(newcmd,continue_prompt)
2065 return newcmd
2067 return newcmd
2066
2068
2067 def handle_help(self, line, continue_prompt=None,
2069 def handle_help(self, line, continue_prompt=None,
2068 pre=None,iFun=None,theRest=None):
2070 pre=None,iFun=None,theRest=None):
2069 """Try to get some help for the object.
2071 """Try to get some help for the object.
2070
2072
2071 obj? or ?obj -> basic information.
2073 obj? or ?obj -> basic information.
2072 obj?? or ??obj -> more details.
2074 obj?? or ??obj -> more details.
2073 """
2075 """
2074
2076
2075 # We need to make sure that we don't process lines which would be
2077 # We need to make sure that we don't process lines which would be
2076 # otherwise valid python, such as "x=1 # what?"
2078 # otherwise valid python, such as "x=1 # what?"
2077 try:
2079 try:
2078 codeop.compile_command(line)
2080 codeop.compile_command(line)
2079 except SyntaxError:
2081 except SyntaxError:
2080 # We should only handle as help stuff which is NOT valid syntax
2082 # We should only handle as help stuff which is NOT valid syntax
2081 if line[0]==self.ESC_HELP:
2083 if line[0]==self.ESC_HELP:
2082 line = line[1:]
2084 line = line[1:]
2083 elif line[-1]==self.ESC_HELP:
2085 elif line[-1]==self.ESC_HELP:
2084 line = line[:-1]
2086 line = line[:-1]
2085 self.log('#?'+line)
2087 self.log('#?'+line)
2086 if line:
2088 if line:
2087 self.magic_pinfo(line)
2089 self.magic_pinfo(line)
2088 else:
2090 else:
2089 page(self.usage,screen_lines=self.rc.screen_length)
2091 page(self.usage,screen_lines=self.rc.screen_length)
2090 return '' # Empty string is needed here!
2092 return '' # Empty string is needed here!
2091 except:
2093 except:
2092 # Pass any other exceptions through to the normal handler
2094 # Pass any other exceptions through to the normal handler
2093 return self.handle_normal(line,continue_prompt)
2095 return self.handle_normal(line,continue_prompt)
2094 else:
2096 else:
2095 # If the code compiles ok, we should handle it normally
2097 # If the code compiles ok, we should handle it normally
2096 return self.handle_normal(line,continue_prompt)
2098 return self.handle_normal(line,continue_prompt)
2097
2099
2098 def handle_emacs(self,line,continue_prompt=None,
2100 def handle_emacs(self,line,continue_prompt=None,
2099 pre=None,iFun=None,theRest=None):
2101 pre=None,iFun=None,theRest=None):
2100 """Handle input lines marked by python-mode."""
2102 """Handle input lines marked by python-mode."""
2101
2103
2102 # Currently, nothing is done. Later more functionality can be added
2104 # Currently, nothing is done. Later more functionality can be added
2103 # here if needed.
2105 # here if needed.
2104
2106
2105 # The input cache shouldn't be updated
2107 # The input cache shouldn't be updated
2106
2108
2107 return line
2109 return line
2108
2110
2109 def mktempfile(self,data=None):
2111 def mktempfile(self,data=None):
2110 """Make a new tempfile and return its filename.
2112 """Make a new tempfile and return its filename.
2111
2113
2112 This makes a call to tempfile.mktemp, but it registers the created
2114 This makes a call to tempfile.mktemp, but it registers the created
2113 filename internally so ipython cleans it up at exit time.
2115 filename internally so ipython cleans it up at exit time.
2114
2116
2115 Optional inputs:
2117 Optional inputs:
2116
2118
2117 - data(None): if data is given, it gets written out to the temp file
2119 - data(None): if data is given, it gets written out to the temp file
2118 immediately, and the file is closed again."""
2120 immediately, and the file is closed again."""
2119
2121
2120 filename = tempfile.mktemp('.py','ipython_edit_')
2122 filename = tempfile.mktemp('.py','ipython_edit_')
2121 self.tempfiles.append(filename)
2123 self.tempfiles.append(filename)
2122
2124
2123 if data:
2125 if data:
2124 tmp_file = open(filename,'w')
2126 tmp_file = open(filename,'w')
2125 tmp_file.write(data)
2127 tmp_file.write(data)
2126 tmp_file.close()
2128 tmp_file.close()
2127 return filename
2129 return filename
2128
2130
2129 def write(self,data):
2131 def write(self,data):
2130 """Write a string to the default output"""
2132 """Write a string to the default output"""
2131 Term.cout.write(data)
2133 Term.cout.write(data)
2132
2134
2133 def write_err(self,data):
2135 def write_err(self,data):
2134 """Write a string to the default error output"""
2136 """Write a string to the default error output"""
2135 Term.cerr.write(data)
2137 Term.cerr.write(data)
2136
2138
2137 def exit(self):
2139 def exit(self):
2138 """Handle interactive exit.
2140 """Handle interactive exit.
2139
2141
2140 This method sets the exit_now attribute."""
2142 This method sets the exit_now attribute."""
2141
2143
2142 if self.rc.confirm_exit:
2144 if self.rc.confirm_exit:
2143 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2145 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2144 self.exit_now = True
2146 self.exit_now = True
2145 else:
2147 else:
2146 self.exit_now = True
2148 self.exit_now = True
2147 return self.exit_now
2149 return self.exit_now
2148
2150
2149 def safe_execfile(self,fname,*where,**kw):
2151 def safe_execfile(self,fname,*where,**kw):
2150 fname = os.path.expanduser(fname)
2152 fname = os.path.expanduser(fname)
2151
2153
2152 # find things also in current directory
2154 # find things also in current directory
2153 dname = os.path.dirname(fname)
2155 dname = os.path.dirname(fname)
2154 if not sys.path.count(dname):
2156 if not sys.path.count(dname):
2155 sys.path.append(dname)
2157 sys.path.append(dname)
2156
2158
2157 try:
2159 try:
2158 xfile = open(fname)
2160 xfile = open(fname)
2159 except:
2161 except:
2160 print >> Term.cerr, \
2162 print >> Term.cerr, \
2161 'Could not open file <%s> for safe execution.' % fname
2163 'Could not open file <%s> for safe execution.' % fname
2162 return None
2164 return None
2163
2165
2164 kw.setdefault('islog',0)
2166 kw.setdefault('islog',0)
2165 kw.setdefault('quiet',1)
2167 kw.setdefault('quiet',1)
2166 kw.setdefault('exit_ignore',0)
2168 kw.setdefault('exit_ignore',0)
2167 first = xfile.readline()
2169 first = xfile.readline()
2168 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2170 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2169 xfile.close()
2171 xfile.close()
2170 # line by line execution
2172 # line by line execution
2171 if first.startswith(loghead) or kw['islog']:
2173 if first.startswith(loghead) or kw['islog']:
2172 print 'Loading log file <%s> one line at a time...' % fname
2174 print 'Loading log file <%s> one line at a time...' % fname
2173 if kw['quiet']:
2175 if kw['quiet']:
2174 stdout_save = sys.stdout
2176 stdout_save = sys.stdout
2175 sys.stdout = StringIO.StringIO()
2177 sys.stdout = StringIO.StringIO()
2176 try:
2178 try:
2177 globs,locs = where[0:2]
2179 globs,locs = where[0:2]
2178 except:
2180 except:
2179 try:
2181 try:
2180 globs = locs = where[0]
2182 globs = locs = where[0]
2181 except:
2183 except:
2182 globs = locs = globals()
2184 globs = locs = globals()
2183 badblocks = []
2185 badblocks = []
2184
2186
2185 # we also need to identify indented blocks of code when replaying
2187 # we also need to identify indented blocks of code when replaying
2186 # logs and put them together before passing them to an exec
2188 # logs and put them together before passing them to an exec
2187 # statement. This takes a bit of regexp and look-ahead work in the
2189 # statement. This takes a bit of regexp and look-ahead work in the
2188 # file. It's easiest if we swallow the whole thing in memory
2190 # file. It's easiest if we swallow the whole thing in memory
2189 # first, and manually walk through the lines list moving the
2191 # first, and manually walk through the lines list moving the
2190 # counter ourselves.
2192 # counter ourselves.
2191 indent_re = re.compile('\s+\S')
2193 indent_re = re.compile('\s+\S')
2192 xfile = open(fname)
2194 xfile = open(fname)
2193 filelines = xfile.readlines()
2195 filelines = xfile.readlines()
2194 xfile.close()
2196 xfile.close()
2195 nlines = len(filelines)
2197 nlines = len(filelines)
2196 lnum = 0
2198 lnum = 0
2197 while lnum < nlines:
2199 while lnum < nlines:
2198 line = filelines[lnum]
2200 line = filelines[lnum]
2199 lnum += 1
2201 lnum += 1
2200 # don't re-insert logger status info into cache
2202 # don't re-insert logger status info into cache
2201 if line.startswith('#log#'):
2203 if line.startswith('#log#'):
2202 continue
2204 continue
2203 else:
2205 else:
2204 # build a block of code (maybe a single line) for execution
2206 # build a block of code (maybe a single line) for execution
2205 block = line
2207 block = line
2206 try:
2208 try:
2207 next = filelines[lnum] # lnum has already incremented
2209 next = filelines[lnum] # lnum has already incremented
2208 except:
2210 except:
2209 next = None
2211 next = None
2210 while next and indent_re.match(next):
2212 while next and indent_re.match(next):
2211 block += next
2213 block += next
2212 lnum += 1
2214 lnum += 1
2213 try:
2215 try:
2214 next = filelines[lnum]
2216 next = filelines[lnum]
2215 except:
2217 except:
2216 next = None
2218 next = None
2217 # now execute the block of one or more lines
2219 # now execute the block of one or more lines
2218 try:
2220 try:
2219 exec block in globs,locs
2221 exec block in globs,locs
2220 except SystemExit:
2222 except SystemExit:
2221 pass
2223 pass
2222 except:
2224 except:
2223 badblocks.append(block.rstrip())
2225 badblocks.append(block.rstrip())
2224 if kw['quiet']: # restore stdout
2226 if kw['quiet']: # restore stdout
2225 sys.stdout.close()
2227 sys.stdout.close()
2226 sys.stdout = stdout_save
2228 sys.stdout = stdout_save
2227 print 'Finished replaying log file <%s>' % fname
2229 print 'Finished replaying log file <%s>' % fname
2228 if badblocks:
2230 if badblocks:
2229 print >> sys.stderr, ('\nThe following lines/blocks in file '
2231 print >> sys.stderr, ('\nThe following lines/blocks in file '
2230 '<%s> reported errors:' % fname)
2232 '<%s> reported errors:' % fname)
2231
2233
2232 for badline in badblocks:
2234 for badline in badblocks:
2233 print >> sys.stderr, badline
2235 print >> sys.stderr, badline
2234 else: # regular file execution
2236 else: # regular file execution
2235 try:
2237 try:
2236 execfile(fname,*where)
2238 execfile(fname,*where)
2237 except SyntaxError:
2239 except SyntaxError:
2238 etype,evalue = sys.exc_info()[:2]
2240 etype,evalue = sys.exc_info()[:2]
2239 self.SyntaxTB(etype,evalue,[])
2241 self.SyntaxTB(etype,evalue,[])
2240 warn('Failure executing file: <%s>' % fname)
2242 warn('Failure executing file: <%s>' % fname)
2241 except SystemExit,status:
2243 except SystemExit,status:
2242 if not kw['exit_ignore']:
2244 if not kw['exit_ignore']:
2243 self.InteractiveTB()
2245 self.InteractiveTB()
2244 warn('Failure executing file: <%s>' % fname)
2246 warn('Failure executing file: <%s>' % fname)
2245 except:
2247 except:
2246 self.InteractiveTB()
2248 self.InteractiveTB()
2247 warn('Failure executing file: <%s>' % fname)
2249 warn('Failure executing file: <%s>' % fname)
2248
2250
2249 #************************* end of file <iplib.py> *****************************
2251 #************************* end of file <iplib.py> *****************************
@@ -1,5079 +1,5089 b''
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
2
2
3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
4 'ipython' at argv[0]) executed through command line.
4 'ipython' at argv[0]) executed through command line.
5 NOTE: this DEPRECATES calling ipython with multiple scripts
5 NOTE: this DEPRECATES calling ipython with multiple scripts
6 ("ipython a.py b.py c.py")
6 ("ipython a.py b.py c.py")
7
8 * iplib.py, hooks.py: Added configurable input prefilter,
9 named 'input_prefilter'. See ext_rescapture.py for example
10 usage.
11
12 * ext_rescapture.py, Magic.py: Better system command output capture
13 through 'var = !ls' (deprecates user-visible %sc). Same notation
14 applies for magics, 'var = %alias' assigns alias list to var.
15
16 * ipapi.py: added meta() for accessing extension-usable data store.
7
17
8 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
18 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
9
19
10 * IPython/demo.py (Demo.show): Flush stdout after each block, so
20 * IPython/demo.py (Demo.show): Flush stdout after each block, so
11 computationally intensive blocks don't appear to stall the demo.
21 computationally intensive blocks don't appear to stall the demo.
12
22
13 2006-01-24 Ville Vainio <vivainio@gmail.com>
23 2006-01-24 Ville Vainio <vivainio@gmail.com>
14
24
15 * iplib.py, hooks.py: 'result_display' hook can return a non-None
25 * iplib.py, hooks.py: 'result_display' hook can return a non-None
16 value to manipulate resulting history entry.
26 value to manipulate resulting history entry.
17
27
18 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
28 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
19 to instance methods of IPApi class, to make extending an embedded
29 to instance methods of IPApi class, to make extending an embedded
20 IPython feasible. See ext_rehashdir.py for example usage.
30 IPython feasible. See ext_rehashdir.py for example usage.
21
31
22 * Merged 1071-1076 from banches/0.7.1
32 * Merged 1071-1076 from banches/0.7.1
23
33
24
34
25 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
35 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
26
36
27 * tools/release (daystamp): Fix build tools to use the new
37 * tools/release (daystamp): Fix build tools to use the new
28 eggsetup.py script to build lightweight eggs.
38 eggsetup.py script to build lightweight eggs.
29
39
30 * Applied changesets 1062 and 1064 before 0.7.1 release.
40 * Applied changesets 1062 and 1064 before 0.7.1 release.
31
41
32 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
42 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
33 see the raw input history (without conversions like %ls ->
43 see the raw input history (without conversions like %ls ->
34 ipmagic("ls")). After a request from W. Stein, SAGE
44 ipmagic("ls")). After a request from W. Stein, SAGE
35 (http://modular.ucsd.edu/sage) developer. This information is
45 (http://modular.ucsd.edu/sage) developer. This information is
36 stored in the input_hist_raw attribute of the IPython instance, so
46 stored in the input_hist_raw attribute of the IPython instance, so
37 developers can access it if needed (it's an InputList instance).
47 developers can access it if needed (it's an InputList instance).
38
48
39 * Versionstring = 0.7.2.svn
49 * Versionstring = 0.7.2.svn
40
50
41 * eggsetup.py: A separate script for constructing eggs, creates
51 * eggsetup.py: A separate script for constructing eggs, creates
42 proper launch scripts even on Windows (an .exe file in
52 proper launch scripts even on Windows (an .exe file in
43 \python24\scripts).
53 \python24\scripts).
44
54
45 * ipapi.py: launch_new_instance, launch entry point needed for the
55 * ipapi.py: launch_new_instance, launch entry point needed for the
46 egg.
56 egg.
47
57
48 2006-01-23 Ville Vainio <vivainio@gmail.com>
58 2006-01-23 Ville Vainio <vivainio@gmail.com>
49
59
50 * Added %cpaste magic for pasting python code
60 * Added %cpaste magic for pasting python code
51
61
52 2006-01-22 Ville Vainio <vivainio@gmail.com>
62 2006-01-22 Ville Vainio <vivainio@gmail.com>
53
63
54 * Merge from branches/0.7.1 into trunk, revs 1052-1057
64 * Merge from branches/0.7.1 into trunk, revs 1052-1057
55
65
56 * Versionstring = 0.7.2.svn
66 * Versionstring = 0.7.2.svn
57
67
58 * eggsetup.py: A separate script for constructing eggs, creates
68 * eggsetup.py: A separate script for constructing eggs, creates
59 proper launch scripts even on Windows (an .exe file in
69 proper launch scripts even on Windows (an .exe file in
60 \python24\scripts).
70 \python24\scripts).
61
71
62 * ipapi.py: launch_new_instance, launch entry point needed for the
72 * ipapi.py: launch_new_instance, launch entry point needed for the
63 egg.
73 egg.
64
74
65 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
75 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
66
76
67 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
77 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
68 %pfile foo would print the file for foo even if it was a binary.
78 %pfile foo would print the file for foo even if it was a binary.
69 Now, extensions '.so' and '.dll' are skipped.
79 Now, extensions '.so' and '.dll' are skipped.
70
80
71 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
81 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
72 bug, where macros would fail in all threaded modes. I'm not 100%
82 bug, where macros would fail in all threaded modes. I'm not 100%
73 sure, so I'm going to put out an rc instead of making a release
83 sure, so I'm going to put out an rc instead of making a release
74 today, and wait for feedback for at least a few days.
84 today, and wait for feedback for at least a few days.
75
85
76 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
86 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
77 it...) the handling of pasting external code with autoindent on.
87 it...) the handling of pasting external code with autoindent on.
78 To get out of a multiline input, the rule will appear for most
88 To get out of a multiline input, the rule will appear for most
79 users unchanged: two blank lines or change the indent level
89 users unchanged: two blank lines or change the indent level
80 proposed by IPython. But there is a twist now: you can
90 proposed by IPython. But there is a twist now: you can
81 add/subtract only *one or two spaces*. If you add/subtract three
91 add/subtract only *one or two spaces*. If you add/subtract three
82 or more (unless you completely delete the line), IPython will
92 or more (unless you completely delete the line), IPython will
83 accept that line, and you'll need to enter a second one of pure
93 accept that line, and you'll need to enter a second one of pure
84 whitespace. I know it sounds complicated, but I can't find a
94 whitespace. I know it sounds complicated, but I can't find a
85 different solution that covers all the cases, with the right
95 different solution that covers all the cases, with the right
86 heuristics. Hopefully in actual use, nobody will really notice
96 heuristics. Hopefully in actual use, nobody will really notice
87 all these strange rules and things will 'just work'.
97 all these strange rules and things will 'just work'.
88
98
89 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
99 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
90
100
91 * IPython/iplib.py (interact): catch exceptions which can be
101 * IPython/iplib.py (interact): catch exceptions which can be
92 triggered asynchronously by signal handlers. Thanks to an
102 triggered asynchronously by signal handlers. Thanks to an
93 automatic crash report, submitted by Colin Kingsley
103 automatic crash report, submitted by Colin Kingsley
94 <tercel-AT-gentoo.org>.
104 <tercel-AT-gentoo.org>.
95
105
96 2006-01-20 Ville Vainio <vivainio@gmail.com>
106 2006-01-20 Ville Vainio <vivainio@gmail.com>
97
107
98 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
108 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
99 (%rehashdir, very useful, try it out) of how to extend ipython
109 (%rehashdir, very useful, try it out) of how to extend ipython
100 with new magics. Also added Extensions dir to pythonpath to make
110 with new magics. Also added Extensions dir to pythonpath to make
101 importing extensions easy.
111 importing extensions easy.
102
112
103 * %store now complains when trying to store interactively declared
113 * %store now complains when trying to store interactively declared
104 classes / instances of those classes.
114 classes / instances of those classes.
105
115
106 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
116 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
107 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
117 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
108 if they exist, and ipy_user_conf.py with some defaults is created for
118 if they exist, and ipy_user_conf.py with some defaults is created for
109 the user.
119 the user.
110
120
111 * Startup rehashing done by the config file, not InterpreterExec.
121 * Startup rehashing done by the config file, not InterpreterExec.
112 This means system commands are available even without selecting the
122 This means system commands are available even without selecting the
113 pysh profile. It's the sensible default after all.
123 pysh profile. It's the sensible default after all.
114
124
115 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
125 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
116
126
117 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
127 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
118 multiline code with autoindent on working. But I am really not
128 multiline code with autoindent on working. But I am really not
119 sure, so this needs more testing. Will commit a debug-enabled
129 sure, so this needs more testing. Will commit a debug-enabled
120 version for now, while I test it some more, so that Ville and
130 version for now, while I test it some more, so that Ville and
121 others may also catch any problems. Also made
131 others may also catch any problems. Also made
122 self.indent_current_str() a method, to ensure that there's no
132 self.indent_current_str() a method, to ensure that there's no
123 chance of the indent space count and the corresponding string
133 chance of the indent space count and the corresponding string
124 falling out of sync. All code needing the string should just call
134 falling out of sync. All code needing the string should just call
125 the method.
135 the method.
126
136
127 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
137 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
128
138
129 * IPython/Magic.py (magic_edit): fix check for when users don't
139 * IPython/Magic.py (magic_edit): fix check for when users don't
130 save their output files, the try/except was in the wrong section.
140 save their output files, the try/except was in the wrong section.
131
141
132 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
142 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
133
143
134 * IPython/Magic.py (magic_run): fix __file__ global missing from
144 * IPython/Magic.py (magic_run): fix __file__ global missing from
135 script's namespace when executed via %run. After a report by
145 script's namespace when executed via %run. After a report by
136 Vivian.
146 Vivian.
137
147
138 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
148 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
139 when using python 2.4. The parent constructor changed in 2.4, and
149 when using python 2.4. The parent constructor changed in 2.4, and
140 we need to track it directly (we can't call it, as it messes up
150 we need to track it directly (we can't call it, as it messes up
141 readline and tab-completion inside our pdb would stop working).
151 readline and tab-completion inside our pdb would stop working).
142 After a bug report by R. Bernstein <rocky-AT-panix.com>.
152 After a bug report by R. Bernstein <rocky-AT-panix.com>.
143
153
144 2006-01-16 Ville Vainio <vivainio@gmail.com>
154 2006-01-16 Ville Vainio <vivainio@gmail.com>
145
155
146 * Ipython/magic.py:Reverted back to old %edit functionality
156 * Ipython/magic.py:Reverted back to old %edit functionality
147 that returns file contents on exit.
157 that returns file contents on exit.
148
158
149 * IPython/path.py: Added Jason Orendorff's "path" module to
159 * IPython/path.py: Added Jason Orendorff's "path" module to
150 IPython tree, http://www.jorendorff.com/articles/python/path/.
160 IPython tree, http://www.jorendorff.com/articles/python/path/.
151 You can get path objects conveniently through %sc, and !!, e.g.:
161 You can get path objects conveniently through %sc, and !!, e.g.:
152 sc files=ls
162 sc files=ls
153 for p in files.paths: # or files.p
163 for p in files.paths: # or files.p
154 print p,p.mtime
164 print p,p.mtime
155
165
156 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
166 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
157 now work again without considering the exclusion regexp -
167 now work again without considering the exclusion regexp -
158 hence, things like ',foo my/path' turn to 'foo("my/path")'
168 hence, things like ',foo my/path' turn to 'foo("my/path")'
159 instead of syntax error.
169 instead of syntax error.
160
170
161
171
162 2006-01-14 Ville Vainio <vivainio@gmail.com>
172 2006-01-14 Ville Vainio <vivainio@gmail.com>
163
173
164 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
174 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
165 ipapi decorators for python 2.4 users, options() provides access to rc
175 ipapi decorators for python 2.4 users, options() provides access to rc
166 data.
176 data.
167
177
168 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
178 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
169 as path separators (even on Linux ;-). Space character after
179 as path separators (even on Linux ;-). Space character after
170 backslash (as yielded by tab completer) is still space;
180 backslash (as yielded by tab completer) is still space;
171 "%cd long\ name" works as expected.
181 "%cd long\ name" works as expected.
172
182
173 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
183 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
174 as "chain of command", with priority. API stays the same,
184 as "chain of command", with priority. API stays the same,
175 TryNext exception raised by a hook function signals that
185 TryNext exception raised by a hook function signals that
176 current hook failed and next hook should try handling it, as
186 current hook failed and next hook should try handling it, as
177 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
187 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
178 requested configurable display hook, which is now implemented.
188 requested configurable display hook, which is now implemented.
179
189
180 2006-01-13 Ville Vainio <vivainio@gmail.com>
190 2006-01-13 Ville Vainio <vivainio@gmail.com>
181
191
182 * IPython/platutils*.py: platform specific utility functions,
192 * IPython/platutils*.py: platform specific utility functions,
183 so far only set_term_title is implemented (change terminal
193 so far only set_term_title is implemented (change terminal
184 label in windowing systems). %cd now changes the title to
194 label in windowing systems). %cd now changes the title to
185 current dir.
195 current dir.
186
196
187 * IPython/Release.py: Added myself to "authors" list,
197 * IPython/Release.py: Added myself to "authors" list,
188 had to create new files.
198 had to create new files.
189
199
190 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
200 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
191 shell escape; not a known bug but had potential to be one in the
201 shell escape; not a known bug but had potential to be one in the
192 future.
202 future.
193
203
194 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
204 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
195 extension API for IPython! See the module for usage example. Fix
205 extension API for IPython! See the module for usage example. Fix
196 OInspect for docstring-less magic functions.
206 OInspect for docstring-less magic functions.
197
207
198
208
199 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
209 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
200
210
201 * IPython/iplib.py (raw_input): temporarily deactivate all
211 * IPython/iplib.py (raw_input): temporarily deactivate all
202 attempts at allowing pasting of code with autoindent on. It
212 attempts at allowing pasting of code with autoindent on. It
203 introduced bugs (reported by Prabhu) and I can't seem to find a
213 introduced bugs (reported by Prabhu) and I can't seem to find a
204 robust combination which works in all cases. Will have to revisit
214 robust combination which works in all cases. Will have to revisit
205 later.
215 later.
206
216
207 * IPython/genutils.py: remove isspace() function. We've dropped
217 * IPython/genutils.py: remove isspace() function. We've dropped
208 2.2 compatibility, so it's OK to use the string method.
218 2.2 compatibility, so it's OK to use the string method.
209
219
210 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
220 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
211
221
212 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
222 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
213 matching what NOT to autocall on, to include all python binary
223 matching what NOT to autocall on, to include all python binary
214 operators (including things like 'and', 'or', 'is' and 'in').
224 operators (including things like 'and', 'or', 'is' and 'in').
215 Prompted by a bug report on 'foo & bar', but I realized we had
225 Prompted by a bug report on 'foo & bar', but I realized we had
216 many more potential bug cases with other operators. The regexp is
226 many more potential bug cases with other operators. The regexp is
217 self.re_exclude_auto, it's fairly commented.
227 self.re_exclude_auto, it's fairly commented.
218
228
219 2006-01-12 Ville Vainio <vivainio@gmail.com>
229 2006-01-12 Ville Vainio <vivainio@gmail.com>
220
230
221 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
231 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
222 Prettified and hardened string/backslash quoting with ipsystem(),
232 Prettified and hardened string/backslash quoting with ipsystem(),
223 ipalias() and ipmagic(). Now even \ characters are passed to
233 ipalias() and ipmagic(). Now even \ characters are passed to
224 %magics, !shell escapes and aliases exactly as they are in the
234 %magics, !shell escapes and aliases exactly as they are in the
225 ipython command line. Should improve backslash experience,
235 ipython command line. Should improve backslash experience,
226 particularly in Windows (path delimiter for some commands that
236 particularly in Windows (path delimiter for some commands that
227 won't understand '/'), but Unix benefits as well (regexps). %cd
237 won't understand '/'), but Unix benefits as well (regexps). %cd
228 magic still doesn't support backslash path delimiters, though. Also
238 magic still doesn't support backslash path delimiters, though. Also
229 deleted all pretense of supporting multiline command strings in
239 deleted all pretense of supporting multiline command strings in
230 !system or %magic commands. Thanks to Jerry McRae for suggestions.
240 !system or %magic commands. Thanks to Jerry McRae for suggestions.
231
241
232 * doc/build_doc_instructions.txt added. Documentation on how to
242 * doc/build_doc_instructions.txt added. Documentation on how to
233 use doc/update_manual.py, added yesterday. Both files contributed
243 use doc/update_manual.py, added yesterday. Both files contributed
234 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
244 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
235 doc/*.sh for deprecation at a later date.
245 doc/*.sh for deprecation at a later date.
236
246
237 * /ipython.py Added ipython.py to root directory for
247 * /ipython.py Added ipython.py to root directory for
238 zero-installation (tar xzvf ipython.tgz; cd ipython; python
248 zero-installation (tar xzvf ipython.tgz; cd ipython; python
239 ipython.py) and development convenience (no need to kee doing
249 ipython.py) and development convenience (no need to kee doing
240 "setup.py install" between changes).
250 "setup.py install" between changes).
241
251
242 * Made ! and !! shell escapes work (again) in multiline expressions:
252 * Made ! and !! shell escapes work (again) in multiline expressions:
243 if 1:
253 if 1:
244 !ls
254 !ls
245 !!ls
255 !!ls
246
256
247 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
257 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
248
258
249 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
259 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
250 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
260 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
251 module in case-insensitive installation. Was causing crashes
261 module in case-insensitive installation. Was causing crashes
252 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
262 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
253
263
254 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
264 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
255 <marienz-AT-gentoo.org>, closes
265 <marienz-AT-gentoo.org>, closes
256 http://www.scipy.net/roundup/ipython/issue51.
266 http://www.scipy.net/roundup/ipython/issue51.
257
267
258 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
268 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
259
269
260 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
270 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
261 problem of excessive CPU usage under *nix and keyboard lag under
271 problem of excessive CPU usage under *nix and keyboard lag under
262 win32.
272 win32.
263
273
264 2006-01-10 *** Released version 0.7.0
274 2006-01-10 *** Released version 0.7.0
265
275
266 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
276 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
267
277
268 * IPython/Release.py (revision): tag version number to 0.7.0,
278 * IPython/Release.py (revision): tag version number to 0.7.0,
269 ready for release.
279 ready for release.
270
280
271 * IPython/Magic.py (magic_edit): Add print statement to %edit so
281 * IPython/Magic.py (magic_edit): Add print statement to %edit so
272 it informs the user of the name of the temp. file used. This can
282 it informs the user of the name of the temp. file used. This can
273 help if you decide later to reuse that same file, so you know
283 help if you decide later to reuse that same file, so you know
274 where to copy the info from.
284 where to copy the info from.
275
285
276 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
286 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
277
287
278 * setup_bdist_egg.py: little script to build an egg. Added
288 * setup_bdist_egg.py: little script to build an egg. Added
279 support in the release tools as well.
289 support in the release tools as well.
280
290
281 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
291 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
282
292
283 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
293 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
284 version selection (new -wxversion command line and ipythonrc
294 version selection (new -wxversion command line and ipythonrc
285 parameter). Patch contributed by Arnd Baecker
295 parameter). Patch contributed by Arnd Baecker
286 <arnd.baecker-AT-web.de>.
296 <arnd.baecker-AT-web.de>.
287
297
288 * IPython/iplib.py (embed_mainloop): fix tab-completion in
298 * IPython/iplib.py (embed_mainloop): fix tab-completion in
289 embedded instances, for variables defined at the interactive
299 embedded instances, for variables defined at the interactive
290 prompt of the embedded ipython. Reported by Arnd.
300 prompt of the embedded ipython. Reported by Arnd.
291
301
292 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
302 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
293 it can be used as a (stateful) toggle, or with a direct parameter.
303 it can be used as a (stateful) toggle, or with a direct parameter.
294
304
295 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
305 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
296 could be triggered in certain cases and cause the traceback
306 could be triggered in certain cases and cause the traceback
297 printer not to work.
307 printer not to work.
298
308
299 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
309 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
300
310
301 * IPython/iplib.py (_should_recompile): Small fix, closes
311 * IPython/iplib.py (_should_recompile): Small fix, closes
302 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
312 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
303
313
304 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
314 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
305
315
306 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
316 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
307 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
317 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
308 Moad for help with tracking it down.
318 Moad for help with tracking it down.
309
319
310 * IPython/iplib.py (handle_auto): fix autocall handling for
320 * IPython/iplib.py (handle_auto): fix autocall handling for
311 objects which support BOTH __getitem__ and __call__ (so that f [x]
321 objects which support BOTH __getitem__ and __call__ (so that f [x]
312 is left alone, instead of becoming f([x]) automatically).
322 is left alone, instead of becoming f([x]) automatically).
313
323
314 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
324 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
315 Ville's patch.
325 Ville's patch.
316
326
317 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
327 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
318
328
319 * IPython/iplib.py (handle_auto): changed autocall semantics to
329 * IPython/iplib.py (handle_auto): changed autocall semantics to
320 include 'smart' mode, where the autocall transformation is NOT
330 include 'smart' mode, where the autocall transformation is NOT
321 applied if there are no arguments on the line. This allows you to
331 applied if there are no arguments on the line. This allows you to
322 just type 'foo' if foo is a callable to see its internal form,
332 just type 'foo' if foo is a callable to see its internal form,
323 instead of having it called with no arguments (typically a
333 instead of having it called with no arguments (typically a
324 mistake). The old 'full' autocall still exists: for that, you
334 mistake). The old 'full' autocall still exists: for that, you
325 need to set the 'autocall' parameter to 2 in your ipythonrc file.
335 need to set the 'autocall' parameter to 2 in your ipythonrc file.
326
336
327 * IPython/completer.py (Completer.attr_matches): add
337 * IPython/completer.py (Completer.attr_matches): add
328 tab-completion support for Enthoughts' traits. After a report by
338 tab-completion support for Enthoughts' traits. After a report by
329 Arnd and a patch by Prabhu.
339 Arnd and a patch by Prabhu.
330
340
331 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
341 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
332
342
333 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
343 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
334 Schmolck's patch to fix inspect.getinnerframes().
344 Schmolck's patch to fix inspect.getinnerframes().
335
345
336 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
346 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
337 for embedded instances, regarding handling of namespaces and items
347 for embedded instances, regarding handling of namespaces and items
338 added to the __builtin__ one. Multiple embedded instances and
348 added to the __builtin__ one. Multiple embedded instances and
339 recursive embeddings should work better now (though I'm not sure
349 recursive embeddings should work better now (though I'm not sure
340 I've got all the corner cases fixed, that code is a bit of a brain
350 I've got all the corner cases fixed, that code is a bit of a brain
341 twister).
351 twister).
342
352
343 * IPython/Magic.py (magic_edit): added support to edit in-memory
353 * IPython/Magic.py (magic_edit): added support to edit in-memory
344 macros (automatically creates the necessary temp files). %edit
354 macros (automatically creates the necessary temp files). %edit
345 also doesn't return the file contents anymore, it's just noise.
355 also doesn't return the file contents anymore, it's just noise.
346
356
347 * IPython/completer.py (Completer.attr_matches): revert change to
357 * IPython/completer.py (Completer.attr_matches): revert change to
348 complete only on attributes listed in __all__. I realized it
358 complete only on attributes listed in __all__. I realized it
349 cripples the tab-completion system as a tool for exploring the
359 cripples the tab-completion system as a tool for exploring the
350 internals of unknown libraries (it renders any non-__all__
360 internals of unknown libraries (it renders any non-__all__
351 attribute off-limits). I got bit by this when trying to see
361 attribute off-limits). I got bit by this when trying to see
352 something inside the dis module.
362 something inside the dis module.
353
363
354 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
364 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
355
365
356 * IPython/iplib.py (InteractiveShell.__init__): add .meta
366 * IPython/iplib.py (InteractiveShell.__init__): add .meta
357 namespace for users and extension writers to hold data in. This
367 namespace for users and extension writers to hold data in. This
358 follows the discussion in
368 follows the discussion in
359 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
369 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
360
370
361 * IPython/completer.py (IPCompleter.complete): small patch to help
371 * IPython/completer.py (IPCompleter.complete): small patch to help
362 tab-completion under Emacs, after a suggestion by John Barnard
372 tab-completion under Emacs, after a suggestion by John Barnard
363 <barnarj-AT-ccf.org>.
373 <barnarj-AT-ccf.org>.
364
374
365 * IPython/Magic.py (Magic.extract_input_slices): added support for
375 * IPython/Magic.py (Magic.extract_input_slices): added support for
366 the slice notation in magics to use N-M to represent numbers N...M
376 the slice notation in magics to use N-M to represent numbers N...M
367 (closed endpoints). This is used by %macro and %save.
377 (closed endpoints). This is used by %macro and %save.
368
378
369 * IPython/completer.py (Completer.attr_matches): for modules which
379 * IPython/completer.py (Completer.attr_matches): for modules which
370 define __all__, complete only on those. After a patch by Jeffrey
380 define __all__, complete only on those. After a patch by Jeffrey
371 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
381 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
372 speed up this routine.
382 speed up this routine.
373
383
374 * IPython/Logger.py (Logger.log): fix a history handling bug. I
384 * IPython/Logger.py (Logger.log): fix a history handling bug. I
375 don't know if this is the end of it, but the behavior now is
385 don't know if this is the end of it, but the behavior now is
376 certainly much more correct. Note that coupled with macros,
386 certainly much more correct. Note that coupled with macros,
377 slightly surprising (at first) behavior may occur: a macro will in
387 slightly surprising (at first) behavior may occur: a macro will in
378 general expand to multiple lines of input, so upon exiting, the
388 general expand to multiple lines of input, so upon exiting, the
379 in/out counters will both be bumped by the corresponding amount
389 in/out counters will both be bumped by the corresponding amount
380 (as if the macro's contents had been typed interactively). Typing
390 (as if the macro's contents had been typed interactively). Typing
381 %hist will reveal the intermediate (silently processed) lines.
391 %hist will reveal the intermediate (silently processed) lines.
382
392
383 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
393 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
384 pickle to fail (%run was overwriting __main__ and not restoring
394 pickle to fail (%run was overwriting __main__ and not restoring
385 it, but pickle relies on __main__ to operate).
395 it, but pickle relies on __main__ to operate).
386
396
387 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
397 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
388 using properties, but forgot to make the main InteractiveShell
398 using properties, but forgot to make the main InteractiveShell
389 class a new-style class. Properties fail silently, and
399 class a new-style class. Properties fail silently, and
390 misteriously, with old-style class (getters work, but
400 misteriously, with old-style class (getters work, but
391 setters don't do anything).
401 setters don't do anything).
392
402
393 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
403 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
394
404
395 * IPython/Magic.py (magic_history): fix history reporting bug (I
405 * IPython/Magic.py (magic_history): fix history reporting bug (I
396 know some nasties are still there, I just can't seem to find a
406 know some nasties are still there, I just can't seem to find a
397 reproducible test case to track them down; the input history is
407 reproducible test case to track them down; the input history is
398 falling out of sync...)
408 falling out of sync...)
399
409
400 * IPython/iplib.py (handle_shell_escape): fix bug where both
410 * IPython/iplib.py (handle_shell_escape): fix bug where both
401 aliases and system accesses where broken for indented code (such
411 aliases and system accesses where broken for indented code (such
402 as loops).
412 as loops).
403
413
404 * IPython/genutils.py (shell): fix small but critical bug for
414 * IPython/genutils.py (shell): fix small but critical bug for
405 win32 system access.
415 win32 system access.
406
416
407 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
417 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
408
418
409 * IPython/iplib.py (showtraceback): remove use of the
419 * IPython/iplib.py (showtraceback): remove use of the
410 sys.last_{type/value/traceback} structures, which are non
420 sys.last_{type/value/traceback} structures, which are non
411 thread-safe.
421 thread-safe.
412 (_prefilter): change control flow to ensure that we NEVER
422 (_prefilter): change control flow to ensure that we NEVER
413 introspect objects when autocall is off. This will guarantee that
423 introspect objects when autocall is off. This will guarantee that
414 having an input line of the form 'x.y', where access to attribute
424 having an input line of the form 'x.y', where access to attribute
415 'y' has side effects, doesn't trigger the side effect TWICE. It
425 'y' has side effects, doesn't trigger the side effect TWICE. It
416 is important to note that, with autocall on, these side effects
426 is important to note that, with autocall on, these side effects
417 can still happen.
427 can still happen.
418 (ipsystem): new builtin, to complete the ip{magic/alias/system}
428 (ipsystem): new builtin, to complete the ip{magic/alias/system}
419 trio. IPython offers these three kinds of special calls which are
429 trio. IPython offers these three kinds of special calls which are
420 not python code, and it's a good thing to have their call method
430 not python code, and it's a good thing to have their call method
421 be accessible as pure python functions (not just special syntax at
431 be accessible as pure python functions (not just special syntax at
422 the command line). It gives us a better internal implementation
432 the command line). It gives us a better internal implementation
423 structure, as well as exposing these for user scripting more
433 structure, as well as exposing these for user scripting more
424 cleanly.
434 cleanly.
425
435
426 * IPython/macro.py (Macro.__init__): moved macros to a standalone
436 * IPython/macro.py (Macro.__init__): moved macros to a standalone
427 file. Now that they'll be more likely to be used with the
437 file. Now that they'll be more likely to be used with the
428 persistance system (%store), I want to make sure their module path
438 persistance system (%store), I want to make sure their module path
429 doesn't change in the future, so that we don't break things for
439 doesn't change in the future, so that we don't break things for
430 users' persisted data.
440 users' persisted data.
431
441
432 * IPython/iplib.py (autoindent_update): move indentation
442 * IPython/iplib.py (autoindent_update): move indentation
433 management into the _text_ processing loop, not the keyboard
443 management into the _text_ processing loop, not the keyboard
434 interactive one. This is necessary to correctly process non-typed
444 interactive one. This is necessary to correctly process non-typed
435 multiline input (such as macros).
445 multiline input (such as macros).
436
446
437 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
447 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
438 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
448 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
439 which was producing problems in the resulting manual.
449 which was producing problems in the resulting manual.
440 (magic_whos): improve reporting of instances (show their class,
450 (magic_whos): improve reporting of instances (show their class,
441 instead of simply printing 'instance' which isn't terribly
451 instead of simply printing 'instance' which isn't terribly
442 informative).
452 informative).
443
453
444 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
454 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
445 (minor mods) to support network shares under win32.
455 (minor mods) to support network shares under win32.
446
456
447 * IPython/winconsole.py (get_console_size): add new winconsole
457 * IPython/winconsole.py (get_console_size): add new winconsole
448 module and fixes to page_dumb() to improve its behavior under
458 module and fixes to page_dumb() to improve its behavior under
449 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
459 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
450
460
451 * IPython/Magic.py (Macro): simplified Macro class to just
461 * IPython/Magic.py (Macro): simplified Macro class to just
452 subclass list. We've had only 2.2 compatibility for a very long
462 subclass list. We've had only 2.2 compatibility for a very long
453 time, yet I was still avoiding subclassing the builtin types. No
463 time, yet I was still avoiding subclassing the builtin types. No
454 more (I'm also starting to use properties, though I won't shift to
464 more (I'm also starting to use properties, though I won't shift to
455 2.3-specific features quite yet).
465 2.3-specific features quite yet).
456 (magic_store): added Ville's patch for lightweight variable
466 (magic_store): added Ville's patch for lightweight variable
457 persistence, after a request on the user list by Matt Wilkie
467 persistence, after a request on the user list by Matt Wilkie
458 <maphew-AT-gmail.com>. The new %store magic's docstring has full
468 <maphew-AT-gmail.com>. The new %store magic's docstring has full
459 details.
469 details.
460
470
461 * IPython/iplib.py (InteractiveShell.post_config_initialization):
471 * IPython/iplib.py (InteractiveShell.post_config_initialization):
462 changed the default logfile name from 'ipython.log' to
472 changed the default logfile name from 'ipython.log' to
463 'ipython_log.py'. These logs are real python files, and now that
473 'ipython_log.py'. These logs are real python files, and now that
464 we have much better multiline support, people are more likely to
474 we have much better multiline support, people are more likely to
465 want to use them as such. Might as well name them correctly.
475 want to use them as such. Might as well name them correctly.
466
476
467 * IPython/Magic.py: substantial cleanup. While we can't stop
477 * IPython/Magic.py: substantial cleanup. While we can't stop
468 using magics as mixins, due to the existing customizations 'out
478 using magics as mixins, due to the existing customizations 'out
469 there' which rely on the mixin naming conventions, at least I
479 there' which rely on the mixin naming conventions, at least I
470 cleaned out all cross-class name usage. So once we are OK with
480 cleaned out all cross-class name usage. So once we are OK with
471 breaking compatibility, the two systems can be separated.
481 breaking compatibility, the two systems can be separated.
472
482
473 * IPython/Logger.py: major cleanup. This one is NOT a mixin
483 * IPython/Logger.py: major cleanup. This one is NOT a mixin
474 anymore, and the class is a fair bit less hideous as well. New
484 anymore, and the class is a fair bit less hideous as well. New
475 features were also introduced: timestamping of input, and logging
485 features were also introduced: timestamping of input, and logging
476 of output results. These are user-visible with the -t and -o
486 of output results. These are user-visible with the -t and -o
477 options to %logstart. Closes
487 options to %logstart. Closes
478 http://www.scipy.net/roundup/ipython/issue11 and a request by
488 http://www.scipy.net/roundup/ipython/issue11 and a request by
479 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
489 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
480
490
481 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
491 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
482
492
483 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
493 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
484 better hadnle backslashes in paths. See the thread 'More Windows
494 better hadnle backslashes in paths. See the thread 'More Windows
485 questions part 2 - \/ characters revisited' on the iypthon user
495 questions part 2 - \/ characters revisited' on the iypthon user
486 list:
496 list:
487 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
497 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
488
498
489 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
499 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
490
500
491 (InteractiveShell.__init__): change threaded shells to not use the
501 (InteractiveShell.__init__): change threaded shells to not use the
492 ipython crash handler. This was causing more problems than not,
502 ipython crash handler. This was causing more problems than not,
493 as exceptions in the main thread (GUI code, typically) would
503 as exceptions in the main thread (GUI code, typically) would
494 always show up as a 'crash', when they really weren't.
504 always show up as a 'crash', when they really weren't.
495
505
496 The colors and exception mode commands (%colors/%xmode) have been
506 The colors and exception mode commands (%colors/%xmode) have been
497 synchronized to also take this into account, so users can get
507 synchronized to also take this into account, so users can get
498 verbose exceptions for their threaded code as well. I also added
508 verbose exceptions for their threaded code as well. I also added
499 support for activating pdb inside this exception handler as well,
509 support for activating pdb inside this exception handler as well,
500 so now GUI authors can use IPython's enhanced pdb at runtime.
510 so now GUI authors can use IPython's enhanced pdb at runtime.
501
511
502 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
512 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
503 true by default, and add it to the shipped ipythonrc file. Since
513 true by default, and add it to the shipped ipythonrc file. Since
504 this asks the user before proceeding, I think it's OK to make it
514 this asks the user before proceeding, I think it's OK to make it
505 true by default.
515 true by default.
506
516
507 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
517 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
508 of the previous special-casing of input in the eval loop. I think
518 of the previous special-casing of input in the eval loop. I think
509 this is cleaner, as they really are commands and shouldn't have
519 this is cleaner, as they really are commands and shouldn't have
510 a special role in the middle of the core code.
520 a special role in the middle of the core code.
511
521
512 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
522 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
513
523
514 * IPython/iplib.py (edit_syntax_error): added support for
524 * IPython/iplib.py (edit_syntax_error): added support for
515 automatically reopening the editor if the file had a syntax error
525 automatically reopening the editor if the file had a syntax error
516 in it. Thanks to scottt who provided the patch at:
526 in it. Thanks to scottt who provided the patch at:
517 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
527 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
518 version committed).
528 version committed).
519
529
520 * IPython/iplib.py (handle_normal): add suport for multi-line
530 * IPython/iplib.py (handle_normal): add suport for multi-line
521 input with emtpy lines. This fixes
531 input with emtpy lines. This fixes
522 http://www.scipy.net/roundup/ipython/issue43 and a similar
532 http://www.scipy.net/roundup/ipython/issue43 and a similar
523 discussion on the user list.
533 discussion on the user list.
524
534
525 WARNING: a behavior change is necessarily introduced to support
535 WARNING: a behavior change is necessarily introduced to support
526 blank lines: now a single blank line with whitespace does NOT
536 blank lines: now a single blank line with whitespace does NOT
527 break the input loop, which means that when autoindent is on, by
537 break the input loop, which means that when autoindent is on, by
528 default hitting return on the next (indented) line does NOT exit.
538 default hitting return on the next (indented) line does NOT exit.
529
539
530 Instead, to exit a multiline input you can either have:
540 Instead, to exit a multiline input you can either have:
531
541
532 - TWO whitespace lines (just hit return again), or
542 - TWO whitespace lines (just hit return again), or
533 - a single whitespace line of a different length than provided
543 - a single whitespace line of a different length than provided
534 by the autoindent (add or remove a space).
544 by the autoindent (add or remove a space).
535
545
536 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
546 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
537 module to better organize all readline-related functionality.
547 module to better organize all readline-related functionality.
538 I've deleted FlexCompleter and put all completion clases here.
548 I've deleted FlexCompleter and put all completion clases here.
539
549
540 * IPython/iplib.py (raw_input): improve indentation management.
550 * IPython/iplib.py (raw_input): improve indentation management.
541 It is now possible to paste indented code with autoindent on, and
551 It is now possible to paste indented code with autoindent on, and
542 the code is interpreted correctly (though it still looks bad on
552 the code is interpreted correctly (though it still looks bad on
543 screen, due to the line-oriented nature of ipython).
553 screen, due to the line-oriented nature of ipython).
544 (MagicCompleter.complete): change behavior so that a TAB key on an
554 (MagicCompleter.complete): change behavior so that a TAB key on an
545 otherwise empty line actually inserts a tab, instead of completing
555 otherwise empty line actually inserts a tab, instead of completing
546 on the entire global namespace. This makes it easier to use the
556 on the entire global namespace. This makes it easier to use the
547 TAB key for indentation. After a request by Hans Meine
557 TAB key for indentation. After a request by Hans Meine
548 <hans_meine-AT-gmx.net>
558 <hans_meine-AT-gmx.net>
549 (_prefilter): add support so that typing plain 'exit' or 'quit'
559 (_prefilter): add support so that typing plain 'exit' or 'quit'
550 does a sensible thing. Originally I tried to deviate as little as
560 does a sensible thing. Originally I tried to deviate as little as
551 possible from the default python behavior, but even that one may
561 possible from the default python behavior, but even that one may
552 change in this direction (thread on python-dev to that effect).
562 change in this direction (thread on python-dev to that effect).
553 Regardless, ipython should do the right thing even if CPython's
563 Regardless, ipython should do the right thing even if CPython's
554 '>>>' prompt doesn't.
564 '>>>' prompt doesn't.
555 (InteractiveShell): removed subclassing code.InteractiveConsole
565 (InteractiveShell): removed subclassing code.InteractiveConsole
556 class. By now we'd overridden just about all of its methods: I've
566 class. By now we'd overridden just about all of its methods: I've
557 copied the remaining two over, and now ipython is a standalone
567 copied the remaining two over, and now ipython is a standalone
558 class. This will provide a clearer picture for the chainsaw
568 class. This will provide a clearer picture for the chainsaw
559 branch refactoring.
569 branch refactoring.
560
570
561 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
571 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
562
572
563 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
573 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
564 failures for objects which break when dir() is called on them.
574 failures for objects which break when dir() is called on them.
565
575
566 * IPython/FlexCompleter.py (Completer.__init__): Added support for
576 * IPython/FlexCompleter.py (Completer.__init__): Added support for
567 distinct local and global namespaces in the completer API. This
577 distinct local and global namespaces in the completer API. This
568 change allows us top properly handle completion with distinct
578 change allows us top properly handle completion with distinct
569 scopes, including in embedded instances (this had never really
579 scopes, including in embedded instances (this had never really
570 worked correctly).
580 worked correctly).
571
581
572 Note: this introduces a change in the constructor for
582 Note: this introduces a change in the constructor for
573 MagicCompleter, as a new global_namespace parameter is now the
583 MagicCompleter, as a new global_namespace parameter is now the
574 second argument (the others were bumped one position).
584 second argument (the others were bumped one position).
575
585
576 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
586 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
577
587
578 * IPython/iplib.py (embed_mainloop): fix tab-completion in
588 * IPython/iplib.py (embed_mainloop): fix tab-completion in
579 embedded instances (which can be done now thanks to Vivian's
589 embedded instances (which can be done now thanks to Vivian's
580 frame-handling fixes for pdb).
590 frame-handling fixes for pdb).
581 (InteractiveShell.__init__): Fix namespace handling problem in
591 (InteractiveShell.__init__): Fix namespace handling problem in
582 embedded instances. We were overwriting __main__ unconditionally,
592 embedded instances. We were overwriting __main__ unconditionally,
583 and this should only be done for 'full' (non-embedded) IPython;
593 and this should only be done for 'full' (non-embedded) IPython;
584 embedded instances must respect the caller's __main__. Thanks to
594 embedded instances must respect the caller's __main__. Thanks to
585 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
595 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
586
596
587 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
597 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
588
598
589 * setup.py: added download_url to setup(). This registers the
599 * setup.py: added download_url to setup(). This registers the
590 download address at PyPI, which is not only useful to humans
600 download address at PyPI, which is not only useful to humans
591 browsing the site, but is also picked up by setuptools (the Eggs
601 browsing the site, but is also picked up by setuptools (the Eggs
592 machinery). Thanks to Ville and R. Kern for the info/discussion
602 machinery). Thanks to Ville and R. Kern for the info/discussion
593 on this.
603 on this.
594
604
595 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
605 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
596
606
597 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
607 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
598 This brings a lot of nice functionality to the pdb mode, which now
608 This brings a lot of nice functionality to the pdb mode, which now
599 has tab-completion, syntax highlighting, and better stack handling
609 has tab-completion, syntax highlighting, and better stack handling
600 than before. Many thanks to Vivian De Smedt
610 than before. Many thanks to Vivian De Smedt
601 <vivian-AT-vdesmedt.com> for the original patches.
611 <vivian-AT-vdesmedt.com> for the original patches.
602
612
603 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
613 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
604
614
605 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
615 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
606 sequence to consistently accept the banner argument. The
616 sequence to consistently accept the banner argument. The
607 inconsistency was tripping SAGE, thanks to Gary Zablackis
617 inconsistency was tripping SAGE, thanks to Gary Zablackis
608 <gzabl-AT-yahoo.com> for the report.
618 <gzabl-AT-yahoo.com> for the report.
609
619
610 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
620 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
611
621
612 * IPython/iplib.py (InteractiveShell.post_config_initialization):
622 * IPython/iplib.py (InteractiveShell.post_config_initialization):
613 Fix bug where a naked 'alias' call in the ipythonrc file would
623 Fix bug where a naked 'alias' call in the ipythonrc file would
614 cause a crash. Bug reported by Jorgen Stenarson.
624 cause a crash. Bug reported by Jorgen Stenarson.
615
625
616 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
626 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
617
627
618 * IPython/ipmaker.py (make_IPython): cleanups which should improve
628 * IPython/ipmaker.py (make_IPython): cleanups which should improve
619 startup time.
629 startup time.
620
630
621 * IPython/iplib.py (runcode): my globals 'fix' for embedded
631 * IPython/iplib.py (runcode): my globals 'fix' for embedded
622 instances had introduced a bug with globals in normal code. Now
632 instances had introduced a bug with globals in normal code. Now
623 it's working in all cases.
633 it's working in all cases.
624
634
625 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
635 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
626 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
636 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
627 has been introduced to set the default case sensitivity of the
637 has been introduced to set the default case sensitivity of the
628 searches. Users can still select either mode at runtime on a
638 searches. Users can still select either mode at runtime on a
629 per-search basis.
639 per-search basis.
630
640
631 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
641 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
632
642
633 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
643 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
634 attributes in wildcard searches for subclasses. Modified version
644 attributes in wildcard searches for subclasses. Modified version
635 of a patch by Jorgen.
645 of a patch by Jorgen.
636
646
637 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
647 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
638
648
639 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
649 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
640 embedded instances. I added a user_global_ns attribute to the
650 embedded instances. I added a user_global_ns attribute to the
641 InteractiveShell class to handle this.
651 InteractiveShell class to handle this.
642
652
643 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
653 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
644
654
645 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
655 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
646 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
656 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
647 (reported under win32, but may happen also in other platforms).
657 (reported under win32, but may happen also in other platforms).
648 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
658 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
649
659
650 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
660 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
651
661
652 * IPython/Magic.py (magic_psearch): new support for wildcard
662 * IPython/Magic.py (magic_psearch): new support for wildcard
653 patterns. Now, typing ?a*b will list all names which begin with a
663 patterns. Now, typing ?a*b will list all names which begin with a
654 and end in b, for example. The %psearch magic has full
664 and end in b, for example. The %psearch magic has full
655 docstrings. Many thanks to JΓΆrgen Stenarson
665 docstrings. Many thanks to JΓΆrgen Stenarson
656 <jorgen.stenarson-AT-bostream.nu>, author of the patches
666 <jorgen.stenarson-AT-bostream.nu>, author of the patches
657 implementing this functionality.
667 implementing this functionality.
658
668
659 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
669 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
660
670
661 * Manual: fixed long-standing annoyance of double-dashes (as in
671 * Manual: fixed long-standing annoyance of double-dashes (as in
662 --prefix=~, for example) being stripped in the HTML version. This
672 --prefix=~, for example) being stripped in the HTML version. This
663 is a latex2html bug, but a workaround was provided. Many thanks
673 is a latex2html bug, but a workaround was provided. Many thanks
664 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
674 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
665 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
675 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
666 rolling. This seemingly small issue had tripped a number of users
676 rolling. This seemingly small issue had tripped a number of users
667 when first installing, so I'm glad to see it gone.
677 when first installing, so I'm glad to see it gone.
668
678
669 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
679 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
670
680
671 * IPython/Extensions/numeric_formats.py: fix missing import,
681 * IPython/Extensions/numeric_formats.py: fix missing import,
672 reported by Stephen Walton.
682 reported by Stephen Walton.
673
683
674 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
684 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
675
685
676 * IPython/demo.py: finish demo module, fully documented now.
686 * IPython/demo.py: finish demo module, fully documented now.
677
687
678 * IPython/genutils.py (file_read): simple little utility to read a
688 * IPython/genutils.py (file_read): simple little utility to read a
679 file and ensure it's closed afterwards.
689 file and ensure it's closed afterwards.
680
690
681 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
691 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
682
692
683 * IPython/demo.py (Demo.__init__): added support for individually
693 * IPython/demo.py (Demo.__init__): added support for individually
684 tagging blocks for automatic execution.
694 tagging blocks for automatic execution.
685
695
686 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
696 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
687 syntax-highlighted python sources, requested by John.
697 syntax-highlighted python sources, requested by John.
688
698
689 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
699 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
690
700
691 * IPython/demo.py (Demo.again): fix bug where again() blocks after
701 * IPython/demo.py (Demo.again): fix bug where again() blocks after
692 finishing.
702 finishing.
693
703
694 * IPython/genutils.py (shlex_split): moved from Magic to here,
704 * IPython/genutils.py (shlex_split): moved from Magic to here,
695 where all 2.2 compatibility stuff lives. I needed it for demo.py.
705 where all 2.2 compatibility stuff lives. I needed it for demo.py.
696
706
697 * IPython/demo.py (Demo.__init__): added support for silent
707 * IPython/demo.py (Demo.__init__): added support for silent
698 blocks, improved marks as regexps, docstrings written.
708 blocks, improved marks as regexps, docstrings written.
699 (Demo.__init__): better docstring, added support for sys.argv.
709 (Demo.__init__): better docstring, added support for sys.argv.
700
710
701 * IPython/genutils.py (marquee): little utility used by the demo
711 * IPython/genutils.py (marquee): little utility used by the demo
702 code, handy in general.
712 code, handy in general.
703
713
704 * IPython/demo.py (Demo.__init__): new class for interactive
714 * IPython/demo.py (Demo.__init__): new class for interactive
705 demos. Not documented yet, I just wrote it in a hurry for
715 demos. Not documented yet, I just wrote it in a hurry for
706 scipy'05. Will docstring later.
716 scipy'05. Will docstring later.
707
717
708 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
718 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
709
719
710 * IPython/Shell.py (sigint_handler): Drastic simplification which
720 * IPython/Shell.py (sigint_handler): Drastic simplification which
711 also seems to make Ctrl-C work correctly across threads! This is
721 also seems to make Ctrl-C work correctly across threads! This is
712 so simple, that I can't beleive I'd missed it before. Needs more
722 so simple, that I can't beleive I'd missed it before. Needs more
713 testing, though.
723 testing, though.
714 (KBINT): Never mind, revert changes. I'm sure I'd tried something
724 (KBINT): Never mind, revert changes. I'm sure I'd tried something
715 like this before...
725 like this before...
716
726
717 * IPython/genutils.py (get_home_dir): add protection against
727 * IPython/genutils.py (get_home_dir): add protection against
718 non-dirs in win32 registry.
728 non-dirs in win32 registry.
719
729
720 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
730 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
721 bug where dict was mutated while iterating (pysh crash).
731 bug where dict was mutated while iterating (pysh crash).
722
732
723 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
733 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
724
734
725 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
735 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
726 spurious newlines added by this routine. After a report by
736 spurious newlines added by this routine. After a report by
727 F. Mantegazza.
737 F. Mantegazza.
728
738
729 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
739 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
730
740
731 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
741 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
732 calls. These were a leftover from the GTK 1.x days, and can cause
742 calls. These were a leftover from the GTK 1.x days, and can cause
733 problems in certain cases (after a report by John Hunter).
743 problems in certain cases (after a report by John Hunter).
734
744
735 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
745 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
736 os.getcwd() fails at init time. Thanks to patch from David Remahl
746 os.getcwd() fails at init time. Thanks to patch from David Remahl
737 <chmod007-AT-mac.com>.
747 <chmod007-AT-mac.com>.
738 (InteractiveShell.__init__): prevent certain special magics from
748 (InteractiveShell.__init__): prevent certain special magics from
739 being shadowed by aliases. Closes
749 being shadowed by aliases. Closes
740 http://www.scipy.net/roundup/ipython/issue41.
750 http://www.scipy.net/roundup/ipython/issue41.
741
751
742 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
752 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
743
753
744 * IPython/iplib.py (InteractiveShell.complete): Added new
754 * IPython/iplib.py (InteractiveShell.complete): Added new
745 top-level completion method to expose the completion mechanism
755 top-level completion method to expose the completion mechanism
746 beyond readline-based environments.
756 beyond readline-based environments.
747
757
748 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
758 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
749
759
750 * tools/ipsvnc (svnversion): fix svnversion capture.
760 * tools/ipsvnc (svnversion): fix svnversion capture.
751
761
752 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
762 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
753 attribute to self, which was missing. Before, it was set by a
763 attribute to self, which was missing. Before, it was set by a
754 routine which in certain cases wasn't being called, so the
764 routine which in certain cases wasn't being called, so the
755 instance could end up missing the attribute. This caused a crash.
765 instance could end up missing the attribute. This caused a crash.
756 Closes http://www.scipy.net/roundup/ipython/issue40.
766 Closes http://www.scipy.net/roundup/ipython/issue40.
757
767
758 2005-08-16 Fernando Perez <fperez@colorado.edu>
768 2005-08-16 Fernando Perez <fperez@colorado.edu>
759
769
760 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
770 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
761 contains non-string attribute. Closes
771 contains non-string attribute. Closes
762 http://www.scipy.net/roundup/ipython/issue38.
772 http://www.scipy.net/roundup/ipython/issue38.
763
773
764 2005-08-14 Fernando Perez <fperez@colorado.edu>
774 2005-08-14 Fernando Perez <fperez@colorado.edu>
765
775
766 * tools/ipsvnc: Minor improvements, to add changeset info.
776 * tools/ipsvnc: Minor improvements, to add changeset info.
767
777
768 2005-08-12 Fernando Perez <fperez@colorado.edu>
778 2005-08-12 Fernando Perez <fperez@colorado.edu>
769
779
770 * IPython/iplib.py (runsource): remove self.code_to_run_src
780 * IPython/iplib.py (runsource): remove self.code_to_run_src
771 attribute. I realized this is nothing more than
781 attribute. I realized this is nothing more than
772 '\n'.join(self.buffer), and having the same data in two different
782 '\n'.join(self.buffer), and having the same data in two different
773 places is just asking for synchronization bugs. This may impact
783 places is just asking for synchronization bugs. This may impact
774 people who have custom exception handlers, so I need to warn
784 people who have custom exception handlers, so I need to warn
775 ipython-dev about it (F. Mantegazza may use them).
785 ipython-dev about it (F. Mantegazza may use them).
776
786
777 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
787 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
778
788
779 * IPython/genutils.py: fix 2.2 compatibility (generators)
789 * IPython/genutils.py: fix 2.2 compatibility (generators)
780
790
781 2005-07-18 Fernando Perez <fperez@colorado.edu>
791 2005-07-18 Fernando Perez <fperez@colorado.edu>
782
792
783 * IPython/genutils.py (get_home_dir): fix to help users with
793 * IPython/genutils.py (get_home_dir): fix to help users with
784 invalid $HOME under win32.
794 invalid $HOME under win32.
785
795
786 2005-07-17 Fernando Perez <fperez@colorado.edu>
796 2005-07-17 Fernando Perez <fperez@colorado.edu>
787
797
788 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
798 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
789 some old hacks and clean up a bit other routines; code should be
799 some old hacks and clean up a bit other routines; code should be
790 simpler and a bit faster.
800 simpler and a bit faster.
791
801
792 * IPython/iplib.py (interact): removed some last-resort attempts
802 * IPython/iplib.py (interact): removed some last-resort attempts
793 to survive broken stdout/stderr. That code was only making it
803 to survive broken stdout/stderr. That code was only making it
794 harder to abstract out the i/o (necessary for gui integration),
804 harder to abstract out the i/o (necessary for gui integration),
795 and the crashes it could prevent were extremely rare in practice
805 and the crashes it could prevent were extremely rare in practice
796 (besides being fully user-induced in a pretty violent manner).
806 (besides being fully user-induced in a pretty violent manner).
797
807
798 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
808 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
799 Nothing major yet, but the code is simpler to read; this should
809 Nothing major yet, but the code is simpler to read; this should
800 make it easier to do more serious modifications in the future.
810 make it easier to do more serious modifications in the future.
801
811
802 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
812 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
803 which broke in .15 (thanks to a report by Ville).
813 which broke in .15 (thanks to a report by Ville).
804
814
805 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
815 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
806 be quite correct, I know next to nothing about unicode). This
816 be quite correct, I know next to nothing about unicode). This
807 will allow unicode strings to be used in prompts, amongst other
817 will allow unicode strings to be used in prompts, amongst other
808 cases. It also will prevent ipython from crashing when unicode
818 cases. It also will prevent ipython from crashing when unicode
809 shows up unexpectedly in many places. If ascii encoding fails, we
819 shows up unexpectedly in many places. If ascii encoding fails, we
810 assume utf_8. Currently the encoding is not a user-visible
820 assume utf_8. Currently the encoding is not a user-visible
811 setting, though it could be made so if there is demand for it.
821 setting, though it could be made so if there is demand for it.
812
822
813 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
823 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
814
824
815 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
825 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
816
826
817 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
827 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
818
828
819 * IPython/genutils.py: Add 2.2 compatibility here, so all other
829 * IPython/genutils.py: Add 2.2 compatibility here, so all other
820 code can work transparently for 2.2/2.3.
830 code can work transparently for 2.2/2.3.
821
831
822 2005-07-16 Fernando Perez <fperez@colorado.edu>
832 2005-07-16 Fernando Perez <fperez@colorado.edu>
823
833
824 * IPython/ultraTB.py (ExceptionColors): Make a global variable
834 * IPython/ultraTB.py (ExceptionColors): Make a global variable
825 out of the color scheme table used for coloring exception
835 out of the color scheme table used for coloring exception
826 tracebacks. This allows user code to add new schemes at runtime.
836 tracebacks. This allows user code to add new schemes at runtime.
827 This is a minimally modified version of the patch at
837 This is a minimally modified version of the patch at
828 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
838 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
829 for the contribution.
839 for the contribution.
830
840
831 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
841 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
832 slightly modified version of the patch in
842 slightly modified version of the patch in
833 http://www.scipy.net/roundup/ipython/issue34, which also allows me
843 http://www.scipy.net/roundup/ipython/issue34, which also allows me
834 to remove the previous try/except solution (which was costlier).
844 to remove the previous try/except solution (which was costlier).
835 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
845 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
836
846
837 2005-06-08 Fernando Perez <fperez@colorado.edu>
847 2005-06-08 Fernando Perez <fperez@colorado.edu>
838
848
839 * IPython/iplib.py (write/write_err): Add methods to abstract all
849 * IPython/iplib.py (write/write_err): Add methods to abstract all
840 I/O a bit more.
850 I/O a bit more.
841
851
842 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
852 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
843 warning, reported by Aric Hagberg, fix by JD Hunter.
853 warning, reported by Aric Hagberg, fix by JD Hunter.
844
854
845 2005-06-02 *** Released version 0.6.15
855 2005-06-02 *** Released version 0.6.15
846
856
847 2005-06-01 Fernando Perez <fperez@colorado.edu>
857 2005-06-01 Fernando Perez <fperez@colorado.edu>
848
858
849 * IPython/iplib.py (MagicCompleter.file_matches): Fix
859 * IPython/iplib.py (MagicCompleter.file_matches): Fix
850 tab-completion of filenames within open-quoted strings. Note that
860 tab-completion of filenames within open-quoted strings. Note that
851 this requires that in ~/.ipython/ipythonrc, users change the
861 this requires that in ~/.ipython/ipythonrc, users change the
852 readline delimiters configuration to read:
862 readline delimiters configuration to read:
853
863
854 readline_remove_delims -/~
864 readline_remove_delims -/~
855
865
856
866
857 2005-05-31 *** Released version 0.6.14
867 2005-05-31 *** Released version 0.6.14
858
868
859 2005-05-29 Fernando Perez <fperez@colorado.edu>
869 2005-05-29 Fernando Perez <fperez@colorado.edu>
860
870
861 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
871 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
862 with files not on the filesystem. Reported by Eliyahu Sandler
872 with files not on the filesystem. Reported by Eliyahu Sandler
863 <eli@gondolin.net>
873 <eli@gondolin.net>
864
874
865 2005-05-22 Fernando Perez <fperez@colorado.edu>
875 2005-05-22 Fernando Perez <fperez@colorado.edu>
866
876
867 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
877 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
868 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
878 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
869
879
870 2005-05-19 Fernando Perez <fperez@colorado.edu>
880 2005-05-19 Fernando Perez <fperez@colorado.edu>
871
881
872 * IPython/iplib.py (safe_execfile): close a file which could be
882 * IPython/iplib.py (safe_execfile): close a file which could be
873 left open (causing problems in win32, which locks open files).
883 left open (causing problems in win32, which locks open files).
874 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
884 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
875
885
876 2005-05-18 Fernando Perez <fperez@colorado.edu>
886 2005-05-18 Fernando Perez <fperez@colorado.edu>
877
887
878 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
888 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
879 keyword arguments correctly to safe_execfile().
889 keyword arguments correctly to safe_execfile().
880
890
881 2005-05-13 Fernando Perez <fperez@colorado.edu>
891 2005-05-13 Fernando Perez <fperez@colorado.edu>
882
892
883 * ipython.1: Added info about Qt to manpage, and threads warning
893 * ipython.1: Added info about Qt to manpage, and threads warning
884 to usage page (invoked with --help).
894 to usage page (invoked with --help).
885
895
886 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
896 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
887 new matcher (it goes at the end of the priority list) to do
897 new matcher (it goes at the end of the priority list) to do
888 tab-completion on named function arguments. Submitted by George
898 tab-completion on named function arguments. Submitted by George
889 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
899 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
890 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
900 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
891 for more details.
901 for more details.
892
902
893 * IPython/Magic.py (magic_run): Added new -e flag to ignore
903 * IPython/Magic.py (magic_run): Added new -e flag to ignore
894 SystemExit exceptions in the script being run. Thanks to a report
904 SystemExit exceptions in the script being run. Thanks to a report
895 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
905 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
896 producing very annoying behavior when running unit tests.
906 producing very annoying behavior when running unit tests.
897
907
898 2005-05-12 Fernando Perez <fperez@colorado.edu>
908 2005-05-12 Fernando Perez <fperez@colorado.edu>
899
909
900 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
910 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
901 which I'd broken (again) due to a changed regexp. In the process,
911 which I'd broken (again) due to a changed regexp. In the process,
902 added ';' as an escape to auto-quote the whole line without
912 added ';' as an escape to auto-quote the whole line without
903 splitting its arguments. Thanks to a report by Jerry McRae
913 splitting its arguments. Thanks to a report by Jerry McRae
904 <qrs0xyc02-AT-sneakemail.com>.
914 <qrs0xyc02-AT-sneakemail.com>.
905
915
906 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
916 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
907 possible crashes caused by a TokenError. Reported by Ed Schofield
917 possible crashes caused by a TokenError. Reported by Ed Schofield
908 <schofield-AT-ftw.at>.
918 <schofield-AT-ftw.at>.
909
919
910 2005-05-06 Fernando Perez <fperez@colorado.edu>
920 2005-05-06 Fernando Perez <fperez@colorado.edu>
911
921
912 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
922 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
913
923
914 2005-04-29 Fernando Perez <fperez@colorado.edu>
924 2005-04-29 Fernando Perez <fperez@colorado.edu>
915
925
916 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
926 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
917 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
927 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
918 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
928 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
919 which provides support for Qt interactive usage (similar to the
929 which provides support for Qt interactive usage (similar to the
920 existing one for WX and GTK). This had been often requested.
930 existing one for WX and GTK). This had been often requested.
921
931
922 2005-04-14 *** Released version 0.6.13
932 2005-04-14 *** Released version 0.6.13
923
933
924 2005-04-08 Fernando Perez <fperez@colorado.edu>
934 2005-04-08 Fernando Perez <fperez@colorado.edu>
925
935
926 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
936 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
927 from _ofind, which gets called on almost every input line. Now,
937 from _ofind, which gets called on almost every input line. Now,
928 we only try to get docstrings if they are actually going to be
938 we only try to get docstrings if they are actually going to be
929 used (the overhead of fetching unnecessary docstrings can be
939 used (the overhead of fetching unnecessary docstrings can be
930 noticeable for certain objects, such as Pyro proxies).
940 noticeable for certain objects, such as Pyro proxies).
931
941
932 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
942 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
933 for completers. For some reason I had been passing them the state
943 for completers. For some reason I had been passing them the state
934 variable, which completers never actually need, and was in
944 variable, which completers never actually need, and was in
935 conflict with the rlcompleter API. Custom completers ONLY need to
945 conflict with the rlcompleter API. Custom completers ONLY need to
936 take the text parameter.
946 take the text parameter.
937
947
938 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
948 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
939 work correctly in pysh. I've also moved all the logic which used
949 work correctly in pysh. I've also moved all the logic which used
940 to be in pysh.py here, which will prevent problems with future
950 to be in pysh.py here, which will prevent problems with future
941 upgrades. However, this time I must warn users to update their
951 upgrades. However, this time I must warn users to update their
942 pysh profile to include the line
952 pysh profile to include the line
943
953
944 import_all IPython.Extensions.InterpreterExec
954 import_all IPython.Extensions.InterpreterExec
945
955
946 because otherwise things won't work for them. They MUST also
956 because otherwise things won't work for them. They MUST also
947 delete pysh.py and the line
957 delete pysh.py and the line
948
958
949 execfile pysh.py
959 execfile pysh.py
950
960
951 from their ipythonrc-pysh.
961 from their ipythonrc-pysh.
952
962
953 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
963 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
954 robust in the face of objects whose dir() returns non-strings
964 robust in the face of objects whose dir() returns non-strings
955 (which it shouldn't, but some broken libs like ITK do). Thanks to
965 (which it shouldn't, but some broken libs like ITK do). Thanks to
956 a patch by John Hunter (implemented differently, though). Also
966 a patch by John Hunter (implemented differently, though). Also
957 minor improvements by using .extend instead of + on lists.
967 minor improvements by using .extend instead of + on lists.
958
968
959 * pysh.py:
969 * pysh.py:
960
970
961 2005-04-06 Fernando Perez <fperez@colorado.edu>
971 2005-04-06 Fernando Perez <fperez@colorado.edu>
962
972
963 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
973 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
964 by default, so that all users benefit from it. Those who don't
974 by default, so that all users benefit from it. Those who don't
965 want it can still turn it off.
975 want it can still turn it off.
966
976
967 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
977 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
968 config file, I'd forgotten about this, so users were getting it
978 config file, I'd forgotten about this, so users were getting it
969 off by default.
979 off by default.
970
980
971 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
981 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
972 consistency. Now magics can be called in multiline statements,
982 consistency. Now magics can be called in multiline statements,
973 and python variables can be expanded in magic calls via $var.
983 and python variables can be expanded in magic calls via $var.
974 This makes the magic system behave just like aliases or !system
984 This makes the magic system behave just like aliases or !system
975 calls.
985 calls.
976
986
977 2005-03-28 Fernando Perez <fperez@colorado.edu>
987 2005-03-28 Fernando Perez <fperez@colorado.edu>
978
988
979 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
989 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
980 expensive string additions for building command. Add support for
990 expensive string additions for building command. Add support for
981 trailing ';' when autocall is used.
991 trailing ';' when autocall is used.
982
992
983 2005-03-26 Fernando Perez <fperez@colorado.edu>
993 2005-03-26 Fernando Perez <fperez@colorado.edu>
984
994
985 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
995 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
986 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
996 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
987 ipython.el robust against prompts with any number of spaces
997 ipython.el robust against prompts with any number of spaces
988 (including 0) after the ':' character.
998 (including 0) after the ':' character.
989
999
990 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1000 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
991 continuation prompt, which misled users to think the line was
1001 continuation prompt, which misled users to think the line was
992 already indented. Closes debian Bug#300847, reported to me by
1002 already indented. Closes debian Bug#300847, reported to me by
993 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1003 Norbert Tretkowski <tretkowski-AT-inittab.de>.
994
1004
995 2005-03-23 Fernando Perez <fperez@colorado.edu>
1005 2005-03-23 Fernando Perez <fperez@colorado.edu>
996
1006
997 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1007 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
998 properly aligned if they have embedded newlines.
1008 properly aligned if they have embedded newlines.
999
1009
1000 * IPython/iplib.py (runlines): Add a public method to expose
1010 * IPython/iplib.py (runlines): Add a public method to expose
1001 IPython's code execution machinery, so that users can run strings
1011 IPython's code execution machinery, so that users can run strings
1002 as if they had been typed at the prompt interactively.
1012 as if they had been typed at the prompt interactively.
1003 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1013 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1004 methods which can call the system shell, but with python variable
1014 methods which can call the system shell, but with python variable
1005 expansion. The three such methods are: __IPYTHON__.system,
1015 expansion. The three such methods are: __IPYTHON__.system,
1006 .getoutput and .getoutputerror. These need to be documented in a
1016 .getoutput and .getoutputerror. These need to be documented in a
1007 'public API' section (to be written) of the manual.
1017 'public API' section (to be written) of the manual.
1008
1018
1009 2005-03-20 Fernando Perez <fperez@colorado.edu>
1019 2005-03-20 Fernando Perez <fperez@colorado.edu>
1010
1020
1011 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1021 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1012 for custom exception handling. This is quite powerful, and it
1022 for custom exception handling. This is quite powerful, and it
1013 allows for user-installable exception handlers which can trap
1023 allows for user-installable exception handlers which can trap
1014 custom exceptions at runtime and treat them separately from
1024 custom exceptions at runtime and treat them separately from
1015 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1025 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1016 Mantegazza <mantegazza-AT-ill.fr>.
1026 Mantegazza <mantegazza-AT-ill.fr>.
1017 (InteractiveShell.set_custom_completer): public API function to
1027 (InteractiveShell.set_custom_completer): public API function to
1018 add new completers at runtime.
1028 add new completers at runtime.
1019
1029
1020 2005-03-19 Fernando Perez <fperez@colorado.edu>
1030 2005-03-19 Fernando Perez <fperez@colorado.edu>
1021
1031
1022 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1032 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1023 allow objects which provide their docstrings via non-standard
1033 allow objects which provide their docstrings via non-standard
1024 mechanisms (like Pyro proxies) to still be inspected by ipython's
1034 mechanisms (like Pyro proxies) to still be inspected by ipython's
1025 ? system.
1035 ? system.
1026
1036
1027 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1037 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1028 automatic capture system. I tried quite hard to make it work
1038 automatic capture system. I tried quite hard to make it work
1029 reliably, and simply failed. I tried many combinations with the
1039 reliably, and simply failed. I tried many combinations with the
1030 subprocess module, but eventually nothing worked in all needed
1040 subprocess module, but eventually nothing worked in all needed
1031 cases (not blocking stdin for the child, duplicating stdout
1041 cases (not blocking stdin for the child, duplicating stdout
1032 without blocking, etc). The new %sc/%sx still do capture to these
1042 without blocking, etc). The new %sc/%sx still do capture to these
1033 magical list/string objects which make shell use much more
1043 magical list/string objects which make shell use much more
1034 conveninent, so not all is lost.
1044 conveninent, so not all is lost.
1035
1045
1036 XXX - FIX MANUAL for the change above!
1046 XXX - FIX MANUAL for the change above!
1037
1047
1038 (runsource): I copied code.py's runsource() into ipython to modify
1048 (runsource): I copied code.py's runsource() into ipython to modify
1039 it a bit. Now the code object and source to be executed are
1049 it a bit. Now the code object and source to be executed are
1040 stored in ipython. This makes this info accessible to third-party
1050 stored in ipython. This makes this info accessible to third-party
1041 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1051 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1042 Mantegazza <mantegazza-AT-ill.fr>.
1052 Mantegazza <mantegazza-AT-ill.fr>.
1043
1053
1044 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1054 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1045 history-search via readline (like C-p/C-n). I'd wanted this for a
1055 history-search via readline (like C-p/C-n). I'd wanted this for a
1046 long time, but only recently found out how to do it. For users
1056 long time, but only recently found out how to do it. For users
1047 who already have their ipythonrc files made and want this, just
1057 who already have their ipythonrc files made and want this, just
1048 add:
1058 add:
1049
1059
1050 readline_parse_and_bind "\e[A": history-search-backward
1060 readline_parse_and_bind "\e[A": history-search-backward
1051 readline_parse_and_bind "\e[B": history-search-forward
1061 readline_parse_and_bind "\e[B": history-search-forward
1052
1062
1053 2005-03-18 Fernando Perez <fperez@colorado.edu>
1063 2005-03-18 Fernando Perez <fperez@colorado.edu>
1054
1064
1055 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1065 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1056 LSString and SList classes which allow transparent conversions
1066 LSString and SList classes which allow transparent conversions
1057 between list mode and whitespace-separated string.
1067 between list mode and whitespace-separated string.
1058 (magic_r): Fix recursion problem in %r.
1068 (magic_r): Fix recursion problem in %r.
1059
1069
1060 * IPython/genutils.py (LSString): New class to be used for
1070 * IPython/genutils.py (LSString): New class to be used for
1061 automatic storage of the results of all alias/system calls in _o
1071 automatic storage of the results of all alias/system calls in _o
1062 and _e (stdout/err). These provide a .l/.list attribute which
1072 and _e (stdout/err). These provide a .l/.list attribute which
1063 does automatic splitting on newlines. This means that for most
1073 does automatic splitting on newlines. This means that for most
1064 uses, you'll never need to do capturing of output with %sc/%sx
1074 uses, you'll never need to do capturing of output with %sc/%sx
1065 anymore, since ipython keeps this always done for you. Note that
1075 anymore, since ipython keeps this always done for you. Note that
1066 only the LAST results are stored, the _o/e variables are
1076 only the LAST results are stored, the _o/e variables are
1067 overwritten on each call. If you need to save their contents
1077 overwritten on each call. If you need to save their contents
1068 further, simply bind them to any other name.
1078 further, simply bind them to any other name.
1069
1079
1070 2005-03-17 Fernando Perez <fperez@colorado.edu>
1080 2005-03-17 Fernando Perez <fperez@colorado.edu>
1071
1081
1072 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1082 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1073 prompt namespace handling.
1083 prompt namespace handling.
1074
1084
1075 2005-03-16 Fernando Perez <fperez@colorado.edu>
1085 2005-03-16 Fernando Perez <fperez@colorado.edu>
1076
1086
1077 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1087 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1078 classic prompts to be '>>> ' (final space was missing, and it
1088 classic prompts to be '>>> ' (final space was missing, and it
1079 trips the emacs python mode).
1089 trips the emacs python mode).
1080 (BasePrompt.__str__): Added safe support for dynamic prompt
1090 (BasePrompt.__str__): Added safe support for dynamic prompt
1081 strings. Now you can set your prompt string to be '$x', and the
1091 strings. Now you can set your prompt string to be '$x', and the
1082 value of x will be printed from your interactive namespace. The
1092 value of x will be printed from your interactive namespace. The
1083 interpolation syntax includes the full Itpl support, so
1093 interpolation syntax includes the full Itpl support, so
1084 ${foo()+x+bar()} is a valid prompt string now, and the function
1094 ${foo()+x+bar()} is a valid prompt string now, and the function
1085 calls will be made at runtime.
1095 calls will be made at runtime.
1086
1096
1087 2005-03-15 Fernando Perez <fperez@colorado.edu>
1097 2005-03-15 Fernando Perez <fperez@colorado.edu>
1088
1098
1089 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1099 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1090 avoid name clashes in pylab. %hist still works, it just forwards
1100 avoid name clashes in pylab. %hist still works, it just forwards
1091 the call to %history.
1101 the call to %history.
1092
1102
1093 2005-03-02 *** Released version 0.6.12
1103 2005-03-02 *** Released version 0.6.12
1094
1104
1095 2005-03-02 Fernando Perez <fperez@colorado.edu>
1105 2005-03-02 Fernando Perez <fperez@colorado.edu>
1096
1106
1097 * IPython/iplib.py (handle_magic): log magic calls properly as
1107 * IPython/iplib.py (handle_magic): log magic calls properly as
1098 ipmagic() function calls.
1108 ipmagic() function calls.
1099
1109
1100 * IPython/Magic.py (magic_time): Improved %time to support
1110 * IPython/Magic.py (magic_time): Improved %time to support
1101 statements and provide wall-clock as well as CPU time.
1111 statements and provide wall-clock as well as CPU time.
1102
1112
1103 2005-02-27 Fernando Perez <fperez@colorado.edu>
1113 2005-02-27 Fernando Perez <fperez@colorado.edu>
1104
1114
1105 * IPython/hooks.py: New hooks module, to expose user-modifiable
1115 * IPython/hooks.py: New hooks module, to expose user-modifiable
1106 IPython functionality in a clean manner. For now only the editor
1116 IPython functionality in a clean manner. For now only the editor
1107 hook is actually written, and other thigns which I intend to turn
1117 hook is actually written, and other thigns which I intend to turn
1108 into proper hooks aren't yet there. The display and prefilter
1118 into proper hooks aren't yet there. The display and prefilter
1109 stuff, for example, should be hooks. But at least now the
1119 stuff, for example, should be hooks. But at least now the
1110 framework is in place, and the rest can be moved here with more
1120 framework is in place, and the rest can be moved here with more
1111 time later. IPython had had a .hooks variable for a long time for
1121 time later. IPython had had a .hooks variable for a long time for
1112 this purpose, but I'd never actually used it for anything.
1122 this purpose, but I'd never actually used it for anything.
1113
1123
1114 2005-02-26 Fernando Perez <fperez@colorado.edu>
1124 2005-02-26 Fernando Perez <fperez@colorado.edu>
1115
1125
1116 * IPython/ipmaker.py (make_IPython): make the default ipython
1126 * IPython/ipmaker.py (make_IPython): make the default ipython
1117 directory be called _ipython under win32, to follow more the
1127 directory be called _ipython under win32, to follow more the
1118 naming peculiarities of that platform (where buggy software like
1128 naming peculiarities of that platform (where buggy software like
1119 Visual Sourcesafe breaks with .named directories). Reported by
1129 Visual Sourcesafe breaks with .named directories). Reported by
1120 Ville Vainio.
1130 Ville Vainio.
1121
1131
1122 2005-02-23 Fernando Perez <fperez@colorado.edu>
1132 2005-02-23 Fernando Perez <fperez@colorado.edu>
1123
1133
1124 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1134 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1125 auto_aliases for win32 which were causing problems. Users can
1135 auto_aliases for win32 which were causing problems. Users can
1126 define the ones they personally like.
1136 define the ones they personally like.
1127
1137
1128 2005-02-21 Fernando Perez <fperez@colorado.edu>
1138 2005-02-21 Fernando Perez <fperez@colorado.edu>
1129
1139
1130 * IPython/Magic.py (magic_time): new magic to time execution of
1140 * IPython/Magic.py (magic_time): new magic to time execution of
1131 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1141 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1132
1142
1133 2005-02-19 Fernando Perez <fperez@colorado.edu>
1143 2005-02-19 Fernando Perez <fperez@colorado.edu>
1134
1144
1135 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1145 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1136 into keys (for prompts, for example).
1146 into keys (for prompts, for example).
1137
1147
1138 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1148 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1139 prompts in case users want them. This introduces a small behavior
1149 prompts in case users want them. This introduces a small behavior
1140 change: ipython does not automatically add a space to all prompts
1150 change: ipython does not automatically add a space to all prompts
1141 anymore. To get the old prompts with a space, users should add it
1151 anymore. To get the old prompts with a space, users should add it
1142 manually to their ipythonrc file, so for example prompt_in1 should
1152 manually to their ipythonrc file, so for example prompt_in1 should
1143 now read 'In [\#]: ' instead of 'In [\#]:'.
1153 now read 'In [\#]: ' instead of 'In [\#]:'.
1144 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1154 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1145 file) to control left-padding of secondary prompts.
1155 file) to control left-padding of secondary prompts.
1146
1156
1147 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1157 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1148 the profiler can't be imported. Fix for Debian, which removed
1158 the profiler can't be imported. Fix for Debian, which removed
1149 profile.py because of License issues. I applied a slightly
1159 profile.py because of License issues. I applied a slightly
1150 modified version of the original Debian patch at
1160 modified version of the original Debian patch at
1151 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1161 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1152
1162
1153 2005-02-17 Fernando Perez <fperez@colorado.edu>
1163 2005-02-17 Fernando Perez <fperez@colorado.edu>
1154
1164
1155 * IPython/genutils.py (native_line_ends): Fix bug which would
1165 * IPython/genutils.py (native_line_ends): Fix bug which would
1156 cause improper line-ends under win32 b/c I was not opening files
1166 cause improper line-ends under win32 b/c I was not opening files
1157 in binary mode. Bug report and fix thanks to Ville.
1167 in binary mode. Bug report and fix thanks to Ville.
1158
1168
1159 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1169 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1160 trying to catch spurious foo[1] autocalls. My fix actually broke
1170 trying to catch spurious foo[1] autocalls. My fix actually broke
1161 ',/' autoquote/call with explicit escape (bad regexp).
1171 ',/' autoquote/call with explicit escape (bad regexp).
1162
1172
1163 2005-02-15 *** Released version 0.6.11
1173 2005-02-15 *** Released version 0.6.11
1164
1174
1165 2005-02-14 Fernando Perez <fperez@colorado.edu>
1175 2005-02-14 Fernando Perez <fperez@colorado.edu>
1166
1176
1167 * IPython/background_jobs.py: New background job management
1177 * IPython/background_jobs.py: New background job management
1168 subsystem. This is implemented via a new set of classes, and
1178 subsystem. This is implemented via a new set of classes, and
1169 IPython now provides a builtin 'jobs' object for background job
1179 IPython now provides a builtin 'jobs' object for background job
1170 execution. A convenience %bg magic serves as a lightweight
1180 execution. A convenience %bg magic serves as a lightweight
1171 frontend for starting the more common type of calls. This was
1181 frontend for starting the more common type of calls. This was
1172 inspired by discussions with B. Granger and the BackgroundCommand
1182 inspired by discussions with B. Granger and the BackgroundCommand
1173 class described in the book Python Scripting for Computational
1183 class described in the book Python Scripting for Computational
1174 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1184 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1175 (although ultimately no code from this text was used, as IPython's
1185 (although ultimately no code from this text was used, as IPython's
1176 system is a separate implementation).
1186 system is a separate implementation).
1177
1187
1178 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1188 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1179 to control the completion of single/double underscore names
1189 to control the completion of single/double underscore names
1180 separately. As documented in the example ipytonrc file, the
1190 separately. As documented in the example ipytonrc file, the
1181 readline_omit__names variable can now be set to 2, to omit even
1191 readline_omit__names variable can now be set to 2, to omit even
1182 single underscore names. Thanks to a patch by Brian Wong
1192 single underscore names. Thanks to a patch by Brian Wong
1183 <BrianWong-AT-AirgoNetworks.Com>.
1193 <BrianWong-AT-AirgoNetworks.Com>.
1184 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1194 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1185 be autocalled as foo([1]) if foo were callable. A problem for
1195 be autocalled as foo([1]) if foo were callable. A problem for
1186 things which are both callable and implement __getitem__.
1196 things which are both callable and implement __getitem__.
1187 (init_readline): Fix autoindentation for win32. Thanks to a patch
1197 (init_readline): Fix autoindentation for win32. Thanks to a patch
1188 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1198 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1189
1199
1190 2005-02-12 Fernando Perez <fperez@colorado.edu>
1200 2005-02-12 Fernando Perez <fperez@colorado.edu>
1191
1201
1192 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1202 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1193 which I had written long ago to sort out user error messages which
1203 which I had written long ago to sort out user error messages which
1194 may occur during startup. This seemed like a good idea initially,
1204 may occur during startup. This seemed like a good idea initially,
1195 but it has proven a disaster in retrospect. I don't want to
1205 but it has proven a disaster in retrospect. I don't want to
1196 change much code for now, so my fix is to set the internal 'debug'
1206 change much code for now, so my fix is to set the internal 'debug'
1197 flag to true everywhere, whose only job was precisely to control
1207 flag to true everywhere, whose only job was precisely to control
1198 this subsystem. This closes issue 28 (as well as avoiding all
1208 this subsystem. This closes issue 28 (as well as avoiding all
1199 sorts of strange hangups which occur from time to time).
1209 sorts of strange hangups which occur from time to time).
1200
1210
1201 2005-02-07 Fernando Perez <fperez@colorado.edu>
1211 2005-02-07 Fernando Perez <fperez@colorado.edu>
1202
1212
1203 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1213 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1204 previous call produced a syntax error.
1214 previous call produced a syntax error.
1205
1215
1206 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1216 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1207 classes without constructor.
1217 classes without constructor.
1208
1218
1209 2005-02-06 Fernando Perez <fperez@colorado.edu>
1219 2005-02-06 Fernando Perez <fperez@colorado.edu>
1210
1220
1211 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1221 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1212 completions with the results of each matcher, so we return results
1222 completions with the results of each matcher, so we return results
1213 to the user from all namespaces. This breaks with ipython
1223 to the user from all namespaces. This breaks with ipython
1214 tradition, but I think it's a nicer behavior. Now you get all
1224 tradition, but I think it's a nicer behavior. Now you get all
1215 possible completions listed, from all possible namespaces (python,
1225 possible completions listed, from all possible namespaces (python,
1216 filesystem, magics...) After a request by John Hunter
1226 filesystem, magics...) After a request by John Hunter
1217 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1227 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1218
1228
1219 2005-02-05 Fernando Perez <fperez@colorado.edu>
1229 2005-02-05 Fernando Perez <fperez@colorado.edu>
1220
1230
1221 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1231 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1222 the call had quote characters in it (the quotes were stripped).
1232 the call had quote characters in it (the quotes were stripped).
1223
1233
1224 2005-01-31 Fernando Perez <fperez@colorado.edu>
1234 2005-01-31 Fernando Perez <fperez@colorado.edu>
1225
1235
1226 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1236 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1227 Itpl.itpl() to make the code more robust against psyco
1237 Itpl.itpl() to make the code more robust against psyco
1228 optimizations.
1238 optimizations.
1229
1239
1230 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1240 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1231 of causing an exception. Quicker, cleaner.
1241 of causing an exception. Quicker, cleaner.
1232
1242
1233 2005-01-28 Fernando Perez <fperez@colorado.edu>
1243 2005-01-28 Fernando Perez <fperez@colorado.edu>
1234
1244
1235 * scripts/ipython_win_post_install.py (install): hardcode
1245 * scripts/ipython_win_post_install.py (install): hardcode
1236 sys.prefix+'python.exe' as the executable path. It turns out that
1246 sys.prefix+'python.exe' as the executable path. It turns out that
1237 during the post-installation run, sys.executable resolves to the
1247 during the post-installation run, sys.executable resolves to the
1238 name of the binary installer! I should report this as a distutils
1248 name of the binary installer! I should report this as a distutils
1239 bug, I think. I updated the .10 release with this tiny fix, to
1249 bug, I think. I updated the .10 release with this tiny fix, to
1240 avoid annoying the lists further.
1250 avoid annoying the lists further.
1241
1251
1242 2005-01-27 *** Released version 0.6.10
1252 2005-01-27 *** Released version 0.6.10
1243
1253
1244 2005-01-27 Fernando Perez <fperez@colorado.edu>
1254 2005-01-27 Fernando Perez <fperez@colorado.edu>
1245
1255
1246 * IPython/numutils.py (norm): Added 'inf' as optional name for
1256 * IPython/numutils.py (norm): Added 'inf' as optional name for
1247 L-infinity norm, included references to mathworld.com for vector
1257 L-infinity norm, included references to mathworld.com for vector
1248 norm definitions.
1258 norm definitions.
1249 (amin/amax): added amin/amax for array min/max. Similar to what
1259 (amin/amax): added amin/amax for array min/max. Similar to what
1250 pylab ships with after the recent reorganization of names.
1260 pylab ships with after the recent reorganization of names.
1251 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1261 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1252
1262
1253 * ipython.el: committed Alex's recent fixes and improvements.
1263 * ipython.el: committed Alex's recent fixes and improvements.
1254 Tested with python-mode from CVS, and it looks excellent. Since
1264 Tested with python-mode from CVS, and it looks excellent. Since
1255 python-mode hasn't released anything in a while, I'm temporarily
1265 python-mode hasn't released anything in a while, I'm temporarily
1256 putting a copy of today's CVS (v 4.70) of python-mode in:
1266 putting a copy of today's CVS (v 4.70) of python-mode in:
1257 http://ipython.scipy.org/tmp/python-mode.el
1267 http://ipython.scipy.org/tmp/python-mode.el
1258
1268
1259 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1269 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1260 sys.executable for the executable name, instead of assuming it's
1270 sys.executable for the executable name, instead of assuming it's
1261 called 'python.exe' (the post-installer would have produced broken
1271 called 'python.exe' (the post-installer would have produced broken
1262 setups on systems with a differently named python binary).
1272 setups on systems with a differently named python binary).
1263
1273
1264 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1274 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1265 references to os.linesep, to make the code more
1275 references to os.linesep, to make the code more
1266 platform-independent. This is also part of the win32 coloring
1276 platform-independent. This is also part of the win32 coloring
1267 fixes.
1277 fixes.
1268
1278
1269 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1279 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1270 lines, which actually cause coloring bugs because the length of
1280 lines, which actually cause coloring bugs because the length of
1271 the line is very difficult to correctly compute with embedded
1281 the line is very difficult to correctly compute with embedded
1272 escapes. This was the source of all the coloring problems under
1282 escapes. This was the source of all the coloring problems under
1273 Win32. I think that _finally_, Win32 users have a properly
1283 Win32. I think that _finally_, Win32 users have a properly
1274 working ipython in all respects. This would never have happened
1284 working ipython in all respects. This would never have happened
1275 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1285 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1276
1286
1277 2005-01-26 *** Released version 0.6.9
1287 2005-01-26 *** Released version 0.6.9
1278
1288
1279 2005-01-25 Fernando Perez <fperez@colorado.edu>
1289 2005-01-25 Fernando Perez <fperez@colorado.edu>
1280
1290
1281 * setup.py: finally, we have a true Windows installer, thanks to
1291 * setup.py: finally, we have a true Windows installer, thanks to
1282 the excellent work of Viktor Ransmayr
1292 the excellent work of Viktor Ransmayr
1283 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1293 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1284 Windows users. The setup routine is quite a bit cleaner thanks to
1294 Windows users. The setup routine is quite a bit cleaner thanks to
1285 this, and the post-install script uses the proper functions to
1295 this, and the post-install script uses the proper functions to
1286 allow a clean de-installation using the standard Windows Control
1296 allow a clean de-installation using the standard Windows Control
1287 Panel.
1297 Panel.
1288
1298
1289 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1299 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1290 environment variable under all OSes (including win32) if
1300 environment variable under all OSes (including win32) if
1291 available. This will give consistency to win32 users who have set
1301 available. This will give consistency to win32 users who have set
1292 this variable for any reason. If os.environ['HOME'] fails, the
1302 this variable for any reason. If os.environ['HOME'] fails, the
1293 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1303 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1294
1304
1295 2005-01-24 Fernando Perez <fperez@colorado.edu>
1305 2005-01-24 Fernando Perez <fperez@colorado.edu>
1296
1306
1297 * IPython/numutils.py (empty_like): add empty_like(), similar to
1307 * IPython/numutils.py (empty_like): add empty_like(), similar to
1298 zeros_like() but taking advantage of the new empty() Numeric routine.
1308 zeros_like() but taking advantage of the new empty() Numeric routine.
1299
1309
1300 2005-01-23 *** Released version 0.6.8
1310 2005-01-23 *** Released version 0.6.8
1301
1311
1302 2005-01-22 Fernando Perez <fperez@colorado.edu>
1312 2005-01-22 Fernando Perez <fperez@colorado.edu>
1303
1313
1304 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1314 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1305 automatic show() calls. After discussing things with JDH, it
1315 automatic show() calls. After discussing things with JDH, it
1306 turns out there are too many corner cases where this can go wrong.
1316 turns out there are too many corner cases where this can go wrong.
1307 It's best not to try to be 'too smart', and simply have ipython
1317 It's best not to try to be 'too smart', and simply have ipython
1308 reproduce as much as possible the default behavior of a normal
1318 reproduce as much as possible the default behavior of a normal
1309 python shell.
1319 python shell.
1310
1320
1311 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1321 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1312 line-splitting regexp and _prefilter() to avoid calling getattr()
1322 line-splitting regexp and _prefilter() to avoid calling getattr()
1313 on assignments. This closes
1323 on assignments. This closes
1314 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1324 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1315 readline uses getattr(), so a simple <TAB> keypress is still
1325 readline uses getattr(), so a simple <TAB> keypress is still
1316 enough to trigger getattr() calls on an object.
1326 enough to trigger getattr() calls on an object.
1317
1327
1318 2005-01-21 Fernando Perez <fperez@colorado.edu>
1328 2005-01-21 Fernando Perez <fperez@colorado.edu>
1319
1329
1320 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1330 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1321 docstring under pylab so it doesn't mask the original.
1331 docstring under pylab so it doesn't mask the original.
1322
1332
1323 2005-01-21 *** Released version 0.6.7
1333 2005-01-21 *** Released version 0.6.7
1324
1334
1325 2005-01-21 Fernando Perez <fperez@colorado.edu>
1335 2005-01-21 Fernando Perez <fperez@colorado.edu>
1326
1336
1327 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1337 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1328 signal handling for win32 users in multithreaded mode.
1338 signal handling for win32 users in multithreaded mode.
1329
1339
1330 2005-01-17 Fernando Perez <fperez@colorado.edu>
1340 2005-01-17 Fernando Perez <fperez@colorado.edu>
1331
1341
1332 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1342 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1333 instances with no __init__. After a crash report by Norbert Nemec
1343 instances with no __init__. After a crash report by Norbert Nemec
1334 <Norbert-AT-nemec-online.de>.
1344 <Norbert-AT-nemec-online.de>.
1335
1345
1336 2005-01-14 Fernando Perez <fperez@colorado.edu>
1346 2005-01-14 Fernando Perez <fperez@colorado.edu>
1337
1347
1338 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1348 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1339 names for verbose exceptions, when multiple dotted names and the
1349 names for verbose exceptions, when multiple dotted names and the
1340 'parent' object were present on the same line.
1350 'parent' object were present on the same line.
1341
1351
1342 2005-01-11 Fernando Perez <fperez@colorado.edu>
1352 2005-01-11 Fernando Perez <fperez@colorado.edu>
1343
1353
1344 * IPython/genutils.py (flag_calls): new utility to trap and flag
1354 * IPython/genutils.py (flag_calls): new utility to trap and flag
1345 calls in functions. I need it to clean up matplotlib support.
1355 calls in functions. I need it to clean up matplotlib support.
1346 Also removed some deprecated code in genutils.
1356 Also removed some deprecated code in genutils.
1347
1357
1348 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1358 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1349 that matplotlib scripts called with %run, which don't call show()
1359 that matplotlib scripts called with %run, which don't call show()
1350 themselves, still have their plotting windows open.
1360 themselves, still have their plotting windows open.
1351
1361
1352 2005-01-05 Fernando Perez <fperez@colorado.edu>
1362 2005-01-05 Fernando Perez <fperez@colorado.edu>
1353
1363
1354 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1364 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1355 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1365 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1356
1366
1357 2004-12-19 Fernando Perez <fperez@colorado.edu>
1367 2004-12-19 Fernando Perez <fperez@colorado.edu>
1358
1368
1359 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1369 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1360 parent_runcode, which was an eyesore. The same result can be
1370 parent_runcode, which was an eyesore. The same result can be
1361 obtained with Python's regular superclass mechanisms.
1371 obtained with Python's regular superclass mechanisms.
1362
1372
1363 2004-12-17 Fernando Perez <fperez@colorado.edu>
1373 2004-12-17 Fernando Perez <fperez@colorado.edu>
1364
1374
1365 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1375 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1366 reported by Prabhu.
1376 reported by Prabhu.
1367 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1377 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1368 sys.stderr) instead of explicitly calling sys.stderr. This helps
1378 sys.stderr) instead of explicitly calling sys.stderr. This helps
1369 maintain our I/O abstractions clean, for future GUI embeddings.
1379 maintain our I/O abstractions clean, for future GUI embeddings.
1370
1380
1371 * IPython/genutils.py (info): added new utility for sys.stderr
1381 * IPython/genutils.py (info): added new utility for sys.stderr
1372 unified info message handling (thin wrapper around warn()).
1382 unified info message handling (thin wrapper around warn()).
1373
1383
1374 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1384 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1375 composite (dotted) names on verbose exceptions.
1385 composite (dotted) names on verbose exceptions.
1376 (VerboseTB.nullrepr): harden against another kind of errors which
1386 (VerboseTB.nullrepr): harden against another kind of errors which
1377 Python's inspect module can trigger, and which were crashing
1387 Python's inspect module can trigger, and which were crashing
1378 IPython. Thanks to a report by Marco Lombardi
1388 IPython. Thanks to a report by Marco Lombardi
1379 <mlombard-AT-ma010192.hq.eso.org>.
1389 <mlombard-AT-ma010192.hq.eso.org>.
1380
1390
1381 2004-12-13 *** Released version 0.6.6
1391 2004-12-13 *** Released version 0.6.6
1382
1392
1383 2004-12-12 Fernando Perez <fperez@colorado.edu>
1393 2004-12-12 Fernando Perez <fperez@colorado.edu>
1384
1394
1385 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1395 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1386 generated by pygtk upon initialization if it was built without
1396 generated by pygtk upon initialization if it was built without
1387 threads (for matplotlib users). After a crash reported by
1397 threads (for matplotlib users). After a crash reported by
1388 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1398 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1389
1399
1390 * IPython/ipmaker.py (make_IPython): fix small bug in the
1400 * IPython/ipmaker.py (make_IPython): fix small bug in the
1391 import_some parameter for multiple imports.
1401 import_some parameter for multiple imports.
1392
1402
1393 * IPython/iplib.py (ipmagic): simplified the interface of
1403 * IPython/iplib.py (ipmagic): simplified the interface of
1394 ipmagic() to take a single string argument, just as it would be
1404 ipmagic() to take a single string argument, just as it would be
1395 typed at the IPython cmd line.
1405 typed at the IPython cmd line.
1396 (ipalias): Added new ipalias() with an interface identical to
1406 (ipalias): Added new ipalias() with an interface identical to
1397 ipmagic(). This completes exposing a pure python interface to the
1407 ipmagic(). This completes exposing a pure python interface to the
1398 alias and magic system, which can be used in loops or more complex
1408 alias and magic system, which can be used in loops or more complex
1399 code where IPython's automatic line mangling is not active.
1409 code where IPython's automatic line mangling is not active.
1400
1410
1401 * IPython/genutils.py (timing): changed interface of timing to
1411 * IPython/genutils.py (timing): changed interface of timing to
1402 simply run code once, which is the most common case. timings()
1412 simply run code once, which is the most common case. timings()
1403 remains unchanged, for the cases where you want multiple runs.
1413 remains unchanged, for the cases where you want multiple runs.
1404
1414
1405 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1415 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1406 bug where Python2.2 crashes with exec'ing code which does not end
1416 bug where Python2.2 crashes with exec'ing code which does not end
1407 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1417 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1408 before.
1418 before.
1409
1419
1410 2004-12-10 Fernando Perez <fperez@colorado.edu>
1420 2004-12-10 Fernando Perez <fperez@colorado.edu>
1411
1421
1412 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1422 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1413 -t to -T, to accomodate the new -t flag in %run (the %run and
1423 -t to -T, to accomodate the new -t flag in %run (the %run and
1414 %prun options are kind of intermixed, and it's not easy to change
1424 %prun options are kind of intermixed, and it's not easy to change
1415 this with the limitations of python's getopt).
1425 this with the limitations of python's getopt).
1416
1426
1417 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1427 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1418 the execution of scripts. It's not as fine-tuned as timeit.py,
1428 the execution of scripts. It's not as fine-tuned as timeit.py,
1419 but it works from inside ipython (and under 2.2, which lacks
1429 but it works from inside ipython (and under 2.2, which lacks
1420 timeit.py). Optionally a number of runs > 1 can be given for
1430 timeit.py). Optionally a number of runs > 1 can be given for
1421 timing very short-running code.
1431 timing very short-running code.
1422
1432
1423 * IPython/genutils.py (uniq_stable): new routine which returns a
1433 * IPython/genutils.py (uniq_stable): new routine which returns a
1424 list of unique elements in any iterable, but in stable order of
1434 list of unique elements in any iterable, but in stable order of
1425 appearance. I needed this for the ultraTB fixes, and it's a handy
1435 appearance. I needed this for the ultraTB fixes, and it's a handy
1426 utility.
1436 utility.
1427
1437
1428 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1438 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1429 dotted names in Verbose exceptions. This had been broken since
1439 dotted names in Verbose exceptions. This had been broken since
1430 the very start, now x.y will properly be printed in a Verbose
1440 the very start, now x.y will properly be printed in a Verbose
1431 traceback, instead of x being shown and y appearing always as an
1441 traceback, instead of x being shown and y appearing always as an
1432 'undefined global'. Getting this to work was a bit tricky,
1442 'undefined global'. Getting this to work was a bit tricky,
1433 because by default python tokenizers are stateless. Saved by
1443 because by default python tokenizers are stateless. Saved by
1434 python's ability to easily add a bit of state to an arbitrary
1444 python's ability to easily add a bit of state to an arbitrary
1435 function (without needing to build a full-blown callable object).
1445 function (without needing to build a full-blown callable object).
1436
1446
1437 Also big cleanup of this code, which had horrendous runtime
1447 Also big cleanup of this code, which had horrendous runtime
1438 lookups of zillions of attributes for colorization. Moved all
1448 lookups of zillions of attributes for colorization. Moved all
1439 this code into a few templates, which make it cleaner and quicker.
1449 this code into a few templates, which make it cleaner and quicker.
1440
1450
1441 Printout quality was also improved for Verbose exceptions: one
1451 Printout quality was also improved for Verbose exceptions: one
1442 variable per line, and memory addresses are printed (this can be
1452 variable per line, and memory addresses are printed (this can be
1443 quite handy in nasty debugging situations, which is what Verbose
1453 quite handy in nasty debugging situations, which is what Verbose
1444 is for).
1454 is for).
1445
1455
1446 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1456 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1447 the command line as scripts to be loaded by embedded instances.
1457 the command line as scripts to be loaded by embedded instances.
1448 Doing so has the potential for an infinite recursion if there are
1458 Doing so has the potential for an infinite recursion if there are
1449 exceptions thrown in the process. This fixes a strange crash
1459 exceptions thrown in the process. This fixes a strange crash
1450 reported by Philippe MULLER <muller-AT-irit.fr>.
1460 reported by Philippe MULLER <muller-AT-irit.fr>.
1451
1461
1452 2004-12-09 Fernando Perez <fperez@colorado.edu>
1462 2004-12-09 Fernando Perez <fperez@colorado.edu>
1453
1463
1454 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1464 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1455 to reflect new names in matplotlib, which now expose the
1465 to reflect new names in matplotlib, which now expose the
1456 matlab-compatible interface via a pylab module instead of the
1466 matlab-compatible interface via a pylab module instead of the
1457 'matlab' name. The new code is backwards compatible, so users of
1467 'matlab' name. The new code is backwards compatible, so users of
1458 all matplotlib versions are OK. Patch by J. Hunter.
1468 all matplotlib versions are OK. Patch by J. Hunter.
1459
1469
1460 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1470 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1461 of __init__ docstrings for instances (class docstrings are already
1471 of __init__ docstrings for instances (class docstrings are already
1462 automatically printed). Instances with customized docstrings
1472 automatically printed). Instances with customized docstrings
1463 (indep. of the class) are also recognized and all 3 separate
1473 (indep. of the class) are also recognized and all 3 separate
1464 docstrings are printed (instance, class, constructor). After some
1474 docstrings are printed (instance, class, constructor). After some
1465 comments/suggestions by J. Hunter.
1475 comments/suggestions by J. Hunter.
1466
1476
1467 2004-12-05 Fernando Perez <fperez@colorado.edu>
1477 2004-12-05 Fernando Perez <fperez@colorado.edu>
1468
1478
1469 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1479 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1470 warnings when tab-completion fails and triggers an exception.
1480 warnings when tab-completion fails and triggers an exception.
1471
1481
1472 2004-12-03 Fernando Perez <fperez@colorado.edu>
1482 2004-12-03 Fernando Perez <fperez@colorado.edu>
1473
1483
1474 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1484 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1475 be triggered when using 'run -p'. An incorrect option flag was
1485 be triggered when using 'run -p'. An incorrect option flag was
1476 being set ('d' instead of 'D').
1486 being set ('d' instead of 'D').
1477 (manpage): fix missing escaped \- sign.
1487 (manpage): fix missing escaped \- sign.
1478
1488
1479 2004-11-30 *** Released version 0.6.5
1489 2004-11-30 *** Released version 0.6.5
1480
1490
1481 2004-11-30 Fernando Perez <fperez@colorado.edu>
1491 2004-11-30 Fernando Perez <fperez@colorado.edu>
1482
1492
1483 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1493 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1484 setting with -d option.
1494 setting with -d option.
1485
1495
1486 * setup.py (docfiles): Fix problem where the doc glob I was using
1496 * setup.py (docfiles): Fix problem where the doc glob I was using
1487 was COMPLETELY BROKEN. It was giving the right files by pure
1497 was COMPLETELY BROKEN. It was giving the right files by pure
1488 accident, but failed once I tried to include ipython.el. Note:
1498 accident, but failed once I tried to include ipython.el. Note:
1489 glob() does NOT allow you to do exclusion on multiple endings!
1499 glob() does NOT allow you to do exclusion on multiple endings!
1490
1500
1491 2004-11-29 Fernando Perez <fperez@colorado.edu>
1501 2004-11-29 Fernando Perez <fperez@colorado.edu>
1492
1502
1493 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1503 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1494 the manpage as the source. Better formatting & consistency.
1504 the manpage as the source. Better formatting & consistency.
1495
1505
1496 * IPython/Magic.py (magic_run): Added new -d option, to run
1506 * IPython/Magic.py (magic_run): Added new -d option, to run
1497 scripts under the control of the python pdb debugger. Note that
1507 scripts under the control of the python pdb debugger. Note that
1498 this required changing the %prun option -d to -D, to avoid a clash
1508 this required changing the %prun option -d to -D, to avoid a clash
1499 (since %run must pass options to %prun, and getopt is too dumb to
1509 (since %run must pass options to %prun, and getopt is too dumb to
1500 handle options with string values with embedded spaces). Thanks
1510 handle options with string values with embedded spaces). Thanks
1501 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1511 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1502 (magic_who_ls): added type matching to %who and %whos, so that one
1512 (magic_who_ls): added type matching to %who and %whos, so that one
1503 can filter their output to only include variables of certain
1513 can filter their output to only include variables of certain
1504 types. Another suggestion by Matthew.
1514 types. Another suggestion by Matthew.
1505 (magic_whos): Added memory summaries in kb and Mb for arrays.
1515 (magic_whos): Added memory summaries in kb and Mb for arrays.
1506 (magic_who): Improve formatting (break lines every 9 vars).
1516 (magic_who): Improve formatting (break lines every 9 vars).
1507
1517
1508 2004-11-28 Fernando Perez <fperez@colorado.edu>
1518 2004-11-28 Fernando Perez <fperez@colorado.edu>
1509
1519
1510 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1520 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1511 cache when empty lines were present.
1521 cache when empty lines were present.
1512
1522
1513 2004-11-24 Fernando Perez <fperez@colorado.edu>
1523 2004-11-24 Fernando Perez <fperez@colorado.edu>
1514
1524
1515 * IPython/usage.py (__doc__): document the re-activated threading
1525 * IPython/usage.py (__doc__): document the re-activated threading
1516 options for WX and GTK.
1526 options for WX and GTK.
1517
1527
1518 2004-11-23 Fernando Perez <fperez@colorado.edu>
1528 2004-11-23 Fernando Perez <fperez@colorado.edu>
1519
1529
1520 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1530 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1521 the -wthread and -gthread options, along with a new -tk one to try
1531 the -wthread and -gthread options, along with a new -tk one to try
1522 and coordinate Tk threading with wx/gtk. The tk support is very
1532 and coordinate Tk threading with wx/gtk. The tk support is very
1523 platform dependent, since it seems to require Tcl and Tk to be
1533 platform dependent, since it seems to require Tcl and Tk to be
1524 built with threads (Fedora1/2 appears NOT to have it, but in
1534 built with threads (Fedora1/2 appears NOT to have it, but in
1525 Prabhu's Debian boxes it works OK). But even with some Tk
1535 Prabhu's Debian boxes it works OK). But even with some Tk
1526 limitations, this is a great improvement.
1536 limitations, this is a great improvement.
1527
1537
1528 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1538 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1529 info in user prompts. Patch by Prabhu.
1539 info in user prompts. Patch by Prabhu.
1530
1540
1531 2004-11-18 Fernando Perez <fperez@colorado.edu>
1541 2004-11-18 Fernando Perez <fperez@colorado.edu>
1532
1542
1533 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1543 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1534 EOFErrors and bail, to avoid infinite loops if a non-terminating
1544 EOFErrors and bail, to avoid infinite loops if a non-terminating
1535 file is fed into ipython. Patch submitted in issue 19 by user,
1545 file is fed into ipython. Patch submitted in issue 19 by user,
1536 many thanks.
1546 many thanks.
1537
1547
1538 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1548 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1539 autoquote/parens in continuation prompts, which can cause lots of
1549 autoquote/parens in continuation prompts, which can cause lots of
1540 problems. Closes roundup issue 20.
1550 problems. Closes roundup issue 20.
1541
1551
1542 2004-11-17 Fernando Perez <fperez@colorado.edu>
1552 2004-11-17 Fernando Perez <fperez@colorado.edu>
1543
1553
1544 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1554 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1545 reported as debian bug #280505. I'm not sure my local changelog
1555 reported as debian bug #280505. I'm not sure my local changelog
1546 entry has the proper debian format (Jack?).
1556 entry has the proper debian format (Jack?).
1547
1557
1548 2004-11-08 *** Released version 0.6.4
1558 2004-11-08 *** Released version 0.6.4
1549
1559
1550 2004-11-08 Fernando Perez <fperez@colorado.edu>
1560 2004-11-08 Fernando Perez <fperez@colorado.edu>
1551
1561
1552 * IPython/iplib.py (init_readline): Fix exit message for Windows
1562 * IPython/iplib.py (init_readline): Fix exit message for Windows
1553 when readline is active. Thanks to a report by Eric Jones
1563 when readline is active. Thanks to a report by Eric Jones
1554 <eric-AT-enthought.com>.
1564 <eric-AT-enthought.com>.
1555
1565
1556 2004-11-07 Fernando Perez <fperez@colorado.edu>
1566 2004-11-07 Fernando Perez <fperez@colorado.edu>
1557
1567
1558 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1568 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1559 sometimes seen by win2k/cygwin users.
1569 sometimes seen by win2k/cygwin users.
1560
1570
1561 2004-11-06 Fernando Perez <fperez@colorado.edu>
1571 2004-11-06 Fernando Perez <fperez@colorado.edu>
1562
1572
1563 * IPython/iplib.py (interact): Change the handling of %Exit from
1573 * IPython/iplib.py (interact): Change the handling of %Exit from
1564 trying to propagate a SystemExit to an internal ipython flag.
1574 trying to propagate a SystemExit to an internal ipython flag.
1565 This is less elegant than using Python's exception mechanism, but
1575 This is less elegant than using Python's exception mechanism, but
1566 I can't get that to work reliably with threads, so under -pylab
1576 I can't get that to work reliably with threads, so under -pylab
1567 %Exit was hanging IPython. Cross-thread exception handling is
1577 %Exit was hanging IPython. Cross-thread exception handling is
1568 really a bitch. Thaks to a bug report by Stephen Walton
1578 really a bitch. Thaks to a bug report by Stephen Walton
1569 <stephen.walton-AT-csun.edu>.
1579 <stephen.walton-AT-csun.edu>.
1570
1580
1571 2004-11-04 Fernando Perez <fperez@colorado.edu>
1581 2004-11-04 Fernando Perez <fperez@colorado.edu>
1572
1582
1573 * IPython/iplib.py (raw_input_original): store a pointer to the
1583 * IPython/iplib.py (raw_input_original): store a pointer to the
1574 true raw_input to harden against code which can modify it
1584 true raw_input to harden against code which can modify it
1575 (wx.py.PyShell does this and would otherwise crash ipython).
1585 (wx.py.PyShell does this and would otherwise crash ipython).
1576 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1586 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1577
1587
1578 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1588 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1579 Ctrl-C problem, which does not mess up the input line.
1589 Ctrl-C problem, which does not mess up the input line.
1580
1590
1581 2004-11-03 Fernando Perez <fperez@colorado.edu>
1591 2004-11-03 Fernando Perez <fperez@colorado.edu>
1582
1592
1583 * IPython/Release.py: Changed licensing to BSD, in all files.
1593 * IPython/Release.py: Changed licensing to BSD, in all files.
1584 (name): lowercase name for tarball/RPM release.
1594 (name): lowercase name for tarball/RPM release.
1585
1595
1586 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1596 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1587 use throughout ipython.
1597 use throughout ipython.
1588
1598
1589 * IPython/Magic.py (Magic._ofind): Switch to using the new
1599 * IPython/Magic.py (Magic._ofind): Switch to using the new
1590 OInspect.getdoc() function.
1600 OInspect.getdoc() function.
1591
1601
1592 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1602 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1593 of the line currently being canceled via Ctrl-C. It's extremely
1603 of the line currently being canceled via Ctrl-C. It's extremely
1594 ugly, but I don't know how to do it better (the problem is one of
1604 ugly, but I don't know how to do it better (the problem is one of
1595 handling cross-thread exceptions).
1605 handling cross-thread exceptions).
1596
1606
1597 2004-10-28 Fernando Perez <fperez@colorado.edu>
1607 2004-10-28 Fernando Perez <fperez@colorado.edu>
1598
1608
1599 * IPython/Shell.py (signal_handler): add signal handlers to trap
1609 * IPython/Shell.py (signal_handler): add signal handlers to trap
1600 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1610 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1601 report by Francesc Alted.
1611 report by Francesc Alted.
1602
1612
1603 2004-10-21 Fernando Perez <fperez@colorado.edu>
1613 2004-10-21 Fernando Perez <fperez@colorado.edu>
1604
1614
1605 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1615 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1606 to % for pysh syntax extensions.
1616 to % for pysh syntax extensions.
1607
1617
1608 2004-10-09 Fernando Perez <fperez@colorado.edu>
1618 2004-10-09 Fernando Perez <fperez@colorado.edu>
1609
1619
1610 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1620 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1611 arrays to print a more useful summary, without calling str(arr).
1621 arrays to print a more useful summary, without calling str(arr).
1612 This avoids the problem of extremely lengthy computations which
1622 This avoids the problem of extremely lengthy computations which
1613 occur if arr is large, and appear to the user as a system lockup
1623 occur if arr is large, and appear to the user as a system lockup
1614 with 100% cpu activity. After a suggestion by Kristian Sandberg
1624 with 100% cpu activity. After a suggestion by Kristian Sandberg
1615 <Kristian.Sandberg@colorado.edu>.
1625 <Kristian.Sandberg@colorado.edu>.
1616 (Magic.__init__): fix bug in global magic escapes not being
1626 (Magic.__init__): fix bug in global magic escapes not being
1617 correctly set.
1627 correctly set.
1618
1628
1619 2004-10-08 Fernando Perez <fperez@colorado.edu>
1629 2004-10-08 Fernando Perez <fperez@colorado.edu>
1620
1630
1621 * IPython/Magic.py (__license__): change to absolute imports of
1631 * IPython/Magic.py (__license__): change to absolute imports of
1622 ipython's own internal packages, to start adapting to the absolute
1632 ipython's own internal packages, to start adapting to the absolute
1623 import requirement of PEP-328.
1633 import requirement of PEP-328.
1624
1634
1625 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1635 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1626 files, and standardize author/license marks through the Release
1636 files, and standardize author/license marks through the Release
1627 module instead of having per/file stuff (except for files with
1637 module instead of having per/file stuff (except for files with
1628 particular licenses, like the MIT/PSF-licensed codes).
1638 particular licenses, like the MIT/PSF-licensed codes).
1629
1639
1630 * IPython/Debugger.py: remove dead code for python 2.1
1640 * IPython/Debugger.py: remove dead code for python 2.1
1631
1641
1632 2004-10-04 Fernando Perez <fperez@colorado.edu>
1642 2004-10-04 Fernando Perez <fperez@colorado.edu>
1633
1643
1634 * IPython/iplib.py (ipmagic): New function for accessing magics
1644 * IPython/iplib.py (ipmagic): New function for accessing magics
1635 via a normal python function call.
1645 via a normal python function call.
1636
1646
1637 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1647 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1638 from '@' to '%', to accomodate the new @decorator syntax of python
1648 from '@' to '%', to accomodate the new @decorator syntax of python
1639 2.4.
1649 2.4.
1640
1650
1641 2004-09-29 Fernando Perez <fperez@colorado.edu>
1651 2004-09-29 Fernando Perez <fperez@colorado.edu>
1642
1652
1643 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1653 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1644 matplotlib.use to prevent running scripts which try to switch
1654 matplotlib.use to prevent running scripts which try to switch
1645 interactive backends from within ipython. This will just crash
1655 interactive backends from within ipython. This will just crash
1646 the python interpreter, so we can't allow it (but a detailed error
1656 the python interpreter, so we can't allow it (but a detailed error
1647 is given to the user).
1657 is given to the user).
1648
1658
1649 2004-09-28 Fernando Perez <fperez@colorado.edu>
1659 2004-09-28 Fernando Perez <fperez@colorado.edu>
1650
1660
1651 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1661 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1652 matplotlib-related fixes so that using @run with non-matplotlib
1662 matplotlib-related fixes so that using @run with non-matplotlib
1653 scripts doesn't pop up spurious plot windows. This requires
1663 scripts doesn't pop up spurious plot windows. This requires
1654 matplotlib >= 0.63, where I had to make some changes as well.
1664 matplotlib >= 0.63, where I had to make some changes as well.
1655
1665
1656 * IPython/ipmaker.py (make_IPython): update version requirement to
1666 * IPython/ipmaker.py (make_IPython): update version requirement to
1657 python 2.2.
1667 python 2.2.
1658
1668
1659 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1669 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1660 banner arg for embedded customization.
1670 banner arg for embedded customization.
1661
1671
1662 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1672 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1663 explicit uses of __IP as the IPython's instance name. Now things
1673 explicit uses of __IP as the IPython's instance name. Now things
1664 are properly handled via the shell.name value. The actual code
1674 are properly handled via the shell.name value. The actual code
1665 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1675 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1666 is much better than before. I'll clean things completely when the
1676 is much better than before. I'll clean things completely when the
1667 magic stuff gets a real overhaul.
1677 magic stuff gets a real overhaul.
1668
1678
1669 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1679 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1670 minor changes to debian dir.
1680 minor changes to debian dir.
1671
1681
1672 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1682 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1673 pointer to the shell itself in the interactive namespace even when
1683 pointer to the shell itself in the interactive namespace even when
1674 a user-supplied dict is provided. This is needed for embedding
1684 a user-supplied dict is provided. This is needed for embedding
1675 purposes (found by tests with Michel Sanner).
1685 purposes (found by tests with Michel Sanner).
1676
1686
1677 2004-09-27 Fernando Perez <fperez@colorado.edu>
1687 2004-09-27 Fernando Perez <fperez@colorado.edu>
1678
1688
1679 * IPython/UserConfig/ipythonrc: remove []{} from
1689 * IPython/UserConfig/ipythonrc: remove []{} from
1680 readline_remove_delims, so that things like [modname.<TAB> do
1690 readline_remove_delims, so that things like [modname.<TAB> do
1681 proper completion. This disables [].TAB, but that's a less common
1691 proper completion. This disables [].TAB, but that's a less common
1682 case than module names in list comprehensions, for example.
1692 case than module names in list comprehensions, for example.
1683 Thanks to a report by Andrea Riciputi.
1693 Thanks to a report by Andrea Riciputi.
1684
1694
1685 2004-09-09 Fernando Perez <fperez@colorado.edu>
1695 2004-09-09 Fernando Perez <fperez@colorado.edu>
1686
1696
1687 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1697 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1688 blocking problems in win32 and osx. Fix by John.
1698 blocking problems in win32 and osx. Fix by John.
1689
1699
1690 2004-09-08 Fernando Perez <fperez@colorado.edu>
1700 2004-09-08 Fernando Perez <fperez@colorado.edu>
1691
1701
1692 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1702 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1693 for Win32 and OSX. Fix by John Hunter.
1703 for Win32 and OSX. Fix by John Hunter.
1694
1704
1695 2004-08-30 *** Released version 0.6.3
1705 2004-08-30 *** Released version 0.6.3
1696
1706
1697 2004-08-30 Fernando Perez <fperez@colorado.edu>
1707 2004-08-30 Fernando Perez <fperez@colorado.edu>
1698
1708
1699 * setup.py (isfile): Add manpages to list of dependent files to be
1709 * setup.py (isfile): Add manpages to list of dependent files to be
1700 updated.
1710 updated.
1701
1711
1702 2004-08-27 Fernando Perez <fperez@colorado.edu>
1712 2004-08-27 Fernando Perez <fperez@colorado.edu>
1703
1713
1704 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1714 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1705 for now. They don't really work with standalone WX/GTK code
1715 for now. They don't really work with standalone WX/GTK code
1706 (though matplotlib IS working fine with both of those backends).
1716 (though matplotlib IS working fine with both of those backends).
1707 This will neeed much more testing. I disabled most things with
1717 This will neeed much more testing. I disabled most things with
1708 comments, so turning it back on later should be pretty easy.
1718 comments, so turning it back on later should be pretty easy.
1709
1719
1710 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1720 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1711 autocalling of expressions like r'foo', by modifying the line
1721 autocalling of expressions like r'foo', by modifying the line
1712 split regexp. Closes
1722 split regexp. Closes
1713 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1723 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1714 Riley <ipythonbugs-AT-sabi.net>.
1724 Riley <ipythonbugs-AT-sabi.net>.
1715 (InteractiveShell.mainloop): honor --nobanner with banner
1725 (InteractiveShell.mainloop): honor --nobanner with banner
1716 extensions.
1726 extensions.
1717
1727
1718 * IPython/Shell.py: Significant refactoring of all classes, so
1728 * IPython/Shell.py: Significant refactoring of all classes, so
1719 that we can really support ALL matplotlib backends and threading
1729 that we can really support ALL matplotlib backends and threading
1720 models (John spotted a bug with Tk which required this). Now we
1730 models (John spotted a bug with Tk which required this). Now we
1721 should support single-threaded, WX-threads and GTK-threads, both
1731 should support single-threaded, WX-threads and GTK-threads, both
1722 for generic code and for matplotlib.
1732 for generic code and for matplotlib.
1723
1733
1724 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1734 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1725 -pylab, to simplify things for users. Will also remove the pylab
1735 -pylab, to simplify things for users. Will also remove the pylab
1726 profile, since now all of matplotlib configuration is directly
1736 profile, since now all of matplotlib configuration is directly
1727 handled here. This also reduces startup time.
1737 handled here. This also reduces startup time.
1728
1738
1729 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1739 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1730 shell wasn't being correctly called. Also in IPShellWX.
1740 shell wasn't being correctly called. Also in IPShellWX.
1731
1741
1732 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1742 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1733 fine-tune banner.
1743 fine-tune banner.
1734
1744
1735 * IPython/numutils.py (spike): Deprecate these spike functions,
1745 * IPython/numutils.py (spike): Deprecate these spike functions,
1736 delete (long deprecated) gnuplot_exec handler.
1746 delete (long deprecated) gnuplot_exec handler.
1737
1747
1738 2004-08-26 Fernando Perez <fperez@colorado.edu>
1748 2004-08-26 Fernando Perez <fperez@colorado.edu>
1739
1749
1740 * ipython.1: Update for threading options, plus some others which
1750 * ipython.1: Update for threading options, plus some others which
1741 were missing.
1751 were missing.
1742
1752
1743 * IPython/ipmaker.py (__call__): Added -wthread option for
1753 * IPython/ipmaker.py (__call__): Added -wthread option for
1744 wxpython thread handling. Make sure threading options are only
1754 wxpython thread handling. Make sure threading options are only
1745 valid at the command line.
1755 valid at the command line.
1746
1756
1747 * scripts/ipython: moved shell selection into a factory function
1757 * scripts/ipython: moved shell selection into a factory function
1748 in Shell.py, to keep the starter script to a minimum.
1758 in Shell.py, to keep the starter script to a minimum.
1749
1759
1750 2004-08-25 Fernando Perez <fperez@colorado.edu>
1760 2004-08-25 Fernando Perez <fperez@colorado.edu>
1751
1761
1752 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1762 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1753 John. Along with some recent changes he made to matplotlib, the
1763 John. Along with some recent changes he made to matplotlib, the
1754 next versions of both systems should work very well together.
1764 next versions of both systems should work very well together.
1755
1765
1756 2004-08-24 Fernando Perez <fperez@colorado.edu>
1766 2004-08-24 Fernando Perez <fperez@colorado.edu>
1757
1767
1758 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1768 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1759 tried to switch the profiling to using hotshot, but I'm getting
1769 tried to switch the profiling to using hotshot, but I'm getting
1760 strange errors from prof.runctx() there. I may be misreading the
1770 strange errors from prof.runctx() there. I may be misreading the
1761 docs, but it looks weird. For now the profiling code will
1771 docs, but it looks weird. For now the profiling code will
1762 continue to use the standard profiler.
1772 continue to use the standard profiler.
1763
1773
1764 2004-08-23 Fernando Perez <fperez@colorado.edu>
1774 2004-08-23 Fernando Perez <fperez@colorado.edu>
1765
1775
1766 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1776 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1767 threaded shell, by John Hunter. It's not quite ready yet, but
1777 threaded shell, by John Hunter. It's not quite ready yet, but
1768 close.
1778 close.
1769
1779
1770 2004-08-22 Fernando Perez <fperez@colorado.edu>
1780 2004-08-22 Fernando Perez <fperez@colorado.edu>
1771
1781
1772 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1782 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1773 in Magic and ultraTB.
1783 in Magic and ultraTB.
1774
1784
1775 * ipython.1: document threading options in manpage.
1785 * ipython.1: document threading options in manpage.
1776
1786
1777 * scripts/ipython: Changed name of -thread option to -gthread,
1787 * scripts/ipython: Changed name of -thread option to -gthread,
1778 since this is GTK specific. I want to leave the door open for a
1788 since this is GTK specific. I want to leave the door open for a
1779 -wthread option for WX, which will most likely be necessary. This
1789 -wthread option for WX, which will most likely be necessary. This
1780 change affects usage and ipmaker as well.
1790 change affects usage and ipmaker as well.
1781
1791
1782 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1792 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1783 handle the matplotlib shell issues. Code by John Hunter
1793 handle the matplotlib shell issues. Code by John Hunter
1784 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1794 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1785 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1795 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1786 broken (and disabled for end users) for now, but it puts the
1796 broken (and disabled for end users) for now, but it puts the
1787 infrastructure in place.
1797 infrastructure in place.
1788
1798
1789 2004-08-21 Fernando Perez <fperez@colorado.edu>
1799 2004-08-21 Fernando Perez <fperez@colorado.edu>
1790
1800
1791 * ipythonrc-pylab: Add matplotlib support.
1801 * ipythonrc-pylab: Add matplotlib support.
1792
1802
1793 * matplotlib_config.py: new files for matplotlib support, part of
1803 * matplotlib_config.py: new files for matplotlib support, part of
1794 the pylab profile.
1804 the pylab profile.
1795
1805
1796 * IPython/usage.py (__doc__): documented the threading options.
1806 * IPython/usage.py (__doc__): documented the threading options.
1797
1807
1798 2004-08-20 Fernando Perez <fperez@colorado.edu>
1808 2004-08-20 Fernando Perez <fperez@colorado.edu>
1799
1809
1800 * ipython: Modified the main calling routine to handle the -thread
1810 * ipython: Modified the main calling routine to handle the -thread
1801 and -mpthread options. This needs to be done as a top-level hack,
1811 and -mpthread options. This needs to be done as a top-level hack,
1802 because it determines which class to instantiate for IPython
1812 because it determines which class to instantiate for IPython
1803 itself.
1813 itself.
1804
1814
1805 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1815 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1806 classes to support multithreaded GTK operation without blocking,
1816 classes to support multithreaded GTK operation without blocking,
1807 and matplotlib with all backends. This is a lot of still very
1817 and matplotlib with all backends. This is a lot of still very
1808 experimental code, and threads are tricky. So it may still have a
1818 experimental code, and threads are tricky. So it may still have a
1809 few rough edges... This code owes a lot to
1819 few rough edges... This code owes a lot to
1810 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1820 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1811 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1821 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1812 to John Hunter for all the matplotlib work.
1822 to John Hunter for all the matplotlib work.
1813
1823
1814 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1824 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1815 options for gtk thread and matplotlib support.
1825 options for gtk thread and matplotlib support.
1816
1826
1817 2004-08-16 Fernando Perez <fperez@colorado.edu>
1827 2004-08-16 Fernando Perez <fperez@colorado.edu>
1818
1828
1819 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1829 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1820 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1830 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1821 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1831 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1822
1832
1823 2004-08-11 Fernando Perez <fperez@colorado.edu>
1833 2004-08-11 Fernando Perez <fperez@colorado.edu>
1824
1834
1825 * setup.py (isfile): Fix build so documentation gets updated for
1835 * setup.py (isfile): Fix build so documentation gets updated for
1826 rpms (it was only done for .tgz builds).
1836 rpms (it was only done for .tgz builds).
1827
1837
1828 2004-08-10 Fernando Perez <fperez@colorado.edu>
1838 2004-08-10 Fernando Perez <fperez@colorado.edu>
1829
1839
1830 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1840 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1831
1841
1832 * iplib.py : Silence syntax error exceptions in tab-completion.
1842 * iplib.py : Silence syntax error exceptions in tab-completion.
1833
1843
1834 2004-08-05 Fernando Perez <fperez@colorado.edu>
1844 2004-08-05 Fernando Perez <fperez@colorado.edu>
1835
1845
1836 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1846 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1837 'color off' mark for continuation prompts. This was causing long
1847 'color off' mark for continuation prompts. This was causing long
1838 continuation lines to mis-wrap.
1848 continuation lines to mis-wrap.
1839
1849
1840 2004-08-01 Fernando Perez <fperez@colorado.edu>
1850 2004-08-01 Fernando Perez <fperez@colorado.edu>
1841
1851
1842 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1852 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1843 for building ipython to be a parameter. All this is necessary
1853 for building ipython to be a parameter. All this is necessary
1844 right now to have a multithreaded version, but this insane
1854 right now to have a multithreaded version, but this insane
1845 non-design will be cleaned up soon. For now, it's a hack that
1855 non-design will be cleaned up soon. For now, it's a hack that
1846 works.
1856 works.
1847
1857
1848 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1858 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1849 args in various places. No bugs so far, but it's a dangerous
1859 args in various places. No bugs so far, but it's a dangerous
1850 practice.
1860 practice.
1851
1861
1852 2004-07-31 Fernando Perez <fperez@colorado.edu>
1862 2004-07-31 Fernando Perez <fperez@colorado.edu>
1853
1863
1854 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1864 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1855 fix completion of files with dots in their names under most
1865 fix completion of files with dots in their names under most
1856 profiles (pysh was OK because the completion order is different).
1866 profiles (pysh was OK because the completion order is different).
1857
1867
1858 2004-07-27 Fernando Perez <fperez@colorado.edu>
1868 2004-07-27 Fernando Perez <fperez@colorado.edu>
1859
1869
1860 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1870 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1861 keywords manually, b/c the one in keyword.py was removed in python
1871 keywords manually, b/c the one in keyword.py was removed in python
1862 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1872 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1863 This is NOT a bug under python 2.3 and earlier.
1873 This is NOT a bug under python 2.3 and earlier.
1864
1874
1865 2004-07-26 Fernando Perez <fperez@colorado.edu>
1875 2004-07-26 Fernando Perez <fperez@colorado.edu>
1866
1876
1867 * IPython/ultraTB.py (VerboseTB.text): Add another
1877 * IPython/ultraTB.py (VerboseTB.text): Add another
1868 linecache.checkcache() call to try to prevent inspect.py from
1878 linecache.checkcache() call to try to prevent inspect.py from
1869 crashing under python 2.3. I think this fixes
1879 crashing under python 2.3. I think this fixes
1870 http://www.scipy.net/roundup/ipython/issue17.
1880 http://www.scipy.net/roundup/ipython/issue17.
1871
1881
1872 2004-07-26 *** Released version 0.6.2
1882 2004-07-26 *** Released version 0.6.2
1873
1883
1874 2004-07-26 Fernando Perez <fperez@colorado.edu>
1884 2004-07-26 Fernando Perez <fperez@colorado.edu>
1875
1885
1876 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1886 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1877 fail for any number.
1887 fail for any number.
1878 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1888 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1879 empty bookmarks.
1889 empty bookmarks.
1880
1890
1881 2004-07-26 *** Released version 0.6.1
1891 2004-07-26 *** Released version 0.6.1
1882
1892
1883 2004-07-26 Fernando Perez <fperez@colorado.edu>
1893 2004-07-26 Fernando Perez <fperez@colorado.edu>
1884
1894
1885 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1895 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1886
1896
1887 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1897 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1888 escaping '()[]{}' in filenames.
1898 escaping '()[]{}' in filenames.
1889
1899
1890 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1900 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1891 Python 2.2 users who lack a proper shlex.split.
1901 Python 2.2 users who lack a proper shlex.split.
1892
1902
1893 2004-07-19 Fernando Perez <fperez@colorado.edu>
1903 2004-07-19 Fernando Perez <fperez@colorado.edu>
1894
1904
1895 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1905 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1896 for reading readline's init file. I follow the normal chain:
1906 for reading readline's init file. I follow the normal chain:
1897 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1907 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1898 report by Mike Heeter. This closes
1908 report by Mike Heeter. This closes
1899 http://www.scipy.net/roundup/ipython/issue16.
1909 http://www.scipy.net/roundup/ipython/issue16.
1900
1910
1901 2004-07-18 Fernando Perez <fperez@colorado.edu>
1911 2004-07-18 Fernando Perez <fperez@colorado.edu>
1902
1912
1903 * IPython/iplib.py (__init__): Add better handling of '\' under
1913 * IPython/iplib.py (__init__): Add better handling of '\' under
1904 Win32 for filenames. After a patch by Ville.
1914 Win32 for filenames. After a patch by Ville.
1905
1915
1906 2004-07-17 Fernando Perez <fperez@colorado.edu>
1916 2004-07-17 Fernando Perez <fperez@colorado.edu>
1907
1917
1908 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1918 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1909 autocalling would be triggered for 'foo is bar' if foo is
1919 autocalling would be triggered for 'foo is bar' if foo is
1910 callable. I also cleaned up the autocall detection code to use a
1920 callable. I also cleaned up the autocall detection code to use a
1911 regexp, which is faster. Bug reported by Alexander Schmolck.
1921 regexp, which is faster. Bug reported by Alexander Schmolck.
1912
1922
1913 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1923 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1914 '?' in them would confuse the help system. Reported by Alex
1924 '?' in them would confuse the help system. Reported by Alex
1915 Schmolck.
1925 Schmolck.
1916
1926
1917 2004-07-16 Fernando Perez <fperez@colorado.edu>
1927 2004-07-16 Fernando Perez <fperez@colorado.edu>
1918
1928
1919 * IPython/GnuplotInteractive.py (__all__): added plot2.
1929 * IPython/GnuplotInteractive.py (__all__): added plot2.
1920
1930
1921 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1931 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1922 plotting dictionaries, lists or tuples of 1d arrays.
1932 plotting dictionaries, lists or tuples of 1d arrays.
1923
1933
1924 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1934 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1925 optimizations.
1935 optimizations.
1926
1936
1927 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1937 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1928 the information which was there from Janko's original IPP code:
1938 the information which was there from Janko's original IPP code:
1929
1939
1930 03.05.99 20:53 porto.ifm.uni-kiel.de
1940 03.05.99 20:53 porto.ifm.uni-kiel.de
1931 --Started changelog.
1941 --Started changelog.
1932 --make clear do what it say it does
1942 --make clear do what it say it does
1933 --added pretty output of lines from inputcache
1943 --added pretty output of lines from inputcache
1934 --Made Logger a mixin class, simplifies handling of switches
1944 --Made Logger a mixin class, simplifies handling of switches
1935 --Added own completer class. .string<TAB> expands to last history
1945 --Added own completer class. .string<TAB> expands to last history
1936 line which starts with string. The new expansion is also present
1946 line which starts with string. The new expansion is also present
1937 with Ctrl-r from the readline library. But this shows, who this
1947 with Ctrl-r from the readline library. But this shows, who this
1938 can be done for other cases.
1948 can be done for other cases.
1939 --Added convention that all shell functions should accept a
1949 --Added convention that all shell functions should accept a
1940 parameter_string This opens the door for different behaviour for
1950 parameter_string This opens the door for different behaviour for
1941 each function. @cd is a good example of this.
1951 each function. @cd is a good example of this.
1942
1952
1943 04.05.99 12:12 porto.ifm.uni-kiel.de
1953 04.05.99 12:12 porto.ifm.uni-kiel.de
1944 --added logfile rotation
1954 --added logfile rotation
1945 --added new mainloop method which freezes first the namespace
1955 --added new mainloop method which freezes first the namespace
1946
1956
1947 07.05.99 21:24 porto.ifm.uni-kiel.de
1957 07.05.99 21:24 porto.ifm.uni-kiel.de
1948 --added the docreader classes. Now there is a help system.
1958 --added the docreader classes. Now there is a help system.
1949 -This is only a first try. Currently it's not easy to put new
1959 -This is only a first try. Currently it's not easy to put new
1950 stuff in the indices. But this is the way to go. Info would be
1960 stuff in the indices. But this is the way to go. Info would be
1951 better, but HTML is every where and not everybody has an info
1961 better, but HTML is every where and not everybody has an info
1952 system installed and it's not so easy to change html-docs to info.
1962 system installed and it's not so easy to change html-docs to info.
1953 --added global logfile option
1963 --added global logfile option
1954 --there is now a hook for object inspection method pinfo needs to
1964 --there is now a hook for object inspection method pinfo needs to
1955 be provided for this. Can be reached by two '??'.
1965 be provided for this. Can be reached by two '??'.
1956
1966
1957 08.05.99 20:51 porto.ifm.uni-kiel.de
1967 08.05.99 20:51 porto.ifm.uni-kiel.de
1958 --added a README
1968 --added a README
1959 --bug in rc file. Something has changed so functions in the rc
1969 --bug in rc file. Something has changed so functions in the rc
1960 file need to reference the shell and not self. Not clear if it's a
1970 file need to reference the shell and not self. Not clear if it's a
1961 bug or feature.
1971 bug or feature.
1962 --changed rc file for new behavior
1972 --changed rc file for new behavior
1963
1973
1964 2004-07-15 Fernando Perez <fperez@colorado.edu>
1974 2004-07-15 Fernando Perez <fperez@colorado.edu>
1965
1975
1966 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1976 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1967 cache was falling out of sync in bizarre manners when multi-line
1977 cache was falling out of sync in bizarre manners when multi-line
1968 input was present. Minor optimizations and cleanup.
1978 input was present. Minor optimizations and cleanup.
1969
1979
1970 (Logger): Remove old Changelog info for cleanup. This is the
1980 (Logger): Remove old Changelog info for cleanup. This is the
1971 information which was there from Janko's original code:
1981 information which was there from Janko's original code:
1972
1982
1973 Changes to Logger: - made the default log filename a parameter
1983 Changes to Logger: - made the default log filename a parameter
1974
1984
1975 - put a check for lines beginning with !@? in log(). Needed
1985 - put a check for lines beginning with !@? in log(). Needed
1976 (even if the handlers properly log their lines) for mid-session
1986 (even if the handlers properly log their lines) for mid-session
1977 logging activation to work properly. Without this, lines logged
1987 logging activation to work properly. Without this, lines logged
1978 in mid session, which get read from the cache, would end up
1988 in mid session, which get read from the cache, would end up
1979 'bare' (with !@? in the open) in the log. Now they are caught
1989 'bare' (with !@? in the open) in the log. Now they are caught
1980 and prepended with a #.
1990 and prepended with a #.
1981
1991
1982 * IPython/iplib.py (InteractiveShell.init_readline): added check
1992 * IPython/iplib.py (InteractiveShell.init_readline): added check
1983 in case MagicCompleter fails to be defined, so we don't crash.
1993 in case MagicCompleter fails to be defined, so we don't crash.
1984
1994
1985 2004-07-13 Fernando Perez <fperez@colorado.edu>
1995 2004-07-13 Fernando Perez <fperez@colorado.edu>
1986
1996
1987 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1997 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1988 of EPS if the requested filename ends in '.eps'.
1998 of EPS if the requested filename ends in '.eps'.
1989
1999
1990 2004-07-04 Fernando Perez <fperez@colorado.edu>
2000 2004-07-04 Fernando Perez <fperez@colorado.edu>
1991
2001
1992 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2002 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1993 escaping of quotes when calling the shell.
2003 escaping of quotes when calling the shell.
1994
2004
1995 2004-07-02 Fernando Perez <fperez@colorado.edu>
2005 2004-07-02 Fernando Perez <fperez@colorado.edu>
1996
2006
1997 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2007 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1998 gettext not working because we were clobbering '_'. Fixes
2008 gettext not working because we were clobbering '_'. Fixes
1999 http://www.scipy.net/roundup/ipython/issue6.
2009 http://www.scipy.net/roundup/ipython/issue6.
2000
2010
2001 2004-07-01 Fernando Perez <fperez@colorado.edu>
2011 2004-07-01 Fernando Perez <fperez@colorado.edu>
2002
2012
2003 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2013 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2004 into @cd. Patch by Ville.
2014 into @cd. Patch by Ville.
2005
2015
2006 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2016 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2007 new function to store things after ipmaker runs. Patch by Ville.
2017 new function to store things after ipmaker runs. Patch by Ville.
2008 Eventually this will go away once ipmaker is removed and the class
2018 Eventually this will go away once ipmaker is removed and the class
2009 gets cleaned up, but for now it's ok. Key functionality here is
2019 gets cleaned up, but for now it's ok. Key functionality here is
2010 the addition of the persistent storage mechanism, a dict for
2020 the addition of the persistent storage mechanism, a dict for
2011 keeping data across sessions (for now just bookmarks, but more can
2021 keeping data across sessions (for now just bookmarks, but more can
2012 be implemented later).
2022 be implemented later).
2013
2023
2014 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2024 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2015 persistent across sections. Patch by Ville, I modified it
2025 persistent across sections. Patch by Ville, I modified it
2016 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2026 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2017 added a '-l' option to list all bookmarks.
2027 added a '-l' option to list all bookmarks.
2018
2028
2019 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2029 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2020 center for cleanup. Registered with atexit.register(). I moved
2030 center for cleanup. Registered with atexit.register(). I moved
2021 here the old exit_cleanup(). After a patch by Ville.
2031 here the old exit_cleanup(). After a patch by Ville.
2022
2032
2023 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2033 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2024 characters in the hacked shlex_split for python 2.2.
2034 characters in the hacked shlex_split for python 2.2.
2025
2035
2026 * IPython/iplib.py (file_matches): more fixes to filenames with
2036 * IPython/iplib.py (file_matches): more fixes to filenames with
2027 whitespace in them. It's not perfect, but limitations in python's
2037 whitespace in them. It's not perfect, but limitations in python's
2028 readline make it impossible to go further.
2038 readline make it impossible to go further.
2029
2039
2030 2004-06-29 Fernando Perez <fperez@colorado.edu>
2040 2004-06-29 Fernando Perez <fperez@colorado.edu>
2031
2041
2032 * IPython/iplib.py (file_matches): escape whitespace correctly in
2042 * IPython/iplib.py (file_matches): escape whitespace correctly in
2033 filename completions. Bug reported by Ville.
2043 filename completions. Bug reported by Ville.
2034
2044
2035 2004-06-28 Fernando Perez <fperez@colorado.edu>
2045 2004-06-28 Fernando Perez <fperez@colorado.edu>
2036
2046
2037 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2047 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2038 the history file will be called 'history-PROFNAME' (or just
2048 the history file will be called 'history-PROFNAME' (or just
2039 'history' if no profile is loaded). I was getting annoyed at
2049 'history' if no profile is loaded). I was getting annoyed at
2040 getting my Numerical work history clobbered by pysh sessions.
2050 getting my Numerical work history clobbered by pysh sessions.
2041
2051
2042 * IPython/iplib.py (InteractiveShell.__init__): Internal
2052 * IPython/iplib.py (InteractiveShell.__init__): Internal
2043 getoutputerror() function so that we can honor the system_verbose
2053 getoutputerror() function so that we can honor the system_verbose
2044 flag for _all_ system calls. I also added escaping of #
2054 flag for _all_ system calls. I also added escaping of #
2045 characters here to avoid confusing Itpl.
2055 characters here to avoid confusing Itpl.
2046
2056
2047 * IPython/Magic.py (shlex_split): removed call to shell in
2057 * IPython/Magic.py (shlex_split): removed call to shell in
2048 parse_options and replaced it with shlex.split(). The annoying
2058 parse_options and replaced it with shlex.split(). The annoying
2049 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2059 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2050 to backport it from 2.3, with several frail hacks (the shlex
2060 to backport it from 2.3, with several frail hacks (the shlex
2051 module is rather limited in 2.2). Thanks to a suggestion by Ville
2061 module is rather limited in 2.2). Thanks to a suggestion by Ville
2052 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2062 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2053 problem.
2063 problem.
2054
2064
2055 (Magic.magic_system_verbose): new toggle to print the actual
2065 (Magic.magic_system_verbose): new toggle to print the actual
2056 system calls made by ipython. Mainly for debugging purposes.
2066 system calls made by ipython. Mainly for debugging purposes.
2057
2067
2058 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2068 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2059 doesn't support persistence. Reported (and fix suggested) by
2069 doesn't support persistence. Reported (and fix suggested) by
2060 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2070 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2061
2071
2062 2004-06-26 Fernando Perez <fperez@colorado.edu>
2072 2004-06-26 Fernando Perez <fperez@colorado.edu>
2063
2073
2064 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2074 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2065 continue prompts.
2075 continue prompts.
2066
2076
2067 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2077 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2068 function (basically a big docstring) and a few more things here to
2078 function (basically a big docstring) and a few more things here to
2069 speedup startup. pysh.py is now very lightweight. We want because
2079 speedup startup. pysh.py is now very lightweight. We want because
2070 it gets execfile'd, while InterpreterExec gets imported, so
2080 it gets execfile'd, while InterpreterExec gets imported, so
2071 byte-compilation saves time.
2081 byte-compilation saves time.
2072
2082
2073 2004-06-25 Fernando Perez <fperez@colorado.edu>
2083 2004-06-25 Fernando Perez <fperez@colorado.edu>
2074
2084
2075 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2085 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2076 -NUM', which was recently broken.
2086 -NUM', which was recently broken.
2077
2087
2078 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2088 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2079 in multi-line input (but not !!, which doesn't make sense there).
2089 in multi-line input (but not !!, which doesn't make sense there).
2080
2090
2081 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2091 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2082 It's just too useful, and people can turn it off in the less
2092 It's just too useful, and people can turn it off in the less
2083 common cases where it's a problem.
2093 common cases where it's a problem.
2084
2094
2085 2004-06-24 Fernando Perez <fperez@colorado.edu>
2095 2004-06-24 Fernando Perez <fperez@colorado.edu>
2086
2096
2087 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2097 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2088 special syntaxes (like alias calling) is now allied in multi-line
2098 special syntaxes (like alias calling) is now allied in multi-line
2089 input. This is still _very_ experimental, but it's necessary for
2099 input. This is still _very_ experimental, but it's necessary for
2090 efficient shell usage combining python looping syntax with system
2100 efficient shell usage combining python looping syntax with system
2091 calls. For now it's restricted to aliases, I don't think it
2101 calls. For now it's restricted to aliases, I don't think it
2092 really even makes sense to have this for magics.
2102 really even makes sense to have this for magics.
2093
2103
2094 2004-06-23 Fernando Perez <fperez@colorado.edu>
2104 2004-06-23 Fernando Perez <fperez@colorado.edu>
2095
2105
2096 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2106 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2097 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2107 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2098
2108
2099 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2109 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2100 extensions under Windows (after code sent by Gary Bishop). The
2110 extensions under Windows (after code sent by Gary Bishop). The
2101 extensions considered 'executable' are stored in IPython's rc
2111 extensions considered 'executable' are stored in IPython's rc
2102 structure as win_exec_ext.
2112 structure as win_exec_ext.
2103
2113
2104 * IPython/genutils.py (shell): new function, like system() but
2114 * IPython/genutils.py (shell): new function, like system() but
2105 without return value. Very useful for interactive shell work.
2115 without return value. Very useful for interactive shell work.
2106
2116
2107 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2117 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2108 delete aliases.
2118 delete aliases.
2109
2119
2110 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2120 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2111 sure that the alias table doesn't contain python keywords.
2121 sure that the alias table doesn't contain python keywords.
2112
2122
2113 2004-06-21 Fernando Perez <fperez@colorado.edu>
2123 2004-06-21 Fernando Perez <fperez@colorado.edu>
2114
2124
2115 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2125 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2116 non-existent items are found in $PATH. Reported by Thorsten.
2126 non-existent items are found in $PATH. Reported by Thorsten.
2117
2127
2118 2004-06-20 Fernando Perez <fperez@colorado.edu>
2128 2004-06-20 Fernando Perez <fperez@colorado.edu>
2119
2129
2120 * IPython/iplib.py (complete): modified the completer so that the
2130 * IPython/iplib.py (complete): modified the completer so that the
2121 order of priorities can be easily changed at runtime.
2131 order of priorities can be easily changed at runtime.
2122
2132
2123 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2133 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2124 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2134 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2125
2135
2126 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2136 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2127 expand Python variables prepended with $ in all system calls. The
2137 expand Python variables prepended with $ in all system calls. The
2128 same was done to InteractiveShell.handle_shell_escape. Now all
2138 same was done to InteractiveShell.handle_shell_escape. Now all
2129 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2139 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2130 expansion of python variables and expressions according to the
2140 expansion of python variables and expressions according to the
2131 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2141 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2132
2142
2133 Though PEP-215 has been rejected, a similar (but simpler) one
2143 Though PEP-215 has been rejected, a similar (but simpler) one
2134 seems like it will go into Python 2.4, PEP-292 -
2144 seems like it will go into Python 2.4, PEP-292 -
2135 http://www.python.org/peps/pep-0292.html.
2145 http://www.python.org/peps/pep-0292.html.
2136
2146
2137 I'll keep the full syntax of PEP-215, since IPython has since the
2147 I'll keep the full syntax of PEP-215, since IPython has since the
2138 start used Ka-Ping Yee's reference implementation discussed there
2148 start used Ka-Ping Yee's reference implementation discussed there
2139 (Itpl), and I actually like the powerful semantics it offers.
2149 (Itpl), and I actually like the powerful semantics it offers.
2140
2150
2141 In order to access normal shell variables, the $ has to be escaped
2151 In order to access normal shell variables, the $ has to be escaped
2142 via an extra $. For example:
2152 via an extra $. For example:
2143
2153
2144 In [7]: PATH='a python variable'
2154 In [7]: PATH='a python variable'
2145
2155
2146 In [8]: !echo $PATH
2156 In [8]: !echo $PATH
2147 a python variable
2157 a python variable
2148
2158
2149 In [9]: !echo $$PATH
2159 In [9]: !echo $$PATH
2150 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2151
2161
2152 (Magic.parse_options): escape $ so the shell doesn't evaluate
2162 (Magic.parse_options): escape $ so the shell doesn't evaluate
2153 things prematurely.
2163 things prematurely.
2154
2164
2155 * IPython/iplib.py (InteractiveShell.call_alias): added the
2165 * IPython/iplib.py (InteractiveShell.call_alias): added the
2156 ability for aliases to expand python variables via $.
2166 ability for aliases to expand python variables via $.
2157
2167
2158 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2168 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2159 system, now there's a @rehash/@rehashx pair of magics. These work
2169 system, now there's a @rehash/@rehashx pair of magics. These work
2160 like the csh rehash command, and can be invoked at any time. They
2170 like the csh rehash command, and can be invoked at any time. They
2161 build a table of aliases to everything in the user's $PATH
2171 build a table of aliases to everything in the user's $PATH
2162 (@rehash uses everything, @rehashx is slower but only adds
2172 (@rehash uses everything, @rehashx is slower but only adds
2163 executable files). With this, the pysh.py-based shell profile can
2173 executable files). With this, the pysh.py-based shell profile can
2164 now simply call rehash upon startup, and full access to all
2174 now simply call rehash upon startup, and full access to all
2165 programs in the user's path is obtained.
2175 programs in the user's path is obtained.
2166
2176
2167 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2177 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2168 functionality is now fully in place. I removed the old dynamic
2178 functionality is now fully in place. I removed the old dynamic
2169 code generation based approach, in favor of a much lighter one
2179 code generation based approach, in favor of a much lighter one
2170 based on a simple dict. The advantage is that this allows me to
2180 based on a simple dict. The advantage is that this allows me to
2171 now have thousands of aliases with negligible cost (unthinkable
2181 now have thousands of aliases with negligible cost (unthinkable
2172 with the old system).
2182 with the old system).
2173
2183
2174 2004-06-19 Fernando Perez <fperez@colorado.edu>
2184 2004-06-19 Fernando Perez <fperez@colorado.edu>
2175
2185
2176 * IPython/iplib.py (__init__): extended MagicCompleter class to
2186 * IPython/iplib.py (__init__): extended MagicCompleter class to
2177 also complete (last in priority) on user aliases.
2187 also complete (last in priority) on user aliases.
2178
2188
2179 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2189 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2180 call to eval.
2190 call to eval.
2181 (ItplNS.__init__): Added a new class which functions like Itpl,
2191 (ItplNS.__init__): Added a new class which functions like Itpl,
2182 but allows configuring the namespace for the evaluation to occur
2192 but allows configuring the namespace for the evaluation to occur
2183 in.
2193 in.
2184
2194
2185 2004-06-18 Fernando Perez <fperez@colorado.edu>
2195 2004-06-18 Fernando Perez <fperez@colorado.edu>
2186
2196
2187 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2197 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2188 better message when 'exit' or 'quit' are typed (a common newbie
2198 better message when 'exit' or 'quit' are typed (a common newbie
2189 confusion).
2199 confusion).
2190
2200
2191 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2201 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2192 check for Windows users.
2202 check for Windows users.
2193
2203
2194 * IPython/iplib.py (InteractiveShell.user_setup): removed
2204 * IPython/iplib.py (InteractiveShell.user_setup): removed
2195 disabling of colors for Windows. I'll test at runtime and issue a
2205 disabling of colors for Windows. I'll test at runtime and issue a
2196 warning if Gary's readline isn't found, as to nudge users to
2206 warning if Gary's readline isn't found, as to nudge users to
2197 download it.
2207 download it.
2198
2208
2199 2004-06-16 Fernando Perez <fperez@colorado.edu>
2209 2004-06-16 Fernando Perez <fperez@colorado.edu>
2200
2210
2201 * IPython/genutils.py (Stream.__init__): changed to print errors
2211 * IPython/genutils.py (Stream.__init__): changed to print errors
2202 to sys.stderr. I had a circular dependency here. Now it's
2212 to sys.stderr. I had a circular dependency here. Now it's
2203 possible to run ipython as IDLE's shell (consider this pre-alpha,
2213 possible to run ipython as IDLE's shell (consider this pre-alpha,
2204 since true stdout things end up in the starting terminal instead
2214 since true stdout things end up in the starting terminal instead
2205 of IDLE's out).
2215 of IDLE's out).
2206
2216
2207 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2217 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2208 users who haven't # updated their prompt_in2 definitions. Remove
2218 users who haven't # updated their prompt_in2 definitions. Remove
2209 eventually.
2219 eventually.
2210 (multiple_replace): added credit to original ASPN recipe.
2220 (multiple_replace): added credit to original ASPN recipe.
2211
2221
2212 2004-06-15 Fernando Perez <fperez@colorado.edu>
2222 2004-06-15 Fernando Perez <fperez@colorado.edu>
2213
2223
2214 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2224 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2215 list of auto-defined aliases.
2225 list of auto-defined aliases.
2216
2226
2217 2004-06-13 Fernando Perez <fperez@colorado.edu>
2227 2004-06-13 Fernando Perez <fperez@colorado.edu>
2218
2228
2219 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2229 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2220 install was really requested (so setup.py can be used for other
2230 install was really requested (so setup.py can be used for other
2221 things under Windows).
2231 things under Windows).
2222
2232
2223 2004-06-10 Fernando Perez <fperez@colorado.edu>
2233 2004-06-10 Fernando Perez <fperez@colorado.edu>
2224
2234
2225 * IPython/Logger.py (Logger.create_log): Manually remove any old
2235 * IPython/Logger.py (Logger.create_log): Manually remove any old
2226 backup, since os.remove may fail under Windows. Fixes bug
2236 backup, since os.remove may fail under Windows. Fixes bug
2227 reported by Thorsten.
2237 reported by Thorsten.
2228
2238
2229 2004-06-09 Fernando Perez <fperez@colorado.edu>
2239 2004-06-09 Fernando Perez <fperez@colorado.edu>
2230
2240
2231 * examples/example-embed.py: fixed all references to %n (replaced
2241 * examples/example-embed.py: fixed all references to %n (replaced
2232 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2242 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2233 for all examples and the manual as well.
2243 for all examples and the manual as well.
2234
2244
2235 2004-06-08 Fernando Perez <fperez@colorado.edu>
2245 2004-06-08 Fernando Perez <fperez@colorado.edu>
2236
2246
2237 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2247 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2238 alignment and color management. All 3 prompt subsystems now
2248 alignment and color management. All 3 prompt subsystems now
2239 inherit from BasePrompt.
2249 inherit from BasePrompt.
2240
2250
2241 * tools/release: updates for windows installer build and tag rpms
2251 * tools/release: updates for windows installer build and tag rpms
2242 with python version (since paths are fixed).
2252 with python version (since paths are fixed).
2243
2253
2244 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2254 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2245 which will become eventually obsolete. Also fixed the default
2255 which will become eventually obsolete. Also fixed the default
2246 prompt_in2 to use \D, so at least new users start with the correct
2256 prompt_in2 to use \D, so at least new users start with the correct
2247 defaults.
2257 defaults.
2248 WARNING: Users with existing ipythonrc files will need to apply
2258 WARNING: Users with existing ipythonrc files will need to apply
2249 this fix manually!
2259 this fix manually!
2250
2260
2251 * setup.py: make windows installer (.exe). This is finally the
2261 * setup.py: make windows installer (.exe). This is finally the
2252 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2262 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2253 which I hadn't included because it required Python 2.3 (or recent
2263 which I hadn't included because it required Python 2.3 (or recent
2254 distutils).
2264 distutils).
2255
2265
2256 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2266 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2257 usage of new '\D' escape.
2267 usage of new '\D' escape.
2258
2268
2259 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2269 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2260 lacks os.getuid())
2270 lacks os.getuid())
2261 (CachedOutput.set_colors): Added the ability to turn coloring
2271 (CachedOutput.set_colors): Added the ability to turn coloring
2262 on/off with @colors even for manually defined prompt colors. It
2272 on/off with @colors even for manually defined prompt colors. It
2263 uses a nasty global, but it works safely and via the generic color
2273 uses a nasty global, but it works safely and via the generic color
2264 handling mechanism.
2274 handling mechanism.
2265 (Prompt2.__init__): Introduced new escape '\D' for continuation
2275 (Prompt2.__init__): Introduced new escape '\D' for continuation
2266 prompts. It represents the counter ('\#') as dots.
2276 prompts. It represents the counter ('\#') as dots.
2267 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2277 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2268 need to update their ipythonrc files and replace '%n' with '\D' in
2278 need to update their ipythonrc files and replace '%n' with '\D' in
2269 their prompt_in2 settings everywhere. Sorry, but there's
2279 their prompt_in2 settings everywhere. Sorry, but there's
2270 otherwise no clean way to get all prompts to properly align. The
2280 otherwise no clean way to get all prompts to properly align. The
2271 ipythonrc shipped with IPython has been updated.
2281 ipythonrc shipped with IPython has been updated.
2272
2282
2273 2004-06-07 Fernando Perez <fperez@colorado.edu>
2283 2004-06-07 Fernando Perez <fperez@colorado.edu>
2274
2284
2275 * setup.py (isfile): Pass local_icons option to latex2html, so the
2285 * setup.py (isfile): Pass local_icons option to latex2html, so the
2276 resulting HTML file is self-contained. Thanks to
2286 resulting HTML file is self-contained. Thanks to
2277 dryice-AT-liu.com.cn for the tip.
2287 dryice-AT-liu.com.cn for the tip.
2278
2288
2279 * pysh.py: I created a new profile 'shell', which implements a
2289 * pysh.py: I created a new profile 'shell', which implements a
2280 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2290 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2281 system shell, nor will it become one anytime soon. It's mainly
2291 system shell, nor will it become one anytime soon. It's mainly
2282 meant to illustrate the use of the new flexible bash-like prompts.
2292 meant to illustrate the use of the new flexible bash-like prompts.
2283 I guess it could be used by hardy souls for true shell management,
2293 I guess it could be used by hardy souls for true shell management,
2284 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2294 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2285 profile. This uses the InterpreterExec extension provided by
2295 profile. This uses the InterpreterExec extension provided by
2286 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2296 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2287
2297
2288 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2298 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2289 auto-align itself with the length of the previous input prompt
2299 auto-align itself with the length of the previous input prompt
2290 (taking into account the invisible color escapes).
2300 (taking into account the invisible color escapes).
2291 (CachedOutput.__init__): Large restructuring of this class. Now
2301 (CachedOutput.__init__): Large restructuring of this class. Now
2292 all three prompts (primary1, primary2, output) are proper objects,
2302 all three prompts (primary1, primary2, output) are proper objects,
2293 managed by the 'parent' CachedOutput class. The code is still a
2303 managed by the 'parent' CachedOutput class. The code is still a
2294 bit hackish (all prompts share state via a pointer to the cache),
2304 bit hackish (all prompts share state via a pointer to the cache),
2295 but it's overall far cleaner than before.
2305 but it's overall far cleaner than before.
2296
2306
2297 * IPython/genutils.py (getoutputerror): modified to add verbose,
2307 * IPython/genutils.py (getoutputerror): modified to add verbose,
2298 debug and header options. This makes the interface of all getout*
2308 debug and header options. This makes the interface of all getout*
2299 functions uniform.
2309 functions uniform.
2300 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2310 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2301
2311
2302 * IPython/Magic.py (Magic.default_option): added a function to
2312 * IPython/Magic.py (Magic.default_option): added a function to
2303 allow registering default options for any magic command. This
2313 allow registering default options for any magic command. This
2304 makes it easy to have profiles which customize the magics globally
2314 makes it easy to have profiles which customize the magics globally
2305 for a certain use. The values set through this function are
2315 for a certain use. The values set through this function are
2306 picked up by the parse_options() method, which all magics should
2316 picked up by the parse_options() method, which all magics should
2307 use to parse their options.
2317 use to parse their options.
2308
2318
2309 * IPython/genutils.py (warn): modified the warnings framework to
2319 * IPython/genutils.py (warn): modified the warnings framework to
2310 use the Term I/O class. I'm trying to slowly unify all of
2320 use the Term I/O class. I'm trying to slowly unify all of
2311 IPython's I/O operations to pass through Term.
2321 IPython's I/O operations to pass through Term.
2312
2322
2313 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2323 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2314 the secondary prompt to correctly match the length of the primary
2324 the secondary prompt to correctly match the length of the primary
2315 one for any prompt. Now multi-line code will properly line up
2325 one for any prompt. Now multi-line code will properly line up
2316 even for path dependent prompts, such as the new ones available
2326 even for path dependent prompts, such as the new ones available
2317 via the prompt_specials.
2327 via the prompt_specials.
2318
2328
2319 2004-06-06 Fernando Perez <fperez@colorado.edu>
2329 2004-06-06 Fernando Perez <fperez@colorado.edu>
2320
2330
2321 * IPython/Prompts.py (prompt_specials): Added the ability to have
2331 * IPython/Prompts.py (prompt_specials): Added the ability to have
2322 bash-like special sequences in the prompts, which get
2332 bash-like special sequences in the prompts, which get
2323 automatically expanded. Things like hostname, current working
2333 automatically expanded. Things like hostname, current working
2324 directory and username are implemented already, but it's easy to
2334 directory and username are implemented already, but it's easy to
2325 add more in the future. Thanks to a patch by W.J. van der Laan
2335 add more in the future. Thanks to a patch by W.J. van der Laan
2326 <gnufnork-AT-hetdigitalegat.nl>
2336 <gnufnork-AT-hetdigitalegat.nl>
2327 (prompt_specials): Added color support for prompt strings, so
2337 (prompt_specials): Added color support for prompt strings, so
2328 users can define arbitrary color setups for their prompts.
2338 users can define arbitrary color setups for their prompts.
2329
2339
2330 2004-06-05 Fernando Perez <fperez@colorado.edu>
2340 2004-06-05 Fernando Perez <fperez@colorado.edu>
2331
2341
2332 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2342 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2333 code to load Gary Bishop's readline and configure it
2343 code to load Gary Bishop's readline and configure it
2334 automatically. Thanks to Gary for help on this.
2344 automatically. Thanks to Gary for help on this.
2335
2345
2336 2004-06-01 Fernando Perez <fperez@colorado.edu>
2346 2004-06-01 Fernando Perez <fperez@colorado.edu>
2337
2347
2338 * IPython/Logger.py (Logger.create_log): fix bug for logging
2348 * IPython/Logger.py (Logger.create_log): fix bug for logging
2339 with no filename (previous fix was incomplete).
2349 with no filename (previous fix was incomplete).
2340
2350
2341 2004-05-25 Fernando Perez <fperez@colorado.edu>
2351 2004-05-25 Fernando Perez <fperez@colorado.edu>
2342
2352
2343 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2353 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2344 parens would get passed to the shell.
2354 parens would get passed to the shell.
2345
2355
2346 2004-05-20 Fernando Perez <fperez@colorado.edu>
2356 2004-05-20 Fernando Perez <fperez@colorado.edu>
2347
2357
2348 * IPython/Magic.py (Magic.magic_prun): changed default profile
2358 * IPython/Magic.py (Magic.magic_prun): changed default profile
2349 sort order to 'time' (the more common profiling need).
2359 sort order to 'time' (the more common profiling need).
2350
2360
2351 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2361 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2352 so that source code shown is guaranteed in sync with the file on
2362 so that source code shown is guaranteed in sync with the file on
2353 disk (also changed in psource). Similar fix to the one for
2363 disk (also changed in psource). Similar fix to the one for
2354 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2364 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2355 <yann.ledu-AT-noos.fr>.
2365 <yann.ledu-AT-noos.fr>.
2356
2366
2357 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2367 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2358 with a single option would not be correctly parsed. Closes
2368 with a single option would not be correctly parsed. Closes
2359 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2369 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2360 introduced in 0.6.0 (on 2004-05-06).
2370 introduced in 0.6.0 (on 2004-05-06).
2361
2371
2362 2004-05-13 *** Released version 0.6.0
2372 2004-05-13 *** Released version 0.6.0
2363
2373
2364 2004-05-13 Fernando Perez <fperez@colorado.edu>
2374 2004-05-13 Fernando Perez <fperez@colorado.edu>
2365
2375
2366 * debian/: Added debian/ directory to CVS, so that debian support
2376 * debian/: Added debian/ directory to CVS, so that debian support
2367 is publicly accessible. The debian package is maintained by Jack
2377 is publicly accessible. The debian package is maintained by Jack
2368 Moffit <jack-AT-xiph.org>.
2378 Moffit <jack-AT-xiph.org>.
2369
2379
2370 * Documentation: included the notes about an ipython-based system
2380 * Documentation: included the notes about an ipython-based system
2371 shell (the hypothetical 'pysh') into the new_design.pdf document,
2381 shell (the hypothetical 'pysh') into the new_design.pdf document,
2372 so that these ideas get distributed to users along with the
2382 so that these ideas get distributed to users along with the
2373 official documentation.
2383 official documentation.
2374
2384
2375 2004-05-10 Fernando Perez <fperez@colorado.edu>
2385 2004-05-10 Fernando Perez <fperez@colorado.edu>
2376
2386
2377 * IPython/Logger.py (Logger.create_log): fix recently introduced
2387 * IPython/Logger.py (Logger.create_log): fix recently introduced
2378 bug (misindented line) where logstart would fail when not given an
2388 bug (misindented line) where logstart would fail when not given an
2379 explicit filename.
2389 explicit filename.
2380
2390
2381 2004-05-09 Fernando Perez <fperez@colorado.edu>
2391 2004-05-09 Fernando Perez <fperez@colorado.edu>
2382
2392
2383 * IPython/Magic.py (Magic.parse_options): skip system call when
2393 * IPython/Magic.py (Magic.parse_options): skip system call when
2384 there are no options to look for. Faster, cleaner for the common
2394 there are no options to look for. Faster, cleaner for the common
2385 case.
2395 case.
2386
2396
2387 * Documentation: many updates to the manual: describing Windows
2397 * Documentation: many updates to the manual: describing Windows
2388 support better, Gnuplot updates, credits, misc small stuff. Also
2398 support better, Gnuplot updates, credits, misc small stuff. Also
2389 updated the new_design doc a bit.
2399 updated the new_design doc a bit.
2390
2400
2391 2004-05-06 *** Released version 0.6.0.rc1
2401 2004-05-06 *** Released version 0.6.0.rc1
2392
2402
2393 2004-05-06 Fernando Perez <fperez@colorado.edu>
2403 2004-05-06 Fernando Perez <fperez@colorado.edu>
2394
2404
2395 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2405 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2396 operations to use the vastly more efficient list/''.join() method.
2406 operations to use the vastly more efficient list/''.join() method.
2397 (FormattedTB.text): Fix
2407 (FormattedTB.text): Fix
2398 http://www.scipy.net/roundup/ipython/issue12 - exception source
2408 http://www.scipy.net/roundup/ipython/issue12 - exception source
2399 extract not updated after reload. Thanks to Mike Salib
2409 extract not updated after reload. Thanks to Mike Salib
2400 <msalib-AT-mit.edu> for pinning the source of the problem.
2410 <msalib-AT-mit.edu> for pinning the source of the problem.
2401 Fortunately, the solution works inside ipython and doesn't require
2411 Fortunately, the solution works inside ipython and doesn't require
2402 any changes to python proper.
2412 any changes to python proper.
2403
2413
2404 * IPython/Magic.py (Magic.parse_options): Improved to process the
2414 * IPython/Magic.py (Magic.parse_options): Improved to process the
2405 argument list as a true shell would (by actually using the
2415 argument list as a true shell would (by actually using the
2406 underlying system shell). This way, all @magics automatically get
2416 underlying system shell). This way, all @magics automatically get
2407 shell expansion for variables. Thanks to a comment by Alex
2417 shell expansion for variables. Thanks to a comment by Alex
2408 Schmolck.
2418 Schmolck.
2409
2419
2410 2004-04-04 Fernando Perez <fperez@colorado.edu>
2420 2004-04-04 Fernando Perez <fperez@colorado.edu>
2411
2421
2412 * IPython/iplib.py (InteractiveShell.interact): Added a special
2422 * IPython/iplib.py (InteractiveShell.interact): Added a special
2413 trap for a debugger quit exception, which is basically impossible
2423 trap for a debugger quit exception, which is basically impossible
2414 to handle by normal mechanisms, given what pdb does to the stack.
2424 to handle by normal mechanisms, given what pdb does to the stack.
2415 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2425 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2416
2426
2417 2004-04-03 Fernando Perez <fperez@colorado.edu>
2427 2004-04-03 Fernando Perez <fperez@colorado.edu>
2418
2428
2419 * IPython/genutils.py (Term): Standardized the names of the Term
2429 * IPython/genutils.py (Term): Standardized the names of the Term
2420 class streams to cin/cout/cerr, following C++ naming conventions
2430 class streams to cin/cout/cerr, following C++ naming conventions
2421 (I can't use in/out/err because 'in' is not a valid attribute
2431 (I can't use in/out/err because 'in' is not a valid attribute
2422 name).
2432 name).
2423
2433
2424 * IPython/iplib.py (InteractiveShell.interact): don't increment
2434 * IPython/iplib.py (InteractiveShell.interact): don't increment
2425 the prompt if there's no user input. By Daniel 'Dang' Griffith
2435 the prompt if there's no user input. By Daniel 'Dang' Griffith
2426 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2436 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2427 Francois Pinard.
2437 Francois Pinard.
2428
2438
2429 2004-04-02 Fernando Perez <fperez@colorado.edu>
2439 2004-04-02 Fernando Perez <fperez@colorado.edu>
2430
2440
2431 * IPython/genutils.py (Stream.__init__): Modified to survive at
2441 * IPython/genutils.py (Stream.__init__): Modified to survive at
2432 least importing in contexts where stdin/out/err aren't true file
2442 least importing in contexts where stdin/out/err aren't true file
2433 objects, such as PyCrust (they lack fileno() and mode). However,
2443 objects, such as PyCrust (they lack fileno() and mode). However,
2434 the recovery facilities which rely on these things existing will
2444 the recovery facilities which rely on these things existing will
2435 not work.
2445 not work.
2436
2446
2437 2004-04-01 Fernando Perez <fperez@colorado.edu>
2447 2004-04-01 Fernando Perez <fperez@colorado.edu>
2438
2448
2439 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2449 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2440 use the new getoutputerror() function, so it properly
2450 use the new getoutputerror() function, so it properly
2441 distinguishes stdout/err.
2451 distinguishes stdout/err.
2442
2452
2443 * IPython/genutils.py (getoutputerror): added a function to
2453 * IPython/genutils.py (getoutputerror): added a function to
2444 capture separately the standard output and error of a command.
2454 capture separately the standard output and error of a command.
2445 After a comment from dang on the mailing lists. This code is
2455 After a comment from dang on the mailing lists. This code is
2446 basically a modified version of commands.getstatusoutput(), from
2456 basically a modified version of commands.getstatusoutput(), from
2447 the standard library.
2457 the standard library.
2448
2458
2449 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2459 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2450 '!!' as a special syntax (shorthand) to access @sx.
2460 '!!' as a special syntax (shorthand) to access @sx.
2451
2461
2452 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2462 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2453 command and return its output as a list split on '\n'.
2463 command and return its output as a list split on '\n'.
2454
2464
2455 2004-03-31 Fernando Perez <fperez@colorado.edu>
2465 2004-03-31 Fernando Perez <fperez@colorado.edu>
2456
2466
2457 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2467 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2458 method to dictionaries used as FakeModule instances if they lack
2468 method to dictionaries used as FakeModule instances if they lack
2459 it. At least pydoc in python2.3 breaks for runtime-defined
2469 it. At least pydoc in python2.3 breaks for runtime-defined
2460 functions without this hack. At some point I need to _really_
2470 functions without this hack. At some point I need to _really_
2461 understand what FakeModule is doing, because it's a gross hack.
2471 understand what FakeModule is doing, because it's a gross hack.
2462 But it solves Arnd's problem for now...
2472 But it solves Arnd's problem for now...
2463
2473
2464 2004-02-27 Fernando Perez <fperez@colorado.edu>
2474 2004-02-27 Fernando Perez <fperez@colorado.edu>
2465
2475
2466 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2476 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2467 mode would behave erratically. Also increased the number of
2477 mode would behave erratically. Also increased the number of
2468 possible logs in rotate mod to 999. Thanks to Rod Holland
2478 possible logs in rotate mod to 999. Thanks to Rod Holland
2469 <rhh@StructureLABS.com> for the report and fixes.
2479 <rhh@StructureLABS.com> for the report and fixes.
2470
2480
2471 2004-02-26 Fernando Perez <fperez@colorado.edu>
2481 2004-02-26 Fernando Perez <fperez@colorado.edu>
2472
2482
2473 * IPython/genutils.py (page): Check that the curses module really
2483 * IPython/genutils.py (page): Check that the curses module really
2474 has the initscr attribute before trying to use it. For some
2484 has the initscr attribute before trying to use it. For some
2475 reason, the Solaris curses module is missing this. I think this
2485 reason, the Solaris curses module is missing this. I think this
2476 should be considered a Solaris python bug, but I'm not sure.
2486 should be considered a Solaris python bug, but I'm not sure.
2477
2487
2478 2004-01-17 Fernando Perez <fperez@colorado.edu>
2488 2004-01-17 Fernando Perez <fperez@colorado.edu>
2479
2489
2480 * IPython/genutils.py (Stream.__init__): Changes to try to make
2490 * IPython/genutils.py (Stream.__init__): Changes to try to make
2481 ipython robust against stdin/out/err being closed by the user.
2491 ipython robust against stdin/out/err being closed by the user.
2482 This is 'user error' (and blocks a normal python session, at least
2492 This is 'user error' (and blocks a normal python session, at least
2483 the stdout case). However, Ipython should be able to survive such
2493 the stdout case). However, Ipython should be able to survive such
2484 instances of abuse as gracefully as possible. To simplify the
2494 instances of abuse as gracefully as possible. To simplify the
2485 coding and maintain compatibility with Gary Bishop's Term
2495 coding and maintain compatibility with Gary Bishop's Term
2486 contributions, I've made use of classmethods for this. I think
2496 contributions, I've made use of classmethods for this. I think
2487 this introduces a dependency on python 2.2.
2497 this introduces a dependency on python 2.2.
2488
2498
2489 2004-01-13 Fernando Perez <fperez@colorado.edu>
2499 2004-01-13 Fernando Perez <fperez@colorado.edu>
2490
2500
2491 * IPython/numutils.py (exp_safe): simplified the code a bit and
2501 * IPython/numutils.py (exp_safe): simplified the code a bit and
2492 removed the need for importing the kinds module altogether.
2502 removed the need for importing the kinds module altogether.
2493
2503
2494 2004-01-06 Fernando Perez <fperez@colorado.edu>
2504 2004-01-06 Fernando Perez <fperez@colorado.edu>
2495
2505
2496 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2506 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2497 a magic function instead, after some community feedback. No
2507 a magic function instead, after some community feedback. No
2498 special syntax will exist for it, but its name is deliberately
2508 special syntax will exist for it, but its name is deliberately
2499 very short.
2509 very short.
2500
2510
2501 2003-12-20 Fernando Perez <fperez@colorado.edu>
2511 2003-12-20 Fernando Perez <fperez@colorado.edu>
2502
2512
2503 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2513 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2504 new functionality, to automagically assign the result of a shell
2514 new functionality, to automagically assign the result of a shell
2505 command to a variable. I'll solicit some community feedback on
2515 command to a variable. I'll solicit some community feedback on
2506 this before making it permanent.
2516 this before making it permanent.
2507
2517
2508 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2518 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2509 requested about callables for which inspect couldn't obtain a
2519 requested about callables for which inspect couldn't obtain a
2510 proper argspec. Thanks to a crash report sent by Etienne
2520 proper argspec. Thanks to a crash report sent by Etienne
2511 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2521 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2512
2522
2513 2003-12-09 Fernando Perez <fperez@colorado.edu>
2523 2003-12-09 Fernando Perez <fperez@colorado.edu>
2514
2524
2515 * IPython/genutils.py (page): patch for the pager to work across
2525 * IPython/genutils.py (page): patch for the pager to work across
2516 various versions of Windows. By Gary Bishop.
2526 various versions of Windows. By Gary Bishop.
2517
2527
2518 2003-12-04 Fernando Perez <fperez@colorado.edu>
2528 2003-12-04 Fernando Perez <fperez@colorado.edu>
2519
2529
2520 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2530 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2521 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2531 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2522 While I tested this and it looks ok, there may still be corner
2532 While I tested this and it looks ok, there may still be corner
2523 cases I've missed.
2533 cases I've missed.
2524
2534
2525 2003-12-01 Fernando Perez <fperez@colorado.edu>
2535 2003-12-01 Fernando Perez <fperez@colorado.edu>
2526
2536
2527 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2537 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2528 where a line like 'p,q=1,2' would fail because the automagic
2538 where a line like 'p,q=1,2' would fail because the automagic
2529 system would be triggered for @p.
2539 system would be triggered for @p.
2530
2540
2531 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2541 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2532 cleanups, code unmodified.
2542 cleanups, code unmodified.
2533
2543
2534 * IPython/genutils.py (Term): added a class for IPython to handle
2544 * IPython/genutils.py (Term): added a class for IPython to handle
2535 output. In most cases it will just be a proxy for stdout/err, but
2545 output. In most cases it will just be a proxy for stdout/err, but
2536 having this allows modifications to be made for some platforms,
2546 having this allows modifications to be made for some platforms,
2537 such as handling color escapes under Windows. All of this code
2547 such as handling color escapes under Windows. All of this code
2538 was contributed by Gary Bishop, with minor modifications by me.
2548 was contributed by Gary Bishop, with minor modifications by me.
2539 The actual changes affect many files.
2549 The actual changes affect many files.
2540
2550
2541 2003-11-30 Fernando Perez <fperez@colorado.edu>
2551 2003-11-30 Fernando Perez <fperez@colorado.edu>
2542
2552
2543 * IPython/iplib.py (file_matches): new completion code, courtesy
2553 * IPython/iplib.py (file_matches): new completion code, courtesy
2544 of Jeff Collins. This enables filename completion again under
2554 of Jeff Collins. This enables filename completion again under
2545 python 2.3, which disabled it at the C level.
2555 python 2.3, which disabled it at the C level.
2546
2556
2547 2003-11-11 Fernando Perez <fperez@colorado.edu>
2557 2003-11-11 Fernando Perez <fperez@colorado.edu>
2548
2558
2549 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2559 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2550 for Numeric.array(map(...)), but often convenient.
2560 for Numeric.array(map(...)), but often convenient.
2551
2561
2552 2003-11-05 Fernando Perez <fperez@colorado.edu>
2562 2003-11-05 Fernando Perez <fperez@colorado.edu>
2553
2563
2554 * IPython/numutils.py (frange): Changed a call from int() to
2564 * IPython/numutils.py (frange): Changed a call from int() to
2555 int(round()) to prevent a problem reported with arange() in the
2565 int(round()) to prevent a problem reported with arange() in the
2556 numpy list.
2566 numpy list.
2557
2567
2558 2003-10-06 Fernando Perez <fperez@colorado.edu>
2568 2003-10-06 Fernando Perez <fperez@colorado.edu>
2559
2569
2560 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2570 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2561 prevent crashes if sys lacks an argv attribute (it happens with
2571 prevent crashes if sys lacks an argv attribute (it happens with
2562 embedded interpreters which build a bare-bones sys module).
2572 embedded interpreters which build a bare-bones sys module).
2563 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2573 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2564
2574
2565 2003-09-24 Fernando Perez <fperez@colorado.edu>
2575 2003-09-24 Fernando Perez <fperez@colorado.edu>
2566
2576
2567 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2577 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2568 to protect against poorly written user objects where __getattr__
2578 to protect against poorly written user objects where __getattr__
2569 raises exceptions other than AttributeError. Thanks to a bug
2579 raises exceptions other than AttributeError. Thanks to a bug
2570 report by Oliver Sander <osander-AT-gmx.de>.
2580 report by Oliver Sander <osander-AT-gmx.de>.
2571
2581
2572 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2582 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2573 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2583 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2574
2584
2575 2003-09-09 Fernando Perez <fperez@colorado.edu>
2585 2003-09-09 Fernando Perez <fperez@colorado.edu>
2576
2586
2577 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2587 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2578 unpacking a list whith a callable as first element would
2588 unpacking a list whith a callable as first element would
2579 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2589 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2580 Collins.
2590 Collins.
2581
2591
2582 2003-08-25 *** Released version 0.5.0
2592 2003-08-25 *** Released version 0.5.0
2583
2593
2584 2003-08-22 Fernando Perez <fperez@colorado.edu>
2594 2003-08-22 Fernando Perez <fperez@colorado.edu>
2585
2595
2586 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2596 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2587 improperly defined user exceptions. Thanks to feedback from Mark
2597 improperly defined user exceptions. Thanks to feedback from Mark
2588 Russell <mrussell-AT-verio.net>.
2598 Russell <mrussell-AT-verio.net>.
2589
2599
2590 2003-08-20 Fernando Perez <fperez@colorado.edu>
2600 2003-08-20 Fernando Perez <fperez@colorado.edu>
2591
2601
2592 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2602 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2593 printing so that it would print multi-line string forms starting
2603 printing so that it would print multi-line string forms starting
2594 with a new line. This way the formatting is better respected for
2604 with a new line. This way the formatting is better respected for
2595 objects which work hard to make nice string forms.
2605 objects which work hard to make nice string forms.
2596
2606
2597 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2607 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2598 autocall would overtake data access for objects with both
2608 autocall would overtake data access for objects with both
2599 __getitem__ and __call__.
2609 __getitem__ and __call__.
2600
2610
2601 2003-08-19 *** Released version 0.5.0-rc1
2611 2003-08-19 *** Released version 0.5.0-rc1
2602
2612
2603 2003-08-19 Fernando Perez <fperez@colorado.edu>
2613 2003-08-19 Fernando Perez <fperez@colorado.edu>
2604
2614
2605 * IPython/deep_reload.py (load_tail): single tiny change here
2615 * IPython/deep_reload.py (load_tail): single tiny change here
2606 seems to fix the long-standing bug of dreload() failing to work
2616 seems to fix the long-standing bug of dreload() failing to work
2607 for dotted names. But this module is pretty tricky, so I may have
2617 for dotted names. But this module is pretty tricky, so I may have
2608 missed some subtlety. Needs more testing!.
2618 missed some subtlety. Needs more testing!.
2609
2619
2610 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2620 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2611 exceptions which have badly implemented __str__ methods.
2621 exceptions which have badly implemented __str__ methods.
2612 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2622 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2613 which I've been getting reports about from Python 2.3 users. I
2623 which I've been getting reports about from Python 2.3 users. I
2614 wish I had a simple test case to reproduce the problem, so I could
2624 wish I had a simple test case to reproduce the problem, so I could
2615 either write a cleaner workaround or file a bug report if
2625 either write a cleaner workaround or file a bug report if
2616 necessary.
2626 necessary.
2617
2627
2618 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2628 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2619 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2629 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2620 a bug report by Tjabo Kloppenburg.
2630 a bug report by Tjabo Kloppenburg.
2621
2631
2622 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2632 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2623 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2633 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2624 seems rather unstable. Thanks to a bug report by Tjabo
2634 seems rather unstable. Thanks to a bug report by Tjabo
2625 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2635 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2626
2636
2627 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2637 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2628 this out soon because of the critical fixes in the inner loop for
2638 this out soon because of the critical fixes in the inner loop for
2629 generators.
2639 generators.
2630
2640
2631 * IPython/Magic.py (Magic.getargspec): removed. This (and
2641 * IPython/Magic.py (Magic.getargspec): removed. This (and
2632 _get_def) have been obsoleted by OInspect for a long time, I
2642 _get_def) have been obsoleted by OInspect for a long time, I
2633 hadn't noticed that they were dead code.
2643 hadn't noticed that they were dead code.
2634 (Magic._ofind): restored _ofind functionality for a few literals
2644 (Magic._ofind): restored _ofind functionality for a few literals
2635 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2645 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2636 for things like "hello".capitalize?, since that would require a
2646 for things like "hello".capitalize?, since that would require a
2637 potentially dangerous eval() again.
2647 potentially dangerous eval() again.
2638
2648
2639 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2649 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2640 logic a bit more to clean up the escapes handling and minimize the
2650 logic a bit more to clean up the escapes handling and minimize the
2641 use of _ofind to only necessary cases. The interactive 'feel' of
2651 use of _ofind to only necessary cases. The interactive 'feel' of
2642 IPython should have improved quite a bit with the changes in
2652 IPython should have improved quite a bit with the changes in
2643 _prefilter and _ofind (besides being far safer than before).
2653 _prefilter and _ofind (besides being far safer than before).
2644
2654
2645 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2655 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2646 obscure, never reported). Edit would fail to find the object to
2656 obscure, never reported). Edit would fail to find the object to
2647 edit under some circumstances.
2657 edit under some circumstances.
2648 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2658 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2649 which were causing double-calling of generators. Those eval calls
2659 which were causing double-calling of generators. Those eval calls
2650 were _very_ dangerous, since code with side effects could be
2660 were _very_ dangerous, since code with side effects could be
2651 triggered. As they say, 'eval is evil'... These were the
2661 triggered. As they say, 'eval is evil'... These were the
2652 nastiest evals in IPython. Besides, _ofind is now far simpler,
2662 nastiest evals in IPython. Besides, _ofind is now far simpler,
2653 and it should also be quite a bit faster. Its use of inspect is
2663 and it should also be quite a bit faster. Its use of inspect is
2654 also safer, so perhaps some of the inspect-related crashes I've
2664 also safer, so perhaps some of the inspect-related crashes I've
2655 seen lately with Python 2.3 might be taken care of. That will
2665 seen lately with Python 2.3 might be taken care of. That will
2656 need more testing.
2666 need more testing.
2657
2667
2658 2003-08-17 Fernando Perez <fperez@colorado.edu>
2668 2003-08-17 Fernando Perez <fperez@colorado.edu>
2659
2669
2660 * IPython/iplib.py (InteractiveShell._prefilter): significant
2670 * IPython/iplib.py (InteractiveShell._prefilter): significant
2661 simplifications to the logic for handling user escapes. Faster
2671 simplifications to the logic for handling user escapes. Faster
2662 and simpler code.
2672 and simpler code.
2663
2673
2664 2003-08-14 Fernando Perez <fperez@colorado.edu>
2674 2003-08-14 Fernando Perez <fperez@colorado.edu>
2665
2675
2666 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2676 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2667 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2677 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2668 but it should be quite a bit faster. And the recursive version
2678 but it should be quite a bit faster. And the recursive version
2669 generated O(log N) intermediate storage for all rank>1 arrays,
2679 generated O(log N) intermediate storage for all rank>1 arrays,
2670 even if they were contiguous.
2680 even if they were contiguous.
2671 (l1norm): Added this function.
2681 (l1norm): Added this function.
2672 (norm): Added this function for arbitrary norms (including
2682 (norm): Added this function for arbitrary norms (including
2673 l-infinity). l1 and l2 are still special cases for convenience
2683 l-infinity). l1 and l2 are still special cases for convenience
2674 and speed.
2684 and speed.
2675
2685
2676 2003-08-03 Fernando Perez <fperez@colorado.edu>
2686 2003-08-03 Fernando Perez <fperez@colorado.edu>
2677
2687
2678 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2688 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2679 exceptions, which now raise PendingDeprecationWarnings in Python
2689 exceptions, which now raise PendingDeprecationWarnings in Python
2680 2.3. There were some in Magic and some in Gnuplot2.
2690 2.3. There were some in Magic and some in Gnuplot2.
2681
2691
2682 2003-06-30 Fernando Perez <fperez@colorado.edu>
2692 2003-06-30 Fernando Perez <fperez@colorado.edu>
2683
2693
2684 * IPython/genutils.py (page): modified to call curses only for
2694 * IPython/genutils.py (page): modified to call curses only for
2685 terminals where TERM=='xterm'. After problems under many other
2695 terminals where TERM=='xterm'. After problems under many other
2686 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2696 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2687
2697
2688 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2698 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2689 would be triggered when readline was absent. This was just an old
2699 would be triggered when readline was absent. This was just an old
2690 debugging statement I'd forgotten to take out.
2700 debugging statement I'd forgotten to take out.
2691
2701
2692 2003-06-20 Fernando Perez <fperez@colorado.edu>
2702 2003-06-20 Fernando Perez <fperez@colorado.edu>
2693
2703
2694 * IPython/genutils.py (clock): modified to return only user time
2704 * IPython/genutils.py (clock): modified to return only user time
2695 (not counting system time), after a discussion on scipy. While
2705 (not counting system time), after a discussion on scipy. While
2696 system time may be a useful quantity occasionally, it may much
2706 system time may be a useful quantity occasionally, it may much
2697 more easily be skewed by occasional swapping or other similar
2707 more easily be skewed by occasional swapping or other similar
2698 activity.
2708 activity.
2699
2709
2700 2003-06-05 Fernando Perez <fperez@colorado.edu>
2710 2003-06-05 Fernando Perez <fperez@colorado.edu>
2701
2711
2702 * IPython/numutils.py (identity): new function, for building
2712 * IPython/numutils.py (identity): new function, for building
2703 arbitrary rank Kronecker deltas (mostly backwards compatible with
2713 arbitrary rank Kronecker deltas (mostly backwards compatible with
2704 Numeric.identity)
2714 Numeric.identity)
2705
2715
2706 2003-06-03 Fernando Perez <fperez@colorado.edu>
2716 2003-06-03 Fernando Perez <fperez@colorado.edu>
2707
2717
2708 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2718 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2709 arguments passed to magics with spaces, to allow trailing '\' to
2719 arguments passed to magics with spaces, to allow trailing '\' to
2710 work normally (mainly for Windows users).
2720 work normally (mainly for Windows users).
2711
2721
2712 2003-05-29 Fernando Perez <fperez@colorado.edu>
2722 2003-05-29 Fernando Perez <fperez@colorado.edu>
2713
2723
2714 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2724 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2715 instead of pydoc.help. This fixes a bizarre behavior where
2725 instead of pydoc.help. This fixes a bizarre behavior where
2716 printing '%s' % locals() would trigger the help system. Now
2726 printing '%s' % locals() would trigger the help system. Now
2717 ipython behaves like normal python does.
2727 ipython behaves like normal python does.
2718
2728
2719 Note that if one does 'from pydoc import help', the bizarre
2729 Note that if one does 'from pydoc import help', the bizarre
2720 behavior returns, but this will also happen in normal python, so
2730 behavior returns, but this will also happen in normal python, so
2721 it's not an ipython bug anymore (it has to do with how pydoc.help
2731 it's not an ipython bug anymore (it has to do with how pydoc.help
2722 is implemented).
2732 is implemented).
2723
2733
2724 2003-05-22 Fernando Perez <fperez@colorado.edu>
2734 2003-05-22 Fernando Perez <fperez@colorado.edu>
2725
2735
2726 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2736 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2727 return [] instead of None when nothing matches, also match to end
2737 return [] instead of None when nothing matches, also match to end
2728 of line. Patch by Gary Bishop.
2738 of line. Patch by Gary Bishop.
2729
2739
2730 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2740 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2731 protection as before, for files passed on the command line. This
2741 protection as before, for files passed on the command line. This
2732 prevents the CrashHandler from kicking in if user files call into
2742 prevents the CrashHandler from kicking in if user files call into
2733 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2743 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2734 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2744 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2735
2745
2736 2003-05-20 *** Released version 0.4.0
2746 2003-05-20 *** Released version 0.4.0
2737
2747
2738 2003-05-20 Fernando Perez <fperez@colorado.edu>
2748 2003-05-20 Fernando Perez <fperez@colorado.edu>
2739
2749
2740 * setup.py: added support for manpages. It's a bit hackish b/c of
2750 * setup.py: added support for manpages. It's a bit hackish b/c of
2741 a bug in the way the bdist_rpm distutils target handles gzipped
2751 a bug in the way the bdist_rpm distutils target handles gzipped
2742 manpages, but it works. After a patch by Jack.
2752 manpages, but it works. After a patch by Jack.
2743
2753
2744 2003-05-19 Fernando Perez <fperez@colorado.edu>
2754 2003-05-19 Fernando Perez <fperez@colorado.edu>
2745
2755
2746 * IPython/numutils.py: added a mockup of the kinds module, since
2756 * IPython/numutils.py: added a mockup of the kinds module, since
2747 it was recently removed from Numeric. This way, numutils will
2757 it was recently removed from Numeric. This way, numutils will
2748 work for all users even if they are missing kinds.
2758 work for all users even if they are missing kinds.
2749
2759
2750 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2760 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2751 failure, which can occur with SWIG-wrapped extensions. After a
2761 failure, which can occur with SWIG-wrapped extensions. After a
2752 crash report from Prabhu.
2762 crash report from Prabhu.
2753
2763
2754 2003-05-16 Fernando Perez <fperez@colorado.edu>
2764 2003-05-16 Fernando Perez <fperez@colorado.edu>
2755
2765
2756 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2766 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2757 protect ipython from user code which may call directly
2767 protect ipython from user code which may call directly
2758 sys.excepthook (this looks like an ipython crash to the user, even
2768 sys.excepthook (this looks like an ipython crash to the user, even
2759 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2769 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2760 This is especially important to help users of WxWindows, but may
2770 This is especially important to help users of WxWindows, but may
2761 also be useful in other cases.
2771 also be useful in other cases.
2762
2772
2763 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2773 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2764 an optional tb_offset to be specified, and to preserve exception
2774 an optional tb_offset to be specified, and to preserve exception
2765 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2775 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2766
2776
2767 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2777 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2768
2778
2769 2003-05-15 Fernando Perez <fperez@colorado.edu>
2779 2003-05-15 Fernando Perez <fperez@colorado.edu>
2770
2780
2771 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2781 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2772 installing for a new user under Windows.
2782 installing for a new user under Windows.
2773
2783
2774 2003-05-12 Fernando Perez <fperez@colorado.edu>
2784 2003-05-12 Fernando Perez <fperez@colorado.edu>
2775
2785
2776 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2786 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2777 handler for Emacs comint-based lines. Currently it doesn't do
2787 handler for Emacs comint-based lines. Currently it doesn't do
2778 much (but importantly, it doesn't update the history cache). In
2788 much (but importantly, it doesn't update the history cache). In
2779 the future it may be expanded if Alex needs more functionality
2789 the future it may be expanded if Alex needs more functionality
2780 there.
2790 there.
2781
2791
2782 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2792 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2783 info to crash reports.
2793 info to crash reports.
2784
2794
2785 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2795 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2786 just like Python's -c. Also fixed crash with invalid -color
2796 just like Python's -c. Also fixed crash with invalid -color
2787 option value at startup. Thanks to Will French
2797 option value at startup. Thanks to Will French
2788 <wfrench-AT-bestweb.net> for the bug report.
2798 <wfrench-AT-bestweb.net> for the bug report.
2789
2799
2790 2003-05-09 Fernando Perez <fperez@colorado.edu>
2800 2003-05-09 Fernando Perez <fperez@colorado.edu>
2791
2801
2792 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2802 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2793 to EvalDict (it's a mapping, after all) and simplified its code
2803 to EvalDict (it's a mapping, after all) and simplified its code
2794 quite a bit, after a nice discussion on c.l.py where Gustavo
2804 quite a bit, after a nice discussion on c.l.py where Gustavo
2795 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2805 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2796
2806
2797 2003-04-30 Fernando Perez <fperez@colorado.edu>
2807 2003-04-30 Fernando Perez <fperez@colorado.edu>
2798
2808
2799 * IPython/genutils.py (timings_out): modified it to reduce its
2809 * IPython/genutils.py (timings_out): modified it to reduce its
2800 overhead in the common reps==1 case.
2810 overhead in the common reps==1 case.
2801
2811
2802 2003-04-29 Fernando Perez <fperez@colorado.edu>
2812 2003-04-29 Fernando Perez <fperez@colorado.edu>
2803
2813
2804 * IPython/genutils.py (timings_out): Modified to use the resource
2814 * IPython/genutils.py (timings_out): Modified to use the resource
2805 module, which avoids the wraparound problems of time.clock().
2815 module, which avoids the wraparound problems of time.clock().
2806
2816
2807 2003-04-17 *** Released version 0.2.15pre4
2817 2003-04-17 *** Released version 0.2.15pre4
2808
2818
2809 2003-04-17 Fernando Perez <fperez@colorado.edu>
2819 2003-04-17 Fernando Perez <fperez@colorado.edu>
2810
2820
2811 * setup.py (scriptfiles): Split windows-specific stuff over to a
2821 * setup.py (scriptfiles): Split windows-specific stuff over to a
2812 separate file, in an attempt to have a Windows GUI installer.
2822 separate file, in an attempt to have a Windows GUI installer.
2813 That didn't work, but part of the groundwork is done.
2823 That didn't work, but part of the groundwork is done.
2814
2824
2815 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2825 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2816 indent/unindent with 4 spaces. Particularly useful in combination
2826 indent/unindent with 4 spaces. Particularly useful in combination
2817 with the new auto-indent option.
2827 with the new auto-indent option.
2818
2828
2819 2003-04-16 Fernando Perez <fperez@colorado.edu>
2829 2003-04-16 Fernando Perez <fperez@colorado.edu>
2820
2830
2821 * IPython/Magic.py: various replacements of self.rc for
2831 * IPython/Magic.py: various replacements of self.rc for
2822 self.shell.rc. A lot more remains to be done to fully disentangle
2832 self.shell.rc. A lot more remains to be done to fully disentangle
2823 this class from the main Shell class.
2833 this class from the main Shell class.
2824
2834
2825 * IPython/GnuplotRuntime.py: added checks for mouse support so
2835 * IPython/GnuplotRuntime.py: added checks for mouse support so
2826 that we don't try to enable it if the current gnuplot doesn't
2836 that we don't try to enable it if the current gnuplot doesn't
2827 really support it. Also added checks so that we don't try to
2837 really support it. Also added checks so that we don't try to
2828 enable persist under Windows (where Gnuplot doesn't recognize the
2838 enable persist under Windows (where Gnuplot doesn't recognize the
2829 option).
2839 option).
2830
2840
2831 * IPython/iplib.py (InteractiveShell.interact): Added optional
2841 * IPython/iplib.py (InteractiveShell.interact): Added optional
2832 auto-indenting code, after a patch by King C. Shu
2842 auto-indenting code, after a patch by King C. Shu
2833 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2843 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2834 get along well with pasting indented code. If I ever figure out
2844 get along well with pasting indented code. If I ever figure out
2835 how to make that part go well, it will become on by default.
2845 how to make that part go well, it will become on by default.
2836
2846
2837 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2847 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2838 crash ipython if there was an unmatched '%' in the user's prompt
2848 crash ipython if there was an unmatched '%' in the user's prompt
2839 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2849 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2840
2850
2841 * IPython/iplib.py (InteractiveShell.interact): removed the
2851 * IPython/iplib.py (InteractiveShell.interact): removed the
2842 ability to ask the user whether he wants to crash or not at the
2852 ability to ask the user whether he wants to crash or not at the
2843 'last line' exception handler. Calling functions at that point
2853 'last line' exception handler. Calling functions at that point
2844 changes the stack, and the error reports would have incorrect
2854 changes the stack, and the error reports would have incorrect
2845 tracebacks.
2855 tracebacks.
2846
2856
2847 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2857 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2848 pass through a peger a pretty-printed form of any object. After a
2858 pass through a peger a pretty-printed form of any object. After a
2849 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2859 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2850
2860
2851 2003-04-14 Fernando Perez <fperez@colorado.edu>
2861 2003-04-14 Fernando Perez <fperez@colorado.edu>
2852
2862
2853 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2863 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2854 all files in ~ would be modified at first install (instead of
2864 all files in ~ would be modified at first install (instead of
2855 ~/.ipython). This could be potentially disastrous, as the
2865 ~/.ipython). This could be potentially disastrous, as the
2856 modification (make line-endings native) could damage binary files.
2866 modification (make line-endings native) could damage binary files.
2857
2867
2858 2003-04-10 Fernando Perez <fperez@colorado.edu>
2868 2003-04-10 Fernando Perez <fperez@colorado.edu>
2859
2869
2860 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2870 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2861 handle only lines which are invalid python. This now means that
2871 handle only lines which are invalid python. This now means that
2862 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2872 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2863 for the bug report.
2873 for the bug report.
2864
2874
2865 2003-04-01 Fernando Perez <fperez@colorado.edu>
2875 2003-04-01 Fernando Perez <fperez@colorado.edu>
2866
2876
2867 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2877 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2868 where failing to set sys.last_traceback would crash pdb.pm().
2878 where failing to set sys.last_traceback would crash pdb.pm().
2869 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2879 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2870 report.
2880 report.
2871
2881
2872 2003-03-25 Fernando Perez <fperez@colorado.edu>
2882 2003-03-25 Fernando Perez <fperez@colorado.edu>
2873
2883
2874 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2884 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2875 before printing it (it had a lot of spurious blank lines at the
2885 before printing it (it had a lot of spurious blank lines at the
2876 end).
2886 end).
2877
2887
2878 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2888 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2879 output would be sent 21 times! Obviously people don't use this
2889 output would be sent 21 times! Obviously people don't use this
2880 too often, or I would have heard about it.
2890 too often, or I would have heard about it.
2881
2891
2882 2003-03-24 Fernando Perez <fperez@colorado.edu>
2892 2003-03-24 Fernando Perez <fperez@colorado.edu>
2883
2893
2884 * setup.py (scriptfiles): renamed the data_files parameter from
2894 * setup.py (scriptfiles): renamed the data_files parameter from
2885 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2895 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2886 for the patch.
2896 for the patch.
2887
2897
2888 2003-03-20 Fernando Perez <fperez@colorado.edu>
2898 2003-03-20 Fernando Perez <fperez@colorado.edu>
2889
2899
2890 * IPython/genutils.py (error): added error() and fatal()
2900 * IPython/genutils.py (error): added error() and fatal()
2891 functions.
2901 functions.
2892
2902
2893 2003-03-18 *** Released version 0.2.15pre3
2903 2003-03-18 *** Released version 0.2.15pre3
2894
2904
2895 2003-03-18 Fernando Perez <fperez@colorado.edu>
2905 2003-03-18 Fernando Perez <fperez@colorado.edu>
2896
2906
2897 * setupext/install_data_ext.py
2907 * setupext/install_data_ext.py
2898 (install_data_ext.initialize_options): Class contributed by Jack
2908 (install_data_ext.initialize_options): Class contributed by Jack
2899 Moffit for fixing the old distutils hack. He is sending this to
2909 Moffit for fixing the old distutils hack. He is sending this to
2900 the distutils folks so in the future we may not need it as a
2910 the distutils folks so in the future we may not need it as a
2901 private fix.
2911 private fix.
2902
2912
2903 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2913 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2904 changes for Debian packaging. See his patch for full details.
2914 changes for Debian packaging. See his patch for full details.
2905 The old distutils hack of making the ipythonrc* files carry a
2915 The old distutils hack of making the ipythonrc* files carry a
2906 bogus .py extension is gone, at last. Examples were moved to a
2916 bogus .py extension is gone, at last. Examples were moved to a
2907 separate subdir under doc/, and the separate executable scripts
2917 separate subdir under doc/, and the separate executable scripts
2908 now live in their own directory. Overall a great cleanup. The
2918 now live in their own directory. Overall a great cleanup. The
2909 manual was updated to use the new files, and setup.py has been
2919 manual was updated to use the new files, and setup.py has been
2910 fixed for this setup.
2920 fixed for this setup.
2911
2921
2912 * IPython/PyColorize.py (Parser.usage): made non-executable and
2922 * IPython/PyColorize.py (Parser.usage): made non-executable and
2913 created a pycolor wrapper around it to be included as a script.
2923 created a pycolor wrapper around it to be included as a script.
2914
2924
2915 2003-03-12 *** Released version 0.2.15pre2
2925 2003-03-12 *** Released version 0.2.15pre2
2916
2926
2917 2003-03-12 Fernando Perez <fperez@colorado.edu>
2927 2003-03-12 Fernando Perez <fperez@colorado.edu>
2918
2928
2919 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2929 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2920 long-standing problem with garbage characters in some terminals.
2930 long-standing problem with garbage characters in some terminals.
2921 The issue was really that the \001 and \002 escapes must _only_ be
2931 The issue was really that the \001 and \002 escapes must _only_ be
2922 passed to input prompts (which call readline), but _never_ to
2932 passed to input prompts (which call readline), but _never_ to
2923 normal text to be printed on screen. I changed ColorANSI to have
2933 normal text to be printed on screen. I changed ColorANSI to have
2924 two classes: TermColors and InputTermColors, each with the
2934 two classes: TermColors and InputTermColors, each with the
2925 appropriate escapes for input prompts or normal text. The code in
2935 appropriate escapes for input prompts or normal text. The code in
2926 Prompts.py got slightly more complicated, but this very old and
2936 Prompts.py got slightly more complicated, but this very old and
2927 annoying bug is finally fixed.
2937 annoying bug is finally fixed.
2928
2938
2929 All the credit for nailing down the real origin of this problem
2939 All the credit for nailing down the real origin of this problem
2930 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2940 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2931 *Many* thanks to him for spending quite a bit of effort on this.
2941 *Many* thanks to him for spending quite a bit of effort on this.
2932
2942
2933 2003-03-05 *** Released version 0.2.15pre1
2943 2003-03-05 *** Released version 0.2.15pre1
2934
2944
2935 2003-03-03 Fernando Perez <fperez@colorado.edu>
2945 2003-03-03 Fernando Perez <fperez@colorado.edu>
2936
2946
2937 * IPython/FakeModule.py: Moved the former _FakeModule to a
2947 * IPython/FakeModule.py: Moved the former _FakeModule to a
2938 separate file, because it's also needed by Magic (to fix a similar
2948 separate file, because it's also needed by Magic (to fix a similar
2939 pickle-related issue in @run).
2949 pickle-related issue in @run).
2940
2950
2941 2003-03-02 Fernando Perez <fperez@colorado.edu>
2951 2003-03-02 Fernando Perez <fperez@colorado.edu>
2942
2952
2943 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2953 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2944 the autocall option at runtime.
2954 the autocall option at runtime.
2945 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2955 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2946 across Magic.py to start separating Magic from InteractiveShell.
2956 across Magic.py to start separating Magic from InteractiveShell.
2947 (Magic._ofind): Fixed to return proper namespace for dotted
2957 (Magic._ofind): Fixed to return proper namespace for dotted
2948 names. Before, a dotted name would always return 'not currently
2958 names. Before, a dotted name would always return 'not currently
2949 defined', because it would find the 'parent'. s.x would be found,
2959 defined', because it would find the 'parent'. s.x would be found,
2950 but since 'x' isn't defined by itself, it would get confused.
2960 but since 'x' isn't defined by itself, it would get confused.
2951 (Magic.magic_run): Fixed pickling problems reported by Ralf
2961 (Magic.magic_run): Fixed pickling problems reported by Ralf
2952 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2962 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2953 that I'd used when Mike Heeter reported similar issues at the
2963 that I'd used when Mike Heeter reported similar issues at the
2954 top-level, but now for @run. It boils down to injecting the
2964 top-level, but now for @run. It boils down to injecting the
2955 namespace where code is being executed with something that looks
2965 namespace where code is being executed with something that looks
2956 enough like a module to fool pickle.dump(). Since a pickle stores
2966 enough like a module to fool pickle.dump(). Since a pickle stores
2957 a named reference to the importing module, we need this for
2967 a named reference to the importing module, we need this for
2958 pickles to save something sensible.
2968 pickles to save something sensible.
2959
2969
2960 * IPython/ipmaker.py (make_IPython): added an autocall option.
2970 * IPython/ipmaker.py (make_IPython): added an autocall option.
2961
2971
2962 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2972 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2963 the auto-eval code. Now autocalling is an option, and the code is
2973 the auto-eval code. Now autocalling is an option, and the code is
2964 also vastly safer. There is no more eval() involved at all.
2974 also vastly safer. There is no more eval() involved at all.
2965
2975
2966 2003-03-01 Fernando Perez <fperez@colorado.edu>
2976 2003-03-01 Fernando Perez <fperez@colorado.edu>
2967
2977
2968 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2978 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2969 dict with named keys instead of a tuple.
2979 dict with named keys instead of a tuple.
2970
2980
2971 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2981 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2972
2982
2973 * setup.py (make_shortcut): Fixed message about directories
2983 * setup.py (make_shortcut): Fixed message about directories
2974 created during Windows installation (the directories were ok, just
2984 created during Windows installation (the directories were ok, just
2975 the printed message was misleading). Thanks to Chris Liechti
2985 the printed message was misleading). Thanks to Chris Liechti
2976 <cliechti-AT-gmx.net> for the heads up.
2986 <cliechti-AT-gmx.net> for the heads up.
2977
2987
2978 2003-02-21 Fernando Perez <fperez@colorado.edu>
2988 2003-02-21 Fernando Perez <fperez@colorado.edu>
2979
2989
2980 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2990 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2981 of ValueError exception when checking for auto-execution. This
2991 of ValueError exception when checking for auto-execution. This
2982 one is raised by things like Numeric arrays arr.flat when the
2992 one is raised by things like Numeric arrays arr.flat when the
2983 array is non-contiguous.
2993 array is non-contiguous.
2984
2994
2985 2003-01-31 Fernando Perez <fperez@colorado.edu>
2995 2003-01-31 Fernando Perez <fperez@colorado.edu>
2986
2996
2987 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2997 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2988 not return any value at all (even though the command would get
2998 not return any value at all (even though the command would get
2989 executed).
2999 executed).
2990 (xsys): Flush stdout right after printing the command to ensure
3000 (xsys): Flush stdout right after printing the command to ensure
2991 proper ordering of commands and command output in the total
3001 proper ordering of commands and command output in the total
2992 output.
3002 output.
2993 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3003 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2994 system/getoutput as defaults. The old ones are kept for
3004 system/getoutput as defaults. The old ones are kept for
2995 compatibility reasons, so no code which uses this library needs
3005 compatibility reasons, so no code which uses this library needs
2996 changing.
3006 changing.
2997
3007
2998 2003-01-27 *** Released version 0.2.14
3008 2003-01-27 *** Released version 0.2.14
2999
3009
3000 2003-01-25 Fernando Perez <fperez@colorado.edu>
3010 2003-01-25 Fernando Perez <fperez@colorado.edu>
3001
3011
3002 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3012 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3003 functions defined in previous edit sessions could not be re-edited
3013 functions defined in previous edit sessions could not be re-edited
3004 (because the temp files were immediately removed). Now temp files
3014 (because the temp files were immediately removed). Now temp files
3005 are removed only at IPython's exit.
3015 are removed only at IPython's exit.
3006 (Magic.magic_run): Improved @run to perform shell-like expansions
3016 (Magic.magic_run): Improved @run to perform shell-like expansions
3007 on its arguments (~users and $VARS). With this, @run becomes more
3017 on its arguments (~users and $VARS). With this, @run becomes more
3008 like a normal command-line.
3018 like a normal command-line.
3009
3019
3010 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3020 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3011 bugs related to embedding and cleaned up that code. A fairly
3021 bugs related to embedding and cleaned up that code. A fairly
3012 important one was the impossibility to access the global namespace
3022 important one was the impossibility to access the global namespace
3013 through the embedded IPython (only local variables were visible).
3023 through the embedded IPython (only local variables were visible).
3014
3024
3015 2003-01-14 Fernando Perez <fperez@colorado.edu>
3025 2003-01-14 Fernando Perez <fperez@colorado.edu>
3016
3026
3017 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3027 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3018 auto-calling to be a bit more conservative. Now it doesn't get
3028 auto-calling to be a bit more conservative. Now it doesn't get
3019 triggered if any of '!=()<>' are in the rest of the input line, to
3029 triggered if any of '!=()<>' are in the rest of the input line, to
3020 allow comparing callables. Thanks to Alex for the heads up.
3030 allow comparing callables. Thanks to Alex for the heads up.
3021
3031
3022 2003-01-07 Fernando Perez <fperez@colorado.edu>
3032 2003-01-07 Fernando Perez <fperez@colorado.edu>
3023
3033
3024 * IPython/genutils.py (page): fixed estimation of the number of
3034 * IPython/genutils.py (page): fixed estimation of the number of
3025 lines in a string to be paged to simply count newlines. This
3035 lines in a string to be paged to simply count newlines. This
3026 prevents over-guessing due to embedded escape sequences. A better
3036 prevents over-guessing due to embedded escape sequences. A better
3027 long-term solution would involve stripping out the control chars
3037 long-term solution would involve stripping out the control chars
3028 for the count, but it's potentially so expensive I just don't
3038 for the count, but it's potentially so expensive I just don't
3029 think it's worth doing.
3039 think it's worth doing.
3030
3040
3031 2002-12-19 *** Released version 0.2.14pre50
3041 2002-12-19 *** Released version 0.2.14pre50
3032
3042
3033 2002-12-19 Fernando Perez <fperez@colorado.edu>
3043 2002-12-19 Fernando Perez <fperez@colorado.edu>
3034
3044
3035 * tools/release (version): Changed release scripts to inform
3045 * tools/release (version): Changed release scripts to inform
3036 Andrea and build a NEWS file with a list of recent changes.
3046 Andrea and build a NEWS file with a list of recent changes.
3037
3047
3038 * IPython/ColorANSI.py (__all__): changed terminal detection
3048 * IPython/ColorANSI.py (__all__): changed terminal detection
3039 code. Seems to work better for xterms without breaking
3049 code. Seems to work better for xterms without breaking
3040 konsole. Will need more testing to determine if WinXP and Mac OSX
3050 konsole. Will need more testing to determine if WinXP and Mac OSX
3041 also work ok.
3051 also work ok.
3042
3052
3043 2002-12-18 *** Released version 0.2.14pre49
3053 2002-12-18 *** Released version 0.2.14pre49
3044
3054
3045 2002-12-18 Fernando Perez <fperez@colorado.edu>
3055 2002-12-18 Fernando Perez <fperez@colorado.edu>
3046
3056
3047 * Docs: added new info about Mac OSX, from Andrea.
3057 * Docs: added new info about Mac OSX, from Andrea.
3048
3058
3049 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3059 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3050 allow direct plotting of python strings whose format is the same
3060 allow direct plotting of python strings whose format is the same
3051 of gnuplot data files.
3061 of gnuplot data files.
3052
3062
3053 2002-12-16 Fernando Perez <fperez@colorado.edu>
3063 2002-12-16 Fernando Perez <fperez@colorado.edu>
3054
3064
3055 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3065 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3056 value of exit question to be acknowledged.
3066 value of exit question to be acknowledged.
3057
3067
3058 2002-12-03 Fernando Perez <fperez@colorado.edu>
3068 2002-12-03 Fernando Perez <fperez@colorado.edu>
3059
3069
3060 * IPython/ipmaker.py: removed generators, which had been added
3070 * IPython/ipmaker.py: removed generators, which had been added
3061 by mistake in an earlier debugging run. This was causing trouble
3071 by mistake in an earlier debugging run. This was causing trouble
3062 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3072 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3063 for pointing this out.
3073 for pointing this out.
3064
3074
3065 2002-11-17 Fernando Perez <fperez@colorado.edu>
3075 2002-11-17 Fernando Perez <fperez@colorado.edu>
3066
3076
3067 * Manual: updated the Gnuplot section.
3077 * Manual: updated the Gnuplot section.
3068
3078
3069 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3079 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3070 a much better split of what goes in Runtime and what goes in
3080 a much better split of what goes in Runtime and what goes in
3071 Interactive.
3081 Interactive.
3072
3082
3073 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3083 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3074 being imported from iplib.
3084 being imported from iplib.
3075
3085
3076 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3086 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3077 for command-passing. Now the global Gnuplot instance is called
3087 for command-passing. Now the global Gnuplot instance is called
3078 'gp' instead of 'g', which was really a far too fragile and
3088 'gp' instead of 'g', which was really a far too fragile and
3079 common name.
3089 common name.
3080
3090
3081 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3091 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3082 bounding boxes generated by Gnuplot for square plots.
3092 bounding boxes generated by Gnuplot for square plots.
3083
3093
3084 * IPython/genutils.py (popkey): new function added. I should
3094 * IPython/genutils.py (popkey): new function added. I should
3085 suggest this on c.l.py as a dict method, it seems useful.
3095 suggest this on c.l.py as a dict method, it seems useful.
3086
3096
3087 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3097 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3088 to transparently handle PostScript generation. MUCH better than
3098 to transparently handle PostScript generation. MUCH better than
3089 the previous plot_eps/replot_eps (which I removed now). The code
3099 the previous plot_eps/replot_eps (which I removed now). The code
3090 is also fairly clean and well documented now (including
3100 is also fairly clean and well documented now (including
3091 docstrings).
3101 docstrings).
3092
3102
3093 2002-11-13 Fernando Perez <fperez@colorado.edu>
3103 2002-11-13 Fernando Perez <fperez@colorado.edu>
3094
3104
3095 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3105 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3096 (inconsistent with options).
3106 (inconsistent with options).
3097
3107
3098 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3108 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3099 manually disabled, I don't know why. Fixed it.
3109 manually disabled, I don't know why. Fixed it.
3100 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3110 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3101 eps output.
3111 eps output.
3102
3112
3103 2002-11-12 Fernando Perez <fperez@colorado.edu>
3113 2002-11-12 Fernando Perez <fperez@colorado.edu>
3104
3114
3105 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3115 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3106 don't propagate up to caller. Fixes crash reported by François
3116 don't propagate up to caller. Fixes crash reported by François
3107 Pinard.
3117 Pinard.
3108
3118
3109 2002-11-09 Fernando Perez <fperez@colorado.edu>
3119 2002-11-09 Fernando Perez <fperez@colorado.edu>
3110
3120
3111 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3121 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3112 history file for new users.
3122 history file for new users.
3113 (make_IPython): fixed bug where initial install would leave the
3123 (make_IPython): fixed bug where initial install would leave the
3114 user running in the .ipython dir.
3124 user running in the .ipython dir.
3115 (make_IPython): fixed bug where config dir .ipython would be
3125 (make_IPython): fixed bug where config dir .ipython would be
3116 created regardless of the given -ipythondir option. Thanks to Cory
3126 created regardless of the given -ipythondir option. Thanks to Cory
3117 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3127 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3118
3128
3119 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3129 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3120 type confirmations. Will need to use it in all of IPython's code
3130 type confirmations. Will need to use it in all of IPython's code
3121 consistently.
3131 consistently.
3122
3132
3123 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3133 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3124 context to print 31 lines instead of the default 5. This will make
3134 context to print 31 lines instead of the default 5. This will make
3125 the crash reports extremely detailed in case the problem is in
3135 the crash reports extremely detailed in case the problem is in
3126 libraries I don't have access to.
3136 libraries I don't have access to.
3127
3137
3128 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3138 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3129 line of defense' code to still crash, but giving users fair
3139 line of defense' code to still crash, but giving users fair
3130 warning. I don't want internal errors to go unreported: if there's
3140 warning. I don't want internal errors to go unreported: if there's
3131 an internal problem, IPython should crash and generate a full
3141 an internal problem, IPython should crash and generate a full
3132 report.
3142 report.
3133
3143
3134 2002-11-08 Fernando Perez <fperez@colorado.edu>
3144 2002-11-08 Fernando Perez <fperez@colorado.edu>
3135
3145
3136 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3146 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3137 otherwise uncaught exceptions which can appear if people set
3147 otherwise uncaught exceptions which can appear if people set
3138 sys.stdout to something badly broken. Thanks to a crash report
3148 sys.stdout to something badly broken. Thanks to a crash report
3139 from henni-AT-mail.brainbot.com.
3149 from henni-AT-mail.brainbot.com.
3140
3150
3141 2002-11-04 Fernando Perez <fperez@colorado.edu>
3151 2002-11-04 Fernando Perez <fperez@colorado.edu>
3142
3152
3143 * IPython/iplib.py (InteractiveShell.interact): added
3153 * IPython/iplib.py (InteractiveShell.interact): added
3144 __IPYTHON__active to the builtins. It's a flag which goes on when
3154 __IPYTHON__active to the builtins. It's a flag which goes on when
3145 the interaction starts and goes off again when it stops. This
3155 the interaction starts and goes off again when it stops. This
3146 allows embedding code to detect being inside IPython. Before this
3156 allows embedding code to detect being inside IPython. Before this
3147 was done via __IPYTHON__, but that only shows that an IPython
3157 was done via __IPYTHON__, but that only shows that an IPython
3148 instance has been created.
3158 instance has been created.
3149
3159
3150 * IPython/Magic.py (Magic.magic_env): I realized that in a
3160 * IPython/Magic.py (Magic.magic_env): I realized that in a
3151 UserDict, instance.data holds the data as a normal dict. So I
3161 UserDict, instance.data holds the data as a normal dict. So I
3152 modified @env to return os.environ.data instead of rebuilding a
3162 modified @env to return os.environ.data instead of rebuilding a
3153 dict by hand.
3163 dict by hand.
3154
3164
3155 2002-11-02 Fernando Perez <fperez@colorado.edu>
3165 2002-11-02 Fernando Perez <fperez@colorado.edu>
3156
3166
3157 * IPython/genutils.py (warn): changed so that level 1 prints no
3167 * IPython/genutils.py (warn): changed so that level 1 prints no
3158 header. Level 2 is now the default (with 'WARNING' header, as
3168 header. Level 2 is now the default (with 'WARNING' header, as
3159 before). I think I tracked all places where changes were needed in
3169 before). I think I tracked all places where changes were needed in
3160 IPython, but outside code using the old level numbering may have
3170 IPython, but outside code using the old level numbering may have
3161 broken.
3171 broken.
3162
3172
3163 * IPython/iplib.py (InteractiveShell.runcode): added this to
3173 * IPython/iplib.py (InteractiveShell.runcode): added this to
3164 handle the tracebacks in SystemExit traps correctly. The previous
3174 handle the tracebacks in SystemExit traps correctly. The previous
3165 code (through interact) was printing more of the stack than
3175 code (through interact) was printing more of the stack than
3166 necessary, showing IPython internal code to the user.
3176 necessary, showing IPython internal code to the user.
3167
3177
3168 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3178 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3169 default. Now that the default at the confirmation prompt is yes,
3179 default. Now that the default at the confirmation prompt is yes,
3170 it's not so intrusive. François' argument that ipython sessions
3180 it's not so intrusive. François' argument that ipython sessions
3171 tend to be complex enough not to lose them from an accidental C-d,
3181 tend to be complex enough not to lose them from an accidental C-d,
3172 is a valid one.
3182 is a valid one.
3173
3183
3174 * IPython/iplib.py (InteractiveShell.interact): added a
3184 * IPython/iplib.py (InteractiveShell.interact): added a
3175 showtraceback() call to the SystemExit trap, and modified the exit
3185 showtraceback() call to the SystemExit trap, and modified the exit
3176 confirmation to have yes as the default.
3186 confirmation to have yes as the default.
3177
3187
3178 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3188 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3179 this file. It's been gone from the code for a long time, this was
3189 this file. It's been gone from the code for a long time, this was
3180 simply leftover junk.
3190 simply leftover junk.
3181
3191
3182 2002-11-01 Fernando Perez <fperez@colorado.edu>
3192 2002-11-01 Fernando Perez <fperez@colorado.edu>
3183
3193
3184 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3194 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3185 added. If set, IPython now traps EOF and asks for
3195 added. If set, IPython now traps EOF and asks for
3186 confirmation. After a request by François Pinard.
3196 confirmation. After a request by François Pinard.
3187
3197
3188 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3198 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3189 of @abort, and with a new (better) mechanism for handling the
3199 of @abort, and with a new (better) mechanism for handling the
3190 exceptions.
3200 exceptions.
3191
3201
3192 2002-10-27 Fernando Perez <fperez@colorado.edu>
3202 2002-10-27 Fernando Perez <fperez@colorado.edu>
3193
3203
3194 * IPython/usage.py (__doc__): updated the --help information and
3204 * IPython/usage.py (__doc__): updated the --help information and
3195 the ipythonrc file to indicate that -log generates
3205 the ipythonrc file to indicate that -log generates
3196 ./ipython.log. Also fixed the corresponding info in @logstart.
3206 ./ipython.log. Also fixed the corresponding info in @logstart.
3197 This and several other fixes in the manuals thanks to reports by
3207 This and several other fixes in the manuals thanks to reports by
3198 François Pinard <pinard-AT-iro.umontreal.ca>.
3208 François Pinard <pinard-AT-iro.umontreal.ca>.
3199
3209
3200 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3210 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3201 refer to @logstart (instead of @log, which doesn't exist).
3211 refer to @logstart (instead of @log, which doesn't exist).
3202
3212
3203 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3213 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3204 AttributeError crash. Thanks to Christopher Armstrong
3214 AttributeError crash. Thanks to Christopher Armstrong
3205 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3215 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3206 introduced recently (in 0.2.14pre37) with the fix to the eval
3216 introduced recently (in 0.2.14pre37) with the fix to the eval
3207 problem mentioned below.
3217 problem mentioned below.
3208
3218
3209 2002-10-17 Fernando Perez <fperez@colorado.edu>
3219 2002-10-17 Fernando Perez <fperez@colorado.edu>
3210
3220
3211 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3221 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3212 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3222 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3213
3223
3214 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3224 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3215 this function to fix a problem reported by Alex Schmolck. He saw
3225 this function to fix a problem reported by Alex Schmolck. He saw
3216 it with list comprehensions and generators, which were getting
3226 it with list comprehensions and generators, which were getting
3217 called twice. The real problem was an 'eval' call in testing for
3227 called twice. The real problem was an 'eval' call in testing for
3218 automagic which was evaluating the input line silently.
3228 automagic which was evaluating the input line silently.
3219
3229
3220 This is a potentially very nasty bug, if the input has side
3230 This is a potentially very nasty bug, if the input has side
3221 effects which must not be repeated. The code is much cleaner now,
3231 effects which must not be repeated. The code is much cleaner now,
3222 without any blanket 'except' left and with a regexp test for
3232 without any blanket 'except' left and with a regexp test for
3223 actual function names.
3233 actual function names.
3224
3234
3225 But an eval remains, which I'm not fully comfortable with. I just
3235 But an eval remains, which I'm not fully comfortable with. I just
3226 don't know how to find out if an expression could be a callable in
3236 don't know how to find out if an expression could be a callable in
3227 the user's namespace without doing an eval on the string. However
3237 the user's namespace without doing an eval on the string. However
3228 that string is now much more strictly checked so that no code
3238 that string is now much more strictly checked so that no code
3229 slips by, so the eval should only happen for things that can
3239 slips by, so the eval should only happen for things that can
3230 really be only function/method names.
3240 really be only function/method names.
3231
3241
3232 2002-10-15 Fernando Perez <fperez@colorado.edu>
3242 2002-10-15 Fernando Perez <fperez@colorado.edu>
3233
3243
3234 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3244 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3235 OSX information to main manual, removed README_Mac_OSX file from
3245 OSX information to main manual, removed README_Mac_OSX file from
3236 distribution. Also updated credits for recent additions.
3246 distribution. Also updated credits for recent additions.
3237
3247
3238 2002-10-10 Fernando Perez <fperez@colorado.edu>
3248 2002-10-10 Fernando Perez <fperez@colorado.edu>
3239
3249
3240 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3250 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3241 terminal-related issues. Many thanks to Andrea Riciputi
3251 terminal-related issues. Many thanks to Andrea Riciputi
3242 <andrea.riciputi-AT-libero.it> for writing it.
3252 <andrea.riciputi-AT-libero.it> for writing it.
3243
3253
3244 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3254 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3245 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3255 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3246
3256
3247 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3257 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3248 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3258 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3249 <syver-en-AT-online.no> who both submitted patches for this problem.
3259 <syver-en-AT-online.no> who both submitted patches for this problem.
3250
3260
3251 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3261 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3252 global embedding to make sure that things don't overwrite user
3262 global embedding to make sure that things don't overwrite user
3253 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3263 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3254
3264
3255 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3265 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3256 compatibility. Thanks to Hayden Callow
3266 compatibility. Thanks to Hayden Callow
3257 <h.callow-AT-elec.canterbury.ac.nz>
3267 <h.callow-AT-elec.canterbury.ac.nz>
3258
3268
3259 2002-10-04 Fernando Perez <fperez@colorado.edu>
3269 2002-10-04 Fernando Perez <fperez@colorado.edu>
3260
3270
3261 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3271 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3262 Gnuplot.File objects.
3272 Gnuplot.File objects.
3263
3273
3264 2002-07-23 Fernando Perez <fperez@colorado.edu>
3274 2002-07-23 Fernando Perez <fperez@colorado.edu>
3265
3275
3266 * IPython/genutils.py (timing): Added timings() and timing() for
3276 * IPython/genutils.py (timing): Added timings() and timing() for
3267 quick access to the most commonly needed data, the execution
3277 quick access to the most commonly needed data, the execution
3268 times. Old timing() renamed to timings_out().
3278 times. Old timing() renamed to timings_out().
3269
3279
3270 2002-07-18 Fernando Perez <fperez@colorado.edu>
3280 2002-07-18 Fernando Perez <fperez@colorado.edu>
3271
3281
3272 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3282 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3273 bug with nested instances disrupting the parent's tab completion.
3283 bug with nested instances disrupting the parent's tab completion.
3274
3284
3275 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3285 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3276 all_completions code to begin the emacs integration.
3286 all_completions code to begin the emacs integration.
3277
3287
3278 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3288 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3279 argument to allow titling individual arrays when plotting.
3289 argument to allow titling individual arrays when plotting.
3280
3290
3281 2002-07-15 Fernando Perez <fperez@colorado.edu>
3291 2002-07-15 Fernando Perez <fperez@colorado.edu>
3282
3292
3283 * setup.py (make_shortcut): changed to retrieve the value of
3293 * setup.py (make_shortcut): changed to retrieve the value of
3284 'Program Files' directory from the registry (this value changes in
3294 'Program Files' directory from the registry (this value changes in
3285 non-english versions of Windows). Thanks to Thomas Fanslau
3295 non-english versions of Windows). Thanks to Thomas Fanslau
3286 <tfanslau-AT-gmx.de> for the report.
3296 <tfanslau-AT-gmx.de> for the report.
3287
3297
3288 2002-07-10 Fernando Perez <fperez@colorado.edu>
3298 2002-07-10 Fernando Perez <fperez@colorado.edu>
3289
3299
3290 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3300 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3291 a bug in pdb, which crashes if a line with only whitespace is
3301 a bug in pdb, which crashes if a line with only whitespace is
3292 entered. Bug report submitted to sourceforge.
3302 entered. Bug report submitted to sourceforge.
3293
3303
3294 2002-07-09 Fernando Perez <fperez@colorado.edu>
3304 2002-07-09 Fernando Perez <fperez@colorado.edu>
3295
3305
3296 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3306 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3297 reporting exceptions (it's a bug in inspect.py, I just set a
3307 reporting exceptions (it's a bug in inspect.py, I just set a
3298 workaround).
3308 workaround).
3299
3309
3300 2002-07-08 Fernando Perez <fperez@colorado.edu>
3310 2002-07-08 Fernando Perez <fperez@colorado.edu>
3301
3311
3302 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3312 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3303 __IPYTHON__ in __builtins__ to show up in user_ns.
3313 __IPYTHON__ in __builtins__ to show up in user_ns.
3304
3314
3305 2002-07-03 Fernando Perez <fperez@colorado.edu>
3315 2002-07-03 Fernando Perez <fperez@colorado.edu>
3306
3316
3307 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3317 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3308 name from @gp_set_instance to @gp_set_default.
3318 name from @gp_set_instance to @gp_set_default.
3309
3319
3310 * IPython/ipmaker.py (make_IPython): default editor value set to
3320 * IPython/ipmaker.py (make_IPython): default editor value set to
3311 '0' (a string), to match the rc file. Otherwise will crash when
3321 '0' (a string), to match the rc file. Otherwise will crash when
3312 .strip() is called on it.
3322 .strip() is called on it.
3313
3323
3314
3324
3315 2002-06-28 Fernando Perez <fperez@colorado.edu>
3325 2002-06-28 Fernando Perez <fperez@colorado.edu>
3316
3326
3317 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3327 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3318 of files in current directory when a file is executed via
3328 of files in current directory when a file is executed via
3319 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3329 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3320
3330
3321 * setup.py (manfiles): fix for rpm builds, submitted by RA
3331 * setup.py (manfiles): fix for rpm builds, submitted by RA
3322 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3332 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3323
3333
3324 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3334 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3325 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3335 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3326 string!). A. Schmolck caught this one.
3336 string!). A. Schmolck caught this one.
3327
3337
3328 2002-06-27 Fernando Perez <fperez@colorado.edu>
3338 2002-06-27 Fernando Perez <fperez@colorado.edu>
3329
3339
3330 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3340 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3331 defined files at the cmd line. __name__ wasn't being set to
3341 defined files at the cmd line. __name__ wasn't being set to
3332 __main__.
3342 __main__.
3333
3343
3334 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3344 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3335 regular lists and tuples besides Numeric arrays.
3345 regular lists and tuples besides Numeric arrays.
3336
3346
3337 * IPython/Prompts.py (CachedOutput.__call__): Added output
3347 * IPython/Prompts.py (CachedOutput.__call__): Added output
3338 supression for input ending with ';'. Similar to Mathematica and
3348 supression for input ending with ';'. Similar to Mathematica and
3339 Matlab. The _* vars and Out[] list are still updated, just like
3349 Matlab. The _* vars and Out[] list are still updated, just like
3340 Mathematica behaves.
3350 Mathematica behaves.
3341
3351
3342 2002-06-25 Fernando Perez <fperez@colorado.edu>
3352 2002-06-25 Fernando Perez <fperez@colorado.edu>
3343
3353
3344 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3354 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3345 .ini extensions for profiels under Windows.
3355 .ini extensions for profiels under Windows.
3346
3356
3347 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3357 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3348 string form. Fix contributed by Alexander Schmolck
3358 string form. Fix contributed by Alexander Schmolck
3349 <a.schmolck-AT-gmx.net>
3359 <a.schmolck-AT-gmx.net>
3350
3360
3351 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3361 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3352 pre-configured Gnuplot instance.
3362 pre-configured Gnuplot instance.
3353
3363
3354 2002-06-21 Fernando Perez <fperez@colorado.edu>
3364 2002-06-21 Fernando Perez <fperez@colorado.edu>
3355
3365
3356 * IPython/numutils.py (exp_safe): new function, works around the
3366 * IPython/numutils.py (exp_safe): new function, works around the
3357 underflow problems in Numeric.
3367 underflow problems in Numeric.
3358 (log2): New fn. Safe log in base 2: returns exact integer answer
3368 (log2): New fn. Safe log in base 2: returns exact integer answer
3359 for exact integer powers of 2.
3369 for exact integer powers of 2.
3360
3370
3361 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3371 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3362 properly.
3372 properly.
3363
3373
3364 2002-06-20 Fernando Perez <fperez@colorado.edu>
3374 2002-06-20 Fernando Perez <fperez@colorado.edu>
3365
3375
3366 * IPython/genutils.py (timing): new function like
3376 * IPython/genutils.py (timing): new function like
3367 Mathematica's. Similar to time_test, but returns more info.
3377 Mathematica's. Similar to time_test, but returns more info.
3368
3378
3369 2002-06-18 Fernando Perez <fperez@colorado.edu>
3379 2002-06-18 Fernando Perez <fperez@colorado.edu>
3370
3380
3371 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3381 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3372 according to Mike Heeter's suggestions.
3382 according to Mike Heeter's suggestions.
3373
3383
3374 2002-06-16 Fernando Perez <fperez@colorado.edu>
3384 2002-06-16 Fernando Perez <fperez@colorado.edu>
3375
3385
3376 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3386 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3377 system. GnuplotMagic is gone as a user-directory option. New files
3387 system. GnuplotMagic is gone as a user-directory option. New files
3378 make it easier to use all the gnuplot stuff both from external
3388 make it easier to use all the gnuplot stuff both from external
3379 programs as well as from IPython. Had to rewrite part of
3389 programs as well as from IPython. Had to rewrite part of
3380 hardcopy() b/c of a strange bug: often the ps files simply don't
3390 hardcopy() b/c of a strange bug: often the ps files simply don't
3381 get created, and require a repeat of the command (often several
3391 get created, and require a repeat of the command (often several
3382 times).
3392 times).
3383
3393
3384 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3394 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3385 resolve output channel at call time, so that if sys.stderr has
3395 resolve output channel at call time, so that if sys.stderr has
3386 been redirected by user this gets honored.
3396 been redirected by user this gets honored.
3387
3397
3388 2002-06-13 Fernando Perez <fperez@colorado.edu>
3398 2002-06-13 Fernando Perez <fperez@colorado.edu>
3389
3399
3390 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3400 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3391 IPShell. Kept a copy with the old names to avoid breaking people's
3401 IPShell. Kept a copy with the old names to avoid breaking people's
3392 embedded code.
3402 embedded code.
3393
3403
3394 * IPython/ipython: simplified it to the bare minimum after
3404 * IPython/ipython: simplified it to the bare minimum after
3395 Holger's suggestions. Added info about how to use it in
3405 Holger's suggestions. Added info about how to use it in
3396 PYTHONSTARTUP.
3406 PYTHONSTARTUP.
3397
3407
3398 * IPython/Shell.py (IPythonShell): changed the options passing
3408 * IPython/Shell.py (IPythonShell): changed the options passing
3399 from a string with funky %s replacements to a straight list. Maybe
3409 from a string with funky %s replacements to a straight list. Maybe
3400 a bit more typing, but it follows sys.argv conventions, so there's
3410 a bit more typing, but it follows sys.argv conventions, so there's
3401 less special-casing to remember.
3411 less special-casing to remember.
3402
3412
3403 2002-06-12 Fernando Perez <fperez@colorado.edu>
3413 2002-06-12 Fernando Perez <fperez@colorado.edu>
3404
3414
3405 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3415 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3406 command. Thanks to a suggestion by Mike Heeter.
3416 command. Thanks to a suggestion by Mike Heeter.
3407 (Magic.magic_pfile): added behavior to look at filenames if given
3417 (Magic.magic_pfile): added behavior to look at filenames if given
3408 arg is not a defined object.
3418 arg is not a defined object.
3409 (Magic.magic_save): New @save function to save code snippets. Also
3419 (Magic.magic_save): New @save function to save code snippets. Also
3410 a Mike Heeter idea.
3420 a Mike Heeter idea.
3411
3421
3412 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3422 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3413 plot() and replot(). Much more convenient now, especially for
3423 plot() and replot(). Much more convenient now, especially for
3414 interactive use.
3424 interactive use.
3415
3425
3416 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3426 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3417 filenames.
3427 filenames.
3418
3428
3419 2002-06-02 Fernando Perez <fperez@colorado.edu>
3429 2002-06-02 Fernando Perez <fperez@colorado.edu>
3420
3430
3421 * IPython/Struct.py (Struct.__init__): modified to admit
3431 * IPython/Struct.py (Struct.__init__): modified to admit
3422 initialization via another struct.
3432 initialization via another struct.
3423
3433
3424 * IPython/genutils.py (SystemExec.__init__): New stateful
3434 * IPython/genutils.py (SystemExec.__init__): New stateful
3425 interface to xsys and bq. Useful for writing system scripts.
3435 interface to xsys and bq. Useful for writing system scripts.
3426
3436
3427 2002-05-30 Fernando Perez <fperez@colorado.edu>
3437 2002-05-30 Fernando Perez <fperez@colorado.edu>
3428
3438
3429 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3439 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3430 documents. This will make the user download smaller (it's getting
3440 documents. This will make the user download smaller (it's getting
3431 too big).
3441 too big).
3432
3442
3433 2002-05-29 Fernando Perez <fperez@colorado.edu>
3443 2002-05-29 Fernando Perez <fperez@colorado.edu>
3434
3444
3435 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3445 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3436 fix problems with shelve and pickle. Seems to work, but I don't
3446 fix problems with shelve and pickle. Seems to work, but I don't
3437 know if corner cases break it. Thanks to Mike Heeter
3447 know if corner cases break it. Thanks to Mike Heeter
3438 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3448 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3439
3449
3440 2002-05-24 Fernando Perez <fperez@colorado.edu>
3450 2002-05-24 Fernando Perez <fperez@colorado.edu>
3441
3451
3442 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3452 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3443 macros having broken.
3453 macros having broken.
3444
3454
3445 2002-05-21 Fernando Perez <fperez@colorado.edu>
3455 2002-05-21 Fernando Perez <fperez@colorado.edu>
3446
3456
3447 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3457 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3448 introduced logging bug: all history before logging started was
3458 introduced logging bug: all history before logging started was
3449 being written one character per line! This came from the redesign
3459 being written one character per line! This came from the redesign
3450 of the input history as a special list which slices to strings,
3460 of the input history as a special list which slices to strings,
3451 not to lists.
3461 not to lists.
3452
3462
3453 2002-05-20 Fernando Perez <fperez@colorado.edu>
3463 2002-05-20 Fernando Perez <fperez@colorado.edu>
3454
3464
3455 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3465 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3456 be an attribute of all classes in this module. The design of these
3466 be an attribute of all classes in this module. The design of these
3457 classes needs some serious overhauling.
3467 classes needs some serious overhauling.
3458
3468
3459 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3469 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3460 which was ignoring '_' in option names.
3470 which was ignoring '_' in option names.
3461
3471
3462 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3472 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3463 'Verbose_novars' to 'Context' and made it the new default. It's a
3473 'Verbose_novars' to 'Context' and made it the new default. It's a
3464 bit more readable and also safer than verbose.
3474 bit more readable and also safer than verbose.
3465
3475
3466 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3476 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3467 triple-quoted strings.
3477 triple-quoted strings.
3468
3478
3469 * IPython/OInspect.py (__all__): new module exposing the object
3479 * IPython/OInspect.py (__all__): new module exposing the object
3470 introspection facilities. Now the corresponding magics are dummy
3480 introspection facilities. Now the corresponding magics are dummy
3471 wrappers around this. Having this module will make it much easier
3481 wrappers around this. Having this module will make it much easier
3472 to put these functions into our modified pdb.
3482 to put these functions into our modified pdb.
3473 This new object inspector system uses the new colorizing module,
3483 This new object inspector system uses the new colorizing module,
3474 so source code and other things are nicely syntax highlighted.
3484 so source code and other things are nicely syntax highlighted.
3475
3485
3476 2002-05-18 Fernando Perez <fperez@colorado.edu>
3486 2002-05-18 Fernando Perez <fperez@colorado.edu>
3477
3487
3478 * IPython/ColorANSI.py: Split the coloring tools into a separate
3488 * IPython/ColorANSI.py: Split the coloring tools into a separate
3479 module so I can use them in other code easier (they were part of
3489 module so I can use them in other code easier (they were part of
3480 ultraTB).
3490 ultraTB).
3481
3491
3482 2002-05-17 Fernando Perez <fperez@colorado.edu>
3492 2002-05-17 Fernando Perez <fperez@colorado.edu>
3483
3493
3484 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3494 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3485 fixed it to set the global 'g' also to the called instance, as
3495 fixed it to set the global 'g' also to the called instance, as
3486 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3496 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3487 user's 'g' variables).
3497 user's 'g' variables).
3488
3498
3489 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3499 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3490 global variables (aliases to _ih,_oh) so that users which expect
3500 global variables (aliases to _ih,_oh) so that users which expect
3491 In[5] or Out[7] to work aren't unpleasantly surprised.
3501 In[5] or Out[7] to work aren't unpleasantly surprised.
3492 (InputList.__getslice__): new class to allow executing slices of
3502 (InputList.__getslice__): new class to allow executing slices of
3493 input history directly. Very simple class, complements the use of
3503 input history directly. Very simple class, complements the use of
3494 macros.
3504 macros.
3495
3505
3496 2002-05-16 Fernando Perez <fperez@colorado.edu>
3506 2002-05-16 Fernando Perez <fperez@colorado.edu>
3497
3507
3498 * setup.py (docdirbase): make doc directory be just doc/IPython
3508 * setup.py (docdirbase): make doc directory be just doc/IPython
3499 without version numbers, it will reduce clutter for users.
3509 without version numbers, it will reduce clutter for users.
3500
3510
3501 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3511 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3502 execfile call to prevent possible memory leak. See for details:
3512 execfile call to prevent possible memory leak. See for details:
3503 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3513 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3504
3514
3505 2002-05-15 Fernando Perez <fperez@colorado.edu>
3515 2002-05-15 Fernando Perez <fperez@colorado.edu>
3506
3516
3507 * IPython/Magic.py (Magic.magic_psource): made the object
3517 * IPython/Magic.py (Magic.magic_psource): made the object
3508 introspection names be more standard: pdoc, pdef, pfile and
3518 introspection names be more standard: pdoc, pdef, pfile and
3509 psource. They all print/page their output, and it makes
3519 psource. They all print/page their output, and it makes
3510 remembering them easier. Kept old names for compatibility as
3520 remembering them easier. Kept old names for compatibility as
3511 aliases.
3521 aliases.
3512
3522
3513 2002-05-14 Fernando Perez <fperez@colorado.edu>
3523 2002-05-14 Fernando Perez <fperez@colorado.edu>
3514
3524
3515 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3525 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3516 what the mouse problem was. The trick is to use gnuplot with temp
3526 what the mouse problem was. The trick is to use gnuplot with temp
3517 files and NOT with pipes (for data communication), because having
3527 files and NOT with pipes (for data communication), because having
3518 both pipes and the mouse on is bad news.
3528 both pipes and the mouse on is bad news.
3519
3529
3520 2002-05-13 Fernando Perez <fperez@colorado.edu>
3530 2002-05-13 Fernando Perez <fperez@colorado.edu>
3521
3531
3522 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3532 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3523 bug. Information would be reported about builtins even when
3533 bug. Information would be reported about builtins even when
3524 user-defined functions overrode them.
3534 user-defined functions overrode them.
3525
3535
3526 2002-05-11 Fernando Perez <fperez@colorado.edu>
3536 2002-05-11 Fernando Perez <fperez@colorado.edu>
3527
3537
3528 * IPython/__init__.py (__all__): removed FlexCompleter from
3538 * IPython/__init__.py (__all__): removed FlexCompleter from
3529 __all__ so that things don't fail in platforms without readline.
3539 __all__ so that things don't fail in platforms without readline.
3530
3540
3531 2002-05-10 Fernando Perez <fperez@colorado.edu>
3541 2002-05-10 Fernando Perez <fperez@colorado.edu>
3532
3542
3533 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3543 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3534 it requires Numeric, effectively making Numeric a dependency for
3544 it requires Numeric, effectively making Numeric a dependency for
3535 IPython.
3545 IPython.
3536
3546
3537 * Released 0.2.13
3547 * Released 0.2.13
3538
3548
3539 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3549 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3540 profiler interface. Now all the major options from the profiler
3550 profiler interface. Now all the major options from the profiler
3541 module are directly supported in IPython, both for single
3551 module are directly supported in IPython, both for single
3542 expressions (@prun) and for full programs (@run -p).
3552 expressions (@prun) and for full programs (@run -p).
3543
3553
3544 2002-05-09 Fernando Perez <fperez@colorado.edu>
3554 2002-05-09 Fernando Perez <fperez@colorado.edu>
3545
3555
3546 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3556 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3547 magic properly formatted for screen.
3557 magic properly formatted for screen.
3548
3558
3549 * setup.py (make_shortcut): Changed things to put pdf version in
3559 * setup.py (make_shortcut): Changed things to put pdf version in
3550 doc/ instead of doc/manual (had to change lyxport a bit).
3560 doc/ instead of doc/manual (had to change lyxport a bit).
3551
3561
3552 * IPython/Magic.py (Profile.string_stats): made profile runs go
3562 * IPython/Magic.py (Profile.string_stats): made profile runs go
3553 through pager (they are long and a pager allows searching, saving,
3563 through pager (they are long and a pager allows searching, saving,
3554 etc.)
3564 etc.)
3555
3565
3556 2002-05-08 Fernando Perez <fperez@colorado.edu>
3566 2002-05-08 Fernando Perez <fperez@colorado.edu>
3557
3567
3558 * Released 0.2.12
3568 * Released 0.2.12
3559
3569
3560 2002-05-06 Fernando Perez <fperez@colorado.edu>
3570 2002-05-06 Fernando Perez <fperez@colorado.edu>
3561
3571
3562 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3572 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3563 introduced); 'hist n1 n2' was broken.
3573 introduced); 'hist n1 n2' was broken.
3564 (Magic.magic_pdb): added optional on/off arguments to @pdb
3574 (Magic.magic_pdb): added optional on/off arguments to @pdb
3565 (Magic.magic_run): added option -i to @run, which executes code in
3575 (Magic.magic_run): added option -i to @run, which executes code in
3566 the IPython namespace instead of a clean one. Also added @irun as
3576 the IPython namespace instead of a clean one. Also added @irun as
3567 an alias to @run -i.
3577 an alias to @run -i.
3568
3578
3569 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3579 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3570 fixed (it didn't really do anything, the namespaces were wrong).
3580 fixed (it didn't really do anything, the namespaces were wrong).
3571
3581
3572 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3582 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3573
3583
3574 * IPython/__init__.py (__all__): Fixed package namespace, now
3584 * IPython/__init__.py (__all__): Fixed package namespace, now
3575 'import IPython' does give access to IPython.<all> as
3585 'import IPython' does give access to IPython.<all> as
3576 expected. Also renamed __release__ to Release.
3586 expected. Also renamed __release__ to Release.
3577
3587
3578 * IPython/Debugger.py (__license__): created new Pdb class which
3588 * IPython/Debugger.py (__license__): created new Pdb class which
3579 functions like a drop-in for the normal pdb.Pdb but does NOT
3589 functions like a drop-in for the normal pdb.Pdb but does NOT
3580 import readline by default. This way it doesn't muck up IPython's
3590 import readline by default. This way it doesn't muck up IPython's
3581 readline handling, and now tab-completion finally works in the
3591 readline handling, and now tab-completion finally works in the
3582 debugger -- sort of. It completes things globally visible, but the
3592 debugger -- sort of. It completes things globally visible, but the
3583 completer doesn't track the stack as pdb walks it. That's a bit
3593 completer doesn't track the stack as pdb walks it. That's a bit
3584 tricky, and I'll have to implement it later.
3594 tricky, and I'll have to implement it later.
3585
3595
3586 2002-05-05 Fernando Perez <fperez@colorado.edu>
3596 2002-05-05 Fernando Perez <fperez@colorado.edu>
3587
3597
3588 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3598 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3589 magic docstrings when printed via ? (explicit \'s were being
3599 magic docstrings when printed via ? (explicit \'s were being
3590 printed).
3600 printed).
3591
3601
3592 * IPython/ipmaker.py (make_IPython): fixed namespace
3602 * IPython/ipmaker.py (make_IPython): fixed namespace
3593 identification bug. Now variables loaded via logs or command-line
3603 identification bug. Now variables loaded via logs or command-line
3594 files are recognized in the interactive namespace by @who.
3604 files are recognized in the interactive namespace by @who.
3595
3605
3596 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3606 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3597 log replay system stemming from the string form of Structs.
3607 log replay system stemming from the string form of Structs.
3598
3608
3599 * IPython/Magic.py (Macro.__init__): improved macros to properly
3609 * IPython/Magic.py (Macro.__init__): improved macros to properly
3600 handle magic commands in them.
3610 handle magic commands in them.
3601 (Magic.magic_logstart): usernames are now expanded so 'logstart
3611 (Magic.magic_logstart): usernames are now expanded so 'logstart
3602 ~/mylog' now works.
3612 ~/mylog' now works.
3603
3613
3604 * IPython/iplib.py (complete): fixed bug where paths starting with
3614 * IPython/iplib.py (complete): fixed bug where paths starting with
3605 '/' would be completed as magic names.
3615 '/' would be completed as magic names.
3606
3616
3607 2002-05-04 Fernando Perez <fperez@colorado.edu>
3617 2002-05-04 Fernando Perez <fperez@colorado.edu>
3608
3618
3609 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3619 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3610 allow running full programs under the profiler's control.
3620 allow running full programs under the profiler's control.
3611
3621
3612 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3622 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3613 mode to report exceptions verbosely but without formatting
3623 mode to report exceptions verbosely but without formatting
3614 variables. This addresses the issue of ipython 'freezing' (it's
3624 variables. This addresses the issue of ipython 'freezing' (it's
3615 not frozen, but caught in an expensive formatting loop) when huge
3625 not frozen, but caught in an expensive formatting loop) when huge
3616 variables are in the context of an exception.
3626 variables are in the context of an exception.
3617 (VerboseTB.text): Added '--->' markers at line where exception was
3627 (VerboseTB.text): Added '--->' markers at line where exception was
3618 triggered. Much clearer to read, especially in NoColor modes.
3628 triggered. Much clearer to read, especially in NoColor modes.
3619
3629
3620 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3630 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3621 implemented in reverse when changing to the new parse_options().
3631 implemented in reverse when changing to the new parse_options().
3622
3632
3623 2002-05-03 Fernando Perez <fperez@colorado.edu>
3633 2002-05-03 Fernando Perez <fperez@colorado.edu>
3624
3634
3625 * IPython/Magic.py (Magic.parse_options): new function so that
3635 * IPython/Magic.py (Magic.parse_options): new function so that
3626 magics can parse options easier.
3636 magics can parse options easier.
3627 (Magic.magic_prun): new function similar to profile.run(),
3637 (Magic.magic_prun): new function similar to profile.run(),
3628 suggested by Chris Hart.
3638 suggested by Chris Hart.
3629 (Magic.magic_cd): fixed behavior so that it only changes if
3639 (Magic.magic_cd): fixed behavior so that it only changes if
3630 directory actually is in history.
3640 directory actually is in history.
3631
3641
3632 * IPython/usage.py (__doc__): added information about potential
3642 * IPython/usage.py (__doc__): added information about potential
3633 slowness of Verbose exception mode when there are huge data
3643 slowness of Verbose exception mode when there are huge data
3634 structures to be formatted (thanks to Archie Paulson).
3644 structures to be formatted (thanks to Archie Paulson).
3635
3645
3636 * IPython/ipmaker.py (make_IPython): Changed default logging
3646 * IPython/ipmaker.py (make_IPython): Changed default logging
3637 (when simply called with -log) to use curr_dir/ipython.log in
3647 (when simply called with -log) to use curr_dir/ipython.log in
3638 rotate mode. Fixed crash which was occuring with -log before
3648 rotate mode. Fixed crash which was occuring with -log before
3639 (thanks to Jim Boyle).
3649 (thanks to Jim Boyle).
3640
3650
3641 2002-05-01 Fernando Perez <fperez@colorado.edu>
3651 2002-05-01 Fernando Perez <fperez@colorado.edu>
3642
3652
3643 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3653 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3644 was nasty -- though somewhat of a corner case).
3654 was nasty -- though somewhat of a corner case).
3645
3655
3646 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3656 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3647 text (was a bug).
3657 text (was a bug).
3648
3658
3649 2002-04-30 Fernando Perez <fperez@colorado.edu>
3659 2002-04-30 Fernando Perez <fperez@colorado.edu>
3650
3660
3651 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3661 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3652 a print after ^D or ^C from the user so that the In[] prompt
3662 a print after ^D or ^C from the user so that the In[] prompt
3653 doesn't over-run the gnuplot one.
3663 doesn't over-run the gnuplot one.
3654
3664
3655 2002-04-29 Fernando Perez <fperez@colorado.edu>
3665 2002-04-29 Fernando Perez <fperez@colorado.edu>
3656
3666
3657 * Released 0.2.10
3667 * Released 0.2.10
3658
3668
3659 * IPython/__release__.py (version): get date dynamically.
3669 * IPython/__release__.py (version): get date dynamically.
3660
3670
3661 * Misc. documentation updates thanks to Arnd's comments. Also ran
3671 * Misc. documentation updates thanks to Arnd's comments. Also ran
3662 a full spellcheck on the manual (hadn't been done in a while).
3672 a full spellcheck on the manual (hadn't been done in a while).
3663
3673
3664 2002-04-27 Fernando Perez <fperez@colorado.edu>
3674 2002-04-27 Fernando Perez <fperez@colorado.edu>
3665
3675
3666 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3676 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3667 starting a log in mid-session would reset the input history list.
3677 starting a log in mid-session would reset the input history list.
3668
3678
3669 2002-04-26 Fernando Perez <fperez@colorado.edu>
3679 2002-04-26 Fernando Perez <fperez@colorado.edu>
3670
3680
3671 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3681 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3672 all files were being included in an update. Now anything in
3682 all files were being included in an update. Now anything in
3673 UserConfig that matches [A-Za-z]*.py will go (this excludes
3683 UserConfig that matches [A-Za-z]*.py will go (this excludes
3674 __init__.py)
3684 __init__.py)
3675
3685
3676 2002-04-25 Fernando Perez <fperez@colorado.edu>
3686 2002-04-25 Fernando Perez <fperez@colorado.edu>
3677
3687
3678 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3688 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3679 to __builtins__ so that any form of embedded or imported code can
3689 to __builtins__ so that any form of embedded or imported code can
3680 test for being inside IPython.
3690 test for being inside IPython.
3681
3691
3682 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3692 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3683 changed to GnuplotMagic because it's now an importable module,
3693 changed to GnuplotMagic because it's now an importable module,
3684 this makes the name follow that of the standard Gnuplot module.
3694 this makes the name follow that of the standard Gnuplot module.
3685 GnuplotMagic can now be loaded at any time in mid-session.
3695 GnuplotMagic can now be loaded at any time in mid-session.
3686
3696
3687 2002-04-24 Fernando Perez <fperez@colorado.edu>
3697 2002-04-24 Fernando Perez <fperez@colorado.edu>
3688
3698
3689 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3699 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3690 the globals (IPython has its own namespace) and the
3700 the globals (IPython has its own namespace) and the
3691 PhysicalQuantity stuff is much better anyway.
3701 PhysicalQuantity stuff is much better anyway.
3692
3702
3693 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3703 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3694 embedding example to standard user directory for
3704 embedding example to standard user directory for
3695 distribution. Also put it in the manual.
3705 distribution. Also put it in the manual.
3696
3706
3697 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3707 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3698 instance as first argument (so it doesn't rely on some obscure
3708 instance as first argument (so it doesn't rely on some obscure
3699 hidden global).
3709 hidden global).
3700
3710
3701 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3711 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3702 delimiters. While it prevents ().TAB from working, it allows
3712 delimiters. While it prevents ().TAB from working, it allows
3703 completions in open (... expressions. This is by far a more common
3713 completions in open (... expressions. This is by far a more common
3704 case.
3714 case.
3705
3715
3706 2002-04-23 Fernando Perez <fperez@colorado.edu>
3716 2002-04-23 Fernando Perez <fperez@colorado.edu>
3707
3717
3708 * IPython/Extensions/InterpreterPasteInput.py: new
3718 * IPython/Extensions/InterpreterPasteInput.py: new
3709 syntax-processing module for pasting lines with >>> or ... at the
3719 syntax-processing module for pasting lines with >>> or ... at the
3710 start.
3720 start.
3711
3721
3712 * IPython/Extensions/PhysicalQ_Interactive.py
3722 * IPython/Extensions/PhysicalQ_Interactive.py
3713 (PhysicalQuantityInteractive.__int__): fixed to work with either
3723 (PhysicalQuantityInteractive.__int__): fixed to work with either
3714 Numeric or math.
3724 Numeric or math.
3715
3725
3716 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3726 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3717 provided profiles. Now we have:
3727 provided profiles. Now we have:
3718 -math -> math module as * and cmath with its own namespace.
3728 -math -> math module as * and cmath with its own namespace.
3719 -numeric -> Numeric as *, plus gnuplot & grace
3729 -numeric -> Numeric as *, plus gnuplot & grace
3720 -physics -> same as before
3730 -physics -> same as before
3721
3731
3722 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3732 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3723 user-defined magics wouldn't be found by @magic if they were
3733 user-defined magics wouldn't be found by @magic if they were
3724 defined as class methods. Also cleaned up the namespace search
3734 defined as class methods. Also cleaned up the namespace search
3725 logic and the string building (to use %s instead of many repeated
3735 logic and the string building (to use %s instead of many repeated
3726 string adds).
3736 string adds).
3727
3737
3728 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3738 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3729 of user-defined magics to operate with class methods (cleaner, in
3739 of user-defined magics to operate with class methods (cleaner, in
3730 line with the gnuplot code).
3740 line with the gnuplot code).
3731
3741
3732 2002-04-22 Fernando Perez <fperez@colorado.edu>
3742 2002-04-22 Fernando Perez <fperez@colorado.edu>
3733
3743
3734 * setup.py: updated dependency list so that manual is updated when
3744 * setup.py: updated dependency list so that manual is updated when
3735 all included files change.
3745 all included files change.
3736
3746
3737 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3747 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3738 the delimiter removal option (the fix is ugly right now).
3748 the delimiter removal option (the fix is ugly right now).
3739
3749
3740 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3750 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3741 all of the math profile (quicker loading, no conflict between
3751 all of the math profile (quicker loading, no conflict between
3742 g-9.8 and g-gnuplot).
3752 g-9.8 and g-gnuplot).
3743
3753
3744 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3754 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3745 name of post-mortem files to IPython_crash_report.txt.
3755 name of post-mortem files to IPython_crash_report.txt.
3746
3756
3747 * Cleanup/update of the docs. Added all the new readline info and
3757 * Cleanup/update of the docs. Added all the new readline info and
3748 formatted all lists as 'real lists'.
3758 formatted all lists as 'real lists'.
3749
3759
3750 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3760 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3751 tab-completion options, since the full readline parse_and_bind is
3761 tab-completion options, since the full readline parse_and_bind is
3752 now accessible.
3762 now accessible.
3753
3763
3754 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3764 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3755 handling of readline options. Now users can specify any string to
3765 handling of readline options. Now users can specify any string to
3756 be passed to parse_and_bind(), as well as the delimiters to be
3766 be passed to parse_and_bind(), as well as the delimiters to be
3757 removed.
3767 removed.
3758 (InteractiveShell.__init__): Added __name__ to the global
3768 (InteractiveShell.__init__): Added __name__ to the global
3759 namespace so that things like Itpl which rely on its existence
3769 namespace so that things like Itpl which rely on its existence
3760 don't crash.
3770 don't crash.
3761 (InteractiveShell._prefilter): Defined the default with a _ so
3771 (InteractiveShell._prefilter): Defined the default with a _ so
3762 that prefilter() is easier to override, while the default one
3772 that prefilter() is easier to override, while the default one
3763 remains available.
3773 remains available.
3764
3774
3765 2002-04-18 Fernando Perez <fperez@colorado.edu>
3775 2002-04-18 Fernando Perez <fperez@colorado.edu>
3766
3776
3767 * Added information about pdb in the docs.
3777 * Added information about pdb in the docs.
3768
3778
3769 2002-04-17 Fernando Perez <fperez@colorado.edu>
3779 2002-04-17 Fernando Perez <fperez@colorado.edu>
3770
3780
3771 * IPython/ipmaker.py (make_IPython): added rc_override option to
3781 * IPython/ipmaker.py (make_IPython): added rc_override option to
3772 allow passing config options at creation time which may override
3782 allow passing config options at creation time which may override
3773 anything set in the config files or command line. This is
3783 anything set in the config files or command line. This is
3774 particularly useful for configuring embedded instances.
3784 particularly useful for configuring embedded instances.
3775
3785
3776 2002-04-15 Fernando Perez <fperez@colorado.edu>
3786 2002-04-15 Fernando Perez <fperez@colorado.edu>
3777
3787
3778 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3788 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3779 crash embedded instances because of the input cache falling out of
3789 crash embedded instances because of the input cache falling out of
3780 sync with the output counter.
3790 sync with the output counter.
3781
3791
3782 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3792 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3783 mode which calls pdb after an uncaught exception in IPython itself.
3793 mode which calls pdb after an uncaught exception in IPython itself.
3784
3794
3785 2002-04-14 Fernando Perez <fperez@colorado.edu>
3795 2002-04-14 Fernando Perez <fperez@colorado.edu>
3786
3796
3787 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3797 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3788 readline, fix it back after each call.
3798 readline, fix it back after each call.
3789
3799
3790 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3800 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3791 method to force all access via __call__(), which guarantees that
3801 method to force all access via __call__(), which guarantees that
3792 traceback references are properly deleted.
3802 traceback references are properly deleted.
3793
3803
3794 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3804 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3795 improve printing when pprint is in use.
3805 improve printing when pprint is in use.
3796
3806
3797 2002-04-13 Fernando Perez <fperez@colorado.edu>
3807 2002-04-13 Fernando Perez <fperez@colorado.edu>
3798
3808
3799 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3809 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3800 exceptions aren't caught anymore. If the user triggers one, he
3810 exceptions aren't caught anymore. If the user triggers one, he
3801 should know why he's doing it and it should go all the way up,
3811 should know why he's doing it and it should go all the way up,
3802 just like any other exception. So now @abort will fully kill the
3812 just like any other exception. So now @abort will fully kill the
3803 embedded interpreter and the embedding code (unless that happens
3813 embedded interpreter and the embedding code (unless that happens
3804 to catch SystemExit).
3814 to catch SystemExit).
3805
3815
3806 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3816 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3807 and a debugger() method to invoke the interactive pdb debugger
3817 and a debugger() method to invoke the interactive pdb debugger
3808 after printing exception information. Also added the corresponding
3818 after printing exception information. Also added the corresponding
3809 -pdb option and @pdb magic to control this feature, and updated
3819 -pdb option and @pdb magic to control this feature, and updated
3810 the docs. After a suggestion from Christopher Hart
3820 the docs. After a suggestion from Christopher Hart
3811 (hart-AT-caltech.edu).
3821 (hart-AT-caltech.edu).
3812
3822
3813 2002-04-12 Fernando Perez <fperez@colorado.edu>
3823 2002-04-12 Fernando Perez <fperez@colorado.edu>
3814
3824
3815 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3825 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3816 the exception handlers defined by the user (not the CrashHandler)
3826 the exception handlers defined by the user (not the CrashHandler)
3817 so that user exceptions don't trigger an ipython bug report.
3827 so that user exceptions don't trigger an ipython bug report.
3818
3828
3819 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3829 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3820 configurable (it should have always been so).
3830 configurable (it should have always been so).
3821
3831
3822 2002-03-26 Fernando Perez <fperez@colorado.edu>
3832 2002-03-26 Fernando Perez <fperez@colorado.edu>
3823
3833
3824 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3834 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3825 and there to fix embedding namespace issues. This should all be
3835 and there to fix embedding namespace issues. This should all be
3826 done in a more elegant way.
3836 done in a more elegant way.
3827
3837
3828 2002-03-25 Fernando Perez <fperez@colorado.edu>
3838 2002-03-25 Fernando Perez <fperez@colorado.edu>
3829
3839
3830 * IPython/genutils.py (get_home_dir): Try to make it work under
3840 * IPython/genutils.py (get_home_dir): Try to make it work under
3831 win9x also.
3841 win9x also.
3832
3842
3833 2002-03-20 Fernando Perez <fperez@colorado.edu>
3843 2002-03-20 Fernando Perez <fperez@colorado.edu>
3834
3844
3835 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3845 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3836 sys.displayhook untouched upon __init__.
3846 sys.displayhook untouched upon __init__.
3837
3847
3838 2002-03-19 Fernando Perez <fperez@colorado.edu>
3848 2002-03-19 Fernando Perez <fperez@colorado.edu>
3839
3849
3840 * Released 0.2.9 (for embedding bug, basically).
3850 * Released 0.2.9 (for embedding bug, basically).
3841
3851
3842 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3852 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3843 exceptions so that enclosing shell's state can be restored.
3853 exceptions so that enclosing shell's state can be restored.
3844
3854
3845 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3855 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3846 naming conventions in the .ipython/ dir.
3856 naming conventions in the .ipython/ dir.
3847
3857
3848 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3858 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3849 from delimiters list so filenames with - in them get expanded.
3859 from delimiters list so filenames with - in them get expanded.
3850
3860
3851 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3861 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3852 sys.displayhook not being properly restored after an embedded call.
3862 sys.displayhook not being properly restored after an embedded call.
3853
3863
3854 2002-03-18 Fernando Perez <fperez@colorado.edu>
3864 2002-03-18 Fernando Perez <fperez@colorado.edu>
3855
3865
3856 * Released 0.2.8
3866 * Released 0.2.8
3857
3867
3858 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3868 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3859 some files weren't being included in a -upgrade.
3869 some files weren't being included in a -upgrade.
3860 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3870 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3861 on' so that the first tab completes.
3871 on' so that the first tab completes.
3862 (InteractiveShell.handle_magic): fixed bug with spaces around
3872 (InteractiveShell.handle_magic): fixed bug with spaces around
3863 quotes breaking many magic commands.
3873 quotes breaking many magic commands.
3864
3874
3865 * setup.py: added note about ignoring the syntax error messages at
3875 * setup.py: added note about ignoring the syntax error messages at
3866 installation.
3876 installation.
3867
3877
3868 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3878 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3869 streamlining the gnuplot interface, now there's only one magic @gp.
3879 streamlining the gnuplot interface, now there's only one magic @gp.
3870
3880
3871 2002-03-17 Fernando Perez <fperez@colorado.edu>
3881 2002-03-17 Fernando Perez <fperez@colorado.edu>
3872
3882
3873 * IPython/UserConfig/magic_gnuplot.py: new name for the
3883 * IPython/UserConfig/magic_gnuplot.py: new name for the
3874 example-magic_pm.py file. Much enhanced system, now with a shell
3884 example-magic_pm.py file. Much enhanced system, now with a shell
3875 for communicating directly with gnuplot, one command at a time.
3885 for communicating directly with gnuplot, one command at a time.
3876
3886
3877 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3887 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3878 setting __name__=='__main__'.
3888 setting __name__=='__main__'.
3879
3889
3880 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3890 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3881 mini-shell for accessing gnuplot from inside ipython. Should
3891 mini-shell for accessing gnuplot from inside ipython. Should
3882 extend it later for grace access too. Inspired by Arnd's
3892 extend it later for grace access too. Inspired by Arnd's
3883 suggestion.
3893 suggestion.
3884
3894
3885 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3895 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3886 calling magic functions with () in their arguments. Thanks to Arnd
3896 calling magic functions with () in their arguments. Thanks to Arnd
3887 Baecker for pointing this to me.
3897 Baecker for pointing this to me.
3888
3898
3889 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3899 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3890 infinitely for integer or complex arrays (only worked with floats).
3900 infinitely for integer or complex arrays (only worked with floats).
3891
3901
3892 2002-03-16 Fernando Perez <fperez@colorado.edu>
3902 2002-03-16 Fernando Perez <fperez@colorado.edu>
3893
3903
3894 * setup.py: Merged setup and setup_windows into a single script
3904 * setup.py: Merged setup and setup_windows into a single script
3895 which properly handles things for windows users.
3905 which properly handles things for windows users.
3896
3906
3897 2002-03-15 Fernando Perez <fperez@colorado.edu>
3907 2002-03-15 Fernando Perez <fperez@colorado.edu>
3898
3908
3899 * Big change to the manual: now the magics are all automatically
3909 * Big change to the manual: now the magics are all automatically
3900 documented. This information is generated from their docstrings
3910 documented. This information is generated from their docstrings
3901 and put in a latex file included by the manual lyx file. This way
3911 and put in a latex file included by the manual lyx file. This way
3902 we get always up to date information for the magics. The manual
3912 we get always up to date information for the magics. The manual
3903 now also has proper version information, also auto-synced.
3913 now also has proper version information, also auto-synced.
3904
3914
3905 For this to work, an undocumented --magic_docstrings option was added.
3915 For this to work, an undocumented --magic_docstrings option was added.
3906
3916
3907 2002-03-13 Fernando Perez <fperez@colorado.edu>
3917 2002-03-13 Fernando Perez <fperez@colorado.edu>
3908
3918
3909 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3919 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3910 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3920 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3911
3921
3912 2002-03-12 Fernando Perez <fperez@colorado.edu>
3922 2002-03-12 Fernando Perez <fperez@colorado.edu>
3913
3923
3914 * IPython/ultraTB.py (TermColors): changed color escapes again to
3924 * IPython/ultraTB.py (TermColors): changed color escapes again to
3915 fix the (old, reintroduced) line-wrapping bug. Basically, if
3925 fix the (old, reintroduced) line-wrapping bug. Basically, if
3916 \001..\002 aren't given in the color escapes, lines get wrapped
3926 \001..\002 aren't given in the color escapes, lines get wrapped
3917 weirdly. But giving those screws up old xterms and emacs terms. So
3927 weirdly. But giving those screws up old xterms and emacs terms. So
3918 I added some logic for emacs terms to be ok, but I can't identify old
3928 I added some logic for emacs terms to be ok, but I can't identify old
3919 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3929 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3920
3930
3921 2002-03-10 Fernando Perez <fperez@colorado.edu>
3931 2002-03-10 Fernando Perez <fperez@colorado.edu>
3922
3932
3923 * IPython/usage.py (__doc__): Various documentation cleanups and
3933 * IPython/usage.py (__doc__): Various documentation cleanups and
3924 updates, both in usage docstrings and in the manual.
3934 updates, both in usage docstrings and in the manual.
3925
3935
3926 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3936 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3927 handling of caching. Set minimum acceptabe value for having a
3937 handling of caching. Set minimum acceptabe value for having a
3928 cache at 20 values.
3938 cache at 20 values.
3929
3939
3930 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3940 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3931 install_first_time function to a method, renamed it and added an
3941 install_first_time function to a method, renamed it and added an
3932 'upgrade' mode. Now people can update their config directory with
3942 'upgrade' mode. Now people can update their config directory with
3933 a simple command line switch (-upgrade, also new).
3943 a simple command line switch (-upgrade, also new).
3934
3944
3935 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3945 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3936 @file (convenient for automagic users under Python >= 2.2).
3946 @file (convenient for automagic users under Python >= 2.2).
3937 Removed @files (it seemed more like a plural than an abbrev. of
3947 Removed @files (it seemed more like a plural than an abbrev. of
3938 'file show').
3948 'file show').
3939
3949
3940 * IPython/iplib.py (install_first_time): Fixed crash if there were
3950 * IPython/iplib.py (install_first_time): Fixed crash if there were
3941 backup files ('~') in .ipython/ install directory.
3951 backup files ('~') in .ipython/ install directory.
3942
3952
3943 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3953 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3944 system. Things look fine, but these changes are fairly
3954 system. Things look fine, but these changes are fairly
3945 intrusive. Test them for a few days.
3955 intrusive. Test them for a few days.
3946
3956
3947 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3957 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3948 the prompts system. Now all in/out prompt strings are user
3958 the prompts system. Now all in/out prompt strings are user
3949 controllable. This is particularly useful for embedding, as one
3959 controllable. This is particularly useful for embedding, as one
3950 can tag embedded instances with particular prompts.
3960 can tag embedded instances with particular prompts.
3951
3961
3952 Also removed global use of sys.ps1/2, which now allows nested
3962 Also removed global use of sys.ps1/2, which now allows nested
3953 embeddings without any problems. Added command-line options for
3963 embeddings without any problems. Added command-line options for
3954 the prompt strings.
3964 the prompt strings.
3955
3965
3956 2002-03-08 Fernando Perez <fperez@colorado.edu>
3966 2002-03-08 Fernando Perez <fperez@colorado.edu>
3957
3967
3958 * IPython/UserConfig/example-embed-short.py (ipshell): added
3968 * IPython/UserConfig/example-embed-short.py (ipshell): added
3959 example file with the bare minimum code for embedding.
3969 example file with the bare minimum code for embedding.
3960
3970
3961 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3971 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3962 functionality for the embeddable shell to be activated/deactivated
3972 functionality for the embeddable shell to be activated/deactivated
3963 either globally or at each call.
3973 either globally or at each call.
3964
3974
3965 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3975 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3966 rewriting the prompt with '--->' for auto-inputs with proper
3976 rewriting the prompt with '--->' for auto-inputs with proper
3967 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3977 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3968 this is handled by the prompts class itself, as it should.
3978 this is handled by the prompts class itself, as it should.
3969
3979
3970 2002-03-05 Fernando Perez <fperez@colorado.edu>
3980 2002-03-05 Fernando Perez <fperez@colorado.edu>
3971
3981
3972 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3982 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3973 @logstart to avoid name clashes with the math log function.
3983 @logstart to avoid name clashes with the math log function.
3974
3984
3975 * Big updates to X/Emacs section of the manual.
3985 * Big updates to X/Emacs section of the manual.
3976
3986
3977 * Removed ipython_emacs. Milan explained to me how to pass
3987 * Removed ipython_emacs. Milan explained to me how to pass
3978 arguments to ipython through Emacs. Some day I'm going to end up
3988 arguments to ipython through Emacs. Some day I'm going to end up
3979 learning some lisp...
3989 learning some lisp...
3980
3990
3981 2002-03-04 Fernando Perez <fperez@colorado.edu>
3991 2002-03-04 Fernando Perez <fperez@colorado.edu>
3982
3992
3983 * IPython/ipython_emacs: Created script to be used as the
3993 * IPython/ipython_emacs: Created script to be used as the
3984 py-python-command Emacs variable so we can pass IPython
3994 py-python-command Emacs variable so we can pass IPython
3985 parameters. I can't figure out how to tell Emacs directly to pass
3995 parameters. I can't figure out how to tell Emacs directly to pass
3986 parameters to IPython, so a dummy shell script will do it.
3996 parameters to IPython, so a dummy shell script will do it.
3987
3997
3988 Other enhancements made for things to work better under Emacs'
3998 Other enhancements made for things to work better under Emacs'
3989 various types of terminals. Many thanks to Milan Zamazal
3999 various types of terminals. Many thanks to Milan Zamazal
3990 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4000 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3991
4001
3992 2002-03-01 Fernando Perez <fperez@colorado.edu>
4002 2002-03-01 Fernando Perez <fperez@colorado.edu>
3993
4003
3994 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4004 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3995 that loading of readline is now optional. This gives better
4005 that loading of readline is now optional. This gives better
3996 control to emacs users.
4006 control to emacs users.
3997
4007
3998 * IPython/ultraTB.py (__date__): Modified color escape sequences
4008 * IPython/ultraTB.py (__date__): Modified color escape sequences
3999 and now things work fine under xterm and in Emacs' term buffers
4009 and now things work fine under xterm and in Emacs' term buffers
4000 (though not shell ones). Well, in emacs you get colors, but all
4010 (though not shell ones). Well, in emacs you get colors, but all
4001 seem to be 'light' colors (no difference between dark and light
4011 seem to be 'light' colors (no difference between dark and light
4002 ones). But the garbage chars are gone, and also in xterms. It
4012 ones). But the garbage chars are gone, and also in xterms. It
4003 seems that now I'm using 'cleaner' ansi sequences.
4013 seems that now I'm using 'cleaner' ansi sequences.
4004
4014
4005 2002-02-21 Fernando Perez <fperez@colorado.edu>
4015 2002-02-21 Fernando Perez <fperez@colorado.edu>
4006
4016
4007 * Released 0.2.7 (mainly to publish the scoping fix).
4017 * Released 0.2.7 (mainly to publish the scoping fix).
4008
4018
4009 * IPython/Logger.py (Logger.logstate): added. A corresponding
4019 * IPython/Logger.py (Logger.logstate): added. A corresponding
4010 @logstate magic was created.
4020 @logstate magic was created.
4011
4021
4012 * IPython/Magic.py: fixed nested scoping problem under Python
4022 * IPython/Magic.py: fixed nested scoping problem under Python
4013 2.1.x (automagic wasn't working).
4023 2.1.x (automagic wasn't working).
4014
4024
4015 2002-02-20 Fernando Perez <fperez@colorado.edu>
4025 2002-02-20 Fernando Perez <fperez@colorado.edu>
4016
4026
4017 * Released 0.2.6.
4027 * Released 0.2.6.
4018
4028
4019 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4029 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4020 option so that logs can come out without any headers at all.
4030 option so that logs can come out without any headers at all.
4021
4031
4022 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4032 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4023 SciPy.
4033 SciPy.
4024
4034
4025 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4035 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4026 that embedded IPython calls don't require vars() to be explicitly
4036 that embedded IPython calls don't require vars() to be explicitly
4027 passed. Now they are extracted from the caller's frame (code
4037 passed. Now they are extracted from the caller's frame (code
4028 snatched from Eric Jones' weave). Added better documentation to
4038 snatched from Eric Jones' weave). Added better documentation to
4029 the section on embedding and the example file.
4039 the section on embedding and the example file.
4030
4040
4031 * IPython/genutils.py (page): Changed so that under emacs, it just
4041 * IPython/genutils.py (page): Changed so that under emacs, it just
4032 prints the string. You can then page up and down in the emacs
4042 prints the string. You can then page up and down in the emacs
4033 buffer itself. This is how the builtin help() works.
4043 buffer itself. This is how the builtin help() works.
4034
4044
4035 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4045 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4036 macro scoping: macros need to be executed in the user's namespace
4046 macro scoping: macros need to be executed in the user's namespace
4037 to work as if they had been typed by the user.
4047 to work as if they had been typed by the user.
4038
4048
4039 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4049 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4040 execute automatically (no need to type 'exec...'). They then
4050 execute automatically (no need to type 'exec...'). They then
4041 behave like 'true macros'. The printing system was also modified
4051 behave like 'true macros'. The printing system was also modified
4042 for this to work.
4052 for this to work.
4043
4053
4044 2002-02-19 Fernando Perez <fperez@colorado.edu>
4054 2002-02-19 Fernando Perez <fperez@colorado.edu>
4045
4055
4046 * IPython/genutils.py (page_file): new function for paging files
4056 * IPython/genutils.py (page_file): new function for paging files
4047 in an OS-independent way. Also necessary for file viewing to work
4057 in an OS-independent way. Also necessary for file viewing to work
4048 well inside Emacs buffers.
4058 well inside Emacs buffers.
4049 (page): Added checks for being in an emacs buffer.
4059 (page): Added checks for being in an emacs buffer.
4050 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4060 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4051 same bug in iplib.
4061 same bug in iplib.
4052
4062
4053 2002-02-18 Fernando Perez <fperez@colorado.edu>
4063 2002-02-18 Fernando Perez <fperez@colorado.edu>
4054
4064
4055 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4065 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4056 of readline so that IPython can work inside an Emacs buffer.
4066 of readline so that IPython can work inside an Emacs buffer.
4057
4067
4058 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4068 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4059 method signatures (they weren't really bugs, but it looks cleaner
4069 method signatures (they weren't really bugs, but it looks cleaner
4060 and keeps PyChecker happy).
4070 and keeps PyChecker happy).
4061
4071
4062 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4072 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4063 for implementing various user-defined hooks. Currently only
4073 for implementing various user-defined hooks. Currently only
4064 display is done.
4074 display is done.
4065
4075
4066 * IPython/Prompts.py (CachedOutput._display): changed display
4076 * IPython/Prompts.py (CachedOutput._display): changed display
4067 functions so that they can be dynamically changed by users easily.
4077 functions so that they can be dynamically changed by users easily.
4068
4078
4069 * IPython/Extensions/numeric_formats.py (num_display): added an
4079 * IPython/Extensions/numeric_formats.py (num_display): added an
4070 extension for printing NumPy arrays in flexible manners. It
4080 extension for printing NumPy arrays in flexible manners. It
4071 doesn't do anything yet, but all the structure is in
4081 doesn't do anything yet, but all the structure is in
4072 place. Ultimately the plan is to implement output format control
4082 place. Ultimately the plan is to implement output format control
4073 like in Octave.
4083 like in Octave.
4074
4084
4075 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4085 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4076 methods are found at run-time by all the automatic machinery.
4086 methods are found at run-time by all the automatic machinery.
4077
4087
4078 2002-02-17 Fernando Perez <fperez@colorado.edu>
4088 2002-02-17 Fernando Perez <fperez@colorado.edu>
4079
4089
4080 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4090 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4081 whole file a little.
4091 whole file a little.
4082
4092
4083 * ToDo: closed this document. Now there's a new_design.lyx
4093 * ToDo: closed this document. Now there's a new_design.lyx
4084 document for all new ideas. Added making a pdf of it for the
4094 document for all new ideas. Added making a pdf of it for the
4085 end-user distro.
4095 end-user distro.
4086
4096
4087 * IPython/Logger.py (Logger.switch_log): Created this to replace
4097 * IPython/Logger.py (Logger.switch_log): Created this to replace
4088 logon() and logoff(). It also fixes a nasty crash reported by
4098 logon() and logoff(). It also fixes a nasty crash reported by
4089 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4099 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4090
4100
4091 * IPython/iplib.py (complete): got auto-completion to work with
4101 * IPython/iplib.py (complete): got auto-completion to work with
4092 automagic (I had wanted this for a long time).
4102 automagic (I had wanted this for a long time).
4093
4103
4094 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4104 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4095 to @file, since file() is now a builtin and clashes with automagic
4105 to @file, since file() is now a builtin and clashes with automagic
4096 for @file.
4106 for @file.
4097
4107
4098 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4108 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4099 of this was previously in iplib, which had grown to more than 2000
4109 of this was previously in iplib, which had grown to more than 2000
4100 lines, way too long. No new functionality, but it makes managing
4110 lines, way too long. No new functionality, but it makes managing
4101 the code a bit easier.
4111 the code a bit easier.
4102
4112
4103 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4113 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4104 information to crash reports.
4114 information to crash reports.
4105
4115
4106 2002-02-12 Fernando Perez <fperez@colorado.edu>
4116 2002-02-12 Fernando Perez <fperez@colorado.edu>
4107
4117
4108 * Released 0.2.5.
4118 * Released 0.2.5.
4109
4119
4110 2002-02-11 Fernando Perez <fperez@colorado.edu>
4120 2002-02-11 Fernando Perez <fperez@colorado.edu>
4111
4121
4112 * Wrote a relatively complete Windows installer. It puts
4122 * Wrote a relatively complete Windows installer. It puts
4113 everything in place, creates Start Menu entries and fixes the
4123 everything in place, creates Start Menu entries and fixes the
4114 color issues. Nothing fancy, but it works.
4124 color issues. Nothing fancy, but it works.
4115
4125
4116 2002-02-10 Fernando Perez <fperez@colorado.edu>
4126 2002-02-10 Fernando Perez <fperez@colorado.edu>
4117
4127
4118 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4128 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4119 os.path.expanduser() call so that we can type @run ~/myfile.py and
4129 os.path.expanduser() call so that we can type @run ~/myfile.py and
4120 have thigs work as expected.
4130 have thigs work as expected.
4121
4131
4122 * IPython/genutils.py (page): fixed exception handling so things
4132 * IPython/genutils.py (page): fixed exception handling so things
4123 work both in Unix and Windows correctly. Quitting a pager triggers
4133 work both in Unix and Windows correctly. Quitting a pager triggers
4124 an IOError/broken pipe in Unix, and in windows not finding a pager
4134 an IOError/broken pipe in Unix, and in windows not finding a pager
4125 is also an IOError, so I had to actually look at the return value
4135 is also an IOError, so I had to actually look at the return value
4126 of the exception, not just the exception itself. Should be ok now.
4136 of the exception, not just the exception itself. Should be ok now.
4127
4137
4128 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4138 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4129 modified to allow case-insensitive color scheme changes.
4139 modified to allow case-insensitive color scheme changes.
4130
4140
4131 2002-02-09 Fernando Perez <fperez@colorado.edu>
4141 2002-02-09 Fernando Perez <fperez@colorado.edu>
4132
4142
4133 * IPython/genutils.py (native_line_ends): new function to leave
4143 * IPython/genutils.py (native_line_ends): new function to leave
4134 user config files with os-native line-endings.
4144 user config files with os-native line-endings.
4135
4145
4136 * README and manual updates.
4146 * README and manual updates.
4137
4147
4138 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4148 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4139 instead of StringType to catch Unicode strings.
4149 instead of StringType to catch Unicode strings.
4140
4150
4141 * IPython/genutils.py (filefind): fixed bug for paths with
4151 * IPython/genutils.py (filefind): fixed bug for paths with
4142 embedded spaces (very common in Windows).
4152 embedded spaces (very common in Windows).
4143
4153
4144 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4154 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4145 files under Windows, so that they get automatically associated
4155 files under Windows, so that they get automatically associated
4146 with a text editor. Windows makes it a pain to handle
4156 with a text editor. Windows makes it a pain to handle
4147 extension-less files.
4157 extension-less files.
4148
4158
4149 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4159 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4150 warning about readline only occur for Posix. In Windows there's no
4160 warning about readline only occur for Posix. In Windows there's no
4151 way to get readline, so why bother with the warning.
4161 way to get readline, so why bother with the warning.
4152
4162
4153 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4163 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4154 for __str__ instead of dir(self), since dir() changed in 2.2.
4164 for __str__ instead of dir(self), since dir() changed in 2.2.
4155
4165
4156 * Ported to Windows! Tested on XP, I suspect it should work fine
4166 * Ported to Windows! Tested on XP, I suspect it should work fine
4157 on NT/2000, but I don't think it will work on 98 et al. That
4167 on NT/2000, but I don't think it will work on 98 et al. That
4158 series of Windows is such a piece of junk anyway that I won't try
4168 series of Windows is such a piece of junk anyway that I won't try
4159 porting it there. The XP port was straightforward, showed a few
4169 porting it there. The XP port was straightforward, showed a few
4160 bugs here and there (fixed all), in particular some string
4170 bugs here and there (fixed all), in particular some string
4161 handling stuff which required considering Unicode strings (which
4171 handling stuff which required considering Unicode strings (which
4162 Windows uses). This is good, but hasn't been too tested :) No
4172 Windows uses). This is good, but hasn't been too tested :) No
4163 fancy installer yet, I'll put a note in the manual so people at
4173 fancy installer yet, I'll put a note in the manual so people at
4164 least make manually a shortcut.
4174 least make manually a shortcut.
4165
4175
4166 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4176 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4167 into a single one, "colors". This now controls both prompt and
4177 into a single one, "colors". This now controls both prompt and
4168 exception color schemes, and can be changed both at startup
4178 exception color schemes, and can be changed both at startup
4169 (either via command-line switches or via ipythonrc files) and at
4179 (either via command-line switches or via ipythonrc files) and at
4170 runtime, with @colors.
4180 runtime, with @colors.
4171 (Magic.magic_run): renamed @prun to @run and removed the old
4181 (Magic.magic_run): renamed @prun to @run and removed the old
4172 @run. The two were too similar to warrant keeping both.
4182 @run. The two were too similar to warrant keeping both.
4173
4183
4174 2002-02-03 Fernando Perez <fperez@colorado.edu>
4184 2002-02-03 Fernando Perez <fperez@colorado.edu>
4175
4185
4176 * IPython/iplib.py (install_first_time): Added comment on how to
4186 * IPython/iplib.py (install_first_time): Added comment on how to
4177 configure the color options for first-time users. Put a <return>
4187 configure the color options for first-time users. Put a <return>
4178 request at the end so that small-terminal users get a chance to
4188 request at the end so that small-terminal users get a chance to
4179 read the startup info.
4189 read the startup info.
4180
4190
4181 2002-01-23 Fernando Perez <fperez@colorado.edu>
4191 2002-01-23 Fernando Perez <fperez@colorado.edu>
4182
4192
4183 * IPython/iplib.py (CachedOutput.update): Changed output memory
4193 * IPython/iplib.py (CachedOutput.update): Changed output memory
4184 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4194 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4185 input history we still use _i. Did this b/c these variable are
4195 input history we still use _i. Did this b/c these variable are
4186 very commonly used in interactive work, so the less we need to
4196 very commonly used in interactive work, so the less we need to
4187 type the better off we are.
4197 type the better off we are.
4188 (Magic.magic_prun): updated @prun to better handle the namespaces
4198 (Magic.magic_prun): updated @prun to better handle the namespaces
4189 the file will run in, including a fix for __name__ not being set
4199 the file will run in, including a fix for __name__ not being set
4190 before.
4200 before.
4191
4201
4192 2002-01-20 Fernando Perez <fperez@colorado.edu>
4202 2002-01-20 Fernando Perez <fperez@colorado.edu>
4193
4203
4194 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4204 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4195 extra garbage for Python 2.2. Need to look more carefully into
4205 extra garbage for Python 2.2. Need to look more carefully into
4196 this later.
4206 this later.
4197
4207
4198 2002-01-19 Fernando Perez <fperez@colorado.edu>
4208 2002-01-19 Fernando Perez <fperez@colorado.edu>
4199
4209
4200 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4210 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4201 display SyntaxError exceptions properly formatted when they occur
4211 display SyntaxError exceptions properly formatted when they occur
4202 (they can be triggered by imported code).
4212 (they can be triggered by imported code).
4203
4213
4204 2002-01-18 Fernando Perez <fperez@colorado.edu>
4214 2002-01-18 Fernando Perez <fperez@colorado.edu>
4205
4215
4206 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4216 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4207 SyntaxError exceptions are reported nicely formatted, instead of
4217 SyntaxError exceptions are reported nicely formatted, instead of
4208 spitting out only offset information as before.
4218 spitting out only offset information as before.
4209 (Magic.magic_prun): Added the @prun function for executing
4219 (Magic.magic_prun): Added the @prun function for executing
4210 programs with command line args inside IPython.
4220 programs with command line args inside IPython.
4211
4221
4212 2002-01-16 Fernando Perez <fperez@colorado.edu>
4222 2002-01-16 Fernando Perez <fperez@colorado.edu>
4213
4223
4214 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4224 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4215 to *not* include the last item given in a range. This brings their
4225 to *not* include the last item given in a range. This brings their
4216 behavior in line with Python's slicing:
4226 behavior in line with Python's slicing:
4217 a[n1:n2] -> a[n1]...a[n2-1]
4227 a[n1:n2] -> a[n1]...a[n2-1]
4218 It may be a bit less convenient, but I prefer to stick to Python's
4228 It may be a bit less convenient, but I prefer to stick to Python's
4219 conventions *everywhere*, so users never have to wonder.
4229 conventions *everywhere*, so users never have to wonder.
4220 (Magic.magic_macro): Added @macro function to ease the creation of
4230 (Magic.magic_macro): Added @macro function to ease the creation of
4221 macros.
4231 macros.
4222
4232
4223 2002-01-05 Fernando Perez <fperez@colorado.edu>
4233 2002-01-05 Fernando Perez <fperez@colorado.edu>
4224
4234
4225 * Released 0.2.4.
4235 * Released 0.2.4.
4226
4236
4227 * IPython/iplib.py (Magic.magic_pdef):
4237 * IPython/iplib.py (Magic.magic_pdef):
4228 (InteractiveShell.safe_execfile): report magic lines and error
4238 (InteractiveShell.safe_execfile): report magic lines and error
4229 lines without line numbers so one can easily copy/paste them for
4239 lines without line numbers so one can easily copy/paste them for
4230 re-execution.
4240 re-execution.
4231
4241
4232 * Updated manual with recent changes.
4242 * Updated manual with recent changes.
4233
4243
4234 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4244 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4235 docstring printing when class? is called. Very handy for knowing
4245 docstring printing when class? is called. Very handy for knowing
4236 how to create class instances (as long as __init__ is well
4246 how to create class instances (as long as __init__ is well
4237 documented, of course :)
4247 documented, of course :)
4238 (Magic.magic_doc): print both class and constructor docstrings.
4248 (Magic.magic_doc): print both class and constructor docstrings.
4239 (Magic.magic_pdef): give constructor info if passed a class and
4249 (Magic.magic_pdef): give constructor info if passed a class and
4240 __call__ info for callable object instances.
4250 __call__ info for callable object instances.
4241
4251
4242 2002-01-04 Fernando Perez <fperez@colorado.edu>
4252 2002-01-04 Fernando Perez <fperez@colorado.edu>
4243
4253
4244 * Made deep_reload() off by default. It doesn't always work
4254 * Made deep_reload() off by default. It doesn't always work
4245 exactly as intended, so it's probably safer to have it off. It's
4255 exactly as intended, so it's probably safer to have it off. It's
4246 still available as dreload() anyway, so nothing is lost.
4256 still available as dreload() anyway, so nothing is lost.
4247
4257
4248 2002-01-02 Fernando Perez <fperez@colorado.edu>
4258 2002-01-02 Fernando Perez <fperez@colorado.edu>
4249
4259
4250 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4260 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4251 so I wanted an updated release).
4261 so I wanted an updated release).
4252
4262
4253 2001-12-27 Fernando Perez <fperez@colorado.edu>
4263 2001-12-27 Fernando Perez <fperez@colorado.edu>
4254
4264
4255 * IPython/iplib.py (InteractiveShell.interact): Added the original
4265 * IPython/iplib.py (InteractiveShell.interact): Added the original
4256 code from 'code.py' for this module in order to change the
4266 code from 'code.py' for this module in order to change the
4257 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4267 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4258 the history cache would break when the user hit Ctrl-C, and
4268 the history cache would break when the user hit Ctrl-C, and
4259 interact() offers no way to add any hooks to it.
4269 interact() offers no way to add any hooks to it.
4260
4270
4261 2001-12-23 Fernando Perez <fperez@colorado.edu>
4271 2001-12-23 Fernando Perez <fperez@colorado.edu>
4262
4272
4263 * setup.py: added check for 'MANIFEST' before trying to remove
4273 * setup.py: added check for 'MANIFEST' before trying to remove
4264 it. Thanks to Sean Reifschneider.
4274 it. Thanks to Sean Reifschneider.
4265
4275
4266 2001-12-22 Fernando Perez <fperez@colorado.edu>
4276 2001-12-22 Fernando Perez <fperez@colorado.edu>
4267
4277
4268 * Released 0.2.2.
4278 * Released 0.2.2.
4269
4279
4270 * Finished (reasonably) writing the manual. Later will add the
4280 * Finished (reasonably) writing the manual. Later will add the
4271 python-standard navigation stylesheets, but for the time being
4281 python-standard navigation stylesheets, but for the time being
4272 it's fairly complete. Distribution will include html and pdf
4282 it's fairly complete. Distribution will include html and pdf
4273 versions.
4283 versions.
4274
4284
4275 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4285 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4276 (MayaVi author).
4286 (MayaVi author).
4277
4287
4278 2001-12-21 Fernando Perez <fperez@colorado.edu>
4288 2001-12-21 Fernando Perez <fperez@colorado.edu>
4279
4289
4280 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4290 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4281 good public release, I think (with the manual and the distutils
4291 good public release, I think (with the manual and the distutils
4282 installer). The manual can use some work, but that can go
4292 installer). The manual can use some work, but that can go
4283 slowly. Otherwise I think it's quite nice for end users. Next
4293 slowly. Otherwise I think it's quite nice for end users. Next
4284 summer, rewrite the guts of it...
4294 summer, rewrite the guts of it...
4285
4295
4286 * Changed format of ipythonrc files to use whitespace as the
4296 * Changed format of ipythonrc files to use whitespace as the
4287 separator instead of an explicit '='. Cleaner.
4297 separator instead of an explicit '='. Cleaner.
4288
4298
4289 2001-12-20 Fernando Perez <fperez@colorado.edu>
4299 2001-12-20 Fernando Perez <fperez@colorado.edu>
4290
4300
4291 * Started a manual in LyX. For now it's just a quick merge of the
4301 * Started a manual in LyX. For now it's just a quick merge of the
4292 various internal docstrings and READMEs. Later it may grow into a
4302 various internal docstrings and READMEs. Later it may grow into a
4293 nice, full-blown manual.
4303 nice, full-blown manual.
4294
4304
4295 * Set up a distutils based installer. Installation should now be
4305 * Set up a distutils based installer. Installation should now be
4296 trivially simple for end-users.
4306 trivially simple for end-users.
4297
4307
4298 2001-12-11 Fernando Perez <fperez@colorado.edu>
4308 2001-12-11 Fernando Perez <fperez@colorado.edu>
4299
4309
4300 * Released 0.2.0. First public release, announced it at
4310 * Released 0.2.0. First public release, announced it at
4301 comp.lang.python. From now on, just bugfixes...
4311 comp.lang.python. From now on, just bugfixes...
4302
4312
4303 * Went through all the files, set copyright/license notices and
4313 * Went through all the files, set copyright/license notices and
4304 cleaned up things. Ready for release.
4314 cleaned up things. Ready for release.
4305
4315
4306 2001-12-10 Fernando Perez <fperez@colorado.edu>
4316 2001-12-10 Fernando Perez <fperez@colorado.edu>
4307
4317
4308 * Changed the first-time installer not to use tarfiles. It's more
4318 * Changed the first-time installer not to use tarfiles. It's more
4309 robust now and less unix-dependent. Also makes it easier for
4319 robust now and less unix-dependent. Also makes it easier for
4310 people to later upgrade versions.
4320 people to later upgrade versions.
4311
4321
4312 * Changed @exit to @abort to reflect the fact that it's pretty
4322 * Changed @exit to @abort to reflect the fact that it's pretty
4313 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4323 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4314 becomes significant only when IPyhton is embedded: in that case,
4324 becomes significant only when IPyhton is embedded: in that case,
4315 C-D closes IPython only, but @abort kills the enclosing program
4325 C-D closes IPython only, but @abort kills the enclosing program
4316 too (unless it had called IPython inside a try catching
4326 too (unless it had called IPython inside a try catching
4317 SystemExit).
4327 SystemExit).
4318
4328
4319 * Created Shell module which exposes the actuall IPython Shell
4329 * Created Shell module which exposes the actuall IPython Shell
4320 classes, currently the normal and the embeddable one. This at
4330 classes, currently the normal and the embeddable one. This at
4321 least offers a stable interface we won't need to change when
4331 least offers a stable interface we won't need to change when
4322 (later) the internals are rewritten. That rewrite will be confined
4332 (later) the internals are rewritten. That rewrite will be confined
4323 to iplib and ipmaker, but the Shell interface should remain as is.
4333 to iplib and ipmaker, but the Shell interface should remain as is.
4324
4334
4325 * Added embed module which offers an embeddable IPShell object,
4335 * Added embed module which offers an embeddable IPShell object,
4326 useful to fire up IPython *inside* a running program. Great for
4336 useful to fire up IPython *inside* a running program. Great for
4327 debugging or dynamical data analysis.
4337 debugging or dynamical data analysis.
4328
4338
4329 2001-12-08 Fernando Perez <fperez@colorado.edu>
4339 2001-12-08 Fernando Perez <fperez@colorado.edu>
4330
4340
4331 * Fixed small bug preventing seeing info from methods of defined
4341 * Fixed small bug preventing seeing info from methods of defined
4332 objects (incorrect namespace in _ofind()).
4342 objects (incorrect namespace in _ofind()).
4333
4343
4334 * Documentation cleanup. Moved the main usage docstrings to a
4344 * Documentation cleanup. Moved the main usage docstrings to a
4335 separate file, usage.py (cleaner to maintain, and hopefully in the
4345 separate file, usage.py (cleaner to maintain, and hopefully in the
4336 future some perlpod-like way of producing interactive, man and
4346 future some perlpod-like way of producing interactive, man and
4337 html docs out of it will be found).
4347 html docs out of it will be found).
4338
4348
4339 * Added @profile to see your profile at any time.
4349 * Added @profile to see your profile at any time.
4340
4350
4341 * Added @p as an alias for 'print'. It's especially convenient if
4351 * Added @p as an alias for 'print'. It's especially convenient if
4342 using automagic ('p x' prints x).
4352 using automagic ('p x' prints x).
4343
4353
4344 * Small cleanups and fixes after a pychecker run.
4354 * Small cleanups and fixes after a pychecker run.
4345
4355
4346 * Changed the @cd command to handle @cd - and @cd -<n> for
4356 * Changed the @cd command to handle @cd - and @cd -<n> for
4347 visiting any directory in _dh.
4357 visiting any directory in _dh.
4348
4358
4349 * Introduced _dh, a history of visited directories. @dhist prints
4359 * Introduced _dh, a history of visited directories. @dhist prints
4350 it out with numbers.
4360 it out with numbers.
4351
4361
4352 2001-12-07 Fernando Perez <fperez@colorado.edu>
4362 2001-12-07 Fernando Perez <fperez@colorado.edu>
4353
4363
4354 * Released 0.1.22
4364 * Released 0.1.22
4355
4365
4356 * Made initialization a bit more robust against invalid color
4366 * Made initialization a bit more robust against invalid color
4357 options in user input (exit, not traceback-crash).
4367 options in user input (exit, not traceback-crash).
4358
4368
4359 * Changed the bug crash reporter to write the report only in the
4369 * Changed the bug crash reporter to write the report only in the
4360 user's .ipython directory. That way IPython won't litter people's
4370 user's .ipython directory. That way IPython won't litter people's
4361 hard disks with crash files all over the place. Also print on
4371 hard disks with crash files all over the place. Also print on
4362 screen the necessary mail command.
4372 screen the necessary mail command.
4363
4373
4364 * With the new ultraTB, implemented LightBG color scheme for light
4374 * With the new ultraTB, implemented LightBG color scheme for light
4365 background terminals. A lot of people like white backgrounds, so I
4375 background terminals. A lot of people like white backgrounds, so I
4366 guess we should at least give them something readable.
4376 guess we should at least give them something readable.
4367
4377
4368 2001-12-06 Fernando Perez <fperez@colorado.edu>
4378 2001-12-06 Fernando Perez <fperez@colorado.edu>
4369
4379
4370 * Modified the structure of ultraTB. Now there's a proper class
4380 * Modified the structure of ultraTB. Now there's a proper class
4371 for tables of color schemes which allow adding schemes easily and
4381 for tables of color schemes which allow adding schemes easily and
4372 switching the active scheme without creating a new instance every
4382 switching the active scheme without creating a new instance every
4373 time (which was ridiculous). The syntax for creating new schemes
4383 time (which was ridiculous). The syntax for creating new schemes
4374 is also cleaner. I think ultraTB is finally done, with a clean
4384 is also cleaner. I think ultraTB is finally done, with a clean
4375 class structure. Names are also much cleaner (now there's proper
4385 class structure. Names are also much cleaner (now there's proper
4376 color tables, no need for every variable to also have 'color' in
4386 color tables, no need for every variable to also have 'color' in
4377 its name).
4387 its name).
4378
4388
4379 * Broke down genutils into separate files. Now genutils only
4389 * Broke down genutils into separate files. Now genutils only
4380 contains utility functions, and classes have been moved to their
4390 contains utility functions, and classes have been moved to their
4381 own files (they had enough independent functionality to warrant
4391 own files (they had enough independent functionality to warrant
4382 it): ConfigLoader, OutputTrap, Struct.
4392 it): ConfigLoader, OutputTrap, Struct.
4383
4393
4384 2001-12-05 Fernando Perez <fperez@colorado.edu>
4394 2001-12-05 Fernando Perez <fperez@colorado.edu>
4385
4395
4386 * IPython turns 21! Released version 0.1.21, as a candidate for
4396 * IPython turns 21! Released version 0.1.21, as a candidate for
4387 public consumption. If all goes well, release in a few days.
4397 public consumption. If all goes well, release in a few days.
4388
4398
4389 * Fixed path bug (files in Extensions/ directory wouldn't be found
4399 * Fixed path bug (files in Extensions/ directory wouldn't be found
4390 unless IPython/ was explicitly in sys.path).
4400 unless IPython/ was explicitly in sys.path).
4391
4401
4392 * Extended the FlexCompleter class as MagicCompleter to allow
4402 * Extended the FlexCompleter class as MagicCompleter to allow
4393 completion of @-starting lines.
4403 completion of @-starting lines.
4394
4404
4395 * Created __release__.py file as a central repository for release
4405 * Created __release__.py file as a central repository for release
4396 info that other files can read from.
4406 info that other files can read from.
4397
4407
4398 * Fixed small bug in logging: when logging was turned on in
4408 * Fixed small bug in logging: when logging was turned on in
4399 mid-session, old lines with special meanings (!@?) were being
4409 mid-session, old lines with special meanings (!@?) were being
4400 logged without the prepended comment, which is necessary since
4410 logged without the prepended comment, which is necessary since
4401 they are not truly valid python syntax. This should make session
4411 they are not truly valid python syntax. This should make session
4402 restores produce less errors.
4412 restores produce less errors.
4403
4413
4404 * The namespace cleanup forced me to make a FlexCompleter class
4414 * The namespace cleanup forced me to make a FlexCompleter class
4405 which is nothing but a ripoff of rlcompleter, but with selectable
4415 which is nothing but a ripoff of rlcompleter, but with selectable
4406 namespace (rlcompleter only works in __main__.__dict__). I'll try
4416 namespace (rlcompleter only works in __main__.__dict__). I'll try
4407 to submit a note to the authors to see if this change can be
4417 to submit a note to the authors to see if this change can be
4408 incorporated in future rlcompleter releases (Dec.6: done)
4418 incorporated in future rlcompleter releases (Dec.6: done)
4409
4419
4410 * More fixes to namespace handling. It was a mess! Now all
4420 * More fixes to namespace handling. It was a mess! Now all
4411 explicit references to __main__.__dict__ are gone (except when
4421 explicit references to __main__.__dict__ are gone (except when
4412 really needed) and everything is handled through the namespace
4422 really needed) and everything is handled through the namespace
4413 dicts in the IPython instance. We seem to be getting somewhere
4423 dicts in the IPython instance. We seem to be getting somewhere
4414 with this, finally...
4424 with this, finally...
4415
4425
4416 * Small documentation updates.
4426 * Small documentation updates.
4417
4427
4418 * Created the Extensions directory under IPython (with an
4428 * Created the Extensions directory under IPython (with an
4419 __init__.py). Put the PhysicalQ stuff there. This directory should
4429 __init__.py). Put the PhysicalQ stuff there. This directory should
4420 be used for all special-purpose extensions.
4430 be used for all special-purpose extensions.
4421
4431
4422 * File renaming:
4432 * File renaming:
4423 ipythonlib --> ipmaker
4433 ipythonlib --> ipmaker
4424 ipplib --> iplib
4434 ipplib --> iplib
4425 This makes a bit more sense in terms of what these files actually do.
4435 This makes a bit more sense in terms of what these files actually do.
4426
4436
4427 * Moved all the classes and functions in ipythonlib to ipplib, so
4437 * Moved all the classes and functions in ipythonlib to ipplib, so
4428 now ipythonlib only has make_IPython(). This will ease up its
4438 now ipythonlib only has make_IPython(). This will ease up its
4429 splitting in smaller functional chunks later.
4439 splitting in smaller functional chunks later.
4430
4440
4431 * Cleaned up (done, I think) output of @whos. Better column
4441 * Cleaned up (done, I think) output of @whos. Better column
4432 formatting, and now shows str(var) for as much as it can, which is
4442 formatting, and now shows str(var) for as much as it can, which is
4433 typically what one gets with a 'print var'.
4443 typically what one gets with a 'print var'.
4434
4444
4435 2001-12-04 Fernando Perez <fperez@colorado.edu>
4445 2001-12-04 Fernando Perez <fperez@colorado.edu>
4436
4446
4437 * Fixed namespace problems. Now builtin/IPyhton/user names get
4447 * Fixed namespace problems. Now builtin/IPyhton/user names get
4438 properly reported in their namespace. Internal namespace handling
4448 properly reported in their namespace. Internal namespace handling
4439 is finally getting decent (not perfect yet, but much better than
4449 is finally getting decent (not perfect yet, but much better than
4440 the ad-hoc mess we had).
4450 the ad-hoc mess we had).
4441
4451
4442 * Removed -exit option. If people just want to run a python
4452 * Removed -exit option. If people just want to run a python
4443 script, that's what the normal interpreter is for. Less
4453 script, that's what the normal interpreter is for. Less
4444 unnecessary options, less chances for bugs.
4454 unnecessary options, less chances for bugs.
4445
4455
4446 * Added a crash handler which generates a complete post-mortem if
4456 * Added a crash handler which generates a complete post-mortem if
4447 IPython crashes. This will help a lot in tracking bugs down the
4457 IPython crashes. This will help a lot in tracking bugs down the
4448 road.
4458 road.
4449
4459
4450 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4460 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4451 which were boud to functions being reassigned would bypass the
4461 which were boud to functions being reassigned would bypass the
4452 logger, breaking the sync of _il with the prompt counter. This
4462 logger, breaking the sync of _il with the prompt counter. This
4453 would then crash IPython later when a new line was logged.
4463 would then crash IPython later when a new line was logged.
4454
4464
4455 2001-12-02 Fernando Perez <fperez@colorado.edu>
4465 2001-12-02 Fernando Perez <fperez@colorado.edu>
4456
4466
4457 * Made IPython a package. This means people don't have to clutter
4467 * Made IPython a package. This means people don't have to clutter
4458 their sys.path with yet another directory. Changed the INSTALL
4468 their sys.path with yet another directory. Changed the INSTALL
4459 file accordingly.
4469 file accordingly.
4460
4470
4461 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4471 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4462 sorts its output (so @who shows it sorted) and @whos formats the
4472 sorts its output (so @who shows it sorted) and @whos formats the
4463 table according to the width of the first column. Nicer, easier to
4473 table according to the width of the first column. Nicer, easier to
4464 read. Todo: write a generic table_format() which takes a list of
4474 read. Todo: write a generic table_format() which takes a list of
4465 lists and prints it nicely formatted, with optional row/column
4475 lists and prints it nicely formatted, with optional row/column
4466 separators and proper padding and justification.
4476 separators and proper padding and justification.
4467
4477
4468 * Released 0.1.20
4478 * Released 0.1.20
4469
4479
4470 * Fixed bug in @log which would reverse the inputcache list (a
4480 * Fixed bug in @log which would reverse the inputcache list (a
4471 copy operation was missing).
4481 copy operation was missing).
4472
4482
4473 * Code cleanup. @config was changed to use page(). Better, since
4483 * Code cleanup. @config was changed to use page(). Better, since
4474 its output is always quite long.
4484 its output is always quite long.
4475
4485
4476 * Itpl is back as a dependency. I was having too many problems
4486 * Itpl is back as a dependency. I was having too many problems
4477 getting the parametric aliases to work reliably, and it's just
4487 getting the parametric aliases to work reliably, and it's just
4478 easier to code weird string operations with it than playing %()s
4488 easier to code weird string operations with it than playing %()s
4479 games. It's only ~6k, so I don't think it's too big a deal.
4489 games. It's only ~6k, so I don't think it's too big a deal.
4480
4490
4481 * Found (and fixed) a very nasty bug with history. !lines weren't
4491 * Found (and fixed) a very nasty bug with history. !lines weren't
4482 getting cached, and the out of sync caches would crash
4492 getting cached, and the out of sync caches would crash
4483 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4493 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4484 division of labor a bit better. Bug fixed, cleaner structure.
4494 division of labor a bit better. Bug fixed, cleaner structure.
4485
4495
4486 2001-12-01 Fernando Perez <fperez@colorado.edu>
4496 2001-12-01 Fernando Perez <fperez@colorado.edu>
4487
4497
4488 * Released 0.1.19
4498 * Released 0.1.19
4489
4499
4490 * Added option -n to @hist to prevent line number printing. Much
4500 * Added option -n to @hist to prevent line number printing. Much
4491 easier to copy/paste code this way.
4501 easier to copy/paste code this way.
4492
4502
4493 * Created global _il to hold the input list. Allows easy
4503 * Created global _il to hold the input list. Allows easy
4494 re-execution of blocks of code by slicing it (inspired by Janko's
4504 re-execution of blocks of code by slicing it (inspired by Janko's
4495 comment on 'macros').
4505 comment on 'macros').
4496
4506
4497 * Small fixes and doc updates.
4507 * Small fixes and doc updates.
4498
4508
4499 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4509 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4500 much too fragile with automagic. Handles properly multi-line
4510 much too fragile with automagic. Handles properly multi-line
4501 statements and takes parameters.
4511 statements and takes parameters.
4502
4512
4503 2001-11-30 Fernando Perez <fperez@colorado.edu>
4513 2001-11-30 Fernando Perez <fperez@colorado.edu>
4504
4514
4505 * Version 0.1.18 released.
4515 * Version 0.1.18 released.
4506
4516
4507 * Fixed nasty namespace bug in initial module imports.
4517 * Fixed nasty namespace bug in initial module imports.
4508
4518
4509 * Added copyright/license notes to all code files (except
4519 * Added copyright/license notes to all code files (except
4510 DPyGetOpt). For the time being, LGPL. That could change.
4520 DPyGetOpt). For the time being, LGPL. That could change.
4511
4521
4512 * Rewrote a much nicer README, updated INSTALL, cleaned up
4522 * Rewrote a much nicer README, updated INSTALL, cleaned up
4513 ipythonrc-* samples.
4523 ipythonrc-* samples.
4514
4524
4515 * Overall code/documentation cleanup. Basically ready for
4525 * Overall code/documentation cleanup. Basically ready for
4516 release. Only remaining thing: licence decision (LGPL?).
4526 release. Only remaining thing: licence decision (LGPL?).
4517
4527
4518 * Converted load_config to a class, ConfigLoader. Now recursion
4528 * Converted load_config to a class, ConfigLoader. Now recursion
4519 control is better organized. Doesn't include the same file twice.
4529 control is better organized. Doesn't include the same file twice.
4520
4530
4521 2001-11-29 Fernando Perez <fperez@colorado.edu>
4531 2001-11-29 Fernando Perez <fperez@colorado.edu>
4522
4532
4523 * Got input history working. Changed output history variables from
4533 * Got input history working. Changed output history variables from
4524 _p to _o so that _i is for input and _o for output. Just cleaner
4534 _p to _o so that _i is for input and _o for output. Just cleaner
4525 convention.
4535 convention.
4526
4536
4527 * Implemented parametric aliases. This pretty much allows the
4537 * Implemented parametric aliases. This pretty much allows the
4528 alias system to offer full-blown shell convenience, I think.
4538 alias system to offer full-blown shell convenience, I think.
4529
4539
4530 * Version 0.1.17 released, 0.1.18 opened.
4540 * Version 0.1.17 released, 0.1.18 opened.
4531
4541
4532 * dot_ipython/ipythonrc (alias): added documentation.
4542 * dot_ipython/ipythonrc (alias): added documentation.
4533 (xcolor): Fixed small bug (xcolors -> xcolor)
4543 (xcolor): Fixed small bug (xcolors -> xcolor)
4534
4544
4535 * Changed the alias system. Now alias is a magic command to define
4545 * Changed the alias system. Now alias is a magic command to define
4536 aliases just like the shell. Rationale: the builtin magics should
4546 aliases just like the shell. Rationale: the builtin magics should
4537 be there for things deeply connected to IPython's
4547 be there for things deeply connected to IPython's
4538 architecture. And this is a much lighter system for what I think
4548 architecture. And this is a much lighter system for what I think
4539 is the really important feature: allowing users to define quickly
4549 is the really important feature: allowing users to define quickly
4540 magics that will do shell things for them, so they can customize
4550 magics that will do shell things for them, so they can customize
4541 IPython easily to match their work habits. If someone is really
4551 IPython easily to match their work habits. If someone is really
4542 desperate to have another name for a builtin alias, they can
4552 desperate to have another name for a builtin alias, they can
4543 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4553 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4544 works.
4554 works.
4545
4555
4546 2001-11-28 Fernando Perez <fperez@colorado.edu>
4556 2001-11-28 Fernando Perez <fperez@colorado.edu>
4547
4557
4548 * Changed @file so that it opens the source file at the proper
4558 * Changed @file so that it opens the source file at the proper
4549 line. Since it uses less, if your EDITOR environment is
4559 line. Since it uses less, if your EDITOR environment is
4550 configured, typing v will immediately open your editor of choice
4560 configured, typing v will immediately open your editor of choice
4551 right at the line where the object is defined. Not as quick as
4561 right at the line where the object is defined. Not as quick as
4552 having a direct @edit command, but for all intents and purposes it
4562 having a direct @edit command, but for all intents and purposes it
4553 works. And I don't have to worry about writing @edit to deal with
4563 works. And I don't have to worry about writing @edit to deal with
4554 all the editors, less does that.
4564 all the editors, less does that.
4555
4565
4556 * Version 0.1.16 released, 0.1.17 opened.
4566 * Version 0.1.16 released, 0.1.17 opened.
4557
4567
4558 * Fixed some nasty bugs in the page/page_dumb combo that could
4568 * Fixed some nasty bugs in the page/page_dumb combo that could
4559 crash IPython.
4569 crash IPython.
4560
4570
4561 2001-11-27 Fernando Perez <fperez@colorado.edu>
4571 2001-11-27 Fernando Perez <fperez@colorado.edu>
4562
4572
4563 * Version 0.1.15 released, 0.1.16 opened.
4573 * Version 0.1.15 released, 0.1.16 opened.
4564
4574
4565 * Finally got ? and ?? to work for undefined things: now it's
4575 * Finally got ? and ?? to work for undefined things: now it's
4566 possible to type {}.get? and get information about the get method
4576 possible to type {}.get? and get information about the get method
4567 of dicts, or os.path? even if only os is defined (so technically
4577 of dicts, or os.path? even if only os is defined (so technically
4568 os.path isn't). Works at any level. For example, after import os,
4578 os.path isn't). Works at any level. For example, after import os,
4569 os?, os.path?, os.path.abspath? all work. This is great, took some
4579 os?, os.path?, os.path.abspath? all work. This is great, took some
4570 work in _ofind.
4580 work in _ofind.
4571
4581
4572 * Fixed more bugs with logging. The sanest way to do it was to add
4582 * Fixed more bugs with logging. The sanest way to do it was to add
4573 to @log a 'mode' parameter. Killed two in one shot (this mode
4583 to @log a 'mode' parameter. Killed two in one shot (this mode
4574 option was a request of Janko's). I think it's finally clean
4584 option was a request of Janko's). I think it's finally clean
4575 (famous last words).
4585 (famous last words).
4576
4586
4577 * Added a page_dumb() pager which does a decent job of paging on
4587 * Added a page_dumb() pager which does a decent job of paging on
4578 screen, if better things (like less) aren't available. One less
4588 screen, if better things (like less) aren't available. One less
4579 unix dependency (someday maybe somebody will port this to
4589 unix dependency (someday maybe somebody will port this to
4580 windows).
4590 windows).
4581
4591
4582 * Fixed problem in magic_log: would lock of logging out if log
4592 * Fixed problem in magic_log: would lock of logging out if log
4583 creation failed (because it would still think it had succeeded).
4593 creation failed (because it would still think it had succeeded).
4584
4594
4585 * Improved the page() function using curses to auto-detect screen
4595 * Improved the page() function using curses to auto-detect screen
4586 size. Now it can make a much better decision on whether to print
4596 size. Now it can make a much better decision on whether to print
4587 or page a string. Option screen_length was modified: a value 0
4597 or page a string. Option screen_length was modified: a value 0
4588 means auto-detect, and that's the default now.
4598 means auto-detect, and that's the default now.
4589
4599
4590 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4600 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4591 go out. I'll test it for a few days, then talk to Janko about
4601 go out. I'll test it for a few days, then talk to Janko about
4592 licences and announce it.
4602 licences and announce it.
4593
4603
4594 * Fixed the length of the auto-generated ---> prompt which appears
4604 * Fixed the length of the auto-generated ---> prompt which appears
4595 for auto-parens and auto-quotes. Getting this right isn't trivial,
4605 for auto-parens and auto-quotes. Getting this right isn't trivial,
4596 with all the color escapes, different prompt types and optional
4606 with all the color escapes, different prompt types and optional
4597 separators. But it seems to be working in all the combinations.
4607 separators. But it seems to be working in all the combinations.
4598
4608
4599 2001-11-26 Fernando Perez <fperez@colorado.edu>
4609 2001-11-26 Fernando Perez <fperez@colorado.edu>
4600
4610
4601 * Wrote a regexp filter to get option types from the option names
4611 * Wrote a regexp filter to get option types from the option names
4602 string. This eliminates the need to manually keep two duplicate
4612 string. This eliminates the need to manually keep two duplicate
4603 lists.
4613 lists.
4604
4614
4605 * Removed the unneeded check_option_names. Now options are handled
4615 * Removed the unneeded check_option_names. Now options are handled
4606 in a much saner manner and it's easy to visually check that things
4616 in a much saner manner and it's easy to visually check that things
4607 are ok.
4617 are ok.
4608
4618
4609 * Updated version numbers on all files I modified to carry a
4619 * Updated version numbers on all files I modified to carry a
4610 notice so Janko and Nathan have clear version markers.
4620 notice so Janko and Nathan have clear version markers.
4611
4621
4612 * Updated docstring for ultraTB with my changes. I should send
4622 * Updated docstring for ultraTB with my changes. I should send
4613 this to Nathan.
4623 this to Nathan.
4614
4624
4615 * Lots of small fixes. Ran everything through pychecker again.
4625 * Lots of small fixes. Ran everything through pychecker again.
4616
4626
4617 * Made loading of deep_reload an cmd line option. If it's not too
4627 * Made loading of deep_reload an cmd line option. If it's not too
4618 kosher, now people can just disable it. With -nodeep_reload it's
4628 kosher, now people can just disable it. With -nodeep_reload it's
4619 still available as dreload(), it just won't overwrite reload().
4629 still available as dreload(), it just won't overwrite reload().
4620
4630
4621 * Moved many options to the no| form (-opt and -noopt
4631 * Moved many options to the no| form (-opt and -noopt
4622 accepted). Cleaner.
4632 accepted). Cleaner.
4623
4633
4624 * Changed magic_log so that if called with no parameters, it uses
4634 * Changed magic_log so that if called with no parameters, it uses
4625 'rotate' mode. That way auto-generated logs aren't automatically
4635 'rotate' mode. That way auto-generated logs aren't automatically
4626 over-written. For normal logs, now a backup is made if it exists
4636 over-written. For normal logs, now a backup is made if it exists
4627 (only 1 level of backups). A new 'backup' mode was added to the
4637 (only 1 level of backups). A new 'backup' mode was added to the
4628 Logger class to support this. This was a request by Janko.
4638 Logger class to support this. This was a request by Janko.
4629
4639
4630 * Added @logoff/@logon to stop/restart an active log.
4640 * Added @logoff/@logon to stop/restart an active log.
4631
4641
4632 * Fixed a lot of bugs in log saving/replay. It was pretty
4642 * Fixed a lot of bugs in log saving/replay. It was pretty
4633 broken. Now special lines (!@,/) appear properly in the command
4643 broken. Now special lines (!@,/) appear properly in the command
4634 history after a log replay.
4644 history after a log replay.
4635
4645
4636 * Tried and failed to implement full session saving via pickle. My
4646 * Tried and failed to implement full session saving via pickle. My
4637 idea was to pickle __main__.__dict__, but modules can't be
4647 idea was to pickle __main__.__dict__, but modules can't be
4638 pickled. This would be a better alternative to replaying logs, but
4648 pickled. This would be a better alternative to replaying logs, but
4639 seems quite tricky to get to work. Changed -session to be called
4649 seems quite tricky to get to work. Changed -session to be called
4640 -logplay, which more accurately reflects what it does. And if we
4650 -logplay, which more accurately reflects what it does. And if we
4641 ever get real session saving working, -session is now available.
4651 ever get real session saving working, -session is now available.
4642
4652
4643 * Implemented color schemes for prompts also. As for tracebacks,
4653 * Implemented color schemes for prompts also. As for tracebacks,
4644 currently only NoColor and Linux are supported. But now the
4654 currently only NoColor and Linux are supported. But now the
4645 infrastructure is in place, based on a generic ColorScheme
4655 infrastructure is in place, based on a generic ColorScheme
4646 class. So writing and activating new schemes both for the prompts
4656 class. So writing and activating new schemes both for the prompts
4647 and the tracebacks should be straightforward.
4657 and the tracebacks should be straightforward.
4648
4658
4649 * Version 0.1.13 released, 0.1.14 opened.
4659 * Version 0.1.13 released, 0.1.14 opened.
4650
4660
4651 * Changed handling of options for output cache. Now counter is
4661 * Changed handling of options for output cache. Now counter is
4652 hardwired starting at 1 and one specifies the maximum number of
4662 hardwired starting at 1 and one specifies the maximum number of
4653 entries *in the outcache* (not the max prompt counter). This is
4663 entries *in the outcache* (not the max prompt counter). This is
4654 much better, since many statements won't increase the cache
4664 much better, since many statements won't increase the cache
4655 count. It also eliminated some confusing options, now there's only
4665 count. It also eliminated some confusing options, now there's only
4656 one: cache_size.
4666 one: cache_size.
4657
4667
4658 * Added 'alias' magic function and magic_alias option in the
4668 * Added 'alias' magic function and magic_alias option in the
4659 ipythonrc file. Now the user can easily define whatever names he
4669 ipythonrc file. Now the user can easily define whatever names he
4660 wants for the magic functions without having to play weird
4670 wants for the magic functions without having to play weird
4661 namespace games. This gives IPython a real shell-like feel.
4671 namespace games. This gives IPython a real shell-like feel.
4662
4672
4663 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4673 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4664 @ or not).
4674 @ or not).
4665
4675
4666 This was one of the last remaining 'visible' bugs (that I know
4676 This was one of the last remaining 'visible' bugs (that I know
4667 of). I think if I can clean up the session loading so it works
4677 of). I think if I can clean up the session loading so it works
4668 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4678 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4669 about licensing).
4679 about licensing).
4670
4680
4671 2001-11-25 Fernando Perez <fperez@colorado.edu>
4681 2001-11-25 Fernando Perez <fperez@colorado.edu>
4672
4682
4673 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4683 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4674 there's a cleaner distinction between what ? and ?? show.
4684 there's a cleaner distinction between what ? and ?? show.
4675
4685
4676 * Added screen_length option. Now the user can define his own
4686 * Added screen_length option. Now the user can define his own
4677 screen size for page() operations.
4687 screen size for page() operations.
4678
4688
4679 * Implemented magic shell-like functions with automatic code
4689 * Implemented magic shell-like functions with automatic code
4680 generation. Now adding another function is just a matter of adding
4690 generation. Now adding another function is just a matter of adding
4681 an entry to a dict, and the function is dynamically generated at
4691 an entry to a dict, and the function is dynamically generated at
4682 run-time. Python has some really cool features!
4692 run-time. Python has some really cool features!
4683
4693
4684 * Renamed many options to cleanup conventions a little. Now all
4694 * Renamed many options to cleanup conventions a little. Now all
4685 are lowercase, and only underscores where needed. Also in the code
4695 are lowercase, and only underscores where needed. Also in the code
4686 option name tables are clearer.
4696 option name tables are clearer.
4687
4697
4688 * Changed prompts a little. Now input is 'In [n]:' instead of
4698 * Changed prompts a little. Now input is 'In [n]:' instead of
4689 'In[n]:='. This allows it the numbers to be aligned with the
4699 'In[n]:='. This allows it the numbers to be aligned with the
4690 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4700 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4691 Python (it was a Mathematica thing). The '...' continuation prompt
4701 Python (it was a Mathematica thing). The '...' continuation prompt
4692 was also changed a little to align better.
4702 was also changed a little to align better.
4693
4703
4694 * Fixed bug when flushing output cache. Not all _p<n> variables
4704 * Fixed bug when flushing output cache. Not all _p<n> variables
4695 exist, so their deletion needs to be wrapped in a try:
4705 exist, so their deletion needs to be wrapped in a try:
4696
4706
4697 * Figured out how to properly use inspect.formatargspec() (it
4707 * Figured out how to properly use inspect.formatargspec() (it
4698 requires the args preceded by *). So I removed all the code from
4708 requires the args preceded by *). So I removed all the code from
4699 _get_pdef in Magic, which was just replicating that.
4709 _get_pdef in Magic, which was just replicating that.
4700
4710
4701 * Added test to prefilter to allow redefining magic function names
4711 * Added test to prefilter to allow redefining magic function names
4702 as variables. This is ok, since the @ form is always available,
4712 as variables. This is ok, since the @ form is always available,
4703 but whe should allow the user to define a variable called 'ls' if
4713 but whe should allow the user to define a variable called 'ls' if
4704 he needs it.
4714 he needs it.
4705
4715
4706 * Moved the ToDo information from README into a separate ToDo.
4716 * Moved the ToDo information from README into a separate ToDo.
4707
4717
4708 * General code cleanup and small bugfixes. I think it's close to a
4718 * General code cleanup and small bugfixes. I think it's close to a
4709 state where it can be released, obviously with a big 'beta'
4719 state where it can be released, obviously with a big 'beta'
4710 warning on it.
4720 warning on it.
4711
4721
4712 * Got the magic function split to work. Now all magics are defined
4722 * Got the magic function split to work. Now all magics are defined
4713 in a separate class. It just organizes things a bit, and now
4723 in a separate class. It just organizes things a bit, and now
4714 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4724 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4715 was too long).
4725 was too long).
4716
4726
4717 * Changed @clear to @reset to avoid potential confusions with
4727 * Changed @clear to @reset to avoid potential confusions with
4718 the shell command clear. Also renamed @cl to @clear, which does
4728 the shell command clear. Also renamed @cl to @clear, which does
4719 exactly what people expect it to from their shell experience.
4729 exactly what people expect it to from their shell experience.
4720
4730
4721 Added a check to the @reset command (since it's so
4731 Added a check to the @reset command (since it's so
4722 destructive, it's probably a good idea to ask for confirmation).
4732 destructive, it's probably a good idea to ask for confirmation).
4723 But now reset only works for full namespace resetting. Since the
4733 But now reset only works for full namespace resetting. Since the
4724 del keyword is already there for deleting a few specific
4734 del keyword is already there for deleting a few specific
4725 variables, I don't see the point of having a redundant magic
4735 variables, I don't see the point of having a redundant magic
4726 function for the same task.
4736 function for the same task.
4727
4737
4728 2001-11-24 Fernando Perez <fperez@colorado.edu>
4738 2001-11-24 Fernando Perez <fperez@colorado.edu>
4729
4739
4730 * Updated the builtin docs (esp. the ? ones).
4740 * Updated the builtin docs (esp. the ? ones).
4731
4741
4732 * Ran all the code through pychecker. Not terribly impressed with
4742 * Ran all the code through pychecker. Not terribly impressed with
4733 it: lots of spurious warnings and didn't really find anything of
4743 it: lots of spurious warnings and didn't really find anything of
4734 substance (just a few modules being imported and not used).
4744 substance (just a few modules being imported and not used).
4735
4745
4736 * Implemented the new ultraTB functionality into IPython. New
4746 * Implemented the new ultraTB functionality into IPython. New
4737 option: xcolors. This chooses color scheme. xmode now only selects
4747 option: xcolors. This chooses color scheme. xmode now only selects
4738 between Plain and Verbose. Better orthogonality.
4748 between Plain and Verbose. Better orthogonality.
4739
4749
4740 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4750 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4741 mode and color scheme for the exception handlers. Now it's
4751 mode and color scheme for the exception handlers. Now it's
4742 possible to have the verbose traceback with no coloring.
4752 possible to have the verbose traceback with no coloring.
4743
4753
4744 2001-11-23 Fernando Perez <fperez@colorado.edu>
4754 2001-11-23 Fernando Perez <fperez@colorado.edu>
4745
4755
4746 * Version 0.1.12 released, 0.1.13 opened.
4756 * Version 0.1.12 released, 0.1.13 opened.
4747
4757
4748 * Removed option to set auto-quote and auto-paren escapes by
4758 * Removed option to set auto-quote and auto-paren escapes by
4749 user. The chances of breaking valid syntax are just too high. If
4759 user. The chances of breaking valid syntax are just too high. If
4750 someone *really* wants, they can always dig into the code.
4760 someone *really* wants, they can always dig into the code.
4751
4761
4752 * Made prompt separators configurable.
4762 * Made prompt separators configurable.
4753
4763
4754 2001-11-22 Fernando Perez <fperez@colorado.edu>
4764 2001-11-22 Fernando Perez <fperez@colorado.edu>
4755
4765
4756 * Small bugfixes in many places.
4766 * Small bugfixes in many places.
4757
4767
4758 * Removed the MyCompleter class from ipplib. It seemed redundant
4768 * Removed the MyCompleter class from ipplib. It seemed redundant
4759 with the C-p,C-n history search functionality. Less code to
4769 with the C-p,C-n history search functionality. Less code to
4760 maintain.
4770 maintain.
4761
4771
4762 * Moved all the original ipython.py code into ipythonlib.py. Right
4772 * Moved all the original ipython.py code into ipythonlib.py. Right
4763 now it's just one big dump into a function called make_IPython, so
4773 now it's just one big dump into a function called make_IPython, so
4764 no real modularity has been gained. But at least it makes the
4774 no real modularity has been gained. But at least it makes the
4765 wrapper script tiny, and since ipythonlib is a module, it gets
4775 wrapper script tiny, and since ipythonlib is a module, it gets
4766 compiled and startup is much faster.
4776 compiled and startup is much faster.
4767
4777
4768 This is a reasobably 'deep' change, so we should test it for a
4778 This is a reasobably 'deep' change, so we should test it for a
4769 while without messing too much more with the code.
4779 while without messing too much more with the code.
4770
4780
4771 2001-11-21 Fernando Perez <fperez@colorado.edu>
4781 2001-11-21 Fernando Perez <fperez@colorado.edu>
4772
4782
4773 * Version 0.1.11 released, 0.1.12 opened for further work.
4783 * Version 0.1.11 released, 0.1.12 opened for further work.
4774
4784
4775 * Removed dependency on Itpl. It was only needed in one place. It
4785 * Removed dependency on Itpl. It was only needed in one place. It
4776 would be nice if this became part of python, though. It makes life
4786 would be nice if this became part of python, though. It makes life
4777 *a lot* easier in some cases.
4787 *a lot* easier in some cases.
4778
4788
4779 * Simplified the prefilter code a bit. Now all handlers are
4789 * Simplified the prefilter code a bit. Now all handlers are
4780 expected to explicitly return a value (at least a blank string).
4790 expected to explicitly return a value (at least a blank string).
4781
4791
4782 * Heavy edits in ipplib. Removed the help system altogether. Now
4792 * Heavy edits in ipplib. Removed the help system altogether. Now
4783 obj?/?? is used for inspecting objects, a magic @doc prints
4793 obj?/?? is used for inspecting objects, a magic @doc prints
4784 docstrings, and full-blown Python help is accessed via the 'help'
4794 docstrings, and full-blown Python help is accessed via the 'help'
4785 keyword. This cleans up a lot of code (less to maintain) and does
4795 keyword. This cleans up a lot of code (less to maintain) and does
4786 the job. Since 'help' is now a standard Python component, might as
4796 the job. Since 'help' is now a standard Python component, might as
4787 well use it and remove duplicate functionality.
4797 well use it and remove duplicate functionality.
4788
4798
4789 Also removed the option to use ipplib as a standalone program. By
4799 Also removed the option to use ipplib as a standalone program. By
4790 now it's too dependent on other parts of IPython to function alone.
4800 now it's too dependent on other parts of IPython to function alone.
4791
4801
4792 * Fixed bug in genutils.pager. It would crash if the pager was
4802 * Fixed bug in genutils.pager. It would crash if the pager was
4793 exited immediately after opening (broken pipe).
4803 exited immediately after opening (broken pipe).
4794
4804
4795 * Trimmed down the VerboseTB reporting a little. The header is
4805 * Trimmed down the VerboseTB reporting a little. The header is
4796 much shorter now and the repeated exception arguments at the end
4806 much shorter now and the repeated exception arguments at the end
4797 have been removed. For interactive use the old header seemed a bit
4807 have been removed. For interactive use the old header seemed a bit
4798 excessive.
4808 excessive.
4799
4809
4800 * Fixed small bug in output of @whos for variables with multi-word
4810 * Fixed small bug in output of @whos for variables with multi-word
4801 types (only first word was displayed).
4811 types (only first word was displayed).
4802
4812
4803 2001-11-17 Fernando Perez <fperez@colorado.edu>
4813 2001-11-17 Fernando Perez <fperez@colorado.edu>
4804
4814
4805 * Version 0.1.10 released, 0.1.11 opened for further work.
4815 * Version 0.1.10 released, 0.1.11 opened for further work.
4806
4816
4807 * Modified dirs and friends. dirs now *returns* the stack (not
4817 * Modified dirs and friends. dirs now *returns* the stack (not
4808 prints), so one can manipulate it as a variable. Convenient to
4818 prints), so one can manipulate it as a variable. Convenient to
4809 travel along many directories.
4819 travel along many directories.
4810
4820
4811 * Fixed bug in magic_pdef: would only work with functions with
4821 * Fixed bug in magic_pdef: would only work with functions with
4812 arguments with default values.
4822 arguments with default values.
4813
4823
4814 2001-11-14 Fernando Perez <fperez@colorado.edu>
4824 2001-11-14 Fernando Perez <fperez@colorado.edu>
4815
4825
4816 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4826 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4817 example with IPython. Various other minor fixes and cleanups.
4827 example with IPython. Various other minor fixes and cleanups.
4818
4828
4819 * Version 0.1.9 released, 0.1.10 opened for further work.
4829 * Version 0.1.9 released, 0.1.10 opened for further work.
4820
4830
4821 * Added sys.path to the list of directories searched in the
4831 * Added sys.path to the list of directories searched in the
4822 execfile= option. It used to be the current directory and the
4832 execfile= option. It used to be the current directory and the
4823 user's IPYTHONDIR only.
4833 user's IPYTHONDIR only.
4824
4834
4825 2001-11-13 Fernando Perez <fperez@colorado.edu>
4835 2001-11-13 Fernando Perez <fperez@colorado.edu>
4826
4836
4827 * Reinstated the raw_input/prefilter separation that Janko had
4837 * Reinstated the raw_input/prefilter separation that Janko had
4828 initially. This gives a more convenient setup for extending the
4838 initially. This gives a more convenient setup for extending the
4829 pre-processor from the outside: raw_input always gets a string,
4839 pre-processor from the outside: raw_input always gets a string,
4830 and prefilter has to process it. We can then redefine prefilter
4840 and prefilter has to process it. We can then redefine prefilter
4831 from the outside and implement extensions for special
4841 from the outside and implement extensions for special
4832 purposes.
4842 purposes.
4833
4843
4834 Today I got one for inputting PhysicalQuantity objects
4844 Today I got one for inputting PhysicalQuantity objects
4835 (from Scientific) without needing any function calls at
4845 (from Scientific) without needing any function calls at
4836 all. Extremely convenient, and it's all done as a user-level
4846 all. Extremely convenient, and it's all done as a user-level
4837 extension (no IPython code was touched). Now instead of:
4847 extension (no IPython code was touched). Now instead of:
4838 a = PhysicalQuantity(4.2,'m/s**2')
4848 a = PhysicalQuantity(4.2,'m/s**2')
4839 one can simply say
4849 one can simply say
4840 a = 4.2 m/s**2
4850 a = 4.2 m/s**2
4841 or even
4851 or even
4842 a = 4.2 m/s^2
4852 a = 4.2 m/s^2
4843
4853
4844 I use this, but it's also a proof of concept: IPython really is
4854 I use this, but it's also a proof of concept: IPython really is
4845 fully user-extensible, even at the level of the parsing of the
4855 fully user-extensible, even at the level of the parsing of the
4846 command line. It's not trivial, but it's perfectly doable.
4856 command line. It's not trivial, but it's perfectly doable.
4847
4857
4848 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4858 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4849 the problem of modules being loaded in the inverse order in which
4859 the problem of modules being loaded in the inverse order in which
4850 they were defined in
4860 they were defined in
4851
4861
4852 * Version 0.1.8 released, 0.1.9 opened for further work.
4862 * Version 0.1.8 released, 0.1.9 opened for further work.
4853
4863
4854 * Added magics pdef, source and file. They respectively show the
4864 * Added magics pdef, source and file. They respectively show the
4855 definition line ('prototype' in C), source code and full python
4865 definition line ('prototype' in C), source code and full python
4856 file for any callable object. The object inspector oinfo uses
4866 file for any callable object. The object inspector oinfo uses
4857 these to show the same information.
4867 these to show the same information.
4858
4868
4859 * Version 0.1.7 released, 0.1.8 opened for further work.
4869 * Version 0.1.7 released, 0.1.8 opened for further work.
4860
4870
4861 * Separated all the magic functions into a class called Magic. The
4871 * Separated all the magic functions into a class called Magic. The
4862 InteractiveShell class was becoming too big for Xemacs to handle
4872 InteractiveShell class was becoming too big for Xemacs to handle
4863 (de-indenting a line would lock it up for 10 seconds while it
4873 (de-indenting a line would lock it up for 10 seconds while it
4864 backtracked on the whole class!)
4874 backtracked on the whole class!)
4865
4875
4866 FIXME: didn't work. It can be done, but right now namespaces are
4876 FIXME: didn't work. It can be done, but right now namespaces are
4867 all messed up. Do it later (reverted it for now, so at least
4877 all messed up. Do it later (reverted it for now, so at least
4868 everything works as before).
4878 everything works as before).
4869
4879
4870 * Got the object introspection system (magic_oinfo) working! I
4880 * Got the object introspection system (magic_oinfo) working! I
4871 think this is pretty much ready for release to Janko, so he can
4881 think this is pretty much ready for release to Janko, so he can
4872 test it for a while and then announce it. Pretty much 100% of what
4882 test it for a while and then announce it. Pretty much 100% of what
4873 I wanted for the 'phase 1' release is ready. Happy, tired.
4883 I wanted for the 'phase 1' release is ready. Happy, tired.
4874
4884
4875 2001-11-12 Fernando Perez <fperez@colorado.edu>
4885 2001-11-12 Fernando Perez <fperez@colorado.edu>
4876
4886
4877 * Version 0.1.6 released, 0.1.7 opened for further work.
4887 * Version 0.1.6 released, 0.1.7 opened for further work.
4878
4888
4879 * Fixed bug in printing: it used to test for truth before
4889 * Fixed bug in printing: it used to test for truth before
4880 printing, so 0 wouldn't print. Now checks for None.
4890 printing, so 0 wouldn't print. Now checks for None.
4881
4891
4882 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4892 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4883 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4893 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4884 reaches by hand into the outputcache. Think of a better way to do
4894 reaches by hand into the outputcache. Think of a better way to do
4885 this later.
4895 this later.
4886
4896
4887 * Various small fixes thanks to Nathan's comments.
4897 * Various small fixes thanks to Nathan's comments.
4888
4898
4889 * Changed magic_pprint to magic_Pprint. This way it doesn't
4899 * Changed magic_pprint to magic_Pprint. This way it doesn't
4890 collide with pprint() and the name is consistent with the command
4900 collide with pprint() and the name is consistent with the command
4891 line option.
4901 line option.
4892
4902
4893 * Changed prompt counter behavior to be fully like
4903 * Changed prompt counter behavior to be fully like
4894 Mathematica's. That is, even input that doesn't return a result
4904 Mathematica's. That is, even input that doesn't return a result
4895 raises the prompt counter. The old behavior was kind of confusing
4905 raises the prompt counter. The old behavior was kind of confusing
4896 (getting the same prompt number several times if the operation
4906 (getting the same prompt number several times if the operation
4897 didn't return a result).
4907 didn't return a result).
4898
4908
4899 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4909 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4900
4910
4901 * Fixed -Classic mode (wasn't working anymore).
4911 * Fixed -Classic mode (wasn't working anymore).
4902
4912
4903 * Added colored prompts using Nathan's new code. Colors are
4913 * Added colored prompts using Nathan's new code. Colors are
4904 currently hardwired, they can be user-configurable. For
4914 currently hardwired, they can be user-configurable. For
4905 developers, they can be chosen in file ipythonlib.py, at the
4915 developers, they can be chosen in file ipythonlib.py, at the
4906 beginning of the CachedOutput class def.
4916 beginning of the CachedOutput class def.
4907
4917
4908 2001-11-11 Fernando Perez <fperez@colorado.edu>
4918 2001-11-11 Fernando Perez <fperez@colorado.edu>
4909
4919
4910 * Version 0.1.5 released, 0.1.6 opened for further work.
4920 * Version 0.1.5 released, 0.1.6 opened for further work.
4911
4921
4912 * Changed magic_env to *return* the environment as a dict (not to
4922 * Changed magic_env to *return* the environment as a dict (not to
4913 print it). This way it prints, but it can also be processed.
4923 print it). This way it prints, but it can also be processed.
4914
4924
4915 * Added Verbose exception reporting to interactive
4925 * Added Verbose exception reporting to interactive
4916 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4926 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4917 traceback. Had to make some changes to the ultraTB file. This is
4927 traceback. Had to make some changes to the ultraTB file. This is
4918 probably the last 'big' thing in my mental todo list. This ties
4928 probably the last 'big' thing in my mental todo list. This ties
4919 in with the next entry:
4929 in with the next entry:
4920
4930
4921 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4931 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4922 has to specify is Plain, Color or Verbose for all exception
4932 has to specify is Plain, Color or Verbose for all exception
4923 handling.
4933 handling.
4924
4934
4925 * Removed ShellServices option. All this can really be done via
4935 * Removed ShellServices option. All this can really be done via
4926 the magic system. It's easier to extend, cleaner and has automatic
4936 the magic system. It's easier to extend, cleaner and has automatic
4927 namespace protection and documentation.
4937 namespace protection and documentation.
4928
4938
4929 2001-11-09 Fernando Perez <fperez@colorado.edu>
4939 2001-11-09 Fernando Perez <fperez@colorado.edu>
4930
4940
4931 * Fixed bug in output cache flushing (missing parameter to
4941 * Fixed bug in output cache flushing (missing parameter to
4932 __init__). Other small bugs fixed (found using pychecker).
4942 __init__). Other small bugs fixed (found using pychecker).
4933
4943
4934 * Version 0.1.4 opened for bugfixing.
4944 * Version 0.1.4 opened for bugfixing.
4935
4945
4936 2001-11-07 Fernando Perez <fperez@colorado.edu>
4946 2001-11-07 Fernando Perez <fperez@colorado.edu>
4937
4947
4938 * Version 0.1.3 released, mainly because of the raw_input bug.
4948 * Version 0.1.3 released, mainly because of the raw_input bug.
4939
4949
4940 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4950 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4941 and when testing for whether things were callable, a call could
4951 and when testing for whether things were callable, a call could
4942 actually be made to certain functions. They would get called again
4952 actually be made to certain functions. They would get called again
4943 once 'really' executed, with a resulting double call. A disaster
4953 once 'really' executed, with a resulting double call. A disaster
4944 in many cases (list.reverse() would never work!).
4954 in many cases (list.reverse() would never work!).
4945
4955
4946 * Removed prefilter() function, moved its code to raw_input (which
4956 * Removed prefilter() function, moved its code to raw_input (which
4947 after all was just a near-empty caller for prefilter). This saves
4957 after all was just a near-empty caller for prefilter). This saves
4948 a function call on every prompt, and simplifies the class a tiny bit.
4958 a function call on every prompt, and simplifies the class a tiny bit.
4949
4959
4950 * Fix _ip to __ip name in magic example file.
4960 * Fix _ip to __ip name in magic example file.
4951
4961
4952 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4962 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4953 work with non-gnu versions of tar.
4963 work with non-gnu versions of tar.
4954
4964
4955 2001-11-06 Fernando Perez <fperez@colorado.edu>
4965 2001-11-06 Fernando Perez <fperez@colorado.edu>
4956
4966
4957 * Version 0.1.2. Just to keep track of the recent changes.
4967 * Version 0.1.2. Just to keep track of the recent changes.
4958
4968
4959 * Fixed nasty bug in output prompt routine. It used to check 'if
4969 * Fixed nasty bug in output prompt routine. It used to check 'if
4960 arg != None...'. Problem is, this fails if arg implements a
4970 arg != None...'. Problem is, this fails if arg implements a
4961 special comparison (__cmp__) which disallows comparing to
4971 special comparison (__cmp__) which disallows comparing to
4962 None. Found it when trying to use the PhysicalQuantity module from
4972 None. Found it when trying to use the PhysicalQuantity module from
4963 ScientificPython.
4973 ScientificPython.
4964
4974
4965 2001-11-05 Fernando Perez <fperez@colorado.edu>
4975 2001-11-05 Fernando Perez <fperez@colorado.edu>
4966
4976
4967 * Also added dirs. Now the pushd/popd/dirs family functions
4977 * Also added dirs. Now the pushd/popd/dirs family functions
4968 basically like the shell, with the added convenience of going home
4978 basically like the shell, with the added convenience of going home
4969 when called with no args.
4979 when called with no args.
4970
4980
4971 * pushd/popd slightly modified to mimic shell behavior more
4981 * pushd/popd slightly modified to mimic shell behavior more
4972 closely.
4982 closely.
4973
4983
4974 * Added env,pushd,popd from ShellServices as magic functions. I
4984 * Added env,pushd,popd from ShellServices as magic functions. I
4975 think the cleanest will be to port all desired functions from
4985 think the cleanest will be to port all desired functions from
4976 ShellServices as magics and remove ShellServices altogether. This
4986 ShellServices as magics and remove ShellServices altogether. This
4977 will provide a single, clean way of adding functionality
4987 will provide a single, clean way of adding functionality
4978 (shell-type or otherwise) to IP.
4988 (shell-type or otherwise) to IP.
4979
4989
4980 2001-11-04 Fernando Perez <fperez@colorado.edu>
4990 2001-11-04 Fernando Perez <fperez@colorado.edu>
4981
4991
4982 * Added .ipython/ directory to sys.path. This way users can keep
4992 * Added .ipython/ directory to sys.path. This way users can keep
4983 customizations there and access them via import.
4993 customizations there and access them via import.
4984
4994
4985 2001-11-03 Fernando Perez <fperez@colorado.edu>
4995 2001-11-03 Fernando Perez <fperez@colorado.edu>
4986
4996
4987 * Opened version 0.1.1 for new changes.
4997 * Opened version 0.1.1 for new changes.
4988
4998
4989 * Changed version number to 0.1.0: first 'public' release, sent to
4999 * Changed version number to 0.1.0: first 'public' release, sent to
4990 Nathan and Janko.
5000 Nathan and Janko.
4991
5001
4992 * Lots of small fixes and tweaks.
5002 * Lots of small fixes and tweaks.
4993
5003
4994 * Minor changes to whos format. Now strings are shown, snipped if
5004 * Minor changes to whos format. Now strings are shown, snipped if
4995 too long.
5005 too long.
4996
5006
4997 * Changed ShellServices to work on __main__ so they show up in @who
5007 * Changed ShellServices to work on __main__ so they show up in @who
4998
5008
4999 * Help also works with ? at the end of a line:
5009 * Help also works with ? at the end of a line:
5000 ?sin and sin?
5010 ?sin and sin?
5001 both produce the same effect. This is nice, as often I use the
5011 both produce the same effect. This is nice, as often I use the
5002 tab-complete to find the name of a method, but I used to then have
5012 tab-complete to find the name of a method, but I used to then have
5003 to go to the beginning of the line to put a ? if I wanted more
5013 to go to the beginning of the line to put a ? if I wanted more
5004 info. Now I can just add the ? and hit return. Convenient.
5014 info. Now I can just add the ? and hit return. Convenient.
5005
5015
5006 2001-11-02 Fernando Perez <fperez@colorado.edu>
5016 2001-11-02 Fernando Perez <fperez@colorado.edu>
5007
5017
5008 * Python version check (>=2.1) added.
5018 * Python version check (>=2.1) added.
5009
5019
5010 * Added LazyPython documentation. At this point the docs are quite
5020 * Added LazyPython documentation. At this point the docs are quite
5011 a mess. A cleanup is in order.
5021 a mess. A cleanup is in order.
5012
5022
5013 * Auto-installer created. For some bizarre reason, the zipfiles
5023 * Auto-installer created. For some bizarre reason, the zipfiles
5014 module isn't working on my system. So I made a tar version
5024 module isn't working on my system. So I made a tar version
5015 (hopefully the command line options in various systems won't kill
5025 (hopefully the command line options in various systems won't kill
5016 me).
5026 me).
5017
5027
5018 * Fixes to Struct in genutils. Now all dictionary-like methods are
5028 * Fixes to Struct in genutils. Now all dictionary-like methods are
5019 protected (reasonably).
5029 protected (reasonably).
5020
5030
5021 * Added pager function to genutils and changed ? to print usage
5031 * Added pager function to genutils and changed ? to print usage
5022 note through it (it was too long).
5032 note through it (it was too long).
5023
5033
5024 * Added the LazyPython functionality. Works great! I changed the
5034 * Added the LazyPython functionality. Works great! I changed the
5025 auto-quote escape to ';', it's on home row and next to '. But
5035 auto-quote escape to ';', it's on home row and next to '. But
5026 both auto-quote and auto-paren (still /) escapes are command-line
5036 both auto-quote and auto-paren (still /) escapes are command-line
5027 parameters.
5037 parameters.
5028
5038
5029
5039
5030 2001-11-01 Fernando Perez <fperez@colorado.edu>
5040 2001-11-01 Fernando Perez <fperez@colorado.edu>
5031
5041
5032 * Version changed to 0.0.7. Fairly large change: configuration now
5042 * Version changed to 0.0.7. Fairly large change: configuration now
5033 is all stored in a directory, by default .ipython. There, all
5043 is all stored in a directory, by default .ipython. There, all
5034 config files have normal looking names (not .names)
5044 config files have normal looking names (not .names)
5035
5045
5036 * Version 0.0.6 Released first to Lucas and Archie as a test
5046 * Version 0.0.6 Released first to Lucas and Archie as a test
5037 run. Since it's the first 'semi-public' release, change version to
5047 run. Since it's the first 'semi-public' release, change version to
5038 > 0.0.6 for any changes now.
5048 > 0.0.6 for any changes now.
5039
5049
5040 * Stuff I had put in the ipplib.py changelog:
5050 * Stuff I had put in the ipplib.py changelog:
5041
5051
5042 Changes to InteractiveShell:
5052 Changes to InteractiveShell:
5043
5053
5044 - Made the usage message a parameter.
5054 - Made the usage message a parameter.
5045
5055
5046 - Require the name of the shell variable to be given. It's a bit
5056 - Require the name of the shell variable to be given. It's a bit
5047 of a hack, but allows the name 'shell' not to be hardwire in the
5057 of a hack, but allows the name 'shell' not to be hardwire in the
5048 magic (@) handler, which is problematic b/c it requires
5058 magic (@) handler, which is problematic b/c it requires
5049 polluting the global namespace with 'shell'. This in turn is
5059 polluting the global namespace with 'shell'. This in turn is
5050 fragile: if a user redefines a variable called shell, things
5060 fragile: if a user redefines a variable called shell, things
5051 break.
5061 break.
5052
5062
5053 - magic @: all functions available through @ need to be defined
5063 - magic @: all functions available through @ need to be defined
5054 as magic_<name>, even though they can be called simply as
5064 as magic_<name>, even though they can be called simply as
5055 @<name>. This allows the special command @magic to gather
5065 @<name>. This allows the special command @magic to gather
5056 information automatically about all existing magic functions,
5066 information automatically about all existing magic functions,
5057 even if they are run-time user extensions, by parsing the shell
5067 even if they are run-time user extensions, by parsing the shell
5058 instance __dict__ looking for special magic_ names.
5068 instance __dict__ looking for special magic_ names.
5059
5069
5060 - mainloop: added *two* local namespace parameters. This allows
5070 - mainloop: added *two* local namespace parameters. This allows
5061 the class to differentiate between parameters which were there
5071 the class to differentiate between parameters which were there
5062 before and after command line initialization was processed. This
5072 before and after command line initialization was processed. This
5063 way, later @who can show things loaded at startup by the
5073 way, later @who can show things loaded at startup by the
5064 user. This trick was necessary to make session saving/reloading
5074 user. This trick was necessary to make session saving/reloading
5065 really work: ideally after saving/exiting/reloading a session,
5075 really work: ideally after saving/exiting/reloading a session,
5066 *everythin* should look the same, including the output of @who. I
5076 *everythin* should look the same, including the output of @who. I
5067 was only able to make this work with this double namespace
5077 was only able to make this work with this double namespace
5068 trick.
5078 trick.
5069
5079
5070 - added a header to the logfile which allows (almost) full
5080 - added a header to the logfile which allows (almost) full
5071 session restoring.
5081 session restoring.
5072
5082
5073 - prepend lines beginning with @ or !, with a and log
5083 - prepend lines beginning with @ or !, with a and log
5074 them. Why? !lines: may be useful to know what you did @lines:
5084 them. Why? !lines: may be useful to know what you did @lines:
5075 they may affect session state. So when restoring a session, at
5085 they may affect session state. So when restoring a session, at
5076 least inform the user of their presence. I couldn't quite get
5086 least inform the user of their presence. I couldn't quite get
5077 them to properly re-execute, but at least the user is warned.
5087 them to properly re-execute, but at least the user is warned.
5078
5088
5079 * Started ChangeLog.
5089 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now