##// END OF EJS Templates
ipapi decorators ashook, asmagic; ipapi.options() for __IP.rc access
vivainio -
Show More
@@ -1,78 +1,134 b''
1 ''' IPython customization API
1 ''' IPython customization API
2
2
3 Your one-stop module for configuring ipython
3 Your one-stop module for configuring & extending ipython
4
4
5 This is experimental, use at your own risk.
5 The API will probably break when ipython 1.0 is released, but so
6 will the other configuration method (rc files).
6
7
7 All names prefixed by underscores are for internal use, not part
8 All names prefixed by underscores are for internal use, not part
8 of the public api.
9 of the public api.
9
10
10 No formal doc yet, here's an example that you can just put
11 Below is an example that you can just put to a module and import from ipython.
11 to a module and import from ipython.
12
13 A good practice is to install the config script below as e.g.
14
15 ~/.ipython/my_private_conf.py
16
17 And do
18
19 import_mod my_private_conf
20
21 in ~/.ipython/ipythonrc
22
23 That way the module is imported at startup and you can have all your
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
25 stuff) in there.
12
26
13 -----------------------------------------------
27 -----------------------------------------------
14 import IPython.ipapi as ip
28 import IPython.ipapi as ip
15
29
16 def ankka_f(self, arg):
30 def ankka_f(self, arg):
17 print "Ankka",self,"says uppercase:",arg.upper()
31 print "Ankka",self,"says uppercase:",arg.upper()
18
32
19 ip.expose_magic("ankka",ankka_f)
33 ip.expose_magic("ankka",ankka_f)
20
34
21 ip.magic('alias sayhi echo "Testing, hi ok"')
35 ip.magic('alias sayhi echo "Testing, hi ok"')
22 ip.magic('alias helloworld echo "Hello world"')
36 ip.magic('alias helloworld echo "Hello world"')
23 ip.system('pwd')
37 ip.system('pwd')
24
38
25 ip.ex('import re')
39 ip.ex('import re')
26 ip.ex("""
40 ip.ex("""
27 def funcci(a,b):
41 def funcci(a,b):
28 print a+b
42 print a+b
29 print funcci(3,4)
43 print funcci(3,4)
30 """)
44 """)
31 ip.ex("funcci(348,9)")
45 ip.ex("funcci(348,9)")
32
46
33 def jed_editor(self,filename, linenum=None):
47 def jed_editor(self,filename, linenum=None):
34 print "Calling my own editor, jed ... via hook!"
48 print "Calling my own editor, jed ... via hook!"
35 import os
49 import os
36 if linenum is None: linenum = 0
50 if linenum is None: linenum = 0
37 os.system('jed +%d %s' % (linenum, filename))
51 os.system('jed +%d %s' % (linenum, filename))
38 print "exiting jed"
52 print "exiting jed"
39
53
40 ip.set_hook('editor',jed_editor)
54 ip.set_hook('editor',jed_editor)
41 print "done!"
42
43 '''
44
55
56 o = ip.options()
57 o.autocall = 2 # FULL autocall mode
45
58
59 print "done!"
46
60
61 '''
47
62
48 def _init_with_shell(ip):
63 def _init_with_shell(ip):
49 global magic
64 global magic
50 magic = ip.ipmagic
65 magic = ip.ipmagic
51 global system
66 global system
52 system = ip.ipsystem
67 system = ip.ipsystem
53 global set_hook
68 global set_hook
54 set_hook = ip.set_hook
69 set_hook = ip.set_hook
70
55 global __IP
71 global __IP
56 __IP = ip
72 __IP = ip
57
73
74 def options():
75 """ All configurable variables """
76 return __IP.rc
77
58 def user_ns():
78 def user_ns():
59 return __IP.user_ns
79 return __IP.user_ns
60
80
61 def expose_magic(magicname, func):
81 def expose_magic(magicname, func):
62 ''' Expose own function as magic function for ipython
82 ''' Expose own function as magic function for ipython
63
83
64 def foo_impl(self,parameter_s=''):
84 def foo_impl(self,parameter_s=''):
65 """My very own magic!. (Use docstrings, IPython reads them)."""
85 """My very own magic!. (Use docstrings, IPython reads them)."""
66 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
86 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
67 print 'The self object is:',self
87 print 'The self object is:',self
68
88
69 ipapi.expose_magic("foo",foo_impl)
89 ipapi.expose_magic("foo",foo_impl)
70 '''
90 '''
71
91
72 from IPython import Magic
92 from IPython import Magic
73
93
74 setattr(Magic.Magic, "magic_" + magicname, func)
94 setattr(Magic.Magic, "magic_" + magicname, func)
75
95
96 class asmagic:
97 """ Decorator for exposing magics in a friendly 2.4 decorator form
98
99 @ip.asmagic("foo")
100 def f(self,arg):
101 pring "arg given:",arg
102
103 After this, %foo is a magic function.
104 """
105
106 def __init__(self,magicname):
107 self.name = magicname
108
109 def __call__(self,f):
110 expose_magic(self.name, f)
111 return f
112
113 class ashook:
114 """ Decorator for exposing magics in a friendly 2.4 decorator form
115
116 @ip.ashook("editor")
117 def jed_editor(self,filename, linenum=None):
118 import os
119 if linenum is None: linenum = 0
120 os.system('jed +%d %s' % (linenum, filename))
121
122 """
123
124 def __init__(self,name):
125 self.name = name
126
127 def __call__(self,f):
128 set_hook(self.name, f)
129 return f
130
131
76 def ex(cmd):
132 def ex(cmd):
77 """ Execute a normal python statement """
133 """ Execute a normal python statement """
78 exec cmd in user_ns() No newline at end of file
134 exec cmd in user_ns()
@@ -1,2198 +1,2198 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 1016 2006-01-14 00:54:23Z vivainio $
9 $Id: iplib.py 1017 2006-01-14 09:46:45Z 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 # first thing: introduce ourselves to IPython.ipapi which is uncallable
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object. Uninitialized state is ok
195 # before it knows an InteractiveShell object.
196 IPython.ipapi._init_with_shell(self)
196 IPython.ipapi._init_with_shell(self)
197
197
198 # some minimal strict typechecks. For some core data structures, I
198 # some minimal strict typechecks. For some core data structures, I
199 # want actual basic python types, not just anything that looks like
199 # want actual basic python types, not just anything that looks like
200 # one. This is especially true for namespaces.
200 # one. This is especially true for namespaces.
201 for ns in (user_ns,user_global_ns):
201 for ns in (user_ns,user_global_ns):
202 if ns is not None and type(ns) != types.DictType:
202 if ns is not None and type(ns) != types.DictType:
203 raise TypeError,'namespace must be a dictionary'
203 raise TypeError,'namespace must be a dictionary'
204
204
205 # Job manager (for jobs run as background threads)
205 # Job manager (for jobs run as background threads)
206 self.jobs = BackgroundJobManager()
206 self.jobs = BackgroundJobManager()
207
207
208 # track which builtins we add, so we can clean up later
208 # track which builtins we add, so we can clean up later
209 self.builtins_added = {}
209 self.builtins_added = {}
210 # This method will add the necessary builtins for operation, but
210 # This method will add the necessary builtins for operation, but
211 # tracking what it did via the builtins_added dict.
211 # tracking what it did via the builtins_added dict.
212 self.add_builtins()
212 self.add_builtins()
213
213
214 # Do the intuitively correct thing for quit/exit: we remove the
214 # Do the intuitively correct thing for quit/exit: we remove the
215 # builtins if they exist, and our own magics will deal with this
215 # builtins if they exist, and our own magics will deal with this
216 try:
216 try:
217 del __builtin__.exit, __builtin__.quit
217 del __builtin__.exit, __builtin__.quit
218 except AttributeError:
218 except AttributeError:
219 pass
219 pass
220
220
221 # Store the actual shell's name
221 # Store the actual shell's name
222 self.name = name
222 self.name = name
223
223
224 # We need to know whether the instance is meant for embedding, since
224 # We need to know whether the instance is meant for embedding, since
225 # global/local namespaces need to be handled differently in that case
225 # global/local namespaces need to be handled differently in that case
226 self.embedded = embedded
226 self.embedded = embedded
227
227
228 # command compiler
228 # command compiler
229 self.compile = codeop.CommandCompiler()
229 self.compile = codeop.CommandCompiler()
230
230
231 # User input buffer
231 # User input buffer
232 self.buffer = []
232 self.buffer = []
233
233
234 # Default name given in compilation of code
234 # Default name given in compilation of code
235 self.filename = '<ipython console>'
235 self.filename = '<ipython console>'
236
236
237 # Make an empty namespace, which extension writers can rely on both
237 # Make an empty namespace, which extension writers can rely on both
238 # existing and NEVER being used by ipython itself. This gives them a
238 # existing and NEVER being used by ipython itself. This gives them a
239 # convenient location for storing additional information and state
239 # convenient location for storing additional information and state
240 # their extensions may require, without fear of collisions with other
240 # their extensions may require, without fear of collisions with other
241 # ipython names that may develop later.
241 # ipython names that may develop later.
242 self.meta = Bunch()
242 self.meta = Bunch()
243
243
244 # Create the namespace where the user will operate. user_ns is
244 # Create the namespace where the user will operate. user_ns is
245 # normally the only one used, and it is passed to the exec calls as
245 # normally the only one used, and it is passed to the exec calls as
246 # the locals argument. But we do carry a user_global_ns namespace
246 # the locals argument. But we do carry a user_global_ns namespace
247 # given as the exec 'globals' argument, This is useful in embedding
247 # given as the exec 'globals' argument, This is useful in embedding
248 # situations where the ipython shell opens in a context where the
248 # situations where the ipython shell opens in a context where the
249 # distinction between locals and globals is meaningful.
249 # distinction between locals and globals is meaningful.
250
250
251 # FIXME. For some strange reason, __builtins__ is showing up at user
251 # FIXME. For some strange reason, __builtins__ is showing up at user
252 # level as a dict instead of a module. This is a manual fix, but I
252 # level as a dict instead of a module. This is a manual fix, but I
253 # should really track down where the problem is coming from. Alex
253 # should really track down where the problem is coming from. Alex
254 # Schmolck reported this problem first.
254 # Schmolck reported this problem first.
255
255
256 # A useful post by Alex Martelli on this topic:
256 # A useful post by Alex Martelli on this topic:
257 # Re: inconsistent value from __builtins__
257 # Re: inconsistent value from __builtins__
258 # Von: Alex Martelli <aleaxit@yahoo.com>
258 # Von: Alex Martelli <aleaxit@yahoo.com>
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
260 # Gruppen: comp.lang.python
260 # Gruppen: comp.lang.python
261
261
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
264 # > <type 'dict'>
264 # > <type 'dict'>
265 # > >>> print type(__builtins__)
265 # > >>> print type(__builtins__)
266 # > <type 'module'>
266 # > <type 'module'>
267 # > Is this difference in return value intentional?
267 # > Is this difference in return value intentional?
268
268
269 # Well, it's documented that '__builtins__' can be either a dictionary
269 # Well, it's documented that '__builtins__' can be either a dictionary
270 # or a module, and it's been that way for a long time. Whether it's
270 # or a module, and it's been that way for a long time. Whether it's
271 # intentional (or sensible), I don't know. In any case, the idea is
271 # intentional (or sensible), I don't know. In any case, the idea is
272 # that if you need to access the built-in namespace directly, you
272 # that if you need to access the built-in namespace directly, you
273 # should start with "import __builtin__" (note, no 's') which will
273 # should start with "import __builtin__" (note, no 's') which will
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
275
275
276 if user_ns is None:
276 if user_ns is None:
277 # Set __name__ to __main__ to better match the behavior of the
277 # Set __name__ to __main__ to better match the behavior of the
278 # normal interpreter.
278 # normal interpreter.
279 user_ns = {'__name__' :'__main__',
279 user_ns = {'__name__' :'__main__',
280 '__builtins__' : __builtin__,
280 '__builtins__' : __builtin__,
281 }
281 }
282
282
283 if user_global_ns is None:
283 if user_global_ns is None:
284 user_global_ns = {}
284 user_global_ns = {}
285
285
286 # Assign namespaces
286 # Assign namespaces
287 # This is the namespace where all normal user variables live
287 # This is the namespace where all normal user variables live
288 self.user_ns = user_ns
288 self.user_ns = user_ns
289 # Embedded instances require a separate namespace for globals.
289 # Embedded instances require a separate namespace for globals.
290 # Normally this one is unused by non-embedded instances.
290 # Normally this one is unused by non-embedded instances.
291 self.user_global_ns = user_global_ns
291 self.user_global_ns = user_global_ns
292 # A namespace to keep track of internal data structures to prevent
292 # A namespace to keep track of internal data structures to prevent
293 # them from cluttering user-visible stuff. Will be updated later
293 # them from cluttering user-visible stuff. Will be updated later
294 self.internal_ns = {}
294 self.internal_ns = {}
295
295
296 # Namespace of system aliases. Each entry in the alias
296 # Namespace of system aliases. Each entry in the alias
297 # table must be a 2-tuple of the form (N,name), where N is the number
297 # table must be a 2-tuple of the form (N,name), where N is the number
298 # of positional arguments of the alias.
298 # of positional arguments of the alias.
299 self.alias_table = {}
299 self.alias_table = {}
300
300
301 # A table holding all the namespaces IPython deals with, so that
301 # A table holding all the namespaces IPython deals with, so that
302 # introspection facilities can search easily.
302 # introspection facilities can search easily.
303 self.ns_table = {'user':user_ns,
303 self.ns_table = {'user':user_ns,
304 'user_global':user_global_ns,
304 'user_global':user_global_ns,
305 'alias':self.alias_table,
305 'alias':self.alias_table,
306 'internal':self.internal_ns,
306 'internal':self.internal_ns,
307 'builtin':__builtin__.__dict__
307 'builtin':__builtin__.__dict__
308 }
308 }
309
309
310 # The user namespace MUST have a pointer to the shell itself.
310 # The user namespace MUST have a pointer to the shell itself.
311 self.user_ns[name] = self
311 self.user_ns[name] = self
312
312
313 # We need to insert into sys.modules something that looks like a
313 # We need to insert into sys.modules something that looks like a
314 # module but which accesses the IPython namespace, for shelve and
314 # module but which accesses the IPython namespace, for shelve and
315 # pickle to work interactively. Normally they rely on getting
315 # pickle to work interactively. Normally they rely on getting
316 # everything out of __main__, but for embedding purposes each IPython
316 # everything out of __main__, but for embedding purposes each IPython
317 # instance has its own private namespace, so we can't go shoving
317 # instance has its own private namespace, so we can't go shoving
318 # everything into __main__.
318 # everything into __main__.
319
319
320 # note, however, that we should only do this for non-embedded
320 # note, however, that we should only do this for non-embedded
321 # ipythons, which really mimic the __main__.__dict__ with their own
321 # ipythons, which really mimic the __main__.__dict__ with their own
322 # namespace. Embedded instances, on the other hand, should not do
322 # namespace. Embedded instances, on the other hand, should not do
323 # this because they need to manage the user local/global namespaces
323 # this because they need to manage the user local/global namespaces
324 # only, but they live within a 'normal' __main__ (meaning, they
324 # only, but they live within a 'normal' __main__ (meaning, they
325 # shouldn't overtake the execution environment of the script they're
325 # shouldn't overtake the execution environment of the script they're
326 # embedded in).
326 # embedded in).
327
327
328 if not embedded:
328 if not embedded:
329 try:
329 try:
330 main_name = self.user_ns['__name__']
330 main_name = self.user_ns['__name__']
331 except KeyError:
331 except KeyError:
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
333 else:
333 else:
334 #print "pickle hack in place" # dbg
334 #print "pickle hack in place" # dbg
335 #print 'main_name:',main_name # dbg
335 #print 'main_name:',main_name # dbg
336 sys.modules[main_name] = FakeModule(self.user_ns)
336 sys.modules[main_name] = FakeModule(self.user_ns)
337
337
338 # List of input with multi-line handling.
338 # List of input with multi-line handling.
339 # Fill its zero entry, user counter starts at 1
339 # Fill its zero entry, user counter starts at 1
340 self.input_hist = InputList(['\n'])
340 self.input_hist = InputList(['\n'])
341
341
342 # list of visited directories
342 # list of visited directories
343 try:
343 try:
344 self.dir_hist = [os.getcwd()]
344 self.dir_hist = [os.getcwd()]
345 except IOError, e:
345 except IOError, e:
346 self.dir_hist = []
346 self.dir_hist = []
347
347
348 # dict of output history
348 # dict of output history
349 self.output_hist = {}
349 self.output_hist = {}
350
350
351 # dict of things NOT to alias (keywords, builtins and some magics)
351 # dict of things NOT to alias (keywords, builtins and some magics)
352 no_alias = {}
352 no_alias = {}
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
354 for key in keyword.kwlist + no_alias_magics:
354 for key in keyword.kwlist + no_alias_magics:
355 no_alias[key] = 1
355 no_alias[key] = 1
356 no_alias.update(__builtin__.__dict__)
356 no_alias.update(__builtin__.__dict__)
357 self.no_alias = no_alias
357 self.no_alias = no_alias
358
358
359 # make global variables for user access to these
359 # make global variables for user access to these
360 self.user_ns['_ih'] = self.input_hist
360 self.user_ns['_ih'] = self.input_hist
361 self.user_ns['_oh'] = self.output_hist
361 self.user_ns['_oh'] = self.output_hist
362 self.user_ns['_dh'] = self.dir_hist
362 self.user_ns['_dh'] = self.dir_hist
363
363
364 # user aliases to input and output histories
364 # user aliases to input and output histories
365 self.user_ns['In'] = self.input_hist
365 self.user_ns['In'] = self.input_hist
366 self.user_ns['Out'] = self.output_hist
366 self.user_ns['Out'] = self.output_hist
367
367
368 # Object variable to store code object waiting execution. This is
368 # Object variable to store code object waiting execution. This is
369 # used mainly by the multithreaded shells, but it can come in handy in
369 # used mainly by the multithreaded shells, but it can come in handy in
370 # other situations. No need to use a Queue here, since it's a single
370 # other situations. No need to use a Queue here, since it's a single
371 # item which gets cleared once run.
371 # item which gets cleared once run.
372 self.code_to_run = None
372 self.code_to_run = None
373
373
374 # escapes for automatic behavior on the command line
374 # escapes for automatic behavior on the command line
375 self.ESC_SHELL = '!'
375 self.ESC_SHELL = '!'
376 self.ESC_HELP = '?'
376 self.ESC_HELP = '?'
377 self.ESC_MAGIC = '%'
377 self.ESC_MAGIC = '%'
378 self.ESC_QUOTE = ','
378 self.ESC_QUOTE = ','
379 self.ESC_QUOTE2 = ';'
379 self.ESC_QUOTE2 = ';'
380 self.ESC_PAREN = '/'
380 self.ESC_PAREN = '/'
381
381
382 # And their associated handlers
382 # And their associated handlers
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
386 self.ESC_MAGIC : self.handle_magic,
386 self.ESC_MAGIC : self.handle_magic,
387 self.ESC_HELP : self.handle_help,
387 self.ESC_HELP : self.handle_help,
388 self.ESC_SHELL : self.handle_shell_escape,
388 self.ESC_SHELL : self.handle_shell_escape,
389 }
389 }
390
390
391 # class initializations
391 # class initializations
392 Magic.__init__(self,self)
392 Magic.__init__(self,self)
393
393
394 # Python source parser/formatter for syntax highlighting
394 # Python source parser/formatter for syntax highlighting
395 pyformat = PyColorize.Parser().format
395 pyformat = PyColorize.Parser().format
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
397
397
398 # hooks holds pointers used for user-side customizations
398 # hooks holds pointers used for user-side customizations
399 self.hooks = Struct()
399 self.hooks = Struct()
400
400
401 # Set all default hooks, defined in the IPython.hooks module.
401 # Set all default hooks, defined in the IPython.hooks module.
402 hooks = IPython.hooks
402 hooks = IPython.hooks
403 for hook_name in hooks.__all__:
403 for hook_name in hooks.__all__:
404 self.set_hook(hook_name,getattr(hooks,hook_name))
404 self.set_hook(hook_name,getattr(hooks,hook_name))
405
405
406 # Flag to mark unconditional exit
406 # Flag to mark unconditional exit
407 self.exit_now = False
407 self.exit_now = False
408
408
409 self.usage_min = """\
409 self.usage_min = """\
410 An enhanced console for Python.
410 An enhanced console for Python.
411 Some of its features are:
411 Some of its features are:
412 - Readline support if the readline library is present.
412 - Readline support if the readline library is present.
413 - Tab completion in the local namespace.
413 - Tab completion in the local namespace.
414 - Logging of input, see command-line options.
414 - Logging of input, see command-line options.
415 - System shell escape via ! , eg !ls.
415 - System shell escape via ! , eg !ls.
416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
417 - Keeps track of locally defined variables via %who, %whos.
417 - Keeps track of locally defined variables via %who, %whos.
418 - Show object information with a ? eg ?x or x? (use ?? for more info).
418 - Show object information with a ? eg ?x or x? (use ?? for more info).
419 """
419 """
420 if usage: self.usage = usage
420 if usage: self.usage = usage
421 else: self.usage = self.usage_min
421 else: self.usage = self.usage_min
422
422
423 # Storage
423 # Storage
424 self.rc = rc # This will hold all configuration information
424 self.rc = rc # This will hold all configuration information
425 self.pager = 'less'
425 self.pager = 'less'
426 # temporary files used for various purposes. Deleted at exit.
426 # temporary files used for various purposes. Deleted at exit.
427 self.tempfiles = []
427 self.tempfiles = []
428
428
429 # Keep track of readline usage (later set by init_readline)
429 # Keep track of readline usage (later set by init_readline)
430 self.has_readline = False
430 self.has_readline = False
431
431
432 # template for logfile headers. It gets resolved at runtime by the
432 # template for logfile headers. It gets resolved at runtime by the
433 # logstart method.
433 # logstart method.
434 self.loghead_tpl = \
434 self.loghead_tpl = \
435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
437 #log# opts = %s
437 #log# opts = %s
438 #log# args = %s
438 #log# args = %s
439 #log# It is safe to make manual edits below here.
439 #log# It is safe to make manual edits below here.
440 #log#-----------------------------------------------------------------------
440 #log#-----------------------------------------------------------------------
441 """
441 """
442 # for pushd/popd management
442 # for pushd/popd management
443 try:
443 try:
444 self.home_dir = get_home_dir()
444 self.home_dir = get_home_dir()
445 except HomeDirError,msg:
445 except HomeDirError,msg:
446 fatal(msg)
446 fatal(msg)
447
447
448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
449
449
450 # Functions to call the underlying shell.
450 # Functions to call the underlying shell.
451
451
452 # utility to expand user variables via Itpl
452 # utility to expand user variables via Itpl
453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
454 self.user_ns))
454 self.user_ns))
455 # The first is similar to os.system, but it doesn't return a value,
455 # The first is similar to os.system, but it doesn't return a value,
456 # and it allows interpolation of variables in the user's namespace.
456 # and it allows interpolation of variables in the user's namespace.
457 self.system = lambda cmd: shell(self.var_expand(cmd),
457 self.system = lambda cmd: shell(self.var_expand(cmd),
458 header='IPython system call: ',
458 header='IPython system call: ',
459 verbose=self.rc.system_verbose)
459 verbose=self.rc.system_verbose)
460 # These are for getoutput and getoutputerror:
460 # These are for getoutput and getoutputerror:
461 self.getoutput = lambda cmd: \
461 self.getoutput = lambda cmd: \
462 getoutput(self.var_expand(cmd),
462 getoutput(self.var_expand(cmd),
463 header='IPython system call: ',
463 header='IPython system call: ',
464 verbose=self.rc.system_verbose)
464 verbose=self.rc.system_verbose)
465 self.getoutputerror = lambda cmd: \
465 self.getoutputerror = lambda cmd: \
466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
467 self.user_ns)),
467 self.user_ns)),
468 header='IPython system call: ',
468 header='IPython system call: ',
469 verbose=self.rc.system_verbose)
469 verbose=self.rc.system_verbose)
470
470
471 # RegExp for splitting line contents into pre-char//first
471 # RegExp for splitting line contents into pre-char//first
472 # word-method//rest. For clarity, each group in on one line.
472 # word-method//rest. For clarity, each group in on one line.
473
473
474 # WARNING: update the regexp if the above escapes are changed, as they
474 # WARNING: update the regexp if the above escapes are changed, as they
475 # are hardwired in.
475 # are hardwired in.
476
476
477 # Don't get carried away with trying to make the autocalling catch too
477 # Don't get carried away with trying to make the autocalling catch too
478 # much: it's better to be conservative rather than to trigger hidden
478 # much: it's better to be conservative rather than to trigger hidden
479 # evals() somewhere and end up causing side effects.
479 # evals() somewhere and end up causing side effects.
480
480
481 self.line_split = re.compile(r'^([\s*,;/])'
481 self.line_split = re.compile(r'^([\s*,;/])'
482 r'([\?\w\.]+\w*\s*)'
482 r'([\?\w\.]+\w*\s*)'
483 r'(\(?.*$)')
483 r'(\(?.*$)')
484
484
485 # Original re, keep around for a while in case changes break something
485 # Original re, keep around for a while in case changes break something
486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
487 # r'(\s*[\?\w\.]+\w*\s*)'
487 # r'(\s*[\?\w\.]+\w*\s*)'
488 # r'(\(?.*$)')
488 # r'(\(?.*$)')
489
489
490 # RegExp to identify potential function names
490 # RegExp to identify potential function names
491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
492
492
493 # RegExp to exclude strings with this start from autocalling. In
493 # RegExp to exclude strings with this start from autocalling. In
494 # particular, all binary operators should be excluded, so that if foo
494 # particular, all binary operators should be excluded, so that if foo
495 # is callable, foo OP bar doesn't become foo(OP bar), which is
495 # is callable, foo OP bar doesn't become foo(OP bar), which is
496 # invalid. The characters '!=()' don't need to be checked for, as the
496 # invalid. The characters '!=()' don't need to be checked for, as the
497 # _prefilter routine explicitely does so, to catch direct calls and
497 # _prefilter routine explicitely does so, to catch direct calls and
498 # rebindings of existing names.
498 # rebindings of existing names.
499
499
500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
501 # it affects the rest of the group in square brackets.
501 # it affects the rest of the group in square brackets.
502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
503 '|^is |^not |^in |^and |^or ')
503 '|^is |^not |^in |^and |^or ')
504
504
505 # try to catch also methods for stuff in lists/tuples/dicts: off
505 # try to catch also methods for stuff in lists/tuples/dicts: off
506 # (experimental). For this to work, the line_split regexp would need
506 # (experimental). For this to work, the line_split regexp would need
507 # to be modified so it wouldn't break things at '['. That line is
507 # to be modified so it wouldn't break things at '['. That line is
508 # nasty enough that I shouldn't change it until I can test it _well_.
508 # nasty enough that I shouldn't change it until I can test it _well_.
509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
510
510
511 # keep track of where we started running (mainly for crash post-mortem)
511 # keep track of where we started running (mainly for crash post-mortem)
512 self.starting_dir = os.getcwd()
512 self.starting_dir = os.getcwd()
513
513
514 # Various switches which can be set
514 # Various switches which can be set
515 self.CACHELENGTH = 5000 # this is cheap, it's just text
515 self.CACHELENGTH = 5000 # this is cheap, it's just text
516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
517 self.banner2 = banner2
517 self.banner2 = banner2
518
518
519 # TraceBack handlers:
519 # TraceBack handlers:
520
520
521 # Syntax error handler.
521 # Syntax error handler.
522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
523
523
524 # The interactive one is initialized with an offset, meaning we always
524 # The interactive one is initialized with an offset, meaning we always
525 # want to remove the topmost item in the traceback, which is our own
525 # want to remove the topmost item in the traceback, which is our own
526 # internal code. Valid modes: ['Plain','Context','Verbose']
526 # internal code. Valid modes: ['Plain','Context','Verbose']
527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
528 color_scheme='NoColor',
528 color_scheme='NoColor',
529 tb_offset = 1)
529 tb_offset = 1)
530
530
531 # IPython itself shouldn't crash. This will produce a detailed
531 # IPython itself shouldn't crash. This will produce a detailed
532 # post-mortem if it does. But we only install the crash handler for
532 # post-mortem if it does. But we only install the crash handler for
533 # non-threaded shells, the threaded ones use a normal verbose reporter
533 # non-threaded shells, the threaded ones use a normal verbose reporter
534 # and lose the crash handler. This is because exceptions in the main
534 # and lose the crash handler. This is because exceptions in the main
535 # thread (such as in GUI code) propagate directly to sys.excepthook,
535 # thread (such as in GUI code) propagate directly to sys.excepthook,
536 # and there's no point in printing crash dumps for every user exception.
536 # and there's no point in printing crash dumps for every user exception.
537 if self.isthreaded:
537 if self.isthreaded:
538 sys.excepthook = ultraTB.FormattedTB()
538 sys.excepthook = ultraTB.FormattedTB()
539 else:
539 else:
540 from IPython import CrashHandler
540 from IPython import CrashHandler
541 sys.excepthook = CrashHandler.CrashHandler(self)
541 sys.excepthook = CrashHandler.CrashHandler(self)
542
542
543 # The instance will store a pointer to this, so that runtime code
543 # The instance will store a pointer to this, so that runtime code
544 # (such as magics) can access it. This is because during the
544 # (such as magics) can access it. This is because during the
545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
546 # frameworks).
546 # frameworks).
547 self.sys_excepthook = sys.excepthook
547 self.sys_excepthook = sys.excepthook
548
548
549 # and add any custom exception handlers the user may have specified
549 # and add any custom exception handlers the user may have specified
550 self.set_custom_exc(*custom_exceptions)
550 self.set_custom_exc(*custom_exceptions)
551
551
552 # Object inspector
552 # Object inspector
553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
554 PyColorize.ANSICodeColors,
554 PyColorize.ANSICodeColors,
555 'NoColor')
555 'NoColor')
556 # indentation management
556 # indentation management
557 self.autoindent = False
557 self.autoindent = False
558 self.indent_current_nsp = 0
558 self.indent_current_nsp = 0
559 self.indent_current = '' # actual indent string
559 self.indent_current = '' # actual indent string
560
560
561 # Make some aliases automatically
561 # Make some aliases automatically
562 # Prepare list of shell aliases to auto-define
562 # Prepare list of shell aliases to auto-define
563 if os.name == 'posix':
563 if os.name == 'posix':
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 'mv mv -i','rm rm -i','cp cp -i',
565 'mv mv -i','rm rm -i','cp cp -i',
566 'cat cat','less less','clear clear',
566 'cat cat','less less','clear clear',
567 # a better ls
567 # a better ls
568 'ls ls -F',
568 'ls ls -F',
569 # long ls
569 # long ls
570 'll ls -lF',
570 'll ls -lF',
571 # color ls
571 # color ls
572 'lc ls -F -o --color',
572 'lc ls -F -o --color',
573 # ls normal files only
573 # ls normal files only
574 'lf ls -F -o --color %l | grep ^-',
574 'lf ls -F -o --color %l | grep ^-',
575 # ls symbolic links
575 # ls symbolic links
576 'lk ls -F -o --color %l | grep ^l',
576 'lk ls -F -o --color %l | grep ^l',
577 # directories or links to directories,
577 # directories or links to directories,
578 'ldir ls -F -o --color %l | grep /$',
578 'ldir ls -F -o --color %l | grep /$',
579 # things which are executable
579 # things which are executable
580 'lx ls -F -o --color %l | grep ^-..x',
580 'lx ls -F -o --color %l | grep ^-..x',
581 )
581 )
582 elif os.name in ['nt','dos']:
582 elif os.name in ['nt','dos']:
583 auto_alias = ('dir dir /on', 'ls dir /on',
583 auto_alias = ('dir dir /on', 'ls dir /on',
584 'ddir dir /ad /on', 'ldir dir /ad /on',
584 'ddir dir /ad /on', 'ldir dir /ad /on',
585 'mkdir mkdir','rmdir rmdir','echo echo',
585 'mkdir mkdir','rmdir rmdir','echo echo',
586 'ren ren','cls cls','copy copy')
586 'ren ren','cls cls','copy copy')
587 else:
587 else:
588 auto_alias = ()
588 auto_alias = ()
589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
590 # Call the actual (public) initializer
590 # Call the actual (public) initializer
591 self.init_auto_alias()
591 self.init_auto_alias()
592 # end __init__
592 # end __init__
593
593
594 def post_config_initialization(self):
594 def post_config_initialization(self):
595 """Post configuration init method
595 """Post configuration init method
596
596
597 This is called after the configuration files have been processed to
597 This is called after the configuration files have been processed to
598 'finalize' the initialization."""
598 'finalize' the initialization."""
599
599
600 rc = self.rc
600 rc = self.rc
601
601
602 # Load readline proper
602 # Load readline proper
603 if rc.readline:
603 if rc.readline:
604 self.init_readline()
604 self.init_readline()
605
605
606 # log system
606 # log system
607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
608 # local shortcut, this is used a LOT
608 # local shortcut, this is used a LOT
609 self.log = self.logger.log
609 self.log = self.logger.log
610
610
611 # Initialize cache, set in/out prompts and printing system
611 # Initialize cache, set in/out prompts and printing system
612 self.outputcache = CachedOutput(self,
612 self.outputcache = CachedOutput(self,
613 rc.cache_size,
613 rc.cache_size,
614 rc.pprint,
614 rc.pprint,
615 input_sep = rc.separate_in,
615 input_sep = rc.separate_in,
616 output_sep = rc.separate_out,
616 output_sep = rc.separate_out,
617 output_sep2 = rc.separate_out2,
617 output_sep2 = rc.separate_out2,
618 ps1 = rc.prompt_in1,
618 ps1 = rc.prompt_in1,
619 ps2 = rc.prompt_in2,
619 ps2 = rc.prompt_in2,
620 ps_out = rc.prompt_out,
620 ps_out = rc.prompt_out,
621 pad_left = rc.prompts_pad_left)
621 pad_left = rc.prompts_pad_left)
622
622
623 # user may have over-ridden the default print hook:
623 # user may have over-ridden the default print hook:
624 try:
624 try:
625 self.outputcache.__class__.display = self.hooks.display
625 self.outputcache.__class__.display = self.hooks.display
626 except AttributeError:
626 except AttributeError:
627 pass
627 pass
628
628
629 # I don't like assigning globally to sys, because it means when embedding
629 # I don't like assigning globally to sys, because it means when embedding
630 # instances, each embedded instance overrides the previous choice. But
630 # instances, each embedded instance overrides the previous choice. But
631 # sys.displayhook seems to be called internally by exec, so I don't see a
631 # sys.displayhook seems to be called internally by exec, so I don't see a
632 # way around it.
632 # way around it.
633 sys.displayhook = self.outputcache
633 sys.displayhook = self.outputcache
634
634
635 # Set user colors (don't do it in the constructor above so that it
635 # Set user colors (don't do it in the constructor above so that it
636 # doesn't crash if colors option is invalid)
636 # doesn't crash if colors option is invalid)
637 self.magic_colors(rc.colors)
637 self.magic_colors(rc.colors)
638
638
639 # Set calling of pdb on exceptions
639 # Set calling of pdb on exceptions
640 self.call_pdb = rc.pdb
640 self.call_pdb = rc.pdb
641
641
642 # Load user aliases
642 # Load user aliases
643 for alias in rc.alias:
643 for alias in rc.alias:
644 self.magic_alias(alias)
644 self.magic_alias(alias)
645
645
646 # dynamic data that survives through sessions
646 # dynamic data that survives through sessions
647 # XXX make the filename a config option?
647 # XXX make the filename a config option?
648 persist_base = 'persist'
648 persist_base = 'persist'
649 if rc.profile:
649 if rc.profile:
650 persist_base += '_%s' % rc.profile
650 persist_base += '_%s' % rc.profile
651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
652
652
653 try:
653 try:
654 self.persist = pickle.load(file(self.persist_fname))
654 self.persist = pickle.load(file(self.persist_fname))
655 except:
655 except:
656 self.persist = {}
656 self.persist = {}
657
657
658
658
659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
660 try:
660 try:
661 obj = pickle.loads(value)
661 obj = pickle.loads(value)
662 except:
662 except:
663
663
664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
665 print "The error was:",sys.exc_info()[0]
665 print "The error was:",sys.exc_info()[0]
666 continue
666 continue
667
667
668
668
669 self.user_ns[key] = obj
669 self.user_ns[key] = obj
670
670
671 def add_builtins(self):
671 def add_builtins(self):
672 """Store ipython references into the builtin namespace.
672 """Store ipython references into the builtin namespace.
673
673
674 Some parts of ipython operate via builtins injected here, which hold a
674 Some parts of ipython operate via builtins injected here, which hold a
675 reference to IPython itself."""
675 reference to IPython itself."""
676
676
677 builtins_new = dict(__IPYTHON__ = self,
677 builtins_new = dict(__IPYTHON__ = self,
678 ip_set_hook = self.set_hook,
678 ip_set_hook = self.set_hook,
679 jobs = self.jobs,
679 jobs = self.jobs,
680 ipmagic = self.ipmagic,
680 ipmagic = self.ipmagic,
681 ipalias = self.ipalias,
681 ipalias = self.ipalias,
682 ipsystem = self.ipsystem,
682 ipsystem = self.ipsystem,
683 )
683 )
684 for biname,bival in builtins_new.items():
684 for biname,bival in builtins_new.items():
685 try:
685 try:
686 # store the orignal value so we can restore it
686 # store the orignal value so we can restore it
687 self.builtins_added[biname] = __builtin__.__dict__[biname]
687 self.builtins_added[biname] = __builtin__.__dict__[biname]
688 except KeyError:
688 except KeyError:
689 # or mark that it wasn't defined, and we'll just delete it at
689 # or mark that it wasn't defined, and we'll just delete it at
690 # cleanup
690 # cleanup
691 self.builtins_added[biname] = Undefined
691 self.builtins_added[biname] = Undefined
692 __builtin__.__dict__[biname] = bival
692 __builtin__.__dict__[biname] = bival
693
693
694 # Keep in the builtins a flag for when IPython is active. We set it
694 # Keep in the builtins a flag for when IPython is active. We set it
695 # with setdefault so that multiple nested IPythons don't clobber one
695 # with setdefault so that multiple nested IPythons don't clobber one
696 # another. Each will increase its value by one upon being activated,
696 # another. Each will increase its value by one upon being activated,
697 # which also gives us a way to determine the nesting level.
697 # which also gives us a way to determine the nesting level.
698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
699
699
700 def clean_builtins(self):
700 def clean_builtins(self):
701 """Remove any builtins which might have been added by add_builtins, or
701 """Remove any builtins which might have been added by add_builtins, or
702 restore overwritten ones to their previous values."""
702 restore overwritten ones to their previous values."""
703 for biname,bival in self.builtins_added.items():
703 for biname,bival in self.builtins_added.items():
704 if bival is Undefined:
704 if bival is Undefined:
705 del __builtin__.__dict__[biname]
705 del __builtin__.__dict__[biname]
706 else:
706 else:
707 __builtin__.__dict__[biname] = bival
707 __builtin__.__dict__[biname] = bival
708 self.builtins_added.clear()
708 self.builtins_added.clear()
709
709
710 def set_hook(self,name,hook):
710 def set_hook(self,name,hook):
711 """set_hook(name,hook) -> sets an internal IPython hook.
711 """set_hook(name,hook) -> sets an internal IPython hook.
712
712
713 IPython exposes some of its internal API as user-modifiable hooks. By
713 IPython exposes some of its internal API as user-modifiable hooks. By
714 resetting one of these hooks, you can modify IPython's behavior to
714 resetting one of these hooks, you can modify IPython's behavior to
715 call at runtime your own routines."""
715 call at runtime your own routines."""
716
716
717 # At some point in the future, this should validate the hook before it
717 # At some point in the future, this should validate the hook before it
718 # accepts it. Probably at least check that the hook takes the number
718 # accepts it. Probably at least check that the hook takes the number
719 # of args it's supposed to.
719 # of args it's supposed to.
720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
721
721
722 def set_custom_exc(self,exc_tuple,handler):
722 def set_custom_exc(self,exc_tuple,handler):
723 """set_custom_exc(exc_tuple,handler)
723 """set_custom_exc(exc_tuple,handler)
724
724
725 Set a custom exception handler, which will be called if any of the
725 Set a custom exception handler, which will be called if any of the
726 exceptions in exc_tuple occur in the mainloop (specifically, in the
726 exceptions in exc_tuple occur in the mainloop (specifically, in the
727 runcode() method.
727 runcode() method.
728
728
729 Inputs:
729 Inputs:
730
730
731 - exc_tuple: a *tuple* of valid exceptions to call the defined
731 - exc_tuple: a *tuple* of valid exceptions to call the defined
732 handler for. It is very important that you use a tuple, and NOT A
732 handler for. It is very important that you use a tuple, and NOT A
733 LIST here, because of the way Python's except statement works. If
733 LIST here, because of the way Python's except statement works. If
734 you only want to trap a single exception, use a singleton tuple:
734 you only want to trap a single exception, use a singleton tuple:
735
735
736 exc_tuple == (MyCustomException,)
736 exc_tuple == (MyCustomException,)
737
737
738 - handler: this must be defined as a function with the following
738 - handler: this must be defined as a function with the following
739 basic interface: def my_handler(self,etype,value,tb).
739 basic interface: def my_handler(self,etype,value,tb).
740
740
741 This will be made into an instance method (via new.instancemethod)
741 This will be made into an instance method (via new.instancemethod)
742 of IPython itself, and it will be called if any of the exceptions
742 of IPython itself, and it will be called if any of the exceptions
743 listed in the exc_tuple are caught. If the handler is None, an
743 listed in the exc_tuple are caught. If the handler is None, an
744 internal basic one is used, which just prints basic info.
744 internal basic one is used, which just prints basic info.
745
745
746 WARNING: by putting in your own exception handler into IPython's main
746 WARNING: by putting in your own exception handler into IPython's main
747 execution loop, you run a very good chance of nasty crashes. This
747 execution loop, you run a very good chance of nasty crashes. This
748 facility should only be used if you really know what you are doing."""
748 facility should only be used if you really know what you are doing."""
749
749
750 assert type(exc_tuple)==type(()) , \
750 assert type(exc_tuple)==type(()) , \
751 "The custom exceptions must be given AS A TUPLE."
751 "The custom exceptions must be given AS A TUPLE."
752
752
753 def dummy_handler(self,etype,value,tb):
753 def dummy_handler(self,etype,value,tb):
754 print '*** Simple custom exception handler ***'
754 print '*** Simple custom exception handler ***'
755 print 'Exception type :',etype
755 print 'Exception type :',etype
756 print 'Exception value:',value
756 print 'Exception value:',value
757 print 'Traceback :',tb
757 print 'Traceback :',tb
758 print 'Source code :','\n'.join(self.buffer)
758 print 'Source code :','\n'.join(self.buffer)
759
759
760 if handler is None: handler = dummy_handler
760 if handler is None: handler = dummy_handler
761
761
762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
763 self.custom_exceptions = exc_tuple
763 self.custom_exceptions = exc_tuple
764
764
765 def set_custom_completer(self,completer,pos=0):
765 def set_custom_completer(self,completer,pos=0):
766 """set_custom_completer(completer,pos=0)
766 """set_custom_completer(completer,pos=0)
767
767
768 Adds a new custom completer function.
768 Adds a new custom completer function.
769
769
770 The position argument (defaults to 0) is the index in the completers
770 The position argument (defaults to 0) is the index in the completers
771 list where you want the completer to be inserted."""
771 list where you want the completer to be inserted."""
772
772
773 newcomp = new.instancemethod(completer,self.Completer,
773 newcomp = new.instancemethod(completer,self.Completer,
774 self.Completer.__class__)
774 self.Completer.__class__)
775 self.Completer.matchers.insert(pos,newcomp)
775 self.Completer.matchers.insert(pos,newcomp)
776
776
777 def _get_call_pdb(self):
777 def _get_call_pdb(self):
778 return self._call_pdb
778 return self._call_pdb
779
779
780 def _set_call_pdb(self,val):
780 def _set_call_pdb(self,val):
781
781
782 if val not in (0,1,False,True):
782 if val not in (0,1,False,True):
783 raise ValueError,'new call_pdb value must be boolean'
783 raise ValueError,'new call_pdb value must be boolean'
784
784
785 # store value in instance
785 # store value in instance
786 self._call_pdb = val
786 self._call_pdb = val
787
787
788 # notify the actual exception handlers
788 # notify the actual exception handlers
789 self.InteractiveTB.call_pdb = val
789 self.InteractiveTB.call_pdb = val
790 if self.isthreaded:
790 if self.isthreaded:
791 try:
791 try:
792 self.sys_excepthook.call_pdb = val
792 self.sys_excepthook.call_pdb = val
793 except:
793 except:
794 warn('Failed to activate pdb for threaded exception handler')
794 warn('Failed to activate pdb for threaded exception handler')
795
795
796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
797 'Control auto-activation of pdb at exceptions')
797 'Control auto-activation of pdb at exceptions')
798
798
799
799
800 # These special functions get installed in the builtin namespace, to
800 # These special functions get installed in the builtin namespace, to
801 # provide programmatic (pure python) access to magics, aliases and system
801 # provide programmatic (pure python) access to magics, aliases and system
802 # calls. This is important for logging, user scripting, and more.
802 # calls. This is important for logging, user scripting, and more.
803
803
804 # We are basically exposing, via normal python functions, the three
804 # We are basically exposing, via normal python functions, the three
805 # mechanisms in which ipython offers special call modes (magics for
805 # mechanisms in which ipython offers special call modes (magics for
806 # internal control, aliases for direct system access via pre-selected
806 # internal control, aliases for direct system access via pre-selected
807 # names, and !cmd for calling arbitrary system commands).
807 # names, and !cmd for calling arbitrary system commands).
808
808
809 def ipmagic(self,arg_s):
809 def ipmagic(self,arg_s):
810 """Call a magic function by name.
810 """Call a magic function by name.
811
811
812 Input: a string containing the name of the magic function to call and any
812 Input: a string containing the name of the magic function to call and any
813 additional arguments to be passed to the magic.
813 additional arguments to be passed to the magic.
814
814
815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
816 prompt:
816 prompt:
817
817
818 In[1]: %name -opt foo bar
818 In[1]: %name -opt foo bar
819
819
820 To call a magic without arguments, simply use ipmagic('name').
820 To call a magic without arguments, simply use ipmagic('name').
821
821
822 This provides a proper Python function to call IPython's magics in any
822 This provides a proper Python function to call IPython's magics in any
823 valid Python code you can type at the interpreter, including loops and
823 valid Python code you can type at the interpreter, including loops and
824 compound statements. It is added by IPython to the Python builtin
824 compound statements. It is added by IPython to the Python builtin
825 namespace upon initialization."""
825 namespace upon initialization."""
826
826
827 args = arg_s.split(' ',1)
827 args = arg_s.split(' ',1)
828 magic_name = args[0]
828 magic_name = args[0]
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
830
830
831 try:
831 try:
832 magic_args = args[1]
832 magic_args = args[1]
833 except IndexError:
833 except IndexError:
834 magic_args = ''
834 magic_args = ''
835 fn = getattr(self,'magic_'+magic_name,None)
835 fn = getattr(self,'magic_'+magic_name,None)
836 if fn is None:
836 if fn is None:
837 error("Magic function `%s` not found." % magic_name)
837 error("Magic function `%s` not found." % magic_name)
838 else:
838 else:
839 magic_args = self.var_expand(magic_args)
839 magic_args = self.var_expand(magic_args)
840 return fn(magic_args)
840 return fn(magic_args)
841
841
842 def ipalias(self,arg_s):
842 def ipalias(self,arg_s):
843 """Call an alias by name.
843 """Call an alias by name.
844
844
845 Input: a string containing the name of the alias to call and any
845 Input: a string containing the name of the alias to call and any
846 additional arguments to be passed to the magic.
846 additional arguments to be passed to the magic.
847
847
848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
849 prompt:
849 prompt:
850
850
851 In[1]: name -opt foo bar
851 In[1]: name -opt foo bar
852
852
853 To call an alias without arguments, simply use ipalias('name').
853 To call an alias without arguments, simply use ipalias('name').
854
854
855 This provides a proper Python function to call IPython's aliases in any
855 This provides a proper Python function to call IPython's aliases in any
856 valid Python code you can type at the interpreter, including loops and
856 valid Python code you can type at the interpreter, including loops and
857 compound statements. It is added by IPython to the Python builtin
857 compound statements. It is added by IPython to the Python builtin
858 namespace upon initialization."""
858 namespace upon initialization."""
859
859
860 args = arg_s.split(' ',1)
860 args = arg_s.split(' ',1)
861 alias_name = args[0]
861 alias_name = args[0]
862 try:
862 try:
863 alias_args = args[1]
863 alias_args = args[1]
864 except IndexError:
864 except IndexError:
865 alias_args = ''
865 alias_args = ''
866 if alias_name in self.alias_table:
866 if alias_name in self.alias_table:
867 self.call_alias(alias_name,alias_args)
867 self.call_alias(alias_name,alias_args)
868 else:
868 else:
869 error("Alias `%s` not found." % alias_name)
869 error("Alias `%s` not found." % alias_name)
870
870
871 def ipsystem(self,arg_s):
871 def ipsystem(self,arg_s):
872 """Make a system call, using IPython."""
872 """Make a system call, using IPython."""
873
873
874 self.system(arg_s)
874 self.system(arg_s)
875
875
876 def complete(self,text):
876 def complete(self,text):
877 """Return a sorted list of all possible completions on text.
877 """Return a sorted list of all possible completions on text.
878
878
879 Inputs:
879 Inputs:
880
880
881 - text: a string of text to be completed on.
881 - text: a string of text to be completed on.
882
882
883 This is a wrapper around the completion mechanism, similar to what
883 This is a wrapper around the completion mechanism, similar to what
884 readline does at the command line when the TAB key is hit. By
884 readline does at the command line when the TAB key is hit. By
885 exposing it as a method, it can be used by other non-readline
885 exposing it as a method, it can be used by other non-readline
886 environments (such as GUIs) for text completion.
886 environments (such as GUIs) for text completion.
887
887
888 Simple usage example:
888 Simple usage example:
889
889
890 In [1]: x = 'hello'
890 In [1]: x = 'hello'
891
891
892 In [2]: __IP.complete('x.l')
892 In [2]: __IP.complete('x.l')
893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
894
894
895 complete = self.Completer.complete
895 complete = self.Completer.complete
896 state = 0
896 state = 0
897 # use a dict so we get unique keys, since ipyhton's multiple
897 # use a dict so we get unique keys, since ipyhton's multiple
898 # completers can return duplicates.
898 # completers can return duplicates.
899 comps = {}
899 comps = {}
900 while True:
900 while True:
901 newcomp = complete(text,state)
901 newcomp = complete(text,state)
902 if newcomp is None:
902 if newcomp is None:
903 break
903 break
904 comps[newcomp] = 1
904 comps[newcomp] = 1
905 state += 1
905 state += 1
906 outcomps = comps.keys()
906 outcomps = comps.keys()
907 outcomps.sort()
907 outcomps.sort()
908 return outcomps
908 return outcomps
909
909
910 def set_completer_frame(self, frame=None):
910 def set_completer_frame(self, frame=None):
911 if frame:
911 if frame:
912 self.Completer.namespace = frame.f_locals
912 self.Completer.namespace = frame.f_locals
913 self.Completer.global_namespace = frame.f_globals
913 self.Completer.global_namespace = frame.f_globals
914 else:
914 else:
915 self.Completer.namespace = self.user_ns
915 self.Completer.namespace = self.user_ns
916 self.Completer.global_namespace = self.user_global_ns
916 self.Completer.global_namespace = self.user_global_ns
917
917
918 def init_auto_alias(self):
918 def init_auto_alias(self):
919 """Define some aliases automatically.
919 """Define some aliases automatically.
920
920
921 These are ALL parameter-less aliases"""
921 These are ALL parameter-less aliases"""
922
922
923 for alias,cmd in self.auto_alias:
923 for alias,cmd in self.auto_alias:
924 self.alias_table[alias] = (0,cmd)
924 self.alias_table[alias] = (0,cmd)
925
925
926 def alias_table_validate(self,verbose=0):
926 def alias_table_validate(self,verbose=0):
927 """Update information about the alias table.
927 """Update information about the alias table.
928
928
929 In particular, make sure no Python keywords/builtins are in it."""
929 In particular, make sure no Python keywords/builtins are in it."""
930
930
931 no_alias = self.no_alias
931 no_alias = self.no_alias
932 for k in self.alias_table.keys():
932 for k in self.alias_table.keys():
933 if k in no_alias:
933 if k in no_alias:
934 del self.alias_table[k]
934 del self.alias_table[k]
935 if verbose:
935 if verbose:
936 print ("Deleting alias <%s>, it's a Python "
936 print ("Deleting alias <%s>, it's a Python "
937 "keyword or builtin." % k)
937 "keyword or builtin." % k)
938
938
939 def set_autoindent(self,value=None):
939 def set_autoindent(self,value=None):
940 """Set the autoindent flag, checking for readline support.
940 """Set the autoindent flag, checking for readline support.
941
941
942 If called with no arguments, it acts as a toggle."""
942 If called with no arguments, it acts as a toggle."""
943
943
944 if not self.has_readline:
944 if not self.has_readline:
945 if os.name == 'posix':
945 if os.name == 'posix':
946 warn("The auto-indent feature requires the readline library")
946 warn("The auto-indent feature requires the readline library")
947 self.autoindent = 0
947 self.autoindent = 0
948 return
948 return
949 if value is None:
949 if value is None:
950 self.autoindent = not self.autoindent
950 self.autoindent = not self.autoindent
951 else:
951 else:
952 self.autoindent = value
952 self.autoindent = value
953
953
954 def rc_set_toggle(self,rc_field,value=None):
954 def rc_set_toggle(self,rc_field,value=None):
955 """Set or toggle a field in IPython's rc config. structure.
955 """Set or toggle a field in IPython's rc config. structure.
956
956
957 If called with no arguments, it acts as a toggle.
957 If called with no arguments, it acts as a toggle.
958
958
959 If called with a non-existent field, the resulting AttributeError
959 If called with a non-existent field, the resulting AttributeError
960 exception will propagate out."""
960 exception will propagate out."""
961
961
962 rc_val = getattr(self.rc,rc_field)
962 rc_val = getattr(self.rc,rc_field)
963 if value is None:
963 if value is None:
964 value = not rc_val
964 value = not rc_val
965 setattr(self.rc,rc_field,value)
965 setattr(self.rc,rc_field,value)
966
966
967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
968 """Install the user configuration directory.
968 """Install the user configuration directory.
969
969
970 Can be called when running for the first time or to upgrade the user's
970 Can be called when running for the first time or to upgrade the user's
971 .ipython/ directory with the mode parameter. Valid modes are 'install'
971 .ipython/ directory with the mode parameter. Valid modes are 'install'
972 and 'upgrade'."""
972 and 'upgrade'."""
973
973
974 def wait():
974 def wait():
975 try:
975 try:
976 raw_input("Please press <RETURN> to start IPython.")
976 raw_input("Please press <RETURN> to start IPython.")
977 except EOFError:
977 except EOFError:
978 print >> Term.cout
978 print >> Term.cout
979 print '*'*70
979 print '*'*70
980
980
981 cwd = os.getcwd() # remember where we started
981 cwd = os.getcwd() # remember where we started
982 glb = glob.glob
982 glb = glob.glob
983 print '*'*70
983 print '*'*70
984 if mode == 'install':
984 if mode == 'install':
985 print \
985 print \
986 """Welcome to IPython. I will try to create a personal configuration directory
986 """Welcome to IPython. I will try to create a personal configuration directory
987 where you can customize many aspects of IPython's functionality in:\n"""
987 where you can customize many aspects of IPython's functionality in:\n"""
988 else:
988 else:
989 print 'I am going to upgrade your configuration in:'
989 print 'I am going to upgrade your configuration in:'
990
990
991 print ipythondir
991 print ipythondir
992
992
993 rcdirend = os.path.join('IPython','UserConfig')
993 rcdirend = os.path.join('IPython','UserConfig')
994 cfg = lambda d: os.path.join(d,rcdirend)
994 cfg = lambda d: os.path.join(d,rcdirend)
995 try:
995 try:
996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
997 except IOError:
997 except IOError:
998 warning = """
998 warning = """
999 Installation error. IPython's directory was not found.
999 Installation error. IPython's directory was not found.
1000
1000
1001 Check the following:
1001 Check the following:
1002
1002
1003 The ipython/IPython directory should be in a directory belonging to your
1003 The ipython/IPython directory should be in a directory belonging to your
1004 PYTHONPATH environment variable (that is, it should be in a directory
1004 PYTHONPATH environment variable (that is, it should be in a directory
1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1006
1006
1007 IPython will proceed with builtin defaults.
1007 IPython will proceed with builtin defaults.
1008 """
1008 """
1009 warn(warning)
1009 warn(warning)
1010 wait()
1010 wait()
1011 return
1011 return
1012
1012
1013 if mode == 'install':
1013 if mode == 'install':
1014 try:
1014 try:
1015 shutil.copytree(rcdir,ipythondir)
1015 shutil.copytree(rcdir,ipythondir)
1016 os.chdir(ipythondir)
1016 os.chdir(ipythondir)
1017 rc_files = glb("ipythonrc*")
1017 rc_files = glb("ipythonrc*")
1018 for rc_file in rc_files:
1018 for rc_file in rc_files:
1019 os.rename(rc_file,rc_file+rc_suffix)
1019 os.rename(rc_file,rc_file+rc_suffix)
1020 except:
1020 except:
1021 warning = """
1021 warning = """
1022
1022
1023 There was a problem with the installation:
1023 There was a problem with the installation:
1024 %s
1024 %s
1025 Try to correct it or contact the developers if you think it's a bug.
1025 Try to correct it or contact the developers if you think it's a bug.
1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1027 warn(warning)
1027 warn(warning)
1028 wait()
1028 wait()
1029 return
1029 return
1030
1030
1031 elif mode == 'upgrade':
1031 elif mode == 'upgrade':
1032 try:
1032 try:
1033 os.chdir(ipythondir)
1033 os.chdir(ipythondir)
1034 except:
1034 except:
1035 print """
1035 print """
1036 Can not upgrade: changing to directory %s failed. Details:
1036 Can not upgrade: changing to directory %s failed. Details:
1037 %s
1037 %s
1038 """ % (ipythondir,sys.exc_info()[1])
1038 """ % (ipythondir,sys.exc_info()[1])
1039 wait()
1039 wait()
1040 return
1040 return
1041 else:
1041 else:
1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1043 for new_full_path in sources:
1043 for new_full_path in sources:
1044 new_filename = os.path.basename(new_full_path)
1044 new_filename = os.path.basename(new_full_path)
1045 if new_filename.startswith('ipythonrc'):
1045 if new_filename.startswith('ipythonrc'):
1046 new_filename = new_filename + rc_suffix
1046 new_filename = new_filename + rc_suffix
1047 # The config directory should only contain files, skip any
1047 # The config directory should only contain files, skip any
1048 # directories which may be there (like CVS)
1048 # directories which may be there (like CVS)
1049 if os.path.isdir(new_full_path):
1049 if os.path.isdir(new_full_path):
1050 continue
1050 continue
1051 if os.path.exists(new_filename):
1051 if os.path.exists(new_filename):
1052 old_file = new_filename+'.old'
1052 old_file = new_filename+'.old'
1053 if os.path.exists(old_file):
1053 if os.path.exists(old_file):
1054 os.remove(old_file)
1054 os.remove(old_file)
1055 os.rename(new_filename,old_file)
1055 os.rename(new_filename,old_file)
1056 shutil.copy(new_full_path,new_filename)
1056 shutil.copy(new_full_path,new_filename)
1057 else:
1057 else:
1058 raise ValueError,'unrecognized mode for install:',`mode`
1058 raise ValueError,'unrecognized mode for install:',`mode`
1059
1059
1060 # Fix line-endings to those native to each platform in the config
1060 # Fix line-endings to those native to each platform in the config
1061 # directory.
1061 # directory.
1062 try:
1062 try:
1063 os.chdir(ipythondir)
1063 os.chdir(ipythondir)
1064 except:
1064 except:
1065 print """
1065 print """
1066 Problem: changing to directory %s failed.
1066 Problem: changing to directory %s failed.
1067 Details:
1067 Details:
1068 %s
1068 %s
1069
1069
1070 Some configuration files may have incorrect line endings. This should not
1070 Some configuration files may have incorrect line endings. This should not
1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1072 wait()
1072 wait()
1073 else:
1073 else:
1074 for fname in glb('ipythonrc*'):
1074 for fname in glb('ipythonrc*'):
1075 try:
1075 try:
1076 native_line_ends(fname,backup=0)
1076 native_line_ends(fname,backup=0)
1077 except IOError:
1077 except IOError:
1078 pass
1078 pass
1079
1079
1080 if mode == 'install':
1080 if mode == 'install':
1081 print """
1081 print """
1082 Successful installation!
1082 Successful installation!
1083
1083
1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1085 IPython manual (there are both HTML and PDF versions supplied with the
1085 IPython manual (there are both HTML and PDF versions supplied with the
1086 distribution) to make sure that your system environment is properly configured
1086 distribution) to make sure that your system environment is properly configured
1087 to take advantage of IPython's features."""
1087 to take advantage of IPython's features."""
1088 else:
1088 else:
1089 print """
1089 print """
1090 Successful upgrade!
1090 Successful upgrade!
1091
1091
1092 All files in your directory:
1092 All files in your directory:
1093 %(ipythondir)s
1093 %(ipythondir)s
1094 which would have been overwritten by the upgrade were backed up with a .old
1094 which would have been overwritten by the upgrade were backed up with a .old
1095 extension. If you had made particular customizations in those files you may
1095 extension. If you had made particular customizations in those files you may
1096 want to merge them back into the new files.""" % locals()
1096 want to merge them back into the new files.""" % locals()
1097 wait()
1097 wait()
1098 os.chdir(cwd)
1098 os.chdir(cwd)
1099 # end user_setup()
1099 # end user_setup()
1100
1100
1101 def atexit_operations(self):
1101 def atexit_operations(self):
1102 """This will be executed at the time of exit.
1102 """This will be executed at the time of exit.
1103
1103
1104 Saving of persistent data should be performed here. """
1104 Saving of persistent data should be performed here. """
1105
1105
1106 #print '*** IPython exit cleanup ***' # dbg
1106 #print '*** IPython exit cleanup ***' # dbg
1107 # input history
1107 # input history
1108 self.savehist()
1108 self.savehist()
1109
1109
1110 # Cleanup all tempfiles left around
1110 # Cleanup all tempfiles left around
1111 for tfile in self.tempfiles:
1111 for tfile in self.tempfiles:
1112 try:
1112 try:
1113 os.unlink(tfile)
1113 os.unlink(tfile)
1114 except OSError:
1114 except OSError:
1115 pass
1115 pass
1116
1116
1117 # save the "persistent data" catch-all dictionary
1117 # save the "persistent data" catch-all dictionary
1118 try:
1118 try:
1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1120 except:
1120 except:
1121 print "*** ERROR *** persistent data saving failed."
1121 print "*** ERROR *** persistent data saving failed."
1122
1122
1123 def savehist(self):
1123 def savehist(self):
1124 """Save input history to a file (via readline library)."""
1124 """Save input history to a file (via readline library)."""
1125 try:
1125 try:
1126 self.readline.write_history_file(self.histfile)
1126 self.readline.write_history_file(self.histfile)
1127 except:
1127 except:
1128 print 'Unable to save IPython command history to file: ' + \
1128 print 'Unable to save IPython command history to file: ' + \
1129 `self.histfile`
1129 `self.histfile`
1130
1130
1131 def pre_readline(self):
1131 def pre_readline(self):
1132 """readline hook to be used at the start of each line.
1132 """readline hook to be used at the start of each line.
1133
1133
1134 Currently it handles auto-indent only."""
1134 Currently it handles auto-indent only."""
1135
1135
1136 self.readline.insert_text(self.indent_current)
1136 self.readline.insert_text(self.indent_current)
1137
1137
1138 def init_readline(self):
1138 def init_readline(self):
1139 """Command history completion/saving/reloading."""
1139 """Command history completion/saving/reloading."""
1140 try:
1140 try:
1141 import readline
1141 import readline
1142 except ImportError:
1142 except ImportError:
1143 self.has_readline = 0
1143 self.has_readline = 0
1144 self.readline = None
1144 self.readline = None
1145 # no point in bugging windows users with this every time:
1145 # no point in bugging windows users with this every time:
1146 if os.name == 'posix':
1146 if os.name == 'posix':
1147 warn('Readline services not available on this platform.')
1147 warn('Readline services not available on this platform.')
1148 else:
1148 else:
1149 import atexit
1149 import atexit
1150 from IPython.completer import IPCompleter
1150 from IPython.completer import IPCompleter
1151 self.Completer = IPCompleter(self,
1151 self.Completer = IPCompleter(self,
1152 self.user_ns,
1152 self.user_ns,
1153 self.user_global_ns,
1153 self.user_global_ns,
1154 self.rc.readline_omit__names,
1154 self.rc.readline_omit__names,
1155 self.alias_table)
1155 self.alias_table)
1156
1156
1157 # Platform-specific configuration
1157 # Platform-specific configuration
1158 if os.name == 'nt':
1158 if os.name == 'nt':
1159 self.readline_startup_hook = readline.set_pre_input_hook
1159 self.readline_startup_hook = readline.set_pre_input_hook
1160 else:
1160 else:
1161 self.readline_startup_hook = readline.set_startup_hook
1161 self.readline_startup_hook = readline.set_startup_hook
1162
1162
1163 # Load user's initrc file (readline config)
1163 # Load user's initrc file (readline config)
1164 inputrc_name = os.environ.get('INPUTRC')
1164 inputrc_name = os.environ.get('INPUTRC')
1165 if inputrc_name is None:
1165 if inputrc_name is None:
1166 home_dir = get_home_dir()
1166 home_dir = get_home_dir()
1167 if home_dir is not None:
1167 if home_dir is not None:
1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1169 if os.path.isfile(inputrc_name):
1169 if os.path.isfile(inputrc_name):
1170 try:
1170 try:
1171 readline.read_init_file(inputrc_name)
1171 readline.read_init_file(inputrc_name)
1172 except:
1172 except:
1173 warn('Problems reading readline initialization file <%s>'
1173 warn('Problems reading readline initialization file <%s>'
1174 % inputrc_name)
1174 % inputrc_name)
1175
1175
1176 self.has_readline = 1
1176 self.has_readline = 1
1177 self.readline = readline
1177 self.readline = readline
1178 # save this in sys so embedded copies can restore it properly
1178 # save this in sys so embedded copies can restore it properly
1179 sys.ipcompleter = self.Completer.complete
1179 sys.ipcompleter = self.Completer.complete
1180 readline.set_completer(self.Completer.complete)
1180 readline.set_completer(self.Completer.complete)
1181
1181
1182 # Configure readline according to user's prefs
1182 # Configure readline according to user's prefs
1183 for rlcommand in self.rc.readline_parse_and_bind:
1183 for rlcommand in self.rc.readline_parse_and_bind:
1184 readline.parse_and_bind(rlcommand)
1184 readline.parse_and_bind(rlcommand)
1185
1185
1186 # remove some chars from the delimiters list
1186 # remove some chars from the delimiters list
1187 delims = readline.get_completer_delims()
1187 delims = readline.get_completer_delims()
1188 delims = delims.translate(string._idmap,
1188 delims = delims.translate(string._idmap,
1189 self.rc.readline_remove_delims)
1189 self.rc.readline_remove_delims)
1190 readline.set_completer_delims(delims)
1190 readline.set_completer_delims(delims)
1191 # otherwise we end up with a monster history after a while:
1191 # otherwise we end up with a monster history after a while:
1192 readline.set_history_length(1000)
1192 readline.set_history_length(1000)
1193 try:
1193 try:
1194 #print '*** Reading readline history' # dbg
1194 #print '*** Reading readline history' # dbg
1195 readline.read_history_file(self.histfile)
1195 readline.read_history_file(self.histfile)
1196 except IOError:
1196 except IOError:
1197 pass # It doesn't exist yet.
1197 pass # It doesn't exist yet.
1198
1198
1199 atexit.register(self.atexit_operations)
1199 atexit.register(self.atexit_operations)
1200 del atexit
1200 del atexit
1201
1201
1202 # Configure auto-indent for all platforms
1202 # Configure auto-indent for all platforms
1203 self.set_autoindent(self.rc.autoindent)
1203 self.set_autoindent(self.rc.autoindent)
1204
1204
1205 def _should_recompile(self,e):
1205 def _should_recompile(self,e):
1206 """Utility routine for edit_syntax_error"""
1206 """Utility routine for edit_syntax_error"""
1207
1207
1208 if e.filename in ('<ipython console>','<input>','<string>',
1208 if e.filename in ('<ipython console>','<input>','<string>',
1209 '<console>',None):
1209 '<console>',None):
1210
1210
1211 return False
1211 return False
1212 try:
1212 try:
1213 if not ask_yes_no('Return to editor to correct syntax error? '
1213 if not ask_yes_no('Return to editor to correct syntax error? '
1214 '[Y/n] ','y'):
1214 '[Y/n] ','y'):
1215 return False
1215 return False
1216 except EOFError:
1216 except EOFError:
1217 return False
1217 return False
1218
1218
1219 def int0(x):
1219 def int0(x):
1220 try:
1220 try:
1221 return int(x)
1221 return int(x)
1222 except TypeError:
1222 except TypeError:
1223 return 0
1223 return 0
1224 # always pass integer line and offset values to editor hook
1224 # always pass integer line and offset values to editor hook
1225 self.hooks.fix_error_editor(e.filename,
1225 self.hooks.fix_error_editor(e.filename,
1226 int0(e.lineno),int0(e.offset),e.msg)
1226 int0(e.lineno),int0(e.offset),e.msg)
1227 return True
1227 return True
1228
1228
1229 def edit_syntax_error(self):
1229 def edit_syntax_error(self):
1230 """The bottom half of the syntax error handler called in the main loop.
1230 """The bottom half of the syntax error handler called in the main loop.
1231
1231
1232 Loop until syntax error is fixed or user cancels.
1232 Loop until syntax error is fixed or user cancels.
1233 """
1233 """
1234
1234
1235 while self.SyntaxTB.last_syntax_error:
1235 while self.SyntaxTB.last_syntax_error:
1236 # copy and clear last_syntax_error
1236 # copy and clear last_syntax_error
1237 err = self.SyntaxTB.clear_err_state()
1237 err = self.SyntaxTB.clear_err_state()
1238 if not self._should_recompile(err):
1238 if not self._should_recompile(err):
1239 return
1239 return
1240 try:
1240 try:
1241 # may set last_syntax_error again if a SyntaxError is raised
1241 # may set last_syntax_error again if a SyntaxError is raised
1242 self.safe_execfile(err.filename,self.shell.user_ns)
1242 self.safe_execfile(err.filename,self.shell.user_ns)
1243 except:
1243 except:
1244 self.showtraceback()
1244 self.showtraceback()
1245 else:
1245 else:
1246 f = file(err.filename)
1246 f = file(err.filename)
1247 try:
1247 try:
1248 sys.displayhook(f.read())
1248 sys.displayhook(f.read())
1249 finally:
1249 finally:
1250 f.close()
1250 f.close()
1251
1251
1252 def showsyntaxerror(self, filename=None):
1252 def showsyntaxerror(self, filename=None):
1253 """Display the syntax error that just occurred.
1253 """Display the syntax error that just occurred.
1254
1254
1255 This doesn't display a stack trace because there isn't one.
1255 This doesn't display a stack trace because there isn't one.
1256
1256
1257 If a filename is given, it is stuffed in the exception instead
1257 If a filename is given, it is stuffed in the exception instead
1258 of what was there before (because Python's parser always uses
1258 of what was there before (because Python's parser always uses
1259 "<string>" when reading from a string).
1259 "<string>" when reading from a string).
1260 """
1260 """
1261 etype, value, last_traceback = sys.exc_info()
1261 etype, value, last_traceback = sys.exc_info()
1262 if filename and etype is SyntaxError:
1262 if filename and etype is SyntaxError:
1263 # Work hard to stuff the correct filename in the exception
1263 # Work hard to stuff the correct filename in the exception
1264 try:
1264 try:
1265 msg, (dummy_filename, lineno, offset, line) = value
1265 msg, (dummy_filename, lineno, offset, line) = value
1266 except:
1266 except:
1267 # Not the format we expect; leave it alone
1267 # Not the format we expect; leave it alone
1268 pass
1268 pass
1269 else:
1269 else:
1270 # Stuff in the right filename
1270 # Stuff in the right filename
1271 try:
1271 try:
1272 # Assume SyntaxError is a class exception
1272 # Assume SyntaxError is a class exception
1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1274 except:
1274 except:
1275 # If that failed, assume SyntaxError is a string
1275 # If that failed, assume SyntaxError is a string
1276 value = msg, (filename, lineno, offset, line)
1276 value = msg, (filename, lineno, offset, line)
1277 self.SyntaxTB(etype,value,[])
1277 self.SyntaxTB(etype,value,[])
1278
1278
1279 def debugger(self):
1279 def debugger(self):
1280 """Call the pdb debugger."""
1280 """Call the pdb debugger."""
1281
1281
1282 if not self.rc.pdb:
1282 if not self.rc.pdb:
1283 return
1283 return
1284 pdb.pm()
1284 pdb.pm()
1285
1285
1286 def showtraceback(self,exc_tuple = None,filename=None):
1286 def showtraceback(self,exc_tuple = None,filename=None):
1287 """Display the exception that just occurred."""
1287 """Display the exception that just occurred."""
1288
1288
1289 # Though this won't be called by syntax errors in the input line,
1289 # Though this won't be called by syntax errors in the input line,
1290 # there may be SyntaxError cases whith imported code.
1290 # there may be SyntaxError cases whith imported code.
1291 if exc_tuple is None:
1291 if exc_tuple is None:
1292 type, value, tb = sys.exc_info()
1292 type, value, tb = sys.exc_info()
1293 else:
1293 else:
1294 type, value, tb = exc_tuple
1294 type, value, tb = exc_tuple
1295 if type is SyntaxError:
1295 if type is SyntaxError:
1296 self.showsyntaxerror(filename)
1296 self.showsyntaxerror(filename)
1297 else:
1297 else:
1298 self.InteractiveTB()
1298 self.InteractiveTB()
1299 if self.InteractiveTB.call_pdb and self.has_readline:
1299 if self.InteractiveTB.call_pdb and self.has_readline:
1300 # pdb mucks up readline, fix it back
1300 # pdb mucks up readline, fix it back
1301 self.readline.set_completer(self.Completer.complete)
1301 self.readline.set_completer(self.Completer.complete)
1302
1302
1303 def mainloop(self,banner=None):
1303 def mainloop(self,banner=None):
1304 """Creates the local namespace and starts the mainloop.
1304 """Creates the local namespace and starts the mainloop.
1305
1305
1306 If an optional banner argument is given, it will override the
1306 If an optional banner argument is given, it will override the
1307 internally created default banner."""
1307 internally created default banner."""
1308
1308
1309 if self.rc.c: # Emulate Python's -c option
1309 if self.rc.c: # Emulate Python's -c option
1310 self.exec_init_cmd()
1310 self.exec_init_cmd()
1311 if banner is None:
1311 if banner is None:
1312 if self.rc.banner:
1312 if self.rc.banner:
1313 banner = self.BANNER+self.banner2
1313 banner = self.BANNER+self.banner2
1314 else:
1314 else:
1315 banner = ''
1315 banner = ''
1316 self.interact(banner)
1316 self.interact(banner)
1317
1317
1318 def exec_init_cmd(self):
1318 def exec_init_cmd(self):
1319 """Execute a command given at the command line.
1319 """Execute a command given at the command line.
1320
1320
1321 This emulates Python's -c option."""
1321 This emulates Python's -c option."""
1322
1322
1323 sys.argv = ['-c']
1323 sys.argv = ['-c']
1324 self.push(self.rc.c)
1324 self.push(self.rc.c)
1325
1325
1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1327 """Embeds IPython into a running python program.
1327 """Embeds IPython into a running python program.
1328
1328
1329 Input:
1329 Input:
1330
1330
1331 - header: An optional header message can be specified.
1331 - header: An optional header message can be specified.
1332
1332
1333 - local_ns, global_ns: working namespaces. If given as None, the
1333 - local_ns, global_ns: working namespaces. If given as None, the
1334 IPython-initialized one is updated with __main__.__dict__, so that
1334 IPython-initialized one is updated with __main__.__dict__, so that
1335 program variables become visible but user-specific configuration
1335 program variables become visible but user-specific configuration
1336 remains possible.
1336 remains possible.
1337
1337
1338 - stack_depth: specifies how many levels in the stack to go to
1338 - stack_depth: specifies how many levels in the stack to go to
1339 looking for namespaces (when local_ns and global_ns are None). This
1339 looking for namespaces (when local_ns and global_ns are None). This
1340 allows an intermediate caller to make sure that this function gets
1340 allows an intermediate caller to make sure that this function gets
1341 the namespace from the intended level in the stack. By default (0)
1341 the namespace from the intended level in the stack. By default (0)
1342 it will get its locals and globals from the immediate caller.
1342 it will get its locals and globals from the immediate caller.
1343
1343
1344 Warning: it's possible to use this in a program which is being run by
1344 Warning: it's possible to use this in a program which is being run by
1345 IPython itself (via %run), but some funny things will happen (a few
1345 IPython itself (via %run), but some funny things will happen (a few
1346 globals get overwritten). In the future this will be cleaned up, as
1346 globals get overwritten). In the future this will be cleaned up, as
1347 there is no fundamental reason why it can't work perfectly."""
1347 there is no fundamental reason why it can't work perfectly."""
1348
1348
1349 # Get locals and globals from caller
1349 # Get locals and globals from caller
1350 if local_ns is None or global_ns is None:
1350 if local_ns is None or global_ns is None:
1351 call_frame = sys._getframe(stack_depth).f_back
1351 call_frame = sys._getframe(stack_depth).f_back
1352
1352
1353 if local_ns is None:
1353 if local_ns is None:
1354 local_ns = call_frame.f_locals
1354 local_ns = call_frame.f_locals
1355 if global_ns is None:
1355 if global_ns is None:
1356 global_ns = call_frame.f_globals
1356 global_ns = call_frame.f_globals
1357
1357
1358 # Update namespaces and fire up interpreter
1358 # Update namespaces and fire up interpreter
1359
1359
1360 # The global one is easy, we can just throw it in
1360 # The global one is easy, we can just throw it in
1361 self.user_global_ns = global_ns
1361 self.user_global_ns = global_ns
1362
1362
1363 # but the user/local one is tricky: ipython needs it to store internal
1363 # but the user/local one is tricky: ipython needs it to store internal
1364 # data, but we also need the locals. We'll copy locals in the user
1364 # data, but we also need the locals. We'll copy locals in the user
1365 # one, but will track what got copied so we can delete them at exit.
1365 # one, but will track what got copied so we can delete them at exit.
1366 # This is so that a later embedded call doesn't see locals from a
1366 # This is so that a later embedded call doesn't see locals from a
1367 # previous call (which most likely existed in a separate scope).
1367 # previous call (which most likely existed in a separate scope).
1368 local_varnames = local_ns.keys()
1368 local_varnames = local_ns.keys()
1369 self.user_ns.update(local_ns)
1369 self.user_ns.update(local_ns)
1370
1370
1371 # Patch for global embedding to make sure that things don't overwrite
1371 # Patch for global embedding to make sure that things don't overwrite
1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1373 # FIXME. Test this a bit more carefully (the if.. is new)
1373 # FIXME. Test this a bit more carefully (the if.. is new)
1374 if local_ns is None and global_ns is None:
1374 if local_ns is None and global_ns is None:
1375 self.user_global_ns.update(__main__.__dict__)
1375 self.user_global_ns.update(__main__.__dict__)
1376
1376
1377 # make sure the tab-completer has the correct frame information, so it
1377 # make sure the tab-completer has the correct frame information, so it
1378 # actually completes using the frame's locals/globals
1378 # actually completes using the frame's locals/globals
1379 self.set_completer_frame()
1379 self.set_completer_frame()
1380
1380
1381 # before activating the interactive mode, we need to make sure that
1381 # before activating the interactive mode, we need to make sure that
1382 # all names in the builtin namespace needed by ipython point to
1382 # all names in the builtin namespace needed by ipython point to
1383 # ourselves, and not to other instances.
1383 # ourselves, and not to other instances.
1384 self.add_builtins()
1384 self.add_builtins()
1385
1385
1386 self.interact(header)
1386 self.interact(header)
1387
1387
1388 # now, purge out the user namespace from anything we might have added
1388 # now, purge out the user namespace from anything we might have added
1389 # from the caller's local namespace
1389 # from the caller's local namespace
1390 delvar = self.user_ns.pop
1390 delvar = self.user_ns.pop
1391 for var in local_varnames:
1391 for var in local_varnames:
1392 delvar(var,None)
1392 delvar(var,None)
1393 # and clean builtins we may have overridden
1393 # and clean builtins we may have overridden
1394 self.clean_builtins()
1394 self.clean_builtins()
1395
1395
1396 def interact(self, banner=None):
1396 def interact(self, banner=None):
1397 """Closely emulate the interactive Python console.
1397 """Closely emulate the interactive Python console.
1398
1398
1399 The optional banner argument specify the banner to print
1399 The optional banner argument specify the banner to print
1400 before the first interaction; by default it prints a banner
1400 before the first interaction; by default it prints a banner
1401 similar to the one printed by the real Python interpreter,
1401 similar to the one printed by the real Python interpreter,
1402 followed by the current class name in parentheses (so as not
1402 followed by the current class name in parentheses (so as not
1403 to confuse this with the real interpreter -- since it's so
1403 to confuse this with the real interpreter -- since it's so
1404 close!).
1404 close!).
1405
1405
1406 """
1406 """
1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1408 if banner is None:
1408 if banner is None:
1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1410 (sys.version, sys.platform, cprt,
1410 (sys.version, sys.platform, cprt,
1411 self.__class__.__name__))
1411 self.__class__.__name__))
1412 else:
1412 else:
1413 self.write(banner)
1413 self.write(banner)
1414
1414
1415 more = 0
1415 more = 0
1416
1416
1417 # Mark activity in the builtins
1417 # Mark activity in the builtins
1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1419
1419
1420 # exit_now is set by a call to %Exit or %Quit
1420 # exit_now is set by a call to %Exit or %Quit
1421 self.exit_now = False
1421 self.exit_now = False
1422 while not self.exit_now:
1422 while not self.exit_now:
1423
1423
1424 try:
1424 try:
1425 if more:
1425 if more:
1426 prompt = self.outputcache.prompt2
1426 prompt = self.outputcache.prompt2
1427 if self.autoindent:
1427 if self.autoindent:
1428 self.readline_startup_hook(self.pre_readline)
1428 self.readline_startup_hook(self.pre_readline)
1429 else:
1429 else:
1430 prompt = self.outputcache.prompt1
1430 prompt = self.outputcache.prompt1
1431 try:
1431 try:
1432 line = self.raw_input(prompt,more)
1432 line = self.raw_input(prompt,more)
1433 if self.autoindent:
1433 if self.autoindent:
1434 self.readline_startup_hook(None)
1434 self.readline_startup_hook(None)
1435 except EOFError:
1435 except EOFError:
1436 if self.autoindent:
1436 if self.autoindent:
1437 self.readline_startup_hook(None)
1437 self.readline_startup_hook(None)
1438 self.write("\n")
1438 self.write("\n")
1439 self.exit()
1439 self.exit()
1440 else:
1440 else:
1441 more = self.push(line)
1441 more = self.push(line)
1442
1442
1443 if (self.SyntaxTB.last_syntax_error and
1443 if (self.SyntaxTB.last_syntax_error and
1444 self.rc.autoedit_syntax):
1444 self.rc.autoedit_syntax):
1445 self.edit_syntax_error()
1445 self.edit_syntax_error()
1446
1446
1447 except KeyboardInterrupt:
1447 except KeyboardInterrupt:
1448 self.write("\nKeyboardInterrupt\n")
1448 self.write("\nKeyboardInterrupt\n")
1449 self.resetbuffer()
1449 self.resetbuffer()
1450 more = 0
1450 more = 0
1451 # keep cache in sync with the prompt counter:
1451 # keep cache in sync with the prompt counter:
1452 self.outputcache.prompt_count -= 1
1452 self.outputcache.prompt_count -= 1
1453
1453
1454 if self.autoindent:
1454 if self.autoindent:
1455 self.indent_current_nsp = 0
1455 self.indent_current_nsp = 0
1456 self.indent_current = ' '* self.indent_current_nsp
1456 self.indent_current = ' '* self.indent_current_nsp
1457
1457
1458 except bdb.BdbQuit:
1458 except bdb.BdbQuit:
1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1460 "Because of how pdb handles the stack, it is impossible\n"
1460 "Because of how pdb handles the stack, it is impossible\n"
1461 "for IPython to properly format this particular exception.\n"
1461 "for IPython to properly format this particular exception.\n"
1462 "IPython will resume normal operation.")
1462 "IPython will resume normal operation.")
1463
1463
1464 # We are off again...
1464 # We are off again...
1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1466
1466
1467 def excepthook(self, type, value, tb):
1467 def excepthook(self, type, value, tb):
1468 """One more defense for GUI apps that call sys.excepthook.
1468 """One more defense for GUI apps that call sys.excepthook.
1469
1469
1470 GUI frameworks like wxPython trap exceptions and call
1470 GUI frameworks like wxPython trap exceptions and call
1471 sys.excepthook themselves. I guess this is a feature that
1471 sys.excepthook themselves. I guess this is a feature that
1472 enables them to keep running after exceptions that would
1472 enables them to keep running after exceptions that would
1473 otherwise kill their mainloop. This is a bother for IPython
1473 otherwise kill their mainloop. This is a bother for IPython
1474 which excepts to catch all of the program exceptions with a try:
1474 which excepts to catch all of the program exceptions with a try:
1475 except: statement.
1475 except: statement.
1476
1476
1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1478 any app directly invokes sys.excepthook, it will look to the user like
1478 any app directly invokes sys.excepthook, it will look to the user like
1479 IPython crashed. In order to work around this, we can disable the
1479 IPython crashed. In order to work around this, we can disable the
1480 CrashHandler and replace it with this excepthook instead, which prints a
1480 CrashHandler and replace it with this excepthook instead, which prints a
1481 regular traceback using our InteractiveTB. In this fashion, apps which
1481 regular traceback using our InteractiveTB. In this fashion, apps which
1482 call sys.excepthook will generate a regular-looking exception from
1482 call sys.excepthook will generate a regular-looking exception from
1483 IPython, and the CrashHandler will only be triggered by real IPython
1483 IPython, and the CrashHandler will only be triggered by real IPython
1484 crashes.
1484 crashes.
1485
1485
1486 This hook should be used sparingly, only in places which are not likely
1486 This hook should be used sparingly, only in places which are not likely
1487 to be true IPython errors.
1487 to be true IPython errors.
1488 """
1488 """
1489
1489
1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1491 if self.InteractiveTB.call_pdb and self.has_readline:
1491 if self.InteractiveTB.call_pdb and self.has_readline:
1492 self.readline.set_completer(self.Completer.complete)
1492 self.readline.set_completer(self.Completer.complete)
1493
1493
1494 def call_alias(self,alias,rest=''):
1494 def call_alias(self,alias,rest=''):
1495 """Call an alias given its name and the rest of the line.
1495 """Call an alias given its name and the rest of the line.
1496
1496
1497 This function MUST be given a proper alias, because it doesn't make
1497 This function MUST be given a proper alias, because it doesn't make
1498 any checks when looking up into the alias table. The caller is
1498 any checks when looking up into the alias table. The caller is
1499 responsible for invoking it only with a valid alias."""
1499 responsible for invoking it only with a valid alias."""
1500
1500
1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1502 nargs,cmd = self.alias_table[alias]
1502 nargs,cmd = self.alias_table[alias]
1503 # Expand the %l special to be the user's input line
1503 # Expand the %l special to be the user's input line
1504 if cmd.find('%l') >= 0:
1504 if cmd.find('%l') >= 0:
1505 cmd = cmd.replace('%l',rest)
1505 cmd = cmd.replace('%l',rest)
1506 rest = ''
1506 rest = ''
1507 if nargs==0:
1507 if nargs==0:
1508 # Simple, argument-less aliases
1508 # Simple, argument-less aliases
1509 cmd = '%s %s' % (cmd,rest)
1509 cmd = '%s %s' % (cmd,rest)
1510 else:
1510 else:
1511 # Handle aliases with positional arguments
1511 # Handle aliases with positional arguments
1512 args = rest.split(None,nargs)
1512 args = rest.split(None,nargs)
1513 if len(args)< nargs:
1513 if len(args)< nargs:
1514 error('Alias <%s> requires %s arguments, %s given.' %
1514 error('Alias <%s> requires %s arguments, %s given.' %
1515 (alias,nargs,len(args)))
1515 (alias,nargs,len(args)))
1516 return
1516 return
1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1518 # Now call the macro, evaluating in the user's namespace
1518 # Now call the macro, evaluating in the user's namespace
1519 try:
1519 try:
1520 self.system(cmd)
1520 self.system(cmd)
1521 except:
1521 except:
1522 self.showtraceback()
1522 self.showtraceback()
1523
1523
1524 def autoindent_update(self,line):
1524 def autoindent_update(self,line):
1525 """Keep track of the indent level."""
1525 """Keep track of the indent level."""
1526
1526
1527 if self.autoindent:
1527 if self.autoindent:
1528 if line:
1528 if line:
1529 self.indent_current_nsp = num_ini_spaces(line)
1529 self.indent_current_nsp = num_ini_spaces(line)
1530
1530
1531 if line[-1] == ':':
1531 if line[-1] == ':':
1532 self.indent_current_nsp += 4
1532 self.indent_current_nsp += 4
1533 elif dedent_re.match(line):
1533 elif dedent_re.match(line):
1534 self.indent_current_nsp -= 4
1534 self.indent_current_nsp -= 4
1535 else:
1535 else:
1536 self.indent_current_nsp = 0
1536 self.indent_current_nsp = 0
1537
1537
1538 # indent_current is the actual string to be inserted
1538 # indent_current is the actual string to be inserted
1539 # by the readline hooks for indentation
1539 # by the readline hooks for indentation
1540 self.indent_current = ' '* self.indent_current_nsp
1540 self.indent_current = ' '* self.indent_current_nsp
1541
1541
1542 def runlines(self,lines):
1542 def runlines(self,lines):
1543 """Run a string of one or more lines of source.
1543 """Run a string of one or more lines of source.
1544
1544
1545 This method is capable of running a string containing multiple source
1545 This method is capable of running a string containing multiple source
1546 lines, as if they had been entered at the IPython prompt. Since it
1546 lines, as if they had been entered at the IPython prompt. Since it
1547 exposes IPython's processing machinery, the given strings can contain
1547 exposes IPython's processing machinery, the given strings can contain
1548 magic calls (%magic), special shell access (!cmd), etc."""
1548 magic calls (%magic), special shell access (!cmd), etc."""
1549
1549
1550 # We must start with a clean buffer, in case this is run from an
1550 # We must start with a clean buffer, in case this is run from an
1551 # interactive IPython session (via a magic, for example).
1551 # interactive IPython session (via a magic, for example).
1552 self.resetbuffer()
1552 self.resetbuffer()
1553 lines = lines.split('\n')
1553 lines = lines.split('\n')
1554 more = 0
1554 more = 0
1555 for line in lines:
1555 for line in lines:
1556 # skip blank lines so we don't mess up the prompt counter, but do
1556 # skip blank lines so we don't mess up the prompt counter, but do
1557 # NOT skip even a blank line if we are in a code block (more is
1557 # NOT skip even a blank line if we are in a code block (more is
1558 # true)
1558 # true)
1559 if line or more:
1559 if line or more:
1560 more = self.push(self.prefilter(line,more))
1560 more = self.push(self.prefilter(line,more))
1561 # IPython's runsource returns None if there was an error
1561 # IPython's runsource returns None if there was an error
1562 # compiling the code. This allows us to stop processing right
1562 # compiling the code. This allows us to stop processing right
1563 # away, so the user gets the error message at the right place.
1563 # away, so the user gets the error message at the right place.
1564 if more is None:
1564 if more is None:
1565 break
1565 break
1566 # final newline in case the input didn't have it, so that the code
1566 # final newline in case the input didn't have it, so that the code
1567 # actually does get executed
1567 # actually does get executed
1568 if more:
1568 if more:
1569 self.push('\n')
1569 self.push('\n')
1570
1570
1571 def runsource(self, source, filename='<input>', symbol='single'):
1571 def runsource(self, source, filename='<input>', symbol='single'):
1572 """Compile and run some source in the interpreter.
1572 """Compile and run some source in the interpreter.
1573
1573
1574 Arguments are as for compile_command().
1574 Arguments are as for compile_command().
1575
1575
1576 One several things can happen:
1576 One several things can happen:
1577
1577
1578 1) The input is incorrect; compile_command() raised an
1578 1) The input is incorrect; compile_command() raised an
1579 exception (SyntaxError or OverflowError). A syntax traceback
1579 exception (SyntaxError or OverflowError). A syntax traceback
1580 will be printed by calling the showsyntaxerror() method.
1580 will be printed by calling the showsyntaxerror() method.
1581
1581
1582 2) The input is incomplete, and more input is required;
1582 2) The input is incomplete, and more input is required;
1583 compile_command() returned None. Nothing happens.
1583 compile_command() returned None. Nothing happens.
1584
1584
1585 3) The input is complete; compile_command() returned a code
1585 3) The input is complete; compile_command() returned a code
1586 object. The code is executed by calling self.runcode() (which
1586 object. The code is executed by calling self.runcode() (which
1587 also handles run-time exceptions, except for SystemExit).
1587 also handles run-time exceptions, except for SystemExit).
1588
1588
1589 The return value is:
1589 The return value is:
1590
1590
1591 - True in case 2
1591 - True in case 2
1592
1592
1593 - False in the other cases, unless an exception is raised, where
1593 - False in the other cases, unless an exception is raised, where
1594 None is returned instead. This can be used by external callers to
1594 None is returned instead. This can be used by external callers to
1595 know whether to continue feeding input or not.
1595 know whether to continue feeding input or not.
1596
1596
1597 The return value can be used to decide whether to use sys.ps1 or
1597 The return value can be used to decide whether to use sys.ps1 or
1598 sys.ps2 to prompt the next line."""
1598 sys.ps2 to prompt the next line."""
1599
1599
1600 try:
1600 try:
1601 code = self.compile(source,filename,symbol)
1601 code = self.compile(source,filename,symbol)
1602 except (OverflowError, SyntaxError, ValueError):
1602 except (OverflowError, SyntaxError, ValueError):
1603 # Case 1
1603 # Case 1
1604 self.showsyntaxerror(filename)
1604 self.showsyntaxerror(filename)
1605 return None
1605 return None
1606
1606
1607 if code is None:
1607 if code is None:
1608 # Case 2
1608 # Case 2
1609 return True
1609 return True
1610
1610
1611 # Case 3
1611 # Case 3
1612 # We store the code object so that threaded shells and
1612 # We store the code object so that threaded shells and
1613 # custom exception handlers can access all this info if needed.
1613 # custom exception handlers can access all this info if needed.
1614 # The source corresponding to this can be obtained from the
1614 # The source corresponding to this can be obtained from the
1615 # buffer attribute as '\n'.join(self.buffer).
1615 # buffer attribute as '\n'.join(self.buffer).
1616 self.code_to_run = code
1616 self.code_to_run = code
1617 # now actually execute the code object
1617 # now actually execute the code object
1618 if self.runcode(code) == 0:
1618 if self.runcode(code) == 0:
1619 return False
1619 return False
1620 else:
1620 else:
1621 return None
1621 return None
1622
1622
1623 def runcode(self,code_obj):
1623 def runcode(self,code_obj):
1624 """Execute a code object.
1624 """Execute a code object.
1625
1625
1626 When an exception occurs, self.showtraceback() is called to display a
1626 When an exception occurs, self.showtraceback() is called to display a
1627 traceback.
1627 traceback.
1628
1628
1629 Return value: a flag indicating whether the code to be run completed
1629 Return value: a flag indicating whether the code to be run completed
1630 successfully:
1630 successfully:
1631
1631
1632 - 0: successful execution.
1632 - 0: successful execution.
1633 - 1: an error occurred.
1633 - 1: an error occurred.
1634 """
1634 """
1635
1635
1636 # Set our own excepthook in case the user code tries to call it
1636 # Set our own excepthook in case the user code tries to call it
1637 # directly, so that the IPython crash handler doesn't get triggered
1637 # directly, so that the IPython crash handler doesn't get triggered
1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1639
1639
1640 # we save the original sys.excepthook in the instance, in case config
1640 # we save the original sys.excepthook in the instance, in case config
1641 # code (such as magics) needs access to it.
1641 # code (such as magics) needs access to it.
1642 self.sys_excepthook = old_excepthook
1642 self.sys_excepthook = old_excepthook
1643 outflag = 1 # happens in more places, so it's easier as default
1643 outflag = 1 # happens in more places, so it's easier as default
1644 try:
1644 try:
1645 try:
1645 try:
1646 # Embedded instances require separate global/local namespaces
1646 # Embedded instances require separate global/local namespaces
1647 # so they can see both the surrounding (local) namespace and
1647 # so they can see both the surrounding (local) namespace and
1648 # the module-level globals when called inside another function.
1648 # the module-level globals when called inside another function.
1649 if self.embedded:
1649 if self.embedded:
1650 exec code_obj in self.user_global_ns, self.user_ns
1650 exec code_obj in self.user_global_ns, self.user_ns
1651 # Normal (non-embedded) instances should only have a single
1651 # Normal (non-embedded) instances should only have a single
1652 # namespace for user code execution, otherwise functions won't
1652 # namespace for user code execution, otherwise functions won't
1653 # see interactive top-level globals.
1653 # see interactive top-level globals.
1654 else:
1654 else:
1655 exec code_obj in self.user_ns
1655 exec code_obj in self.user_ns
1656 finally:
1656 finally:
1657 # Reset our crash handler in place
1657 # Reset our crash handler in place
1658 sys.excepthook = old_excepthook
1658 sys.excepthook = old_excepthook
1659 except SystemExit:
1659 except SystemExit:
1660 self.resetbuffer()
1660 self.resetbuffer()
1661 self.showtraceback()
1661 self.showtraceback()
1662 warn("Type exit or quit to exit IPython "
1662 warn("Type exit or quit to exit IPython "
1663 "(%Exit or %Quit do so unconditionally).",level=1)
1663 "(%Exit or %Quit do so unconditionally).",level=1)
1664 except self.custom_exceptions:
1664 except self.custom_exceptions:
1665 etype,value,tb = sys.exc_info()
1665 etype,value,tb = sys.exc_info()
1666 self.CustomTB(etype,value,tb)
1666 self.CustomTB(etype,value,tb)
1667 except:
1667 except:
1668 self.showtraceback()
1668 self.showtraceback()
1669 else:
1669 else:
1670 outflag = 0
1670 outflag = 0
1671 if softspace(sys.stdout, 0):
1671 if softspace(sys.stdout, 0):
1672 print
1672 print
1673 # Flush out code object which has been run (and source)
1673 # Flush out code object which has been run (and source)
1674 self.code_to_run = None
1674 self.code_to_run = None
1675 return outflag
1675 return outflag
1676
1676
1677 def push(self, line):
1677 def push(self, line):
1678 """Push a line to the interpreter.
1678 """Push a line to the interpreter.
1679
1679
1680 The line should not have a trailing newline; it may have
1680 The line should not have a trailing newline; it may have
1681 internal newlines. The line is appended to a buffer and the
1681 internal newlines. The line is appended to a buffer and the
1682 interpreter's runsource() method is called with the
1682 interpreter's runsource() method is called with the
1683 concatenated contents of the buffer as source. If this
1683 concatenated contents of the buffer as source. If this
1684 indicates that the command was executed or invalid, the buffer
1684 indicates that the command was executed or invalid, the buffer
1685 is reset; otherwise, the command is incomplete, and the buffer
1685 is reset; otherwise, the command is incomplete, and the buffer
1686 is left as it was after the line was appended. The return
1686 is left as it was after the line was appended. The return
1687 value is 1 if more input is required, 0 if the line was dealt
1687 value is 1 if more input is required, 0 if the line was dealt
1688 with in some way (this is the same as runsource()).
1688 with in some way (this is the same as runsource()).
1689 """
1689 """
1690
1690
1691 # autoindent management should be done here, and not in the
1691 # autoindent management should be done here, and not in the
1692 # interactive loop, since that one is only seen by keyboard input. We
1692 # interactive loop, since that one is only seen by keyboard input. We
1693 # need this done correctly even for code run via runlines (which uses
1693 # need this done correctly even for code run via runlines (which uses
1694 # push).
1694 # push).
1695
1695
1696 #print 'push line: <%s>' % line # dbg
1696 #print 'push line: <%s>' % line # dbg
1697 self.autoindent_update(line)
1697 self.autoindent_update(line)
1698
1698
1699 self.buffer.append(line)
1699 self.buffer.append(line)
1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1701 if not more:
1701 if not more:
1702 self.resetbuffer()
1702 self.resetbuffer()
1703 return more
1703 return more
1704
1704
1705 def resetbuffer(self):
1705 def resetbuffer(self):
1706 """Reset the input buffer."""
1706 """Reset the input buffer."""
1707 self.buffer[:] = []
1707 self.buffer[:] = []
1708
1708
1709 def raw_input(self,prompt='',continue_prompt=False):
1709 def raw_input(self,prompt='',continue_prompt=False):
1710 """Write a prompt and read a line.
1710 """Write a prompt and read a line.
1711
1711
1712 The returned line does not include the trailing newline.
1712 The returned line does not include the trailing newline.
1713 When the user enters the EOF key sequence, EOFError is raised.
1713 When the user enters the EOF key sequence, EOFError is raised.
1714
1714
1715 Optional inputs:
1715 Optional inputs:
1716
1716
1717 - prompt(''): a string to be printed to prompt the user.
1717 - prompt(''): a string to be printed to prompt the user.
1718
1718
1719 - continue_prompt(False): whether this line is the first one or a
1719 - continue_prompt(False): whether this line is the first one or a
1720 continuation in a sequence of inputs.
1720 continuation in a sequence of inputs.
1721 """
1721 """
1722
1722
1723 line = raw_input_original(prompt)
1723 line = raw_input_original(prompt)
1724 # Try to be reasonably smart about not re-indenting pasted input more
1724 # Try to be reasonably smart about not re-indenting pasted input more
1725 # than necessary. We do this by trimming out the auto-indent initial
1725 # than necessary. We do this by trimming out the auto-indent initial
1726 # spaces, if the user's actual input started itself with whitespace.
1726 # spaces, if the user's actual input started itself with whitespace.
1727 #debugp('self.buffer[-1]')
1727 #debugp('self.buffer[-1]')
1728 ## if self.autoindent:
1728 ## if self.autoindent:
1729 ## try:
1729 ## try:
1730 ## prev_line = self.buffer[-1]
1730 ## prev_line = self.buffer[-1]
1731 ## except IndexError:
1731 ## except IndexError:
1732 ## prev_line = ''
1732 ## prev_line = ''
1733 ## prev_indent = num_ini_spaces(prev_line)
1733 ## prev_indent = num_ini_spaces(prev_line)
1734 ## debugp('prev_indent')
1734 ## debugp('prev_indent')
1735 ## # Split the user's input
1735 ## # Split the user's input
1736 ## line1 = line[:self.indent_current_nsp]
1736 ## line1 = line[:self.indent_current_nsp]
1737 ## line2 = line[self.indent_current_nsp:]
1737 ## line2 = line[self.indent_current_nsp:]
1738 ## if line1.isspace() and line2 and \
1738 ## if line1.isspace() and line2 and \
1739 ## num_ini_spaces(line2)==prev_indent:
1739 ## num_ini_spaces(line2)==prev_indent:
1740 ## line = line2
1740 ## line = line2
1741 #debugp('line')
1741 #debugp('line')
1742 #debugp('line1')
1742 #debugp('line1')
1743 #debugp('line2')
1743 #debugp('line2')
1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1745 ## line = line2
1745 ## line = line2
1746 ## debugp('line')
1746 ## debugp('line')
1747 return self.prefilter(line,continue_prompt)
1747 return self.prefilter(line,continue_prompt)
1748
1748
1749 def split_user_input(self,line):
1749 def split_user_input(self,line):
1750 """Split user input into pre-char, function part and rest."""
1750 """Split user input into pre-char, function part and rest."""
1751
1751
1752 lsplit = self.line_split.match(line)
1752 lsplit = self.line_split.match(line)
1753 if lsplit is None: # no regexp match returns None
1753 if lsplit is None: # no regexp match returns None
1754 try:
1754 try:
1755 iFun,theRest = line.split(None,1)
1755 iFun,theRest = line.split(None,1)
1756 except ValueError:
1756 except ValueError:
1757 iFun,theRest = line,''
1757 iFun,theRest = line,''
1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1759 else:
1759 else:
1760 pre,iFun,theRest = lsplit.groups()
1760 pre,iFun,theRest = lsplit.groups()
1761
1761
1762 #print 'line:<%s>' % line # dbg
1762 #print 'line:<%s>' % line # dbg
1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1764 return pre,iFun.strip(),theRest
1764 return pre,iFun.strip(),theRest
1765
1765
1766 def _prefilter(self, line, continue_prompt):
1766 def _prefilter(self, line, continue_prompt):
1767 """Calls different preprocessors, depending on the form of line."""
1767 """Calls different preprocessors, depending on the form of line."""
1768
1768
1769 # All handlers *must* return a value, even if it's blank ('').
1769 # All handlers *must* return a value, even if it's blank ('').
1770
1770
1771 # Lines are NOT logged here. Handlers should process the line as
1771 # Lines are NOT logged here. Handlers should process the line as
1772 # needed, update the cache AND log it (so that the input cache array
1772 # needed, update the cache AND log it (so that the input cache array
1773 # stays synced).
1773 # stays synced).
1774
1774
1775 # This function is _very_ delicate, and since it's also the one which
1775 # This function is _very_ delicate, and since it's also the one which
1776 # determines IPython's response to user input, it must be as efficient
1776 # determines IPython's response to user input, it must be as efficient
1777 # as possible. For this reason it has _many_ returns in it, trying
1777 # as possible. For this reason it has _many_ returns in it, trying
1778 # always to exit as quickly as it can figure out what it needs to do.
1778 # always to exit as quickly as it can figure out what it needs to do.
1779
1779
1780 # This function is the main responsible for maintaining IPython's
1780 # This function is the main responsible for maintaining IPython's
1781 # behavior respectful of Python's semantics. So be _very_ careful if
1781 # behavior respectful of Python's semantics. So be _very_ careful if
1782 # making changes to anything here.
1782 # making changes to anything here.
1783
1783
1784 #.....................................................................
1784 #.....................................................................
1785 # Code begins
1785 # Code begins
1786
1786
1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1788
1788
1789 # save the line away in case we crash, so the post-mortem handler can
1789 # save the line away in case we crash, so the post-mortem handler can
1790 # record it
1790 # record it
1791 self._last_input_line = line
1791 self._last_input_line = line
1792
1792
1793 #print '***line: <%s>' % line # dbg
1793 #print '***line: <%s>' % line # dbg
1794
1794
1795 # the input history needs to track even empty lines
1795 # the input history needs to track even empty lines
1796 if not line.strip():
1796 if not line.strip():
1797 if not continue_prompt:
1797 if not continue_prompt:
1798 self.outputcache.prompt_count -= 1
1798 self.outputcache.prompt_count -= 1
1799 return self.handle_normal(line,continue_prompt)
1799 return self.handle_normal(line,continue_prompt)
1800 #return self.handle_normal('',continue_prompt)
1800 #return self.handle_normal('',continue_prompt)
1801
1801
1802 # print '***cont',continue_prompt # dbg
1802 # print '***cont',continue_prompt # dbg
1803 # special handlers are only allowed for single line statements
1803 # special handlers are only allowed for single line statements
1804 if continue_prompt and not self.rc.multi_line_specials:
1804 if continue_prompt and not self.rc.multi_line_specials:
1805 return self.handle_normal(line,continue_prompt)
1805 return self.handle_normal(line,continue_prompt)
1806
1806
1807 # For the rest, we need the structure of the input
1807 # For the rest, we need the structure of the input
1808 pre,iFun,theRest = self.split_user_input(line)
1808 pre,iFun,theRest = self.split_user_input(line)
1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1810
1810
1811 # First check for explicit escapes in the last/first character
1811 # First check for explicit escapes in the last/first character
1812 handler = None
1812 handler = None
1813 if line[-1] == self.ESC_HELP:
1813 if line[-1] == self.ESC_HELP:
1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1815 if handler is None:
1815 if handler is None:
1816 # look at the first character of iFun, NOT of line, so we skip
1816 # look at the first character of iFun, NOT of line, so we skip
1817 # leading whitespace in multiline input
1817 # leading whitespace in multiline input
1818 handler = self.esc_handlers.get(iFun[0:1])
1818 handler = self.esc_handlers.get(iFun[0:1])
1819 if handler is not None:
1819 if handler is not None:
1820 return handler(line,continue_prompt,pre,iFun,theRest)
1820 return handler(line,continue_prompt,pre,iFun,theRest)
1821 # Emacs ipython-mode tags certain input lines
1821 # Emacs ipython-mode tags certain input lines
1822 if line.endswith('# PYTHON-MODE'):
1822 if line.endswith('# PYTHON-MODE'):
1823 return self.handle_emacs(line,continue_prompt)
1823 return self.handle_emacs(line,continue_prompt)
1824
1824
1825 # Next, check if we can automatically execute this thing
1825 # Next, check if we can automatically execute this thing
1826
1826
1827 # Allow ! in multi-line statements if multi_line_specials is on:
1827 # Allow ! in multi-line statements if multi_line_specials is on:
1828 if continue_prompt and self.rc.multi_line_specials and \
1828 if continue_prompt and self.rc.multi_line_specials and \
1829 iFun.startswith(self.ESC_SHELL):
1829 iFun.startswith(self.ESC_SHELL):
1830 return self.handle_shell_escape(line,continue_prompt,
1830 return self.handle_shell_escape(line,continue_prompt,
1831 pre=pre,iFun=iFun,
1831 pre=pre,iFun=iFun,
1832 theRest=theRest)
1832 theRest=theRest)
1833
1833
1834 # Let's try to find if the input line is a magic fn
1834 # Let's try to find if the input line is a magic fn
1835 oinfo = None
1835 oinfo = None
1836 if hasattr(self,'magic_'+iFun):
1836 if hasattr(self,'magic_'+iFun):
1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1838 # cause other side effects.
1838 # cause other side effects.
1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1840 if oinfo['ismagic']:
1840 if oinfo['ismagic']:
1841 # Be careful not to call magics when a variable assignment is
1841 # Be careful not to call magics when a variable assignment is
1842 # being made (ls='hi', for example)
1842 # being made (ls='hi', for example)
1843 if self.rc.automagic and \
1843 if self.rc.automagic and \
1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1845 (self.rc.multi_line_specials or not continue_prompt):
1845 (self.rc.multi_line_specials or not continue_prompt):
1846 return self.handle_magic(line,continue_prompt,
1846 return self.handle_magic(line,continue_prompt,
1847 pre,iFun,theRest)
1847 pre,iFun,theRest)
1848 else:
1848 else:
1849 return self.handle_normal(line,continue_prompt)
1849 return self.handle_normal(line,continue_prompt)
1850
1850
1851 # If the rest of the line begins with an (in)equality, assginment or
1851 # If the rest of the line begins with an (in)equality, assginment or
1852 # function call, we should not call _ofind but simply execute it.
1852 # function call, we should not call _ofind but simply execute it.
1853 # This avoids spurious geattr() accesses on objects upon assignment.
1853 # This avoids spurious geattr() accesses on objects upon assignment.
1854 #
1854 #
1855 # It also allows users to assign to either alias or magic names true
1855 # It also allows users to assign to either alias or magic names true
1856 # python variables (the magic/alias systems always take second seat to
1856 # python variables (the magic/alias systems always take second seat to
1857 # true python code).
1857 # true python code).
1858 if theRest and theRest[0] in '!=()':
1858 if theRest and theRest[0] in '!=()':
1859 return self.handle_normal(line,continue_prompt)
1859 return self.handle_normal(line,continue_prompt)
1860
1860
1861 if oinfo is None:
1861 if oinfo is None:
1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1863 # on. Since it has inevitable potential side effects, at least
1863 # on. Since it has inevitable potential side effects, at least
1864 # having autocall off should be a guarantee to the user that no
1864 # having autocall off should be a guarantee to the user that no
1865 # weird things will happen.
1865 # weird things will happen.
1866
1866
1867 if self.rc.autocall:
1867 if self.rc.autocall:
1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1869 else:
1869 else:
1870 # in this case, all that's left is either an alias or
1870 # in this case, all that's left is either an alias or
1871 # processing the line normally.
1871 # processing the line normally.
1872 if iFun in self.alias_table:
1872 if iFun in self.alias_table:
1873 return self.handle_alias(line,continue_prompt,
1873 return self.handle_alias(line,continue_prompt,
1874 pre,iFun,theRest)
1874 pre,iFun,theRest)
1875
1875
1876 else:
1876 else:
1877 return self.handle_normal(line,continue_prompt)
1877 return self.handle_normal(line,continue_prompt)
1878
1878
1879 if not oinfo['found']:
1879 if not oinfo['found']:
1880 return self.handle_normal(line,continue_prompt)
1880 return self.handle_normal(line,continue_prompt)
1881 else:
1881 else:
1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1883 if oinfo['isalias']:
1883 if oinfo['isalias']:
1884 return self.handle_alias(line,continue_prompt,
1884 return self.handle_alias(line,continue_prompt,
1885 pre,iFun,theRest)
1885 pre,iFun,theRest)
1886
1886
1887 if self.rc.autocall and \
1887 if self.rc.autocall and \
1888 not self.re_exclude_auto.match(theRest) and \
1888 not self.re_exclude_auto.match(theRest) and \
1889 self.re_fun_name.match(iFun) and \
1889 self.re_fun_name.match(iFun) and \
1890 callable(oinfo['obj']) :
1890 callable(oinfo['obj']) :
1891 #print 'going auto' # dbg
1891 #print 'going auto' # dbg
1892 return self.handle_auto(line,continue_prompt,
1892 return self.handle_auto(line,continue_prompt,
1893 pre,iFun,theRest,oinfo['obj'])
1893 pre,iFun,theRest,oinfo['obj'])
1894 else:
1894 else:
1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1896 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1897
1897
1898 # If we get here, we have a normal Python line. Log and return.
1898 # If we get here, we have a normal Python line. Log and return.
1899 return self.handle_normal(line,continue_prompt)
1899 return self.handle_normal(line,continue_prompt)
1900
1900
1901 def _prefilter_dumb(self, line, continue_prompt):
1901 def _prefilter_dumb(self, line, continue_prompt):
1902 """simple prefilter function, for debugging"""
1902 """simple prefilter function, for debugging"""
1903 return self.handle_normal(line,continue_prompt)
1903 return self.handle_normal(line,continue_prompt)
1904
1904
1905 # Set the default prefilter() function (this can be user-overridden)
1905 # Set the default prefilter() function (this can be user-overridden)
1906 prefilter = _prefilter
1906 prefilter = _prefilter
1907
1907
1908 def handle_normal(self,line,continue_prompt=None,
1908 def handle_normal(self,line,continue_prompt=None,
1909 pre=None,iFun=None,theRest=None):
1909 pre=None,iFun=None,theRest=None):
1910 """Handle normal input lines. Use as a template for handlers."""
1910 """Handle normal input lines. Use as a template for handlers."""
1911
1911
1912 # With autoindent on, we need some way to exit the input loop, and I
1912 # With autoindent on, we need some way to exit the input loop, and I
1913 # don't want to force the user to have to backspace all the way to
1913 # don't want to force the user to have to backspace all the way to
1914 # clear the line. The rule will be in this case, that either two
1914 # clear the line. The rule will be in this case, that either two
1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1916 # of a size different to the indent level, will exit the input loop.
1916 # of a size different to the indent level, will exit the input loop.
1917
1917
1918 if (continue_prompt and self.autoindent and line.isspace() and
1918 if (continue_prompt and self.autoindent and line.isspace() and
1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1920 line = ''
1920 line = ''
1921
1921
1922 self.log(line,continue_prompt)
1922 self.log(line,continue_prompt)
1923 return line
1923 return line
1924
1924
1925 def handle_alias(self,line,continue_prompt=None,
1925 def handle_alias(self,line,continue_prompt=None,
1926 pre=None,iFun=None,theRest=None):
1926 pre=None,iFun=None,theRest=None):
1927 """Handle alias input lines. """
1927 """Handle alias input lines. """
1928
1928
1929 # pre is needed, because it carries the leading whitespace. Otherwise
1929 # pre is needed, because it carries the leading whitespace. Otherwise
1930 # aliases won't work in indented sections.
1930 # aliases won't work in indented sections.
1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1932 self.log(line_out,continue_prompt)
1932 self.log(line_out,continue_prompt)
1933 return line_out
1933 return line_out
1934
1934
1935 def handle_shell_escape(self, line, continue_prompt=None,
1935 def handle_shell_escape(self, line, continue_prompt=None,
1936 pre=None,iFun=None,theRest=None):
1936 pre=None,iFun=None,theRest=None):
1937 """Execute the line in a shell, empty return value"""
1937 """Execute the line in a shell, empty return value"""
1938
1938
1939 #print 'line in :', `line` # dbg
1939 #print 'line in :', `line` # dbg
1940 # Example of a special handler. Others follow a similar pattern.
1940 # Example of a special handler. Others follow a similar pattern.
1941 if line.lstrip().startswith('!!'):
1941 if line.lstrip().startswith('!!'):
1942 # rewrite iFun/theRest to properly hold the call to %sx and
1942 # rewrite iFun/theRest to properly hold the call to %sx and
1943 # the actual command to be executed, so handle_magic can work
1943 # the actual command to be executed, so handle_magic can work
1944 # correctly
1944 # correctly
1945 theRest = '%s %s' % (iFun[2:],theRest)
1945 theRest = '%s %s' % (iFun[2:],theRest)
1946 iFun = 'sx'
1946 iFun = 'sx'
1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1948 line.lstrip()[2:]),
1948 line.lstrip()[2:]),
1949 continue_prompt,pre,iFun,theRest)
1949 continue_prompt,pre,iFun,theRest)
1950 else:
1950 else:
1951 cmd=line.lstrip().lstrip('!')
1951 cmd=line.lstrip().lstrip('!')
1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1953 # update cache/log and return
1953 # update cache/log and return
1954 self.log(line_out,continue_prompt)
1954 self.log(line_out,continue_prompt)
1955 return line_out
1955 return line_out
1956
1956
1957 def handle_magic(self, line, continue_prompt=None,
1957 def handle_magic(self, line, continue_prompt=None,
1958 pre=None,iFun=None,theRest=None):
1958 pre=None,iFun=None,theRest=None):
1959 """Execute magic functions."""
1959 """Execute magic functions."""
1960
1960
1961
1961
1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1963 self.log(cmd,continue_prompt)
1963 self.log(cmd,continue_prompt)
1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1965 return cmd
1965 return cmd
1966
1966
1967 def handle_auto(self, line, continue_prompt=None,
1967 def handle_auto(self, line, continue_prompt=None,
1968 pre=None,iFun=None,theRest=None,obj=None):
1968 pre=None,iFun=None,theRest=None,obj=None):
1969 """Hande lines which can be auto-executed, quoting if requested."""
1969 """Hande lines which can be auto-executed, quoting if requested."""
1970
1970
1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1972
1972
1973 # This should only be active for single-line input!
1973 # This should only be active for single-line input!
1974 if continue_prompt:
1974 if continue_prompt:
1975 self.log(line,continue_prompt)
1975 self.log(line,continue_prompt)
1976 return line
1976 return line
1977
1977
1978 auto_rewrite = True
1978 auto_rewrite = True
1979 if pre == self.ESC_QUOTE:
1979 if pre == self.ESC_QUOTE:
1980 # Auto-quote splitting on whitespace
1980 # Auto-quote splitting on whitespace
1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1982 elif pre == self.ESC_QUOTE2:
1982 elif pre == self.ESC_QUOTE2:
1983 # Auto-quote whole string
1983 # Auto-quote whole string
1984 newcmd = '%s("%s")' % (iFun,theRest)
1984 newcmd = '%s("%s")' % (iFun,theRest)
1985 else:
1985 else:
1986 # Auto-paren.
1986 # Auto-paren.
1987 # We only apply it to argument-less calls if the autocall
1987 # We only apply it to argument-less calls if the autocall
1988 # parameter is set to 2. We only need to check that autocall is <
1988 # parameter is set to 2. We only need to check that autocall is <
1989 # 2, since this function isn't called unless it's at least 1.
1989 # 2, since this function isn't called unless it's at least 1.
1990 if not theRest and (self.rc.autocall < 2):
1990 if not theRest and (self.rc.autocall < 2):
1991 newcmd = '%s %s' % (iFun,theRest)
1991 newcmd = '%s %s' % (iFun,theRest)
1992 auto_rewrite = False
1992 auto_rewrite = False
1993 else:
1993 else:
1994 if theRest.startswith('['):
1994 if theRest.startswith('['):
1995 if hasattr(obj,'__getitem__'):
1995 if hasattr(obj,'__getitem__'):
1996 # Don't autocall in this case: item access for an object
1996 # Don't autocall in this case: item access for an object
1997 # which is BOTH callable and implements __getitem__.
1997 # which is BOTH callable and implements __getitem__.
1998 newcmd = '%s %s' % (iFun,theRest)
1998 newcmd = '%s %s' % (iFun,theRest)
1999 auto_rewrite = False
1999 auto_rewrite = False
2000 else:
2000 else:
2001 # if the object doesn't support [] access, go ahead and
2001 # if the object doesn't support [] access, go ahead and
2002 # autocall
2002 # autocall
2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2004 elif theRest.endswith(';'):
2004 elif theRest.endswith(';'):
2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2006 else:
2006 else:
2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2008
2008
2009 if auto_rewrite:
2009 if auto_rewrite:
2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2011 # log what is now valid Python, not the actual user input (without the
2011 # log what is now valid Python, not the actual user input (without the
2012 # final newline)
2012 # final newline)
2013 self.log(newcmd,continue_prompt)
2013 self.log(newcmd,continue_prompt)
2014 return newcmd
2014 return newcmd
2015
2015
2016 def handle_help(self, line, continue_prompt=None,
2016 def handle_help(self, line, continue_prompt=None,
2017 pre=None,iFun=None,theRest=None):
2017 pre=None,iFun=None,theRest=None):
2018 """Try to get some help for the object.
2018 """Try to get some help for the object.
2019
2019
2020 obj? or ?obj -> basic information.
2020 obj? or ?obj -> basic information.
2021 obj?? or ??obj -> more details.
2021 obj?? or ??obj -> more details.
2022 """
2022 """
2023
2023
2024 # We need to make sure that we don't process lines which would be
2024 # We need to make sure that we don't process lines which would be
2025 # otherwise valid python, such as "x=1 # what?"
2025 # otherwise valid python, such as "x=1 # what?"
2026 try:
2026 try:
2027 codeop.compile_command(line)
2027 codeop.compile_command(line)
2028 except SyntaxError:
2028 except SyntaxError:
2029 # We should only handle as help stuff which is NOT valid syntax
2029 # We should only handle as help stuff which is NOT valid syntax
2030 if line[0]==self.ESC_HELP:
2030 if line[0]==self.ESC_HELP:
2031 line = line[1:]
2031 line = line[1:]
2032 elif line[-1]==self.ESC_HELP:
2032 elif line[-1]==self.ESC_HELP:
2033 line = line[:-1]
2033 line = line[:-1]
2034 self.log('#?'+line)
2034 self.log('#?'+line)
2035 if line:
2035 if line:
2036 self.magic_pinfo(line)
2036 self.magic_pinfo(line)
2037 else:
2037 else:
2038 page(self.usage,screen_lines=self.rc.screen_length)
2038 page(self.usage,screen_lines=self.rc.screen_length)
2039 return '' # Empty string is needed here!
2039 return '' # Empty string is needed here!
2040 except:
2040 except:
2041 # Pass any other exceptions through to the normal handler
2041 # Pass any other exceptions through to the normal handler
2042 return self.handle_normal(line,continue_prompt)
2042 return self.handle_normal(line,continue_prompt)
2043 else:
2043 else:
2044 # If the code compiles ok, we should handle it normally
2044 # If the code compiles ok, we should handle it normally
2045 return self.handle_normal(line,continue_prompt)
2045 return self.handle_normal(line,continue_prompt)
2046
2046
2047 def handle_emacs(self,line,continue_prompt=None,
2047 def handle_emacs(self,line,continue_prompt=None,
2048 pre=None,iFun=None,theRest=None):
2048 pre=None,iFun=None,theRest=None):
2049 """Handle input lines marked by python-mode."""
2049 """Handle input lines marked by python-mode."""
2050
2050
2051 # Currently, nothing is done. Later more functionality can be added
2051 # Currently, nothing is done. Later more functionality can be added
2052 # here if needed.
2052 # here if needed.
2053
2053
2054 # The input cache shouldn't be updated
2054 # The input cache shouldn't be updated
2055
2055
2056 return line
2056 return line
2057
2057
2058 def mktempfile(self,data=None):
2058 def mktempfile(self,data=None):
2059 """Make a new tempfile and return its filename.
2059 """Make a new tempfile and return its filename.
2060
2060
2061 This makes a call to tempfile.mktemp, but it registers the created
2061 This makes a call to tempfile.mktemp, but it registers the created
2062 filename internally so ipython cleans it up at exit time.
2062 filename internally so ipython cleans it up at exit time.
2063
2063
2064 Optional inputs:
2064 Optional inputs:
2065
2065
2066 - data(None): if data is given, it gets written out to the temp file
2066 - data(None): if data is given, it gets written out to the temp file
2067 immediately, and the file is closed again."""
2067 immediately, and the file is closed again."""
2068
2068
2069 filename = tempfile.mktemp('.py','ipython_edit_')
2069 filename = tempfile.mktemp('.py','ipython_edit_')
2070 self.tempfiles.append(filename)
2070 self.tempfiles.append(filename)
2071
2071
2072 if data:
2072 if data:
2073 tmp_file = open(filename,'w')
2073 tmp_file = open(filename,'w')
2074 tmp_file.write(data)
2074 tmp_file.write(data)
2075 tmp_file.close()
2075 tmp_file.close()
2076 return filename
2076 return filename
2077
2077
2078 def write(self,data):
2078 def write(self,data):
2079 """Write a string to the default output"""
2079 """Write a string to the default output"""
2080 Term.cout.write(data)
2080 Term.cout.write(data)
2081
2081
2082 def write_err(self,data):
2082 def write_err(self,data):
2083 """Write a string to the default error output"""
2083 """Write a string to the default error output"""
2084 Term.cerr.write(data)
2084 Term.cerr.write(data)
2085
2085
2086 def exit(self):
2086 def exit(self):
2087 """Handle interactive exit.
2087 """Handle interactive exit.
2088
2088
2089 This method sets the exit_now attribute."""
2089 This method sets the exit_now attribute."""
2090
2090
2091 if self.rc.confirm_exit:
2091 if self.rc.confirm_exit:
2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2093 self.exit_now = True
2093 self.exit_now = True
2094 else:
2094 else:
2095 self.exit_now = True
2095 self.exit_now = True
2096 return self.exit_now
2096 return self.exit_now
2097
2097
2098 def safe_execfile(self,fname,*where,**kw):
2098 def safe_execfile(self,fname,*where,**kw):
2099 fname = os.path.expanduser(fname)
2099 fname = os.path.expanduser(fname)
2100
2100
2101 # find things also in current directory
2101 # find things also in current directory
2102 dname = os.path.dirname(fname)
2102 dname = os.path.dirname(fname)
2103 if not sys.path.count(dname):
2103 if not sys.path.count(dname):
2104 sys.path.append(dname)
2104 sys.path.append(dname)
2105
2105
2106 try:
2106 try:
2107 xfile = open(fname)
2107 xfile = open(fname)
2108 except:
2108 except:
2109 print >> Term.cerr, \
2109 print >> Term.cerr, \
2110 'Could not open file <%s> for safe execution.' % fname
2110 'Could not open file <%s> for safe execution.' % fname
2111 return None
2111 return None
2112
2112
2113 kw.setdefault('islog',0)
2113 kw.setdefault('islog',0)
2114 kw.setdefault('quiet',1)
2114 kw.setdefault('quiet',1)
2115 kw.setdefault('exit_ignore',0)
2115 kw.setdefault('exit_ignore',0)
2116 first = xfile.readline()
2116 first = xfile.readline()
2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2118 xfile.close()
2118 xfile.close()
2119 # line by line execution
2119 # line by line execution
2120 if first.startswith(loghead) or kw['islog']:
2120 if first.startswith(loghead) or kw['islog']:
2121 print 'Loading log file <%s> one line at a time...' % fname
2121 print 'Loading log file <%s> one line at a time...' % fname
2122 if kw['quiet']:
2122 if kw['quiet']:
2123 stdout_save = sys.stdout
2123 stdout_save = sys.stdout
2124 sys.stdout = StringIO.StringIO()
2124 sys.stdout = StringIO.StringIO()
2125 try:
2125 try:
2126 globs,locs = where[0:2]
2126 globs,locs = where[0:2]
2127 except:
2127 except:
2128 try:
2128 try:
2129 globs = locs = where[0]
2129 globs = locs = where[0]
2130 except:
2130 except:
2131 globs = locs = globals()
2131 globs = locs = globals()
2132 badblocks = []
2132 badblocks = []
2133
2133
2134 # we also need to identify indented blocks of code when replaying
2134 # we also need to identify indented blocks of code when replaying
2135 # logs and put them together before passing them to an exec
2135 # logs and put them together before passing them to an exec
2136 # statement. This takes a bit of regexp and look-ahead work in the
2136 # statement. This takes a bit of regexp and look-ahead work in the
2137 # file. It's easiest if we swallow the whole thing in memory
2137 # file. It's easiest if we swallow the whole thing in memory
2138 # first, and manually walk through the lines list moving the
2138 # first, and manually walk through the lines list moving the
2139 # counter ourselves.
2139 # counter ourselves.
2140 indent_re = re.compile('\s+\S')
2140 indent_re = re.compile('\s+\S')
2141 xfile = open(fname)
2141 xfile = open(fname)
2142 filelines = xfile.readlines()
2142 filelines = xfile.readlines()
2143 xfile.close()
2143 xfile.close()
2144 nlines = len(filelines)
2144 nlines = len(filelines)
2145 lnum = 0
2145 lnum = 0
2146 while lnum < nlines:
2146 while lnum < nlines:
2147 line = filelines[lnum]
2147 line = filelines[lnum]
2148 lnum += 1
2148 lnum += 1
2149 # don't re-insert logger status info into cache
2149 # don't re-insert logger status info into cache
2150 if line.startswith('#log#'):
2150 if line.startswith('#log#'):
2151 continue
2151 continue
2152 else:
2152 else:
2153 # build a block of code (maybe a single line) for execution
2153 # build a block of code (maybe a single line) for execution
2154 block = line
2154 block = line
2155 try:
2155 try:
2156 next = filelines[lnum] # lnum has already incremented
2156 next = filelines[lnum] # lnum has already incremented
2157 except:
2157 except:
2158 next = None
2158 next = None
2159 while next and indent_re.match(next):
2159 while next and indent_re.match(next):
2160 block += next
2160 block += next
2161 lnum += 1
2161 lnum += 1
2162 try:
2162 try:
2163 next = filelines[lnum]
2163 next = filelines[lnum]
2164 except:
2164 except:
2165 next = None
2165 next = None
2166 # now execute the block of one or more lines
2166 # now execute the block of one or more lines
2167 try:
2167 try:
2168 exec block in globs,locs
2168 exec block in globs,locs
2169 except SystemExit:
2169 except SystemExit:
2170 pass
2170 pass
2171 except:
2171 except:
2172 badblocks.append(block.rstrip())
2172 badblocks.append(block.rstrip())
2173 if kw['quiet']: # restore stdout
2173 if kw['quiet']: # restore stdout
2174 sys.stdout.close()
2174 sys.stdout.close()
2175 sys.stdout = stdout_save
2175 sys.stdout = stdout_save
2176 print 'Finished replaying log file <%s>' % fname
2176 print 'Finished replaying log file <%s>' % fname
2177 if badblocks:
2177 if badblocks:
2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2179 '<%s> reported errors:' % fname)
2179 '<%s> reported errors:' % fname)
2180
2180
2181 for badline in badblocks:
2181 for badline in badblocks:
2182 print >> sys.stderr, badline
2182 print >> sys.stderr, badline
2183 else: # regular file execution
2183 else: # regular file execution
2184 try:
2184 try:
2185 execfile(fname,*where)
2185 execfile(fname,*where)
2186 except SyntaxError:
2186 except SyntaxError:
2187 etype,evalue = sys.exc_info()[:2]
2187 etype,evalue = sys.exc_info()[:2]
2188 self.SyntaxTB(etype,evalue,[])
2188 self.SyntaxTB(etype,evalue,[])
2189 warn('Failure executing file: <%s>' % fname)
2189 warn('Failure executing file: <%s>' % fname)
2190 except SystemExit,status:
2190 except SystemExit,status:
2191 if not kw['exit_ignore']:
2191 if not kw['exit_ignore']:
2192 self.InteractiveTB()
2192 self.InteractiveTB()
2193 warn('Failure executing file: <%s>' % fname)
2193 warn('Failure executing file: <%s>' % fname)
2194 except:
2194 except:
2195 self.InteractiveTB()
2195 self.InteractiveTB()
2196 warn('Failure executing file: <%s>' % fname)
2196 warn('Failure executing file: <%s>' % fname)
2197
2197
2198 #************************* end of file <iplib.py> *****************************
2198 #************************* end of file <iplib.py> *****************************
@@ -1,703 +1,704 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or better.
5 Requires Python 2.1 or better.
6
6
7 This file contains the main make_IPython() starter function.
7 This file contains the main make_IPython() starter function.
8
8
9 $Id: ipmaker.py 1005 2006-01-12 08:39:26Z fperez $"""
9 $Id: ipmaker.py 1017 2006-01-14 09:46:45Z vivainio $"""
10
10
11 #*****************************************************************************
11 #*****************************************************************************
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 #
13 #
14 # Distributed under the terms of the BSD License. The full license is in
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
15 # the file COPYING, distributed as part of this software.
16 #*****************************************************************************
16 #*****************************************************************************
17
17
18 from IPython import Release
18 from IPython import Release
19 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __license__ = Release.license
20 __license__ = Release.license
21 __version__ = Release.version
21 __version__ = Release.version
22
22
23 credits._Printer__data = """
23 credits._Printer__data = """
24 Python: %s
24 Python: %s
25
25
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
27 See http://ipython.scipy.org for more information.""" \
27 See http://ipython.scipy.org for more information.""" \
28 % credits._Printer__data
28 % credits._Printer__data
29
29
30 copyright._Printer__data += """
30 copyright._Printer__data += """
31
31
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
33 All Rights Reserved."""
33 All Rights Reserved."""
34
34
35 #****************************************************************************
35 #****************************************************************************
36 # Required modules
36 # Required modules
37
37
38 # From the standard library
38 # From the standard library
39 import __main__
39 import __main__
40 import __builtin__
40 import __builtin__
41 import os
41 import os
42 import re
42 import re
43 import sys
43 import sys
44 import types
44 import types
45 from pprint import pprint,pformat
45 from pprint import pprint,pformat
46
46
47 # Our own
47 # Our own
48 from IPython import DPyGetOpt
48 from IPython import DPyGetOpt
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.OutputTrap import OutputTrap
50 from IPython.OutputTrap import OutputTrap
51 from IPython.ConfigLoader import ConfigLoader
51 from IPython.ConfigLoader import ConfigLoader
52 from IPython.iplib import InteractiveShell
52 from IPython.iplib import InteractiveShell
53 from IPython.usage import cmd_line_usage,interactive_usage
53 from IPython.usage import cmd_line_usage,interactive_usage
54 from IPython.genutils import *
54 from IPython.genutils import *
55
55
56 #-----------------------------------------------------------------------------
56 #-----------------------------------------------------------------------------
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
58 rc_override=None,shell_class=InteractiveShell,
58 rc_override=None,shell_class=InteractiveShell,
59 embedded=False,**kw):
59 embedded=False,**kw):
60 """This is a dump of IPython into a single function.
60 """This is a dump of IPython into a single function.
61
61
62 Later it will have to be broken up in a sensible manner.
62 Later it will have to be broken up in a sensible manner.
63
63
64 Arguments:
64 Arguments:
65
65
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
67 script name, b/c DPyGetOpt strips the first argument only for the real
67 script name, b/c DPyGetOpt strips the first argument only for the real
68 sys.argv.
68 sys.argv.
69
69
70 - user_ns: a dict to be used as the user's namespace."""
70 - user_ns: a dict to be used as the user's namespace."""
71
71
72 #----------------------------------------------------------------------
72 #----------------------------------------------------------------------
73 # Defaults and initialization
73 # Defaults and initialization
74
74
75 # For developer debugging, deactivates crash handler and uses pdb.
75 # For developer debugging, deactivates crash handler and uses pdb.
76 DEVDEBUG = False
76 DEVDEBUG = False
77
77
78 if argv is None:
78 if argv is None:
79 argv = sys.argv
79 argv = sys.argv
80
80
81 # __IP is the main global that lives throughout and represents the whole
81 # __IP is the main global that lives throughout and represents the whole
82 # application. If the user redefines it, all bets are off as to what
82 # application. If the user redefines it, all bets are off as to what
83 # happens.
83 # happens.
84
84
85 # __IP is the name of he global which the caller will have accessible as
85 # __IP is the name of he global which the caller will have accessible as
86 # __IP.name. We set its name via the first parameter passed to
86 # __IP.name. We set its name via the first parameter passed to
87 # InteractiveShell:
87 # InteractiveShell:
88
88
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
90 embedded=embedded,**kw)
90 embedded=embedded,**kw)
91
91
92 # Put 'help' in the user namespace
92 # Put 'help' in the user namespace
93 from site import _Helper
93 from site import _Helper
94 IP.user_ns['help'] = _Helper()
94 IP.user_ns['help'] = _Helper()
95
95
96
96
97 if DEVDEBUG:
97 if DEVDEBUG:
98 # For developer debugging only (global flag)
98 # For developer debugging only (global flag)
99 from IPython import ultraTB
99 from IPython import ultraTB
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
101
101
102 IP.BANNER_PARTS = ['Python %s\n'
102 IP.BANNER_PARTS = ['Python %s\n'
103 'Type "copyright", "credits" or "license" '
103 'Type "copyright", "credits" or "license" '
104 'for more information.\n'
104 'for more information.\n'
105 % (sys.version.split('\n')[0],),
105 % (sys.version.split('\n')[0],),
106 "IPython %s -- An enhanced Interactive Python."
106 "IPython %s -- An enhanced Interactive Python."
107 % (__version__,),
107 % (__version__,),
108 """? -> Introduction to IPython's features.
108 """? -> Introduction to IPython's features.
109 %magic -> Information about IPython's 'magic' % functions.
109 %magic -> Information about IPython's 'magic' % functions.
110 help -> Python's own help system.
110 help -> Python's own help system.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
112 """ ]
112 """ ]
113
113
114 IP.usage = interactive_usage
114 IP.usage = interactive_usage
115
115
116 # Platform-dependent suffix and directory names. We use _ipython instead
116 # Platform-dependent suffix and directory names. We use _ipython instead
117 # of .ipython under win32 b/c there's software that breaks with .named
117 # of .ipython under win32 b/c there's software that breaks with .named
118 # directories on that platform.
118 # directories on that platform.
119 if os.name == 'posix':
119 if os.name == 'posix':
120 rc_suffix = ''
120 rc_suffix = ''
121 ipdir_def = '.ipython'
121 ipdir_def = '.ipython'
122 else:
122 else:
123 rc_suffix = '.ini'
123 rc_suffix = '.ini'
124 ipdir_def = '_ipython'
124 ipdir_def = '_ipython'
125
125
126 # default directory for configuration
126 # default directory for configuration
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
128 os.path.join(IP.home_dir,ipdir_def)))
128 os.path.join(IP.home_dir,ipdir_def)))
129
129
130 # we need the directory where IPython itself is installed
130 # we need the directory where IPython itself is installed
131 import IPython
131 import IPython
132 IPython_dir = os.path.dirname(IPython.__file__)
132 IPython_dir = os.path.dirname(IPython.__file__)
133 del IPython
133 del IPython
134
134
135 #-------------------------------------------------------------------------
135 #-------------------------------------------------------------------------
136 # Command line handling
136 # Command line handling
137
137
138 # Valid command line options (uses DPyGetOpt syntax, like Perl's
138 # Valid command line options (uses DPyGetOpt syntax, like Perl's
139 # GetOpt::Long)
139 # GetOpt::Long)
140
140
141 # Any key not listed here gets deleted even if in the file (like session
141 # Any key not listed here gets deleted even if in the file (like session
142 # or profile). That's deliberate, to maintain the rc namespace clean.
142 # or profile). That's deliberate, to maintain the rc namespace clean.
143
143
144 # Each set of options appears twice: under _conv only the names are
144 # Each set of options appears twice: under _conv only the names are
145 # listed, indicating which type they must be converted to when reading the
145 # listed, indicating which type they must be converted to when reading the
146 # ipythonrc file. And under DPyGetOpt they are listed with the regular
146 # ipythonrc file. And under DPyGetOpt they are listed with the regular
147 # DPyGetOpt syntax (=s,=i,:f,etc).
147 # DPyGetOpt syntax (=s,=i,:f,etc).
148
148
149 # Make sure there's a space before each end of line (they get auto-joined!)
149 # Make sure there's a space before each end of line (they get auto-joined!)
150 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
150 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
151 'c=s classic|cl color_info! colors=s confirm_exit! '
151 'c=s classic|cl color_info! colors=s confirm_exit! '
152 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
152 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
153 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
153 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
154 'quick screen_length|sl=i prompts_pad_left=i '
154 'quick screen_length|sl=i prompts_pad_left=i '
155 'logfile|lf=s logplay|lp=s profile|p=s '
155 'logfile|lf=s logplay|lp=s profile|p=s '
156 'readline! readline_merge_completions! '
156 'readline! readline_merge_completions! '
157 'readline_omit__names! '
157 'readline_omit__names! '
158 'rcfile=s separate_in|si=s separate_out|so=s '
158 'rcfile=s separate_in|si=s separate_out|so=s '
159 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
159 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
160 'magic_docstrings system_verbose! '
160 'magic_docstrings system_verbose! '
161 'multi_line_specials! '
161 'multi_line_specials! '
162 'wxversion=s '
162 'wxversion=s '
163 'autoedit_syntax!')
163 'autoedit_syntax!')
164
164
165 # Options that can *only* appear at the cmd line (not in rcfiles).
165 # Options that can *only* appear at the cmd line (not in rcfiles).
166
166
167 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
167 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
168 # the 'C-c !' command in emacs automatically appends a -i option at the end.
168 # the 'C-c !' command in emacs automatically appends a -i option at the end.
169 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
169 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
170 'gthread! qthread! wthread! pylab! tk!')
170 'gthread! qthread! wthread! pylab! tk!')
171
171
172 # Build the actual name list to be used by DPyGetOpt
172 # Build the actual name list to be used by DPyGetOpt
173 opts_names = qw(cmdline_opts) + qw(cmdline_only)
173 opts_names = qw(cmdline_opts) + qw(cmdline_only)
174
174
175 # Set sensible command line defaults.
175 # Set sensible command line defaults.
176 # This should have everything from cmdline_opts and cmdline_only
176 # This should have everything from cmdline_opts and cmdline_only
177 opts_def = Struct(autocall = 1,
177 opts_def = Struct(autocall = 1,
178 autoedit_syntax = 1,
178 autoedit_syntax = 1,
179 autoindent=0,
179 autoindent=0,
180 automagic = 1,
180 automagic = 1,
181 banner = 1,
181 banner = 1,
182 cache_size = 1000,
182 cache_size = 1000,
183 c = '',
183 c = '',
184 classic = 0,
184 classic = 0,
185 colors = 'NoColor',
185 colors = 'NoColor',
186 color_info = 0,
186 color_info = 0,
187 confirm_exit = 1,
187 confirm_exit = 1,
188 debug = 0,
188 debug = 0,
189 deep_reload = 0,
189 deep_reload = 0,
190 editor = '0',
190 editor = '0',
191 help = 0,
191 help = 0,
192 ignore = 0,
192 ignore = 0,
193 ipythondir = ipythondir,
193 ipythondir = ipythondir,
194 log = 0,
194 log = 0,
195 logfile = '',
195 logfile = '',
196 logplay = '',
196 logplay = '',
197 multi_line_specials = 1,
197 multi_line_specials = 1,
198 messages = 1,
198 messages = 1,
199 nosep = 0,
199 nosep = 0,
200 pdb = 0,
200 pdb = 0,
201 pprint = 0,
201 pprint = 0,
202 profile = '',
202 profile = '',
203 prompt_in1 = 'In [\\#]: ',
203 prompt_in1 = 'In [\\#]: ',
204 prompt_in2 = ' .\\D.: ',
204 prompt_in2 = ' .\\D.: ',
205 prompt_out = 'Out[\\#]: ',
205 prompt_out = 'Out[\\#]: ',
206 prompts_pad_left = 1,
206 prompts_pad_left = 1,
207 quick = 0,
207 quick = 0,
208 readline = 1,
208 readline = 1,
209 readline_merge_completions = 1,
209 readline_merge_completions = 1,
210 readline_omit__names = 0,
210 readline_omit__names = 0,
211 rcfile = 'ipythonrc' + rc_suffix,
211 rcfile = 'ipythonrc' + rc_suffix,
212 screen_length = 0,
212 screen_length = 0,
213 separate_in = '\n',
213 separate_in = '\n',
214 separate_out = '\n',
214 separate_out = '\n',
215 separate_out2 = '',
215 separate_out2 = '',
216 system_verbose = 0,
216 system_verbose = 0,
217 gthread = 0,
217 gthread = 0,
218 qthread = 0,
218 qthread = 0,
219 wthread = 0,
219 wthread = 0,
220 pylab = 0,
220 pylab = 0,
221 tk = 0,
221 tk = 0,
222 upgrade = 0,
222 upgrade = 0,
223 Version = 0,
223 Version = 0,
224 xmode = 'Verbose',
224 xmode = 'Verbose',
225 wildcards_case_sensitive = 1,
225 wildcards_case_sensitive = 1,
226 wxversion = '0',
226 wxversion = '0',
227 magic_docstrings = 0, # undocumented, for doc generation
227 magic_docstrings = 0, # undocumented, for doc generation
228 )
228 )
229
229
230 # Things that will *only* appear in rcfiles (not at the command line).
230 # Things that will *only* appear in rcfiles (not at the command line).
231 # Make sure there's a space before each end of line (they get auto-joined!)
231 # Make sure there's a space before each end of line (they get auto-joined!)
232 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
232 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
233 qw_lol: 'import_some ',
233 qw_lol: 'import_some ',
234 # for things with embedded whitespace:
234 # for things with embedded whitespace:
235 list_strings:'execute alias readline_parse_and_bind ',
235 list_strings:'execute alias readline_parse_and_bind ',
236 # Regular strings need no conversion:
236 # Regular strings need no conversion:
237 None:'readline_remove_delims ',
237 None:'readline_remove_delims ',
238 }
238 }
239 # Default values for these
239 # Default values for these
240 rc_def = Struct(include = [],
240 rc_def = Struct(include = [],
241 import_mod = [],
241 import_mod = [],
242 import_all = [],
242 import_all = [],
243 import_some = [[]],
243 import_some = [[]],
244 execute = [],
244 execute = [],
245 execfile = [],
245 execfile = [],
246 alias = [],
246 alias = [],
247 readline_parse_and_bind = [],
247 readline_parse_and_bind = [],
248 readline_remove_delims = '',
248 readline_remove_delims = '',
249 )
249 )
250
250
251 # Build the type conversion dictionary from the above tables:
251 # Build the type conversion dictionary from the above tables:
252 typeconv = rcfile_opts.copy()
252 typeconv = rcfile_opts.copy()
253 typeconv.update(optstr2types(cmdline_opts))
253 typeconv.update(optstr2types(cmdline_opts))
254
254
255 # FIXME: the None key appears in both, put that back together by hand. Ugly!
255 # FIXME: the None key appears in both, put that back together by hand. Ugly!
256 typeconv[None] += ' ' + rcfile_opts[None]
256 typeconv[None] += ' ' + rcfile_opts[None]
257
257
258 # Remove quotes at ends of all strings (used to protect spaces)
258 # Remove quotes at ends of all strings (used to protect spaces)
259 typeconv[unquote_ends] = typeconv[None]
259 typeconv[unquote_ends] = typeconv[None]
260 del typeconv[None]
260 del typeconv[None]
261
261
262 # Build the list we'll use to make all config decisions with defaults:
262 # Build the list we'll use to make all config decisions with defaults:
263 opts_all = opts_def.copy()
263 opts_all = opts_def.copy()
264 opts_all.update(rc_def)
264 opts_all.update(rc_def)
265
265
266 # Build conflict resolver for recursive loading of config files:
266 # Build conflict resolver for recursive loading of config files:
267 # - preserve means the outermost file maintains the value, it is not
267 # - preserve means the outermost file maintains the value, it is not
268 # overwritten if an included file has the same key.
268 # overwritten if an included file has the same key.
269 # - add_flip applies + to the two values, so it better make sense to add
269 # - add_flip applies + to the two values, so it better make sense to add
270 # those types of keys. But it flips them first so that things loaded
270 # those types of keys. But it flips them first so that things loaded
271 # deeper in the inclusion chain have lower precedence.
271 # deeper in the inclusion chain have lower precedence.
272 conflict = {'preserve': ' '.join([ typeconv[int],
272 conflict = {'preserve': ' '.join([ typeconv[int],
273 typeconv[unquote_ends] ]),
273 typeconv[unquote_ends] ]),
274 'add_flip': ' '.join([ typeconv[qwflat],
274 'add_flip': ' '.join([ typeconv[qwflat],
275 typeconv[qw_lol],
275 typeconv[qw_lol],
276 typeconv[list_strings] ])
276 typeconv[list_strings] ])
277 }
277 }
278
278
279 # Now actually process the command line
279 # Now actually process the command line
280 getopt = DPyGetOpt.DPyGetOpt()
280 getopt = DPyGetOpt.DPyGetOpt()
281 getopt.setIgnoreCase(0)
281 getopt.setIgnoreCase(0)
282
282
283 getopt.parseConfiguration(opts_names)
283 getopt.parseConfiguration(opts_names)
284
284
285 try:
285 try:
286 getopt.processArguments(argv)
286 getopt.processArguments(argv)
287 except:
287 except:
288 print cmd_line_usage
288 print cmd_line_usage
289 warn('\nError in Arguments: ' + `sys.exc_value`)
289 warn('\nError in Arguments: ' + `sys.exc_value`)
290 sys.exit(1)
290 sys.exit(1)
291
291
292 # convert the options dict to a struct for much lighter syntax later
292 # convert the options dict to a struct for much lighter syntax later
293 opts = Struct(getopt.optionValues)
293 opts = Struct(getopt.optionValues)
294 args = getopt.freeValues
294 args = getopt.freeValues
295
295
296 # this is the struct (which has default values at this point) with which
296 # this is the struct (which has default values at this point) with which
297 # we make all decisions:
297 # we make all decisions:
298 opts_all.update(opts)
298 opts_all.update(opts)
299
299
300 # Options that force an immediate exit
300 # Options that force an immediate exit
301 if opts_all.help:
301 if opts_all.help:
302 page(cmd_line_usage)
302 page(cmd_line_usage)
303 sys.exit()
303 sys.exit()
304
304
305 if opts_all.Version:
305 if opts_all.Version:
306 print __version__
306 print __version__
307 sys.exit()
307 sys.exit()
308
308
309 if opts_all.magic_docstrings:
309 if opts_all.magic_docstrings:
310 IP.magic_magic('-latex')
310 IP.magic_magic('-latex')
311 sys.exit()
311 sys.exit()
312
312
313 # Create user config directory if it doesn't exist. This must be done
313 # Create user config directory if it doesn't exist. This must be done
314 # *after* getting the cmd line options.
314 # *after* getting the cmd line options.
315 if not os.path.isdir(opts_all.ipythondir):
315 if not os.path.isdir(opts_all.ipythondir):
316 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
316 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
317
317
318 # upgrade user config files while preserving a copy of the originals
318 # upgrade user config files while preserving a copy of the originals
319 if opts_all.upgrade:
319 if opts_all.upgrade:
320 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
320 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
321
321
322 # check mutually exclusive options in the *original* command line
322 # check mutually exclusive options in the *original* command line
323 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
323 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
324 qw('classic profile'),qw('classic rcfile')])
324 qw('classic profile'),qw('classic rcfile')])
325
325
326 #---------------------------------------------------------------------------
326 #---------------------------------------------------------------------------
327 # Log replay
327 # Log replay
328
328
329 # if -logplay, we need to 'become' the other session. That basically means
329 # if -logplay, we need to 'become' the other session. That basically means
330 # replacing the current command line environment with that of the old
330 # replacing the current command line environment with that of the old
331 # session and moving on.
331 # session and moving on.
332
332
333 # this is needed so that later we know we're in session reload mode, as
333 # this is needed so that later we know we're in session reload mode, as
334 # opts_all will get overwritten:
334 # opts_all will get overwritten:
335 load_logplay = 0
335 load_logplay = 0
336
336
337 if opts_all.logplay:
337 if opts_all.logplay:
338 load_logplay = opts_all.logplay
338 load_logplay = opts_all.logplay
339 opts_debug_save = opts_all.debug
339 opts_debug_save = opts_all.debug
340 try:
340 try:
341 logplay = open(opts_all.logplay)
341 logplay = open(opts_all.logplay)
342 except IOError:
342 except IOError:
343 if opts_all.debug: IP.InteractiveTB()
343 if opts_all.debug: IP.InteractiveTB()
344 warn('Could not open logplay file '+`opts_all.logplay`)
344 warn('Could not open logplay file '+`opts_all.logplay`)
345 # restore state as if nothing had happened and move on, but make
345 # restore state as if nothing had happened and move on, but make
346 # sure that later we don't try to actually load the session file
346 # sure that later we don't try to actually load the session file
347 logplay = None
347 logplay = None
348 load_logplay = 0
348 load_logplay = 0
349 del opts_all.logplay
349 del opts_all.logplay
350 else:
350 else:
351 try:
351 try:
352 logplay.readline()
352 logplay.readline()
353 logplay.readline();
353 logplay.readline();
354 # this reloads that session's command line
354 # this reloads that session's command line
355 cmd = logplay.readline()[6:]
355 cmd = logplay.readline()[6:]
356 exec cmd
356 exec cmd
357 # restore the true debug flag given so that the process of
357 # restore the true debug flag given so that the process of
358 # session loading itself can be monitored.
358 # session loading itself can be monitored.
359 opts.debug = opts_debug_save
359 opts.debug = opts_debug_save
360 # save the logplay flag so later we don't overwrite the log
360 # save the logplay flag so later we don't overwrite the log
361 opts.logplay = load_logplay
361 opts.logplay = load_logplay
362 # now we must update our own structure with defaults
362 # now we must update our own structure with defaults
363 opts_all.update(opts)
363 opts_all.update(opts)
364 # now load args
364 # now load args
365 cmd = logplay.readline()[6:]
365 cmd = logplay.readline()[6:]
366 exec cmd
366 exec cmd
367 logplay.close()
367 logplay.close()
368 except:
368 except:
369 logplay.close()
369 logplay.close()
370 if opts_all.debug: IP.InteractiveTB()
370 if opts_all.debug: IP.InteractiveTB()
371 warn("Logplay file lacking full configuration information.\n"
371 warn("Logplay file lacking full configuration information.\n"
372 "I'll try to read it, but some things may not work.")
372 "I'll try to read it, but some things may not work.")
373
373
374 #-------------------------------------------------------------------------
374 #-------------------------------------------------------------------------
375 # set up output traps: catch all output from files, being run, modules
375 # set up output traps: catch all output from files, being run, modules
376 # loaded, etc. Then give it to the user in a clean form at the end.
376 # loaded, etc. Then give it to the user in a clean form at the end.
377
377
378 msg_out = 'Output messages. '
378 msg_out = 'Output messages. '
379 msg_err = 'Error messages. '
379 msg_err = 'Error messages. '
380 msg_sep = '\n'
380 msg_sep = '\n'
381 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
381 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
382 msg_err,msg_sep,debug,
382 msg_err,msg_sep,debug,
383 quiet_out=1),
383 quiet_out=1),
384 user_exec = OutputTrap('User File Execution',msg_out,
384 user_exec = OutputTrap('User File Execution',msg_out,
385 msg_err,msg_sep,debug),
385 msg_err,msg_sep,debug),
386 logplay = OutputTrap('Log Loader',msg_out,
386 logplay = OutputTrap('Log Loader',msg_out,
387 msg_err,msg_sep,debug),
387 msg_err,msg_sep,debug),
388 summary = ''
388 summary = ''
389 )
389 )
390
390
391 #-------------------------------------------------------------------------
391 #-------------------------------------------------------------------------
392 # Process user ipythonrc-type configuration files
392 # Process user ipythonrc-type configuration files
393
393
394 # turn on output trapping and log to msg.config
394 # turn on output trapping and log to msg.config
395 # remember that with debug on, trapping is actually disabled
395 # remember that with debug on, trapping is actually disabled
396 msg.config.trap_all()
396 msg.config.trap_all()
397
397
398 # look for rcfile in current or default directory
398 # look for rcfile in current or default directory
399 try:
399 try:
400 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
400 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
401 except IOError:
401 except IOError:
402 if opts_all.debug: IP.InteractiveTB()
402 if opts_all.debug: IP.InteractiveTB()
403 warn('Configuration file %s not found. Ignoring request.'
403 warn('Configuration file %s not found. Ignoring request.'
404 % (opts_all.rcfile) )
404 % (opts_all.rcfile) )
405
405
406 # 'profiles' are a shorthand notation for config filenames
406 # 'profiles' are a shorthand notation for config filenames
407 if opts_all.profile:
407 if opts_all.profile:
408 try:
408 try:
409 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
409 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
410 + rc_suffix,
410 + rc_suffix,
411 opts_all.ipythondir)
411 opts_all.ipythondir)
412 except IOError:
412 except IOError:
413 if opts_all.debug: IP.InteractiveTB()
413 if opts_all.debug: IP.InteractiveTB()
414 opts.profile = '' # remove profile from options if invalid
414 opts.profile = '' # remove profile from options if invalid
415 warn('Profile configuration file %s not found. Ignoring request.'
415 warn('Profile configuration file %s not found. Ignoring request.'
416 % (opts_all.profile) )
416 % (opts_all.profile) )
417
417
418
418 # load the config file
419 # load the config file
419 rcfiledata = None
420 rcfiledata = None
420 if opts_all.quick:
421 if opts_all.quick:
421 print 'Launching IPython in quick mode. No config file read.'
422 print 'Launching IPython in quick mode. No config file read.'
422 elif opts_all.classic:
423 elif opts_all.classic:
423 print 'Launching IPython in classic mode. No config file read.'
424 print 'Launching IPython in classic mode. No config file read.'
424 elif opts_all.rcfile:
425 elif opts_all.rcfile:
425 try:
426 try:
426 cfg_loader = ConfigLoader(conflict)
427 cfg_loader = ConfigLoader(conflict)
427 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
428 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
428 'include',opts_all.ipythondir,
429 'include',opts_all.ipythondir,
429 purge = 1,
430 purge = 1,
430 unique = conflict['preserve'])
431 unique = conflict['preserve'])
431 except:
432 except:
432 IP.InteractiveTB()
433 IP.InteractiveTB()
433 warn('Problems loading configuration file '+
434 warn('Problems loading configuration file '+
434 `opts_all.rcfile`+
435 `opts_all.rcfile`+
435 '\nStarting with default -bare bones- configuration.')
436 '\nStarting with default -bare bones- configuration.')
436 else:
437 else:
437 warn('No valid configuration file found in either currrent directory\n'+
438 warn('No valid configuration file found in either currrent directory\n'+
438 'or in the IPython config. directory: '+`opts_all.ipythondir`+
439 'or in the IPython config. directory: '+`opts_all.ipythondir`+
439 '\nProceeding with internal defaults.')
440 '\nProceeding with internal defaults.')
440
441
441 #------------------------------------------------------------------------
442 #------------------------------------------------------------------------
442 # Set exception handlers in mode requested by user.
443 # Set exception handlers in mode requested by user.
443 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
444 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
444 IP.magic_xmode(opts_all.xmode)
445 IP.magic_xmode(opts_all.xmode)
445 otrap.release_out()
446 otrap.release_out()
446
447
447 #------------------------------------------------------------------------
448 #------------------------------------------------------------------------
448 # Execute user config
449 # Execute user config
449
450
450 # Create a valid config structure with the right precedence order:
451 # Create a valid config structure with the right precedence order:
451 # defaults < rcfile < command line. This needs to be in the instance, so
452 # defaults < rcfile < command line. This needs to be in the instance, so
452 # that method calls below that rely on it find it.
453 # that method calls below that rely on it find it.
453 IP.rc = rc_def.copy()
454 IP.rc = rc_def.copy()
454
455
455 # Work with a local alias inside this routine to avoid unnecessary
456 # Work with a local alias inside this routine to avoid unnecessary
456 # attribute lookups.
457 # attribute lookups.
457 IP_rc = IP.rc
458 IP_rc = IP.rc
458
459
459 IP_rc.update(opts_def)
460 IP_rc.update(opts_def)
460 if rcfiledata:
461 if rcfiledata:
461 # now we can update
462 # now we can update
462 IP_rc.update(rcfiledata)
463 IP_rc.update(rcfiledata)
463 IP_rc.update(opts)
464 IP_rc.update(opts)
464 IP_rc.update(rc_override)
465 IP_rc.update(rc_override)
465
466
466 # Store the original cmd line for reference:
467 # Store the original cmd line for reference:
467 IP_rc.opts = opts
468 IP_rc.opts = opts
468 IP_rc.args = args
469 IP_rc.args = args
469
470
470 # create a *runtime* Struct like rc for holding parameters which may be
471 # create a *runtime* Struct like rc for holding parameters which may be
471 # created and/or modified by runtime user extensions.
472 # created and/or modified by runtime user extensions.
472 IP.runtime_rc = Struct()
473 IP.runtime_rc = Struct()
473
474
474 # from this point on, all config should be handled through IP_rc,
475 # from this point on, all config should be handled through IP_rc,
475 # opts* shouldn't be used anymore.
476 # opts* shouldn't be used anymore.
476
477
477 # add personal .ipython dir to sys.path so that users can put things in
478 # add personal .ipython dir to sys.path so that users can put things in
478 # there for customization
479 # there for customization
479 sys.path.append(IP_rc.ipythondir)
480 sys.path.append(IP_rc.ipythondir)
480 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
481 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
481
482
482 # update IP_rc with some special things that need manual
483 # update IP_rc with some special things that need manual
483 # tweaks. Basically options which affect other options. I guess this
484 # tweaks. Basically options which affect other options. I guess this
484 # should just be written so that options are fully orthogonal and we
485 # should just be written so that options are fully orthogonal and we
485 # wouldn't worry about this stuff!
486 # wouldn't worry about this stuff!
486
487
487 if IP_rc.classic:
488 if IP_rc.classic:
488 IP_rc.quick = 1
489 IP_rc.quick = 1
489 IP_rc.cache_size = 0
490 IP_rc.cache_size = 0
490 IP_rc.pprint = 0
491 IP_rc.pprint = 0
491 IP_rc.prompt_in1 = '>>> '
492 IP_rc.prompt_in1 = '>>> '
492 IP_rc.prompt_in2 = '... '
493 IP_rc.prompt_in2 = '... '
493 IP_rc.prompt_out = ''
494 IP_rc.prompt_out = ''
494 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
495 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
495 IP_rc.colors = 'NoColor'
496 IP_rc.colors = 'NoColor'
496 IP_rc.xmode = 'Plain'
497 IP_rc.xmode = 'Plain'
497
498
498 # configure readline
499 # configure readline
499 # Define the history file for saving commands in between sessions
500 # Define the history file for saving commands in between sessions
500 if IP_rc.profile:
501 if IP_rc.profile:
501 histfname = 'history-%s' % IP_rc.profile
502 histfname = 'history-%s' % IP_rc.profile
502 else:
503 else:
503 histfname = 'history'
504 histfname = 'history'
504 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
505 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
505
506
506 # update exception handlers with rc file status
507 # update exception handlers with rc file status
507 otrap.trap_out() # I don't want these messages ever.
508 otrap.trap_out() # I don't want these messages ever.
508 IP.magic_xmode(IP_rc.xmode)
509 IP.magic_xmode(IP_rc.xmode)
509 otrap.release_out()
510 otrap.release_out()
510
511
511 # activate logging if requested and not reloading a log
512 # activate logging if requested and not reloading a log
512 if IP_rc.logplay:
513 if IP_rc.logplay:
513 IP.magic_logstart(IP_rc.logplay + ' append')
514 IP.magic_logstart(IP_rc.logplay + ' append')
514 elif IP_rc.logfile:
515 elif IP_rc.logfile:
515 IP.magic_logstart(IP_rc.logfile)
516 IP.magic_logstart(IP_rc.logfile)
516 elif IP_rc.log:
517 elif IP_rc.log:
517 IP.magic_logstart()
518 IP.magic_logstart()
518
519
519 # find user editor so that it we don't have to look it up constantly
520 # find user editor so that it we don't have to look it up constantly
520 if IP_rc.editor.strip()=='0':
521 if IP_rc.editor.strip()=='0':
521 try:
522 try:
522 ed = os.environ['EDITOR']
523 ed = os.environ['EDITOR']
523 except KeyError:
524 except KeyError:
524 if os.name == 'posix':
525 if os.name == 'posix':
525 ed = 'vi' # the only one guaranteed to be there!
526 ed = 'vi' # the only one guaranteed to be there!
526 else:
527 else:
527 ed = 'notepad' # same in Windows!
528 ed = 'notepad' # same in Windows!
528 IP_rc.editor = ed
529 IP_rc.editor = ed
529
530
530 # Keep track of whether this is an embedded instance or not (useful for
531 # Keep track of whether this is an embedded instance or not (useful for
531 # post-mortems).
532 # post-mortems).
532 IP_rc.embedded = IP.embedded
533 IP_rc.embedded = IP.embedded
533
534
534 # Recursive reload
535 # Recursive reload
535 try:
536 try:
536 from IPython import deep_reload
537 from IPython import deep_reload
537 if IP_rc.deep_reload:
538 if IP_rc.deep_reload:
538 __builtin__.reload = deep_reload.reload
539 __builtin__.reload = deep_reload.reload
539 else:
540 else:
540 __builtin__.dreload = deep_reload.reload
541 __builtin__.dreload = deep_reload.reload
541 del deep_reload
542 del deep_reload
542 except ImportError:
543 except ImportError:
543 pass
544 pass
544
545
545 # Save the current state of our namespace so that the interactive shell
546 # Save the current state of our namespace so that the interactive shell
546 # can later know which variables have been created by us from config files
547 # can later know which variables have been created by us from config files
547 # and loading. This way, loading a file (in any way) is treated just like
548 # and loading. This way, loading a file (in any way) is treated just like
548 # defining things on the command line, and %who works as expected.
549 # defining things on the command line, and %who works as expected.
549
550
550 # DON'T do anything that affects the namespace beyond this point!
551 # DON'T do anything that affects the namespace beyond this point!
551 IP.internal_ns.update(__main__.__dict__)
552 IP.internal_ns.update(__main__.__dict__)
552
553
553 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
554 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
554
555
555 # Now run through the different sections of the users's config
556 # Now run through the different sections of the users's config
556 if IP_rc.debug:
557 if IP_rc.debug:
557 print 'Trying to execute the following configuration structure:'
558 print 'Trying to execute the following configuration structure:'
558 print '(Things listed first are deeper in the inclusion tree and get'
559 print '(Things listed first are deeper in the inclusion tree and get'
559 print 'loaded first).\n'
560 print 'loaded first).\n'
560 pprint(IP_rc.__dict__)
561 pprint(IP_rc.__dict__)
561
562
562 for mod in IP_rc.import_mod:
563 for mod in IP_rc.import_mod:
563 try:
564 try:
564 exec 'import '+mod in IP.user_ns
565 exec 'import '+mod in IP.user_ns
565 except :
566 except :
566 IP.InteractiveTB()
567 IP.InteractiveTB()
567 import_fail_info(mod)
568 import_fail_info(mod)
568
569
569 for mod_fn in IP_rc.import_some:
570 for mod_fn in IP_rc.import_some:
570 if mod_fn == []: break
571 if mod_fn == []: break
571 mod,fn = mod_fn[0],','.join(mod_fn[1:])
572 mod,fn = mod_fn[0],','.join(mod_fn[1:])
572 try:
573 try:
573 exec 'from '+mod+' import '+fn in IP.user_ns
574 exec 'from '+mod+' import '+fn in IP.user_ns
574 except :
575 except :
575 IP.InteractiveTB()
576 IP.InteractiveTB()
576 import_fail_info(mod,fn)
577 import_fail_info(mod,fn)
577
578
578 for mod in IP_rc.import_all:
579 for mod in IP_rc.import_all:
579 try:
580 try:
580 exec 'from '+mod+' import *' in IP.user_ns
581 exec 'from '+mod+' import *' in IP.user_ns
581 except :
582 except :
582 IP.InteractiveTB()
583 IP.InteractiveTB()
583 import_fail_info(mod)
584 import_fail_info(mod)
584
585
585 for code in IP_rc.execute:
586 for code in IP_rc.execute:
586 try:
587 try:
587 exec code in IP.user_ns
588 exec code in IP.user_ns
588 except:
589 except:
589 IP.InteractiveTB()
590 IP.InteractiveTB()
590 warn('Failure executing code: ' + `code`)
591 warn('Failure executing code: ' + `code`)
591
592
592 # Execute the files the user wants in ipythonrc
593 # Execute the files the user wants in ipythonrc
593 for file in IP_rc.execfile:
594 for file in IP_rc.execfile:
594 try:
595 try:
595 file = filefind(file,sys.path+[IPython_dir])
596 file = filefind(file,sys.path+[IPython_dir])
596 except IOError:
597 except IOError:
597 warn(itpl('File $file not found. Skipping it.'))
598 warn(itpl('File $file not found. Skipping it.'))
598 else:
599 else:
599 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
600 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
600
601
601 # release stdout and stderr and save config log into a global summary
602 # release stdout and stderr and save config log into a global summary
602 msg.config.release_all()
603 msg.config.release_all()
603 if IP_rc.messages:
604 if IP_rc.messages:
604 msg.summary += msg.config.summary_all()
605 msg.summary += msg.config.summary_all()
605
606
606 #------------------------------------------------------------------------
607 #------------------------------------------------------------------------
607 # Setup interactive session
608 # Setup interactive session
608
609
609 # Now we should be fully configured. We can then execute files or load
610 # Now we should be fully configured. We can then execute files or load
610 # things only needed for interactive use. Then we'll open the shell.
611 # things only needed for interactive use. Then we'll open the shell.
611
612
612 # Take a snapshot of the user namespace before opening the shell. That way
613 # Take a snapshot of the user namespace before opening the shell. That way
613 # we'll be able to identify which things were interactively defined and
614 # we'll be able to identify which things were interactively defined and
614 # which were defined through config files.
615 # which were defined through config files.
615 IP.user_config_ns = IP.user_ns.copy()
616 IP.user_config_ns = IP.user_ns.copy()
616
617
617 # Force reading a file as if it were a session log. Slower but safer.
618 # Force reading a file as if it were a session log. Slower but safer.
618 if load_logplay:
619 if load_logplay:
619 print 'Replaying log...'
620 print 'Replaying log...'
620 try:
621 try:
621 if IP_rc.debug:
622 if IP_rc.debug:
622 logplay_quiet = 0
623 logplay_quiet = 0
623 else:
624 else:
624 logplay_quiet = 1
625 logplay_quiet = 1
625
626
626 msg.logplay.trap_all()
627 msg.logplay.trap_all()
627 IP.safe_execfile(load_logplay,IP.user_ns,
628 IP.safe_execfile(load_logplay,IP.user_ns,
628 islog = 1, quiet = logplay_quiet)
629 islog = 1, quiet = logplay_quiet)
629 msg.logplay.release_all()
630 msg.logplay.release_all()
630 if IP_rc.messages:
631 if IP_rc.messages:
631 msg.summary += msg.logplay.summary_all()
632 msg.summary += msg.logplay.summary_all()
632 except:
633 except:
633 warn('Problems replaying logfile %s.' % load_logplay)
634 warn('Problems replaying logfile %s.' % load_logplay)
634 IP.InteractiveTB()
635 IP.InteractiveTB()
635
636
636 # Load remaining files in command line
637 # Load remaining files in command line
637 msg.user_exec.trap_all()
638 msg.user_exec.trap_all()
638
639
639 # Do NOT execute files named in the command line as scripts to be loaded
640 # Do NOT execute files named in the command line as scripts to be loaded
640 # by embedded instances. Doing so has the potential for an infinite
641 # by embedded instances. Doing so has the potential for an infinite
641 # recursion if there are exceptions thrown in the process.
642 # recursion if there are exceptions thrown in the process.
642
643
643 # XXX FIXME: the execution of user files should be moved out to after
644 # XXX FIXME: the execution of user files should be moved out to after
644 # ipython is fully initialized, just as if they were run via %run at the
645 # ipython is fully initialized, just as if they were run via %run at the
645 # ipython prompt. This would also give them the benefit of ipython's
646 # ipython prompt. This would also give them the benefit of ipython's
646 # nice tracebacks.
647 # nice tracebacks.
647
648
648 if not embedded and IP_rc.args:
649 if not embedded and IP_rc.args:
649 name_save = IP.user_ns['__name__']
650 name_save = IP.user_ns['__name__']
650 IP.user_ns['__name__'] = '__main__'
651 IP.user_ns['__name__'] = '__main__'
651 try:
652 try:
652 # Set our own excepthook in case the user code tries to call it
653 # Set our own excepthook in case the user code tries to call it
653 # directly. This prevents triggering the IPython crash handler.
654 # directly. This prevents triggering the IPython crash handler.
654 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
655 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
655 for run in args:
656 for run in args:
656 IP.safe_execfile(run,IP.user_ns)
657 IP.safe_execfile(run,IP.user_ns)
657 finally:
658 finally:
658 # Reset our crash handler in place
659 # Reset our crash handler in place
659 sys.excepthook = old_excepthook
660 sys.excepthook = old_excepthook
660
661
661 IP.user_ns['__name__'] = name_save
662 IP.user_ns['__name__'] = name_save
662
663
663 msg.user_exec.release_all()
664 msg.user_exec.release_all()
664 if IP_rc.messages:
665 if IP_rc.messages:
665 msg.summary += msg.user_exec.summary_all()
666 msg.summary += msg.user_exec.summary_all()
666
667
667 # since we can't specify a null string on the cmd line, 0 is the equivalent:
668 # since we can't specify a null string on the cmd line, 0 is the equivalent:
668 if IP_rc.nosep:
669 if IP_rc.nosep:
669 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
670 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
670 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
671 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
671 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
672 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
672 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
673 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
673 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
674 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
674 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
675 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
675 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
676 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
676
677
677 # Determine how many lines at the bottom of the screen are needed for
678 # Determine how many lines at the bottom of the screen are needed for
678 # showing prompts, so we can know wheter long strings are to be printed or
679 # showing prompts, so we can know wheter long strings are to be printed or
679 # paged:
680 # paged:
680 num_lines_bot = IP_rc.separate_in.count('\n')+1
681 num_lines_bot = IP_rc.separate_in.count('\n')+1
681 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
682 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
682
683
683 # configure startup banner
684 # configure startup banner
684 if IP_rc.c: # regular python doesn't print the banner with -c
685 if IP_rc.c: # regular python doesn't print the banner with -c
685 IP_rc.banner = 0
686 IP_rc.banner = 0
686 if IP_rc.banner:
687 if IP_rc.banner:
687 BANN_P = IP.BANNER_PARTS
688 BANN_P = IP.BANNER_PARTS
688 else:
689 else:
689 BANN_P = []
690 BANN_P = []
690
691
691 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
692 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
692
693
693 # add message log (possibly empty)
694 # add message log (possibly empty)
694 if msg.summary: BANN_P.append(msg.summary)
695 if msg.summary: BANN_P.append(msg.summary)
695 # Final banner is a string
696 # Final banner is a string
696 IP.BANNER = '\n'.join(BANN_P)
697 IP.BANNER = '\n'.join(BANN_P)
697
698
698 # Finalize the IPython instance. This assumes the rc structure is fully
699 # Finalize the IPython instance. This assumes the rc structure is fully
699 # in place.
700 # in place.
700 IP.post_config_initialization()
701 IP.post_config_initialization()
701
702
702 return IP
703 return IP
703 #************************ end of file <ipmaker.py> **************************
704 #************************ end of file <ipmaker.py> **************************
@@ -1,4900 +1,4907 b''
1 2006-01-14 Ville Vainio <vivainio@gmail.com>
2
3 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
4 ipapi decorators for python 2.4 users, options() provides access to rc
5 data.
6
7
1 2006-01-13 Ville Vainio <vivainio@gmail.com>
8 2006-01-13 Ville Vainio <vivainio@gmail.com>
2
9
3 * IPython/platutils*.py: platform specific utility functions,
10 * IPython/platutils*.py: platform specific utility functions,
4 so far only set_term_title is implemented (change terminal
11 so far only set_term_title is implemented (change terminal
5 label in windowing systems). %cd now changes the title to
12 label in windowing systems). %cd now changes the title to
6 current dir.
13 current dir.
7
14
8 * IPython/Release.py: Added myself to "authors" list,
15 * IPython/Release.py: Added myself to "authors" list,
9 had to create new files.
16 had to create new files.
10
17
11 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
18 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
12 shell escape; not a known bug but had potential to be one in the
19 shell escape; not a known bug but had potential to be one in the
13 future.
20 future.
14
21
15 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
22 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
16 extension API for IPython! See the module for usage example. Fix
23 extension API for IPython! See the module for usage example. Fix
17 OInspect for docstring-less magic functions.
24 OInspect for docstring-less magic functions.
18
25
19
26
20 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
27 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
21
28
22 * IPython/iplib.py (raw_input): temporarily deactivate all
29 * IPython/iplib.py (raw_input): temporarily deactivate all
23 attempts at allowing pasting of code with autoindent on. It
30 attempts at allowing pasting of code with autoindent on. It
24 introduced bugs (reported by Prabhu) and I can't seem to find a
31 introduced bugs (reported by Prabhu) and I can't seem to find a
25 robust combination which works in all cases. Will have to revisit
32 robust combination which works in all cases. Will have to revisit
26 later.
33 later.
27
34
28 * IPython/genutils.py: remove isspace() function. We've dropped
35 * IPython/genutils.py: remove isspace() function. We've dropped
29 2.2 compatibility, so it's OK to use the string method.
36 2.2 compatibility, so it's OK to use the string method.
30
37
31 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
38 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
32
39
33 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
40 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
34 matching what NOT to autocall on, to include all python binary
41 matching what NOT to autocall on, to include all python binary
35 operators (including things like 'and', 'or', 'is' and 'in').
42 operators (including things like 'and', 'or', 'is' and 'in').
36 Prompted by a bug report on 'foo & bar', but I realized we had
43 Prompted by a bug report on 'foo & bar', but I realized we had
37 many more potential bug cases with other operators. The regexp is
44 many more potential bug cases with other operators. The regexp is
38 self.re_exclude_auto, it's fairly commented.
45 self.re_exclude_auto, it's fairly commented.
39
46
40 2006-01-12 Ville Vainio <vivainio@gmail.com>
47 2006-01-12 Ville Vainio <vivainio@gmail.com>
41
48
42 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
49 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
43 Prettified and hardened string/backslash quoting with ipsystem(),
50 Prettified and hardened string/backslash quoting with ipsystem(),
44 ipalias() and ipmagic(). Now even \ characters are passed to
51 ipalias() and ipmagic(). Now even \ characters are passed to
45 %magics, !shell escapes and aliases exactly as they are in the
52 %magics, !shell escapes and aliases exactly as they are in the
46 ipython command line. Should improve backslash experience,
53 ipython command line. Should improve backslash experience,
47 particularly in Windows (path delimiter for some commands that
54 particularly in Windows (path delimiter for some commands that
48 won't understand '/'), but Unix benefits as well (regexps). %cd
55 won't understand '/'), but Unix benefits as well (regexps). %cd
49 magic still doesn't support backslash path delimiters, though. Also
56 magic still doesn't support backslash path delimiters, though. Also
50 deleted all pretense of supporting multiline command strings in
57 deleted all pretense of supporting multiline command strings in
51 !system or %magic commands. Thanks to Jerry McRae for suggestions.
58 !system or %magic commands. Thanks to Jerry McRae for suggestions.
52
59
53 * doc/build_doc_instructions.txt added. Documentation on how to
60 * doc/build_doc_instructions.txt added. Documentation on how to
54 use doc/update_manual.py, added yesterday. Both files contributed
61 use doc/update_manual.py, added yesterday. Both files contributed
55 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
62 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
56 doc/*.sh for deprecation at a later date.
63 doc/*.sh for deprecation at a later date.
57
64
58 * /ipython.py Added ipython.py to root directory for
65 * /ipython.py Added ipython.py to root directory for
59 zero-installation (tar xzvf ipython.tgz; cd ipython; python
66 zero-installation (tar xzvf ipython.tgz; cd ipython; python
60 ipython.py) and development convenience (no need to kee doing
67 ipython.py) and development convenience (no need to kee doing
61 "setup.py install" between changes).
68 "setup.py install" between changes).
62
69
63 * Made ! and !! shell escapes work (again) in multiline expressions:
70 * Made ! and !! shell escapes work (again) in multiline expressions:
64 if 1:
71 if 1:
65 !ls
72 !ls
66 !!ls
73 !!ls
67
74
68 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
75 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
69
76
70 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
77 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
71 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
78 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
72 module in case-insensitive installation. Was causing crashes
79 module in case-insensitive installation. Was causing crashes
73 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
80 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
74
81
75 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
82 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
76 <marienz-AT-gentoo.org>, closes
83 <marienz-AT-gentoo.org>, closes
77 http://www.scipy.net/roundup/ipython/issue51.
84 http://www.scipy.net/roundup/ipython/issue51.
78
85
79 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
86 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
80
87
81 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
88 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
82 problem of excessive CPU usage under *nix and keyboard lag under
89 problem of excessive CPU usage under *nix and keyboard lag under
83 win32.
90 win32.
84
91
85 2006-01-10 *** Released version 0.7.0
92 2006-01-10 *** Released version 0.7.0
86
93
87 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
94 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
88
95
89 * IPython/Release.py (revision): tag version number to 0.7.0,
96 * IPython/Release.py (revision): tag version number to 0.7.0,
90 ready for release.
97 ready for release.
91
98
92 * IPython/Magic.py (magic_edit): Add print statement to %edit so
99 * IPython/Magic.py (magic_edit): Add print statement to %edit so
93 it informs the user of the name of the temp. file used. This can
100 it informs the user of the name of the temp. file used. This can
94 help if you decide later to reuse that same file, so you know
101 help if you decide later to reuse that same file, so you know
95 where to copy the info from.
102 where to copy the info from.
96
103
97 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
104 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
98
105
99 * setup_bdist_egg.py: little script to build an egg. Added
106 * setup_bdist_egg.py: little script to build an egg. Added
100 support in the release tools as well.
107 support in the release tools as well.
101
108
102 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
109 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
103
110
104 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
111 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
105 version selection (new -wxversion command line and ipythonrc
112 version selection (new -wxversion command line and ipythonrc
106 parameter). Patch contributed by Arnd Baecker
113 parameter). Patch contributed by Arnd Baecker
107 <arnd.baecker-AT-web.de>.
114 <arnd.baecker-AT-web.de>.
108
115
109 * IPython/iplib.py (embed_mainloop): fix tab-completion in
116 * IPython/iplib.py (embed_mainloop): fix tab-completion in
110 embedded instances, for variables defined at the interactive
117 embedded instances, for variables defined at the interactive
111 prompt of the embedded ipython. Reported by Arnd.
118 prompt of the embedded ipython. Reported by Arnd.
112
119
113 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
120 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
114 it can be used as a (stateful) toggle, or with a direct parameter.
121 it can be used as a (stateful) toggle, or with a direct parameter.
115
122
116 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
123 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
117 could be triggered in certain cases and cause the traceback
124 could be triggered in certain cases and cause the traceback
118 printer not to work.
125 printer not to work.
119
126
120 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
127 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
121
128
122 * IPython/iplib.py (_should_recompile): Small fix, closes
129 * IPython/iplib.py (_should_recompile): Small fix, closes
123 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
130 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
124
131
125 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
132 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
126
133
127 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
134 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
128 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
135 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
129 Moad for help with tracking it down.
136 Moad for help with tracking it down.
130
137
131 * IPython/iplib.py (handle_auto): fix autocall handling for
138 * IPython/iplib.py (handle_auto): fix autocall handling for
132 objects which support BOTH __getitem__ and __call__ (so that f [x]
139 objects which support BOTH __getitem__ and __call__ (so that f [x]
133 is left alone, instead of becoming f([x]) automatically).
140 is left alone, instead of becoming f([x]) automatically).
134
141
135 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
142 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
136 Ville's patch.
143 Ville's patch.
137
144
138 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
145 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
139
146
140 * IPython/iplib.py (handle_auto): changed autocall semantics to
147 * IPython/iplib.py (handle_auto): changed autocall semantics to
141 include 'smart' mode, where the autocall transformation is NOT
148 include 'smart' mode, where the autocall transformation is NOT
142 applied if there are no arguments on the line. This allows you to
149 applied if there are no arguments on the line. This allows you to
143 just type 'foo' if foo is a callable to see its internal form,
150 just type 'foo' if foo is a callable to see its internal form,
144 instead of having it called with no arguments (typically a
151 instead of having it called with no arguments (typically a
145 mistake). The old 'full' autocall still exists: for that, you
152 mistake). The old 'full' autocall still exists: for that, you
146 need to set the 'autocall' parameter to 2 in your ipythonrc file.
153 need to set the 'autocall' parameter to 2 in your ipythonrc file.
147
154
148 * IPython/completer.py (Completer.attr_matches): add
155 * IPython/completer.py (Completer.attr_matches): add
149 tab-completion support for Enthoughts' traits. After a report by
156 tab-completion support for Enthoughts' traits. After a report by
150 Arnd and a patch by Prabhu.
157 Arnd and a patch by Prabhu.
151
158
152 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
159 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
153
160
154 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
161 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
155 Schmolck's patch to fix inspect.getinnerframes().
162 Schmolck's patch to fix inspect.getinnerframes().
156
163
157 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
164 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
158 for embedded instances, regarding handling of namespaces and items
165 for embedded instances, regarding handling of namespaces and items
159 added to the __builtin__ one. Multiple embedded instances and
166 added to the __builtin__ one. Multiple embedded instances and
160 recursive embeddings should work better now (though I'm not sure
167 recursive embeddings should work better now (though I'm not sure
161 I've got all the corner cases fixed, that code is a bit of a brain
168 I've got all the corner cases fixed, that code is a bit of a brain
162 twister).
169 twister).
163
170
164 * IPython/Magic.py (magic_edit): added support to edit in-memory
171 * IPython/Magic.py (magic_edit): added support to edit in-memory
165 macros (automatically creates the necessary temp files). %edit
172 macros (automatically creates the necessary temp files). %edit
166 also doesn't return the file contents anymore, it's just noise.
173 also doesn't return the file contents anymore, it's just noise.
167
174
168 * IPython/completer.py (Completer.attr_matches): revert change to
175 * IPython/completer.py (Completer.attr_matches): revert change to
169 complete only on attributes listed in __all__. I realized it
176 complete only on attributes listed in __all__. I realized it
170 cripples the tab-completion system as a tool for exploring the
177 cripples the tab-completion system as a tool for exploring the
171 internals of unknown libraries (it renders any non-__all__
178 internals of unknown libraries (it renders any non-__all__
172 attribute off-limits). I got bit by this when trying to see
179 attribute off-limits). I got bit by this when trying to see
173 something inside the dis module.
180 something inside the dis module.
174
181
175 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
182 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
176
183
177 * IPython/iplib.py (InteractiveShell.__init__): add .meta
184 * IPython/iplib.py (InteractiveShell.__init__): add .meta
178 namespace for users and extension writers to hold data in. This
185 namespace for users and extension writers to hold data in. This
179 follows the discussion in
186 follows the discussion in
180 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
187 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
181
188
182 * IPython/completer.py (IPCompleter.complete): small patch to help
189 * IPython/completer.py (IPCompleter.complete): small patch to help
183 tab-completion under Emacs, after a suggestion by John Barnard
190 tab-completion under Emacs, after a suggestion by John Barnard
184 <barnarj-AT-ccf.org>.
191 <barnarj-AT-ccf.org>.
185
192
186 * IPython/Magic.py (Magic.extract_input_slices): added support for
193 * IPython/Magic.py (Magic.extract_input_slices): added support for
187 the slice notation in magics to use N-M to represent numbers N...M
194 the slice notation in magics to use N-M to represent numbers N...M
188 (closed endpoints). This is used by %macro and %save.
195 (closed endpoints). This is used by %macro and %save.
189
196
190 * IPython/completer.py (Completer.attr_matches): for modules which
197 * IPython/completer.py (Completer.attr_matches): for modules which
191 define __all__, complete only on those. After a patch by Jeffrey
198 define __all__, complete only on those. After a patch by Jeffrey
192 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
199 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
193 speed up this routine.
200 speed up this routine.
194
201
195 * IPython/Logger.py (Logger.log): fix a history handling bug. I
202 * IPython/Logger.py (Logger.log): fix a history handling bug. I
196 don't know if this is the end of it, but the behavior now is
203 don't know if this is the end of it, but the behavior now is
197 certainly much more correct. Note that coupled with macros,
204 certainly much more correct. Note that coupled with macros,
198 slightly surprising (at first) behavior may occur: a macro will in
205 slightly surprising (at first) behavior may occur: a macro will in
199 general expand to multiple lines of input, so upon exiting, the
206 general expand to multiple lines of input, so upon exiting, the
200 in/out counters will both be bumped by the corresponding amount
207 in/out counters will both be bumped by the corresponding amount
201 (as if the macro's contents had been typed interactively). Typing
208 (as if the macro's contents had been typed interactively). Typing
202 %hist will reveal the intermediate (silently processed) lines.
209 %hist will reveal the intermediate (silently processed) lines.
203
210
204 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
211 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
205 pickle to fail (%run was overwriting __main__ and not restoring
212 pickle to fail (%run was overwriting __main__ and not restoring
206 it, but pickle relies on __main__ to operate).
213 it, but pickle relies on __main__ to operate).
207
214
208 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
215 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
209 using properties, but forgot to make the main InteractiveShell
216 using properties, but forgot to make the main InteractiveShell
210 class a new-style class. Properties fail silently, and
217 class a new-style class. Properties fail silently, and
211 misteriously, with old-style class (getters work, but
218 misteriously, with old-style class (getters work, but
212 setters don't do anything).
219 setters don't do anything).
213
220
214 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
221 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
215
222
216 * IPython/Magic.py (magic_history): fix history reporting bug (I
223 * IPython/Magic.py (magic_history): fix history reporting bug (I
217 know some nasties are still there, I just can't seem to find a
224 know some nasties are still there, I just can't seem to find a
218 reproducible test case to track them down; the input history is
225 reproducible test case to track them down; the input history is
219 falling out of sync...)
226 falling out of sync...)
220
227
221 * IPython/iplib.py (handle_shell_escape): fix bug where both
228 * IPython/iplib.py (handle_shell_escape): fix bug where both
222 aliases and system accesses where broken for indented code (such
229 aliases and system accesses where broken for indented code (such
223 as loops).
230 as loops).
224
231
225 * IPython/genutils.py (shell): fix small but critical bug for
232 * IPython/genutils.py (shell): fix small but critical bug for
226 win32 system access.
233 win32 system access.
227
234
228 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
235 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
229
236
230 * IPython/iplib.py (showtraceback): remove use of the
237 * IPython/iplib.py (showtraceback): remove use of the
231 sys.last_{type/value/traceback} structures, which are non
238 sys.last_{type/value/traceback} structures, which are non
232 thread-safe.
239 thread-safe.
233 (_prefilter): change control flow to ensure that we NEVER
240 (_prefilter): change control flow to ensure that we NEVER
234 introspect objects when autocall is off. This will guarantee that
241 introspect objects when autocall is off. This will guarantee that
235 having an input line of the form 'x.y', where access to attribute
242 having an input line of the form 'x.y', where access to attribute
236 'y' has side effects, doesn't trigger the side effect TWICE. It
243 'y' has side effects, doesn't trigger the side effect TWICE. It
237 is important to note that, with autocall on, these side effects
244 is important to note that, with autocall on, these side effects
238 can still happen.
245 can still happen.
239 (ipsystem): new builtin, to complete the ip{magic/alias/system}
246 (ipsystem): new builtin, to complete the ip{magic/alias/system}
240 trio. IPython offers these three kinds of special calls which are
247 trio. IPython offers these three kinds of special calls which are
241 not python code, and it's a good thing to have their call method
248 not python code, and it's a good thing to have their call method
242 be accessible as pure python functions (not just special syntax at
249 be accessible as pure python functions (not just special syntax at
243 the command line). It gives us a better internal implementation
250 the command line). It gives us a better internal implementation
244 structure, as well as exposing these for user scripting more
251 structure, as well as exposing these for user scripting more
245 cleanly.
252 cleanly.
246
253
247 * IPython/macro.py (Macro.__init__): moved macros to a standalone
254 * IPython/macro.py (Macro.__init__): moved macros to a standalone
248 file. Now that they'll be more likely to be used with the
255 file. Now that they'll be more likely to be used with the
249 persistance system (%store), I want to make sure their module path
256 persistance system (%store), I want to make sure their module path
250 doesn't change in the future, so that we don't break things for
257 doesn't change in the future, so that we don't break things for
251 users' persisted data.
258 users' persisted data.
252
259
253 * IPython/iplib.py (autoindent_update): move indentation
260 * IPython/iplib.py (autoindent_update): move indentation
254 management into the _text_ processing loop, not the keyboard
261 management into the _text_ processing loop, not the keyboard
255 interactive one. This is necessary to correctly process non-typed
262 interactive one. This is necessary to correctly process non-typed
256 multiline input (such as macros).
263 multiline input (such as macros).
257
264
258 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
265 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
259 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
266 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
260 which was producing problems in the resulting manual.
267 which was producing problems in the resulting manual.
261 (magic_whos): improve reporting of instances (show their class,
268 (magic_whos): improve reporting of instances (show their class,
262 instead of simply printing 'instance' which isn't terribly
269 instead of simply printing 'instance' which isn't terribly
263 informative).
270 informative).
264
271
265 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
272 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
266 (minor mods) to support network shares under win32.
273 (minor mods) to support network shares under win32.
267
274
268 * IPython/winconsole.py (get_console_size): add new winconsole
275 * IPython/winconsole.py (get_console_size): add new winconsole
269 module and fixes to page_dumb() to improve its behavior under
276 module and fixes to page_dumb() to improve its behavior under
270 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
277 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
271
278
272 * IPython/Magic.py (Macro): simplified Macro class to just
279 * IPython/Magic.py (Macro): simplified Macro class to just
273 subclass list. We've had only 2.2 compatibility for a very long
280 subclass list. We've had only 2.2 compatibility for a very long
274 time, yet I was still avoiding subclassing the builtin types. No
281 time, yet I was still avoiding subclassing the builtin types. No
275 more (I'm also starting to use properties, though I won't shift to
282 more (I'm also starting to use properties, though I won't shift to
276 2.3-specific features quite yet).
283 2.3-specific features quite yet).
277 (magic_store): added Ville's patch for lightweight variable
284 (magic_store): added Ville's patch for lightweight variable
278 persistence, after a request on the user list by Matt Wilkie
285 persistence, after a request on the user list by Matt Wilkie
279 <maphew-AT-gmail.com>. The new %store magic's docstring has full
286 <maphew-AT-gmail.com>. The new %store magic's docstring has full
280 details.
287 details.
281
288
282 * IPython/iplib.py (InteractiveShell.post_config_initialization):
289 * IPython/iplib.py (InteractiveShell.post_config_initialization):
283 changed the default logfile name from 'ipython.log' to
290 changed the default logfile name from 'ipython.log' to
284 'ipython_log.py'. These logs are real python files, and now that
291 'ipython_log.py'. These logs are real python files, and now that
285 we have much better multiline support, people are more likely to
292 we have much better multiline support, people are more likely to
286 want to use them as such. Might as well name them correctly.
293 want to use them as such. Might as well name them correctly.
287
294
288 * IPython/Magic.py: substantial cleanup. While we can't stop
295 * IPython/Magic.py: substantial cleanup. While we can't stop
289 using magics as mixins, due to the existing customizations 'out
296 using magics as mixins, due to the existing customizations 'out
290 there' which rely on the mixin naming conventions, at least I
297 there' which rely on the mixin naming conventions, at least I
291 cleaned out all cross-class name usage. So once we are OK with
298 cleaned out all cross-class name usage. So once we are OK with
292 breaking compatibility, the two systems can be separated.
299 breaking compatibility, the two systems can be separated.
293
300
294 * IPython/Logger.py: major cleanup. This one is NOT a mixin
301 * IPython/Logger.py: major cleanup. This one is NOT a mixin
295 anymore, and the class is a fair bit less hideous as well. New
302 anymore, and the class is a fair bit less hideous as well. New
296 features were also introduced: timestamping of input, and logging
303 features were also introduced: timestamping of input, and logging
297 of output results. These are user-visible with the -t and -o
304 of output results. These are user-visible with the -t and -o
298 options to %logstart. Closes
305 options to %logstart. Closes
299 http://www.scipy.net/roundup/ipython/issue11 and a request by
306 http://www.scipy.net/roundup/ipython/issue11 and a request by
300 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
307 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
301
308
302 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
309 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
303
310
304 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
311 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
305 better hadnle backslashes in paths. See the thread 'More Windows
312 better hadnle backslashes in paths. See the thread 'More Windows
306 questions part 2 - \/ characters revisited' on the iypthon user
313 questions part 2 - \/ characters revisited' on the iypthon user
307 list:
314 list:
308 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
315 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
309
316
310 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
317 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
311
318
312 (InteractiveShell.__init__): change threaded shells to not use the
319 (InteractiveShell.__init__): change threaded shells to not use the
313 ipython crash handler. This was causing more problems than not,
320 ipython crash handler. This was causing more problems than not,
314 as exceptions in the main thread (GUI code, typically) would
321 as exceptions in the main thread (GUI code, typically) would
315 always show up as a 'crash', when they really weren't.
322 always show up as a 'crash', when they really weren't.
316
323
317 The colors and exception mode commands (%colors/%xmode) have been
324 The colors and exception mode commands (%colors/%xmode) have been
318 synchronized to also take this into account, so users can get
325 synchronized to also take this into account, so users can get
319 verbose exceptions for their threaded code as well. I also added
326 verbose exceptions for their threaded code as well. I also added
320 support for activating pdb inside this exception handler as well,
327 support for activating pdb inside this exception handler as well,
321 so now GUI authors can use IPython's enhanced pdb at runtime.
328 so now GUI authors can use IPython's enhanced pdb at runtime.
322
329
323 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
330 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
324 true by default, and add it to the shipped ipythonrc file. Since
331 true by default, and add it to the shipped ipythonrc file. Since
325 this asks the user before proceeding, I think it's OK to make it
332 this asks the user before proceeding, I think it's OK to make it
326 true by default.
333 true by default.
327
334
328 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
335 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
329 of the previous special-casing of input in the eval loop. I think
336 of the previous special-casing of input in the eval loop. I think
330 this is cleaner, as they really are commands and shouldn't have
337 this is cleaner, as they really are commands and shouldn't have
331 a special role in the middle of the core code.
338 a special role in the middle of the core code.
332
339
333 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
340 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
334
341
335 * IPython/iplib.py (edit_syntax_error): added support for
342 * IPython/iplib.py (edit_syntax_error): added support for
336 automatically reopening the editor if the file had a syntax error
343 automatically reopening the editor if the file had a syntax error
337 in it. Thanks to scottt who provided the patch at:
344 in it. Thanks to scottt who provided the patch at:
338 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
345 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
339 version committed).
346 version committed).
340
347
341 * IPython/iplib.py (handle_normal): add suport for multi-line
348 * IPython/iplib.py (handle_normal): add suport for multi-line
342 input with emtpy lines. This fixes
349 input with emtpy lines. This fixes
343 http://www.scipy.net/roundup/ipython/issue43 and a similar
350 http://www.scipy.net/roundup/ipython/issue43 and a similar
344 discussion on the user list.
351 discussion on the user list.
345
352
346 WARNING: a behavior change is necessarily introduced to support
353 WARNING: a behavior change is necessarily introduced to support
347 blank lines: now a single blank line with whitespace does NOT
354 blank lines: now a single blank line with whitespace does NOT
348 break the input loop, which means that when autoindent is on, by
355 break the input loop, which means that when autoindent is on, by
349 default hitting return on the next (indented) line does NOT exit.
356 default hitting return on the next (indented) line does NOT exit.
350
357
351 Instead, to exit a multiline input you can either have:
358 Instead, to exit a multiline input you can either have:
352
359
353 - TWO whitespace lines (just hit return again), or
360 - TWO whitespace lines (just hit return again), or
354 - a single whitespace line of a different length than provided
361 - a single whitespace line of a different length than provided
355 by the autoindent (add or remove a space).
362 by the autoindent (add or remove a space).
356
363
357 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
364 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
358 module to better organize all readline-related functionality.
365 module to better organize all readline-related functionality.
359 I've deleted FlexCompleter and put all completion clases here.
366 I've deleted FlexCompleter and put all completion clases here.
360
367
361 * IPython/iplib.py (raw_input): improve indentation management.
368 * IPython/iplib.py (raw_input): improve indentation management.
362 It is now possible to paste indented code with autoindent on, and
369 It is now possible to paste indented code with autoindent on, and
363 the code is interpreted correctly (though it still looks bad on
370 the code is interpreted correctly (though it still looks bad on
364 screen, due to the line-oriented nature of ipython).
371 screen, due to the line-oriented nature of ipython).
365 (MagicCompleter.complete): change behavior so that a TAB key on an
372 (MagicCompleter.complete): change behavior so that a TAB key on an
366 otherwise empty line actually inserts a tab, instead of completing
373 otherwise empty line actually inserts a tab, instead of completing
367 on the entire global namespace. This makes it easier to use the
374 on the entire global namespace. This makes it easier to use the
368 TAB key for indentation. After a request by Hans Meine
375 TAB key for indentation. After a request by Hans Meine
369 <hans_meine-AT-gmx.net>
376 <hans_meine-AT-gmx.net>
370 (_prefilter): add support so that typing plain 'exit' or 'quit'
377 (_prefilter): add support so that typing plain 'exit' or 'quit'
371 does a sensible thing. Originally I tried to deviate as little as
378 does a sensible thing. Originally I tried to deviate as little as
372 possible from the default python behavior, but even that one may
379 possible from the default python behavior, but even that one may
373 change in this direction (thread on python-dev to that effect).
380 change in this direction (thread on python-dev to that effect).
374 Regardless, ipython should do the right thing even if CPython's
381 Regardless, ipython should do the right thing even if CPython's
375 '>>>' prompt doesn't.
382 '>>>' prompt doesn't.
376 (InteractiveShell): removed subclassing code.InteractiveConsole
383 (InteractiveShell): removed subclassing code.InteractiveConsole
377 class. By now we'd overridden just about all of its methods: I've
384 class. By now we'd overridden just about all of its methods: I've
378 copied the remaining two over, and now ipython is a standalone
385 copied the remaining two over, and now ipython is a standalone
379 class. This will provide a clearer picture for the chainsaw
386 class. This will provide a clearer picture for the chainsaw
380 branch refactoring.
387 branch refactoring.
381
388
382 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
389 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
383
390
384 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
391 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
385 failures for objects which break when dir() is called on them.
392 failures for objects which break when dir() is called on them.
386
393
387 * IPython/FlexCompleter.py (Completer.__init__): Added support for
394 * IPython/FlexCompleter.py (Completer.__init__): Added support for
388 distinct local and global namespaces in the completer API. This
395 distinct local and global namespaces in the completer API. This
389 change allows us top properly handle completion with distinct
396 change allows us top properly handle completion with distinct
390 scopes, including in embedded instances (this had never really
397 scopes, including in embedded instances (this had never really
391 worked correctly).
398 worked correctly).
392
399
393 Note: this introduces a change in the constructor for
400 Note: this introduces a change in the constructor for
394 MagicCompleter, as a new global_namespace parameter is now the
401 MagicCompleter, as a new global_namespace parameter is now the
395 second argument (the others were bumped one position).
402 second argument (the others were bumped one position).
396
403
397 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
404 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
398
405
399 * IPython/iplib.py (embed_mainloop): fix tab-completion in
406 * IPython/iplib.py (embed_mainloop): fix tab-completion in
400 embedded instances (which can be done now thanks to Vivian's
407 embedded instances (which can be done now thanks to Vivian's
401 frame-handling fixes for pdb).
408 frame-handling fixes for pdb).
402 (InteractiveShell.__init__): Fix namespace handling problem in
409 (InteractiveShell.__init__): Fix namespace handling problem in
403 embedded instances. We were overwriting __main__ unconditionally,
410 embedded instances. We were overwriting __main__ unconditionally,
404 and this should only be done for 'full' (non-embedded) IPython;
411 and this should only be done for 'full' (non-embedded) IPython;
405 embedded instances must respect the caller's __main__. Thanks to
412 embedded instances must respect the caller's __main__. Thanks to
406 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
413 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
407
414
408 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
415 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
409
416
410 * setup.py: added download_url to setup(). This registers the
417 * setup.py: added download_url to setup(). This registers the
411 download address at PyPI, which is not only useful to humans
418 download address at PyPI, which is not only useful to humans
412 browsing the site, but is also picked up by setuptools (the Eggs
419 browsing the site, but is also picked up by setuptools (the Eggs
413 machinery). Thanks to Ville and R. Kern for the info/discussion
420 machinery). Thanks to Ville and R. Kern for the info/discussion
414 on this.
421 on this.
415
422
416 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
423 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
417
424
418 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
425 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
419 This brings a lot of nice functionality to the pdb mode, which now
426 This brings a lot of nice functionality to the pdb mode, which now
420 has tab-completion, syntax highlighting, and better stack handling
427 has tab-completion, syntax highlighting, and better stack handling
421 than before. Many thanks to Vivian De Smedt
428 than before. Many thanks to Vivian De Smedt
422 <vivian-AT-vdesmedt.com> for the original patches.
429 <vivian-AT-vdesmedt.com> for the original patches.
423
430
424 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
431 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
425
432
426 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
433 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
427 sequence to consistently accept the banner argument. The
434 sequence to consistently accept the banner argument. The
428 inconsistency was tripping SAGE, thanks to Gary Zablackis
435 inconsistency was tripping SAGE, thanks to Gary Zablackis
429 <gzabl-AT-yahoo.com> for the report.
436 <gzabl-AT-yahoo.com> for the report.
430
437
431 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
438 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
432
439
433 * IPython/iplib.py (InteractiveShell.post_config_initialization):
440 * IPython/iplib.py (InteractiveShell.post_config_initialization):
434 Fix bug where a naked 'alias' call in the ipythonrc file would
441 Fix bug where a naked 'alias' call in the ipythonrc file would
435 cause a crash. Bug reported by Jorgen Stenarson.
442 cause a crash. Bug reported by Jorgen Stenarson.
436
443
437 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
444 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
438
445
439 * IPython/ipmaker.py (make_IPython): cleanups which should improve
446 * IPython/ipmaker.py (make_IPython): cleanups which should improve
440 startup time.
447 startup time.
441
448
442 * IPython/iplib.py (runcode): my globals 'fix' for embedded
449 * IPython/iplib.py (runcode): my globals 'fix' for embedded
443 instances had introduced a bug with globals in normal code. Now
450 instances had introduced a bug with globals in normal code. Now
444 it's working in all cases.
451 it's working in all cases.
445
452
446 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
453 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
447 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
454 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
448 has been introduced to set the default case sensitivity of the
455 has been introduced to set the default case sensitivity of the
449 searches. Users can still select either mode at runtime on a
456 searches. Users can still select either mode at runtime on a
450 per-search basis.
457 per-search basis.
451
458
452 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
459 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
453
460
454 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
461 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
455 attributes in wildcard searches for subclasses. Modified version
462 attributes in wildcard searches for subclasses. Modified version
456 of a patch by Jorgen.
463 of a patch by Jorgen.
457
464
458 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
465 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
459
466
460 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
467 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
461 embedded instances. I added a user_global_ns attribute to the
468 embedded instances. I added a user_global_ns attribute to the
462 InteractiveShell class to handle this.
469 InteractiveShell class to handle this.
463
470
464 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
471 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
465
472
466 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
473 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
467 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
474 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
468 (reported under win32, but may happen also in other platforms).
475 (reported under win32, but may happen also in other platforms).
469 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
476 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
470
477
471 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
478 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
472
479
473 * IPython/Magic.py (magic_psearch): new support for wildcard
480 * IPython/Magic.py (magic_psearch): new support for wildcard
474 patterns. Now, typing ?a*b will list all names which begin with a
481 patterns. Now, typing ?a*b will list all names which begin with a
475 and end in b, for example. The %psearch magic has full
482 and end in b, for example. The %psearch magic has full
476 docstrings. Many thanks to JΓΆrgen Stenarson
483 docstrings. Many thanks to JΓΆrgen Stenarson
477 <jorgen.stenarson-AT-bostream.nu>, author of the patches
484 <jorgen.stenarson-AT-bostream.nu>, author of the patches
478 implementing this functionality.
485 implementing this functionality.
479
486
480 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
487 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
481
488
482 * Manual: fixed long-standing annoyance of double-dashes (as in
489 * Manual: fixed long-standing annoyance of double-dashes (as in
483 --prefix=~, for example) being stripped in the HTML version. This
490 --prefix=~, for example) being stripped in the HTML version. This
484 is a latex2html bug, but a workaround was provided. Many thanks
491 is a latex2html bug, but a workaround was provided. Many thanks
485 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
492 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
486 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
493 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
487 rolling. This seemingly small issue had tripped a number of users
494 rolling. This seemingly small issue had tripped a number of users
488 when first installing, so I'm glad to see it gone.
495 when first installing, so I'm glad to see it gone.
489
496
490 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
497 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
491
498
492 * IPython/Extensions/numeric_formats.py: fix missing import,
499 * IPython/Extensions/numeric_formats.py: fix missing import,
493 reported by Stephen Walton.
500 reported by Stephen Walton.
494
501
495 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
502 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
496
503
497 * IPython/demo.py: finish demo module, fully documented now.
504 * IPython/demo.py: finish demo module, fully documented now.
498
505
499 * IPython/genutils.py (file_read): simple little utility to read a
506 * IPython/genutils.py (file_read): simple little utility to read a
500 file and ensure it's closed afterwards.
507 file and ensure it's closed afterwards.
501
508
502 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
509 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
503
510
504 * IPython/demo.py (Demo.__init__): added support for individually
511 * IPython/demo.py (Demo.__init__): added support for individually
505 tagging blocks for automatic execution.
512 tagging blocks for automatic execution.
506
513
507 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
514 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
508 syntax-highlighted python sources, requested by John.
515 syntax-highlighted python sources, requested by John.
509
516
510 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
517 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
511
518
512 * IPython/demo.py (Demo.again): fix bug where again() blocks after
519 * IPython/demo.py (Demo.again): fix bug where again() blocks after
513 finishing.
520 finishing.
514
521
515 * IPython/genutils.py (shlex_split): moved from Magic to here,
522 * IPython/genutils.py (shlex_split): moved from Magic to here,
516 where all 2.2 compatibility stuff lives. I needed it for demo.py.
523 where all 2.2 compatibility stuff lives. I needed it for demo.py.
517
524
518 * IPython/demo.py (Demo.__init__): added support for silent
525 * IPython/demo.py (Demo.__init__): added support for silent
519 blocks, improved marks as regexps, docstrings written.
526 blocks, improved marks as regexps, docstrings written.
520 (Demo.__init__): better docstring, added support for sys.argv.
527 (Demo.__init__): better docstring, added support for sys.argv.
521
528
522 * IPython/genutils.py (marquee): little utility used by the demo
529 * IPython/genutils.py (marquee): little utility used by the demo
523 code, handy in general.
530 code, handy in general.
524
531
525 * IPython/demo.py (Demo.__init__): new class for interactive
532 * IPython/demo.py (Demo.__init__): new class for interactive
526 demos. Not documented yet, I just wrote it in a hurry for
533 demos. Not documented yet, I just wrote it in a hurry for
527 scipy'05. Will docstring later.
534 scipy'05. Will docstring later.
528
535
529 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
536 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
530
537
531 * IPython/Shell.py (sigint_handler): Drastic simplification which
538 * IPython/Shell.py (sigint_handler): Drastic simplification which
532 also seems to make Ctrl-C work correctly across threads! This is
539 also seems to make Ctrl-C work correctly across threads! This is
533 so simple, that I can't beleive I'd missed it before. Needs more
540 so simple, that I can't beleive I'd missed it before. Needs more
534 testing, though.
541 testing, though.
535 (KBINT): Never mind, revert changes. I'm sure I'd tried something
542 (KBINT): Never mind, revert changes. I'm sure I'd tried something
536 like this before...
543 like this before...
537
544
538 * IPython/genutils.py (get_home_dir): add protection against
545 * IPython/genutils.py (get_home_dir): add protection against
539 non-dirs in win32 registry.
546 non-dirs in win32 registry.
540
547
541 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
548 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
542 bug where dict was mutated while iterating (pysh crash).
549 bug where dict was mutated while iterating (pysh crash).
543
550
544 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
551 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
545
552
546 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
553 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
547 spurious newlines added by this routine. After a report by
554 spurious newlines added by this routine. After a report by
548 F. Mantegazza.
555 F. Mantegazza.
549
556
550 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
557 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
551
558
552 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
559 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
553 calls. These were a leftover from the GTK 1.x days, and can cause
560 calls. These were a leftover from the GTK 1.x days, and can cause
554 problems in certain cases (after a report by John Hunter).
561 problems in certain cases (after a report by John Hunter).
555
562
556 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
563 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
557 os.getcwd() fails at init time. Thanks to patch from David Remahl
564 os.getcwd() fails at init time. Thanks to patch from David Remahl
558 <chmod007-AT-mac.com>.
565 <chmod007-AT-mac.com>.
559 (InteractiveShell.__init__): prevent certain special magics from
566 (InteractiveShell.__init__): prevent certain special magics from
560 being shadowed by aliases. Closes
567 being shadowed by aliases. Closes
561 http://www.scipy.net/roundup/ipython/issue41.
568 http://www.scipy.net/roundup/ipython/issue41.
562
569
563 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
570 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
564
571
565 * IPython/iplib.py (InteractiveShell.complete): Added new
572 * IPython/iplib.py (InteractiveShell.complete): Added new
566 top-level completion method to expose the completion mechanism
573 top-level completion method to expose the completion mechanism
567 beyond readline-based environments.
574 beyond readline-based environments.
568
575
569 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
576 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
570
577
571 * tools/ipsvnc (svnversion): fix svnversion capture.
578 * tools/ipsvnc (svnversion): fix svnversion capture.
572
579
573 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
580 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
574 attribute to self, which was missing. Before, it was set by a
581 attribute to self, which was missing. Before, it was set by a
575 routine which in certain cases wasn't being called, so the
582 routine which in certain cases wasn't being called, so the
576 instance could end up missing the attribute. This caused a crash.
583 instance could end up missing the attribute. This caused a crash.
577 Closes http://www.scipy.net/roundup/ipython/issue40.
584 Closes http://www.scipy.net/roundup/ipython/issue40.
578
585
579 2005-08-16 Fernando Perez <fperez@colorado.edu>
586 2005-08-16 Fernando Perez <fperez@colorado.edu>
580
587
581 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
588 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
582 contains non-string attribute. Closes
589 contains non-string attribute. Closes
583 http://www.scipy.net/roundup/ipython/issue38.
590 http://www.scipy.net/roundup/ipython/issue38.
584
591
585 2005-08-14 Fernando Perez <fperez@colorado.edu>
592 2005-08-14 Fernando Perez <fperez@colorado.edu>
586
593
587 * tools/ipsvnc: Minor improvements, to add changeset info.
594 * tools/ipsvnc: Minor improvements, to add changeset info.
588
595
589 2005-08-12 Fernando Perez <fperez@colorado.edu>
596 2005-08-12 Fernando Perez <fperez@colorado.edu>
590
597
591 * IPython/iplib.py (runsource): remove self.code_to_run_src
598 * IPython/iplib.py (runsource): remove self.code_to_run_src
592 attribute. I realized this is nothing more than
599 attribute. I realized this is nothing more than
593 '\n'.join(self.buffer), and having the same data in two different
600 '\n'.join(self.buffer), and having the same data in two different
594 places is just asking for synchronization bugs. This may impact
601 places is just asking for synchronization bugs. This may impact
595 people who have custom exception handlers, so I need to warn
602 people who have custom exception handlers, so I need to warn
596 ipython-dev about it (F. Mantegazza may use them).
603 ipython-dev about it (F. Mantegazza may use them).
597
604
598 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
605 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
599
606
600 * IPython/genutils.py: fix 2.2 compatibility (generators)
607 * IPython/genutils.py: fix 2.2 compatibility (generators)
601
608
602 2005-07-18 Fernando Perez <fperez@colorado.edu>
609 2005-07-18 Fernando Perez <fperez@colorado.edu>
603
610
604 * IPython/genutils.py (get_home_dir): fix to help users with
611 * IPython/genutils.py (get_home_dir): fix to help users with
605 invalid $HOME under win32.
612 invalid $HOME under win32.
606
613
607 2005-07-17 Fernando Perez <fperez@colorado.edu>
614 2005-07-17 Fernando Perez <fperez@colorado.edu>
608
615
609 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
616 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
610 some old hacks and clean up a bit other routines; code should be
617 some old hacks and clean up a bit other routines; code should be
611 simpler and a bit faster.
618 simpler and a bit faster.
612
619
613 * IPython/iplib.py (interact): removed some last-resort attempts
620 * IPython/iplib.py (interact): removed some last-resort attempts
614 to survive broken stdout/stderr. That code was only making it
621 to survive broken stdout/stderr. That code was only making it
615 harder to abstract out the i/o (necessary for gui integration),
622 harder to abstract out the i/o (necessary for gui integration),
616 and the crashes it could prevent were extremely rare in practice
623 and the crashes it could prevent were extremely rare in practice
617 (besides being fully user-induced in a pretty violent manner).
624 (besides being fully user-induced in a pretty violent manner).
618
625
619 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
626 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
620 Nothing major yet, but the code is simpler to read; this should
627 Nothing major yet, but the code is simpler to read; this should
621 make it easier to do more serious modifications in the future.
628 make it easier to do more serious modifications in the future.
622
629
623 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
630 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
624 which broke in .15 (thanks to a report by Ville).
631 which broke in .15 (thanks to a report by Ville).
625
632
626 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
633 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
627 be quite correct, I know next to nothing about unicode). This
634 be quite correct, I know next to nothing about unicode). This
628 will allow unicode strings to be used in prompts, amongst other
635 will allow unicode strings to be used in prompts, amongst other
629 cases. It also will prevent ipython from crashing when unicode
636 cases. It also will prevent ipython from crashing when unicode
630 shows up unexpectedly in many places. If ascii encoding fails, we
637 shows up unexpectedly in many places. If ascii encoding fails, we
631 assume utf_8. Currently the encoding is not a user-visible
638 assume utf_8. Currently the encoding is not a user-visible
632 setting, though it could be made so if there is demand for it.
639 setting, though it could be made so if there is demand for it.
633
640
634 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
641 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
635
642
636 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
643 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
637
644
638 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
645 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
639
646
640 * IPython/genutils.py: Add 2.2 compatibility here, so all other
647 * IPython/genutils.py: Add 2.2 compatibility here, so all other
641 code can work transparently for 2.2/2.3.
648 code can work transparently for 2.2/2.3.
642
649
643 2005-07-16 Fernando Perez <fperez@colorado.edu>
650 2005-07-16 Fernando Perez <fperez@colorado.edu>
644
651
645 * IPython/ultraTB.py (ExceptionColors): Make a global variable
652 * IPython/ultraTB.py (ExceptionColors): Make a global variable
646 out of the color scheme table used for coloring exception
653 out of the color scheme table used for coloring exception
647 tracebacks. This allows user code to add new schemes at runtime.
654 tracebacks. This allows user code to add new schemes at runtime.
648 This is a minimally modified version of the patch at
655 This is a minimally modified version of the patch at
649 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
656 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
650 for the contribution.
657 for the contribution.
651
658
652 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
659 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
653 slightly modified version of the patch in
660 slightly modified version of the patch in
654 http://www.scipy.net/roundup/ipython/issue34, which also allows me
661 http://www.scipy.net/roundup/ipython/issue34, which also allows me
655 to remove the previous try/except solution (which was costlier).
662 to remove the previous try/except solution (which was costlier).
656 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
663 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
657
664
658 2005-06-08 Fernando Perez <fperez@colorado.edu>
665 2005-06-08 Fernando Perez <fperez@colorado.edu>
659
666
660 * IPython/iplib.py (write/write_err): Add methods to abstract all
667 * IPython/iplib.py (write/write_err): Add methods to abstract all
661 I/O a bit more.
668 I/O a bit more.
662
669
663 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
670 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
664 warning, reported by Aric Hagberg, fix by JD Hunter.
671 warning, reported by Aric Hagberg, fix by JD Hunter.
665
672
666 2005-06-02 *** Released version 0.6.15
673 2005-06-02 *** Released version 0.6.15
667
674
668 2005-06-01 Fernando Perez <fperez@colorado.edu>
675 2005-06-01 Fernando Perez <fperez@colorado.edu>
669
676
670 * IPython/iplib.py (MagicCompleter.file_matches): Fix
677 * IPython/iplib.py (MagicCompleter.file_matches): Fix
671 tab-completion of filenames within open-quoted strings. Note that
678 tab-completion of filenames within open-quoted strings. Note that
672 this requires that in ~/.ipython/ipythonrc, users change the
679 this requires that in ~/.ipython/ipythonrc, users change the
673 readline delimiters configuration to read:
680 readline delimiters configuration to read:
674
681
675 readline_remove_delims -/~
682 readline_remove_delims -/~
676
683
677
684
678 2005-05-31 *** Released version 0.6.14
685 2005-05-31 *** Released version 0.6.14
679
686
680 2005-05-29 Fernando Perez <fperez@colorado.edu>
687 2005-05-29 Fernando Perez <fperez@colorado.edu>
681
688
682 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
689 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
683 with files not on the filesystem. Reported by Eliyahu Sandler
690 with files not on the filesystem. Reported by Eliyahu Sandler
684 <eli@gondolin.net>
691 <eli@gondolin.net>
685
692
686 2005-05-22 Fernando Perez <fperez@colorado.edu>
693 2005-05-22 Fernando Perez <fperez@colorado.edu>
687
694
688 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
695 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
689 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
696 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
690
697
691 2005-05-19 Fernando Perez <fperez@colorado.edu>
698 2005-05-19 Fernando Perez <fperez@colorado.edu>
692
699
693 * IPython/iplib.py (safe_execfile): close a file which could be
700 * IPython/iplib.py (safe_execfile): close a file which could be
694 left open (causing problems in win32, which locks open files).
701 left open (causing problems in win32, which locks open files).
695 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
702 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
696
703
697 2005-05-18 Fernando Perez <fperez@colorado.edu>
704 2005-05-18 Fernando Perez <fperez@colorado.edu>
698
705
699 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
706 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
700 keyword arguments correctly to safe_execfile().
707 keyword arguments correctly to safe_execfile().
701
708
702 2005-05-13 Fernando Perez <fperez@colorado.edu>
709 2005-05-13 Fernando Perez <fperez@colorado.edu>
703
710
704 * ipython.1: Added info about Qt to manpage, and threads warning
711 * ipython.1: Added info about Qt to manpage, and threads warning
705 to usage page (invoked with --help).
712 to usage page (invoked with --help).
706
713
707 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
714 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
708 new matcher (it goes at the end of the priority list) to do
715 new matcher (it goes at the end of the priority list) to do
709 tab-completion on named function arguments. Submitted by George
716 tab-completion on named function arguments. Submitted by George
710 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
717 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
711 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
718 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
712 for more details.
719 for more details.
713
720
714 * IPython/Magic.py (magic_run): Added new -e flag to ignore
721 * IPython/Magic.py (magic_run): Added new -e flag to ignore
715 SystemExit exceptions in the script being run. Thanks to a report
722 SystemExit exceptions in the script being run. Thanks to a report
716 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
723 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
717 producing very annoying behavior when running unit tests.
724 producing very annoying behavior when running unit tests.
718
725
719 2005-05-12 Fernando Perez <fperez@colorado.edu>
726 2005-05-12 Fernando Perez <fperez@colorado.edu>
720
727
721 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
728 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
722 which I'd broken (again) due to a changed regexp. In the process,
729 which I'd broken (again) due to a changed regexp. In the process,
723 added ';' as an escape to auto-quote the whole line without
730 added ';' as an escape to auto-quote the whole line without
724 splitting its arguments. Thanks to a report by Jerry McRae
731 splitting its arguments. Thanks to a report by Jerry McRae
725 <qrs0xyc02-AT-sneakemail.com>.
732 <qrs0xyc02-AT-sneakemail.com>.
726
733
727 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
734 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
728 possible crashes caused by a TokenError. Reported by Ed Schofield
735 possible crashes caused by a TokenError. Reported by Ed Schofield
729 <schofield-AT-ftw.at>.
736 <schofield-AT-ftw.at>.
730
737
731 2005-05-06 Fernando Perez <fperez@colorado.edu>
738 2005-05-06 Fernando Perez <fperez@colorado.edu>
732
739
733 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
740 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
734
741
735 2005-04-29 Fernando Perez <fperez@colorado.edu>
742 2005-04-29 Fernando Perez <fperez@colorado.edu>
736
743
737 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
744 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
738 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
745 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
739 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
746 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
740 which provides support for Qt interactive usage (similar to the
747 which provides support for Qt interactive usage (similar to the
741 existing one for WX and GTK). This had been often requested.
748 existing one for WX and GTK). This had been often requested.
742
749
743 2005-04-14 *** Released version 0.6.13
750 2005-04-14 *** Released version 0.6.13
744
751
745 2005-04-08 Fernando Perez <fperez@colorado.edu>
752 2005-04-08 Fernando Perez <fperez@colorado.edu>
746
753
747 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
754 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
748 from _ofind, which gets called on almost every input line. Now,
755 from _ofind, which gets called on almost every input line. Now,
749 we only try to get docstrings if they are actually going to be
756 we only try to get docstrings if they are actually going to be
750 used (the overhead of fetching unnecessary docstrings can be
757 used (the overhead of fetching unnecessary docstrings can be
751 noticeable for certain objects, such as Pyro proxies).
758 noticeable for certain objects, such as Pyro proxies).
752
759
753 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
760 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
754 for completers. For some reason I had been passing them the state
761 for completers. For some reason I had been passing them the state
755 variable, which completers never actually need, and was in
762 variable, which completers never actually need, and was in
756 conflict with the rlcompleter API. Custom completers ONLY need to
763 conflict with the rlcompleter API. Custom completers ONLY need to
757 take the text parameter.
764 take the text parameter.
758
765
759 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
766 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
760 work correctly in pysh. I've also moved all the logic which used
767 work correctly in pysh. I've also moved all the logic which used
761 to be in pysh.py here, which will prevent problems with future
768 to be in pysh.py here, which will prevent problems with future
762 upgrades. However, this time I must warn users to update their
769 upgrades. However, this time I must warn users to update their
763 pysh profile to include the line
770 pysh profile to include the line
764
771
765 import_all IPython.Extensions.InterpreterExec
772 import_all IPython.Extensions.InterpreterExec
766
773
767 because otherwise things won't work for them. They MUST also
774 because otherwise things won't work for them. They MUST also
768 delete pysh.py and the line
775 delete pysh.py and the line
769
776
770 execfile pysh.py
777 execfile pysh.py
771
778
772 from their ipythonrc-pysh.
779 from their ipythonrc-pysh.
773
780
774 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
781 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
775 robust in the face of objects whose dir() returns non-strings
782 robust in the face of objects whose dir() returns non-strings
776 (which it shouldn't, but some broken libs like ITK do). Thanks to
783 (which it shouldn't, but some broken libs like ITK do). Thanks to
777 a patch by John Hunter (implemented differently, though). Also
784 a patch by John Hunter (implemented differently, though). Also
778 minor improvements by using .extend instead of + on lists.
785 minor improvements by using .extend instead of + on lists.
779
786
780 * pysh.py:
787 * pysh.py:
781
788
782 2005-04-06 Fernando Perez <fperez@colorado.edu>
789 2005-04-06 Fernando Perez <fperez@colorado.edu>
783
790
784 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
791 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
785 by default, so that all users benefit from it. Those who don't
792 by default, so that all users benefit from it. Those who don't
786 want it can still turn it off.
793 want it can still turn it off.
787
794
788 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
795 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
789 config file, I'd forgotten about this, so users were getting it
796 config file, I'd forgotten about this, so users were getting it
790 off by default.
797 off by default.
791
798
792 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
799 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
793 consistency. Now magics can be called in multiline statements,
800 consistency. Now magics can be called in multiline statements,
794 and python variables can be expanded in magic calls via $var.
801 and python variables can be expanded in magic calls via $var.
795 This makes the magic system behave just like aliases or !system
802 This makes the magic system behave just like aliases or !system
796 calls.
803 calls.
797
804
798 2005-03-28 Fernando Perez <fperez@colorado.edu>
805 2005-03-28 Fernando Perez <fperez@colorado.edu>
799
806
800 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
807 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
801 expensive string additions for building command. Add support for
808 expensive string additions for building command. Add support for
802 trailing ';' when autocall is used.
809 trailing ';' when autocall is used.
803
810
804 2005-03-26 Fernando Perez <fperez@colorado.edu>
811 2005-03-26 Fernando Perez <fperez@colorado.edu>
805
812
806 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
813 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
807 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
814 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
808 ipython.el robust against prompts with any number of spaces
815 ipython.el robust against prompts with any number of spaces
809 (including 0) after the ':' character.
816 (including 0) after the ':' character.
810
817
811 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
818 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
812 continuation prompt, which misled users to think the line was
819 continuation prompt, which misled users to think the line was
813 already indented. Closes debian Bug#300847, reported to me by
820 already indented. Closes debian Bug#300847, reported to me by
814 Norbert Tretkowski <tretkowski-AT-inittab.de>.
821 Norbert Tretkowski <tretkowski-AT-inittab.de>.
815
822
816 2005-03-23 Fernando Perez <fperez@colorado.edu>
823 2005-03-23 Fernando Perez <fperez@colorado.edu>
817
824
818 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
825 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
819 properly aligned if they have embedded newlines.
826 properly aligned if they have embedded newlines.
820
827
821 * IPython/iplib.py (runlines): Add a public method to expose
828 * IPython/iplib.py (runlines): Add a public method to expose
822 IPython's code execution machinery, so that users can run strings
829 IPython's code execution machinery, so that users can run strings
823 as if they had been typed at the prompt interactively.
830 as if they had been typed at the prompt interactively.
824 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
831 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
825 methods which can call the system shell, but with python variable
832 methods which can call the system shell, but with python variable
826 expansion. The three such methods are: __IPYTHON__.system,
833 expansion. The three such methods are: __IPYTHON__.system,
827 .getoutput and .getoutputerror. These need to be documented in a
834 .getoutput and .getoutputerror. These need to be documented in a
828 'public API' section (to be written) of the manual.
835 'public API' section (to be written) of the manual.
829
836
830 2005-03-20 Fernando Perez <fperez@colorado.edu>
837 2005-03-20 Fernando Perez <fperez@colorado.edu>
831
838
832 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
839 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
833 for custom exception handling. This is quite powerful, and it
840 for custom exception handling. This is quite powerful, and it
834 allows for user-installable exception handlers which can trap
841 allows for user-installable exception handlers which can trap
835 custom exceptions at runtime and treat them separately from
842 custom exceptions at runtime and treat them separately from
836 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
843 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
837 Mantegazza <mantegazza-AT-ill.fr>.
844 Mantegazza <mantegazza-AT-ill.fr>.
838 (InteractiveShell.set_custom_completer): public API function to
845 (InteractiveShell.set_custom_completer): public API function to
839 add new completers at runtime.
846 add new completers at runtime.
840
847
841 2005-03-19 Fernando Perez <fperez@colorado.edu>
848 2005-03-19 Fernando Perez <fperez@colorado.edu>
842
849
843 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
850 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
844 allow objects which provide their docstrings via non-standard
851 allow objects which provide their docstrings via non-standard
845 mechanisms (like Pyro proxies) to still be inspected by ipython's
852 mechanisms (like Pyro proxies) to still be inspected by ipython's
846 ? system.
853 ? system.
847
854
848 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
855 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
849 automatic capture system. I tried quite hard to make it work
856 automatic capture system. I tried quite hard to make it work
850 reliably, and simply failed. I tried many combinations with the
857 reliably, and simply failed. I tried many combinations with the
851 subprocess module, but eventually nothing worked in all needed
858 subprocess module, but eventually nothing worked in all needed
852 cases (not blocking stdin for the child, duplicating stdout
859 cases (not blocking stdin for the child, duplicating stdout
853 without blocking, etc). The new %sc/%sx still do capture to these
860 without blocking, etc). The new %sc/%sx still do capture to these
854 magical list/string objects which make shell use much more
861 magical list/string objects which make shell use much more
855 conveninent, so not all is lost.
862 conveninent, so not all is lost.
856
863
857 XXX - FIX MANUAL for the change above!
864 XXX - FIX MANUAL for the change above!
858
865
859 (runsource): I copied code.py's runsource() into ipython to modify
866 (runsource): I copied code.py's runsource() into ipython to modify
860 it a bit. Now the code object and source to be executed are
867 it a bit. Now the code object and source to be executed are
861 stored in ipython. This makes this info accessible to third-party
868 stored in ipython. This makes this info accessible to third-party
862 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
869 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
863 Mantegazza <mantegazza-AT-ill.fr>.
870 Mantegazza <mantegazza-AT-ill.fr>.
864
871
865 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
872 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
866 history-search via readline (like C-p/C-n). I'd wanted this for a
873 history-search via readline (like C-p/C-n). I'd wanted this for a
867 long time, but only recently found out how to do it. For users
874 long time, but only recently found out how to do it. For users
868 who already have their ipythonrc files made and want this, just
875 who already have their ipythonrc files made and want this, just
869 add:
876 add:
870
877
871 readline_parse_and_bind "\e[A": history-search-backward
878 readline_parse_and_bind "\e[A": history-search-backward
872 readline_parse_and_bind "\e[B": history-search-forward
879 readline_parse_and_bind "\e[B": history-search-forward
873
880
874 2005-03-18 Fernando Perez <fperez@colorado.edu>
881 2005-03-18 Fernando Perez <fperez@colorado.edu>
875
882
876 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
883 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
877 LSString and SList classes which allow transparent conversions
884 LSString and SList classes which allow transparent conversions
878 between list mode and whitespace-separated string.
885 between list mode and whitespace-separated string.
879 (magic_r): Fix recursion problem in %r.
886 (magic_r): Fix recursion problem in %r.
880
887
881 * IPython/genutils.py (LSString): New class to be used for
888 * IPython/genutils.py (LSString): New class to be used for
882 automatic storage of the results of all alias/system calls in _o
889 automatic storage of the results of all alias/system calls in _o
883 and _e (stdout/err). These provide a .l/.list attribute which
890 and _e (stdout/err). These provide a .l/.list attribute which
884 does automatic splitting on newlines. This means that for most
891 does automatic splitting on newlines. This means that for most
885 uses, you'll never need to do capturing of output with %sc/%sx
892 uses, you'll never need to do capturing of output with %sc/%sx
886 anymore, since ipython keeps this always done for you. Note that
893 anymore, since ipython keeps this always done for you. Note that
887 only the LAST results are stored, the _o/e variables are
894 only the LAST results are stored, the _o/e variables are
888 overwritten on each call. If you need to save their contents
895 overwritten on each call. If you need to save their contents
889 further, simply bind them to any other name.
896 further, simply bind them to any other name.
890
897
891 2005-03-17 Fernando Perez <fperez@colorado.edu>
898 2005-03-17 Fernando Perez <fperez@colorado.edu>
892
899
893 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
900 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
894 prompt namespace handling.
901 prompt namespace handling.
895
902
896 2005-03-16 Fernando Perez <fperez@colorado.edu>
903 2005-03-16 Fernando Perez <fperez@colorado.edu>
897
904
898 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
905 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
899 classic prompts to be '>>> ' (final space was missing, and it
906 classic prompts to be '>>> ' (final space was missing, and it
900 trips the emacs python mode).
907 trips the emacs python mode).
901 (BasePrompt.__str__): Added safe support for dynamic prompt
908 (BasePrompt.__str__): Added safe support for dynamic prompt
902 strings. Now you can set your prompt string to be '$x', and the
909 strings. Now you can set your prompt string to be '$x', and the
903 value of x will be printed from your interactive namespace. The
910 value of x will be printed from your interactive namespace. The
904 interpolation syntax includes the full Itpl support, so
911 interpolation syntax includes the full Itpl support, so
905 ${foo()+x+bar()} is a valid prompt string now, and the function
912 ${foo()+x+bar()} is a valid prompt string now, and the function
906 calls will be made at runtime.
913 calls will be made at runtime.
907
914
908 2005-03-15 Fernando Perez <fperez@colorado.edu>
915 2005-03-15 Fernando Perez <fperez@colorado.edu>
909
916
910 * IPython/Magic.py (magic_history): renamed %hist to %history, to
917 * IPython/Magic.py (magic_history): renamed %hist to %history, to
911 avoid name clashes in pylab. %hist still works, it just forwards
918 avoid name clashes in pylab. %hist still works, it just forwards
912 the call to %history.
919 the call to %history.
913
920
914 2005-03-02 *** Released version 0.6.12
921 2005-03-02 *** Released version 0.6.12
915
922
916 2005-03-02 Fernando Perez <fperez@colorado.edu>
923 2005-03-02 Fernando Perez <fperez@colorado.edu>
917
924
918 * IPython/iplib.py (handle_magic): log magic calls properly as
925 * IPython/iplib.py (handle_magic): log magic calls properly as
919 ipmagic() function calls.
926 ipmagic() function calls.
920
927
921 * IPython/Magic.py (magic_time): Improved %time to support
928 * IPython/Magic.py (magic_time): Improved %time to support
922 statements and provide wall-clock as well as CPU time.
929 statements and provide wall-clock as well as CPU time.
923
930
924 2005-02-27 Fernando Perez <fperez@colorado.edu>
931 2005-02-27 Fernando Perez <fperez@colorado.edu>
925
932
926 * IPython/hooks.py: New hooks module, to expose user-modifiable
933 * IPython/hooks.py: New hooks module, to expose user-modifiable
927 IPython functionality in a clean manner. For now only the editor
934 IPython functionality in a clean manner. For now only the editor
928 hook is actually written, and other thigns which I intend to turn
935 hook is actually written, and other thigns which I intend to turn
929 into proper hooks aren't yet there. The display and prefilter
936 into proper hooks aren't yet there. The display and prefilter
930 stuff, for example, should be hooks. But at least now the
937 stuff, for example, should be hooks. But at least now the
931 framework is in place, and the rest can be moved here with more
938 framework is in place, and the rest can be moved here with more
932 time later. IPython had had a .hooks variable for a long time for
939 time later. IPython had had a .hooks variable for a long time for
933 this purpose, but I'd never actually used it for anything.
940 this purpose, but I'd never actually used it for anything.
934
941
935 2005-02-26 Fernando Perez <fperez@colorado.edu>
942 2005-02-26 Fernando Perez <fperez@colorado.edu>
936
943
937 * IPython/ipmaker.py (make_IPython): make the default ipython
944 * IPython/ipmaker.py (make_IPython): make the default ipython
938 directory be called _ipython under win32, to follow more the
945 directory be called _ipython under win32, to follow more the
939 naming peculiarities of that platform (where buggy software like
946 naming peculiarities of that platform (where buggy software like
940 Visual Sourcesafe breaks with .named directories). Reported by
947 Visual Sourcesafe breaks with .named directories). Reported by
941 Ville Vainio.
948 Ville Vainio.
942
949
943 2005-02-23 Fernando Perez <fperez@colorado.edu>
950 2005-02-23 Fernando Perez <fperez@colorado.edu>
944
951
945 * IPython/iplib.py (InteractiveShell.__init__): removed a few
952 * IPython/iplib.py (InteractiveShell.__init__): removed a few
946 auto_aliases for win32 which were causing problems. Users can
953 auto_aliases for win32 which were causing problems. Users can
947 define the ones they personally like.
954 define the ones they personally like.
948
955
949 2005-02-21 Fernando Perez <fperez@colorado.edu>
956 2005-02-21 Fernando Perez <fperez@colorado.edu>
950
957
951 * IPython/Magic.py (magic_time): new magic to time execution of
958 * IPython/Magic.py (magic_time): new magic to time execution of
952 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
959 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
953
960
954 2005-02-19 Fernando Perez <fperez@colorado.edu>
961 2005-02-19 Fernando Perez <fperez@colorado.edu>
955
962
956 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
963 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
957 into keys (for prompts, for example).
964 into keys (for prompts, for example).
958
965
959 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
966 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
960 prompts in case users want them. This introduces a small behavior
967 prompts in case users want them. This introduces a small behavior
961 change: ipython does not automatically add a space to all prompts
968 change: ipython does not automatically add a space to all prompts
962 anymore. To get the old prompts with a space, users should add it
969 anymore. To get the old prompts with a space, users should add it
963 manually to their ipythonrc file, so for example prompt_in1 should
970 manually to their ipythonrc file, so for example prompt_in1 should
964 now read 'In [\#]: ' instead of 'In [\#]:'.
971 now read 'In [\#]: ' instead of 'In [\#]:'.
965 (BasePrompt.__init__): New option prompts_pad_left (only in rc
972 (BasePrompt.__init__): New option prompts_pad_left (only in rc
966 file) to control left-padding of secondary prompts.
973 file) to control left-padding of secondary prompts.
967
974
968 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
975 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
969 the profiler can't be imported. Fix for Debian, which removed
976 the profiler can't be imported. Fix for Debian, which removed
970 profile.py because of License issues. I applied a slightly
977 profile.py because of License issues. I applied a slightly
971 modified version of the original Debian patch at
978 modified version of the original Debian patch at
972 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
979 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
973
980
974 2005-02-17 Fernando Perez <fperez@colorado.edu>
981 2005-02-17 Fernando Perez <fperez@colorado.edu>
975
982
976 * IPython/genutils.py (native_line_ends): Fix bug which would
983 * IPython/genutils.py (native_line_ends): Fix bug which would
977 cause improper line-ends under win32 b/c I was not opening files
984 cause improper line-ends under win32 b/c I was not opening files
978 in binary mode. Bug report and fix thanks to Ville.
985 in binary mode. Bug report and fix thanks to Ville.
979
986
980 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
987 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
981 trying to catch spurious foo[1] autocalls. My fix actually broke
988 trying to catch spurious foo[1] autocalls. My fix actually broke
982 ',/' autoquote/call with explicit escape (bad regexp).
989 ',/' autoquote/call with explicit escape (bad regexp).
983
990
984 2005-02-15 *** Released version 0.6.11
991 2005-02-15 *** Released version 0.6.11
985
992
986 2005-02-14 Fernando Perez <fperez@colorado.edu>
993 2005-02-14 Fernando Perez <fperez@colorado.edu>
987
994
988 * IPython/background_jobs.py: New background job management
995 * IPython/background_jobs.py: New background job management
989 subsystem. This is implemented via a new set of classes, and
996 subsystem. This is implemented via a new set of classes, and
990 IPython now provides a builtin 'jobs' object for background job
997 IPython now provides a builtin 'jobs' object for background job
991 execution. A convenience %bg magic serves as a lightweight
998 execution. A convenience %bg magic serves as a lightweight
992 frontend for starting the more common type of calls. This was
999 frontend for starting the more common type of calls. This was
993 inspired by discussions with B. Granger and the BackgroundCommand
1000 inspired by discussions with B. Granger and the BackgroundCommand
994 class described in the book Python Scripting for Computational
1001 class described in the book Python Scripting for Computational
995 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1002 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
996 (although ultimately no code from this text was used, as IPython's
1003 (although ultimately no code from this text was used, as IPython's
997 system is a separate implementation).
1004 system is a separate implementation).
998
1005
999 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1006 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1000 to control the completion of single/double underscore names
1007 to control the completion of single/double underscore names
1001 separately. As documented in the example ipytonrc file, the
1008 separately. As documented in the example ipytonrc file, the
1002 readline_omit__names variable can now be set to 2, to omit even
1009 readline_omit__names variable can now be set to 2, to omit even
1003 single underscore names. Thanks to a patch by Brian Wong
1010 single underscore names. Thanks to a patch by Brian Wong
1004 <BrianWong-AT-AirgoNetworks.Com>.
1011 <BrianWong-AT-AirgoNetworks.Com>.
1005 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1012 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1006 be autocalled as foo([1]) if foo were callable. A problem for
1013 be autocalled as foo([1]) if foo were callable. A problem for
1007 things which are both callable and implement __getitem__.
1014 things which are both callable and implement __getitem__.
1008 (init_readline): Fix autoindentation for win32. Thanks to a patch
1015 (init_readline): Fix autoindentation for win32. Thanks to a patch
1009 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1016 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1010
1017
1011 2005-02-12 Fernando Perez <fperez@colorado.edu>
1018 2005-02-12 Fernando Perez <fperez@colorado.edu>
1012
1019
1013 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1020 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1014 which I had written long ago to sort out user error messages which
1021 which I had written long ago to sort out user error messages which
1015 may occur during startup. This seemed like a good idea initially,
1022 may occur during startup. This seemed like a good idea initially,
1016 but it has proven a disaster in retrospect. I don't want to
1023 but it has proven a disaster in retrospect. I don't want to
1017 change much code for now, so my fix is to set the internal 'debug'
1024 change much code for now, so my fix is to set the internal 'debug'
1018 flag to true everywhere, whose only job was precisely to control
1025 flag to true everywhere, whose only job was precisely to control
1019 this subsystem. This closes issue 28 (as well as avoiding all
1026 this subsystem. This closes issue 28 (as well as avoiding all
1020 sorts of strange hangups which occur from time to time).
1027 sorts of strange hangups which occur from time to time).
1021
1028
1022 2005-02-07 Fernando Perez <fperez@colorado.edu>
1029 2005-02-07 Fernando Perez <fperez@colorado.edu>
1023
1030
1024 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1031 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1025 previous call produced a syntax error.
1032 previous call produced a syntax error.
1026
1033
1027 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1034 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1028 classes without constructor.
1035 classes without constructor.
1029
1036
1030 2005-02-06 Fernando Perez <fperez@colorado.edu>
1037 2005-02-06 Fernando Perez <fperez@colorado.edu>
1031
1038
1032 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1039 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1033 completions with the results of each matcher, so we return results
1040 completions with the results of each matcher, so we return results
1034 to the user from all namespaces. This breaks with ipython
1041 to the user from all namespaces. This breaks with ipython
1035 tradition, but I think it's a nicer behavior. Now you get all
1042 tradition, but I think it's a nicer behavior. Now you get all
1036 possible completions listed, from all possible namespaces (python,
1043 possible completions listed, from all possible namespaces (python,
1037 filesystem, magics...) After a request by John Hunter
1044 filesystem, magics...) After a request by John Hunter
1038 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1045 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1039
1046
1040 2005-02-05 Fernando Perez <fperez@colorado.edu>
1047 2005-02-05 Fernando Perez <fperez@colorado.edu>
1041
1048
1042 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1049 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1043 the call had quote characters in it (the quotes were stripped).
1050 the call had quote characters in it (the quotes were stripped).
1044
1051
1045 2005-01-31 Fernando Perez <fperez@colorado.edu>
1052 2005-01-31 Fernando Perez <fperez@colorado.edu>
1046
1053
1047 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1054 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1048 Itpl.itpl() to make the code more robust against psyco
1055 Itpl.itpl() to make the code more robust against psyco
1049 optimizations.
1056 optimizations.
1050
1057
1051 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1058 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1052 of causing an exception. Quicker, cleaner.
1059 of causing an exception. Quicker, cleaner.
1053
1060
1054 2005-01-28 Fernando Perez <fperez@colorado.edu>
1061 2005-01-28 Fernando Perez <fperez@colorado.edu>
1055
1062
1056 * scripts/ipython_win_post_install.py (install): hardcode
1063 * scripts/ipython_win_post_install.py (install): hardcode
1057 sys.prefix+'python.exe' as the executable path. It turns out that
1064 sys.prefix+'python.exe' as the executable path. It turns out that
1058 during the post-installation run, sys.executable resolves to the
1065 during the post-installation run, sys.executable resolves to the
1059 name of the binary installer! I should report this as a distutils
1066 name of the binary installer! I should report this as a distutils
1060 bug, I think. I updated the .10 release with this tiny fix, to
1067 bug, I think. I updated the .10 release with this tiny fix, to
1061 avoid annoying the lists further.
1068 avoid annoying the lists further.
1062
1069
1063 2005-01-27 *** Released version 0.6.10
1070 2005-01-27 *** Released version 0.6.10
1064
1071
1065 2005-01-27 Fernando Perez <fperez@colorado.edu>
1072 2005-01-27 Fernando Perez <fperez@colorado.edu>
1066
1073
1067 * IPython/numutils.py (norm): Added 'inf' as optional name for
1074 * IPython/numutils.py (norm): Added 'inf' as optional name for
1068 L-infinity norm, included references to mathworld.com for vector
1075 L-infinity norm, included references to mathworld.com for vector
1069 norm definitions.
1076 norm definitions.
1070 (amin/amax): added amin/amax for array min/max. Similar to what
1077 (amin/amax): added amin/amax for array min/max. Similar to what
1071 pylab ships with after the recent reorganization of names.
1078 pylab ships with after the recent reorganization of names.
1072 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1079 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1073
1080
1074 * ipython.el: committed Alex's recent fixes and improvements.
1081 * ipython.el: committed Alex's recent fixes and improvements.
1075 Tested with python-mode from CVS, and it looks excellent. Since
1082 Tested with python-mode from CVS, and it looks excellent. Since
1076 python-mode hasn't released anything in a while, I'm temporarily
1083 python-mode hasn't released anything in a while, I'm temporarily
1077 putting a copy of today's CVS (v 4.70) of python-mode in:
1084 putting a copy of today's CVS (v 4.70) of python-mode in:
1078 http://ipython.scipy.org/tmp/python-mode.el
1085 http://ipython.scipy.org/tmp/python-mode.el
1079
1086
1080 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1087 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1081 sys.executable for the executable name, instead of assuming it's
1088 sys.executable for the executable name, instead of assuming it's
1082 called 'python.exe' (the post-installer would have produced broken
1089 called 'python.exe' (the post-installer would have produced broken
1083 setups on systems with a differently named python binary).
1090 setups on systems with a differently named python binary).
1084
1091
1085 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1092 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1086 references to os.linesep, to make the code more
1093 references to os.linesep, to make the code more
1087 platform-independent. This is also part of the win32 coloring
1094 platform-independent. This is also part of the win32 coloring
1088 fixes.
1095 fixes.
1089
1096
1090 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1097 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1091 lines, which actually cause coloring bugs because the length of
1098 lines, which actually cause coloring bugs because the length of
1092 the line is very difficult to correctly compute with embedded
1099 the line is very difficult to correctly compute with embedded
1093 escapes. This was the source of all the coloring problems under
1100 escapes. This was the source of all the coloring problems under
1094 Win32. I think that _finally_, Win32 users have a properly
1101 Win32. I think that _finally_, Win32 users have a properly
1095 working ipython in all respects. This would never have happened
1102 working ipython in all respects. This would never have happened
1096 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1103 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1097
1104
1098 2005-01-26 *** Released version 0.6.9
1105 2005-01-26 *** Released version 0.6.9
1099
1106
1100 2005-01-25 Fernando Perez <fperez@colorado.edu>
1107 2005-01-25 Fernando Perez <fperez@colorado.edu>
1101
1108
1102 * setup.py: finally, we have a true Windows installer, thanks to
1109 * setup.py: finally, we have a true Windows installer, thanks to
1103 the excellent work of Viktor Ransmayr
1110 the excellent work of Viktor Ransmayr
1104 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1111 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1105 Windows users. The setup routine is quite a bit cleaner thanks to
1112 Windows users. The setup routine is quite a bit cleaner thanks to
1106 this, and the post-install script uses the proper functions to
1113 this, and the post-install script uses the proper functions to
1107 allow a clean de-installation using the standard Windows Control
1114 allow a clean de-installation using the standard Windows Control
1108 Panel.
1115 Panel.
1109
1116
1110 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1117 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1111 environment variable under all OSes (including win32) if
1118 environment variable under all OSes (including win32) if
1112 available. This will give consistency to win32 users who have set
1119 available. This will give consistency to win32 users who have set
1113 this variable for any reason. If os.environ['HOME'] fails, the
1120 this variable for any reason. If os.environ['HOME'] fails, the
1114 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1121 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1115
1122
1116 2005-01-24 Fernando Perez <fperez@colorado.edu>
1123 2005-01-24 Fernando Perez <fperez@colorado.edu>
1117
1124
1118 * IPython/numutils.py (empty_like): add empty_like(), similar to
1125 * IPython/numutils.py (empty_like): add empty_like(), similar to
1119 zeros_like() but taking advantage of the new empty() Numeric routine.
1126 zeros_like() but taking advantage of the new empty() Numeric routine.
1120
1127
1121 2005-01-23 *** Released version 0.6.8
1128 2005-01-23 *** Released version 0.6.8
1122
1129
1123 2005-01-22 Fernando Perez <fperez@colorado.edu>
1130 2005-01-22 Fernando Perez <fperez@colorado.edu>
1124
1131
1125 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1132 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1126 automatic show() calls. After discussing things with JDH, it
1133 automatic show() calls. After discussing things with JDH, it
1127 turns out there are too many corner cases where this can go wrong.
1134 turns out there are too many corner cases where this can go wrong.
1128 It's best not to try to be 'too smart', and simply have ipython
1135 It's best not to try to be 'too smart', and simply have ipython
1129 reproduce as much as possible the default behavior of a normal
1136 reproduce as much as possible the default behavior of a normal
1130 python shell.
1137 python shell.
1131
1138
1132 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1139 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1133 line-splitting regexp and _prefilter() to avoid calling getattr()
1140 line-splitting regexp and _prefilter() to avoid calling getattr()
1134 on assignments. This closes
1141 on assignments. This closes
1135 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1142 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1136 readline uses getattr(), so a simple <TAB> keypress is still
1143 readline uses getattr(), so a simple <TAB> keypress is still
1137 enough to trigger getattr() calls on an object.
1144 enough to trigger getattr() calls on an object.
1138
1145
1139 2005-01-21 Fernando Perez <fperez@colorado.edu>
1146 2005-01-21 Fernando Perez <fperez@colorado.edu>
1140
1147
1141 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1148 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1142 docstring under pylab so it doesn't mask the original.
1149 docstring under pylab so it doesn't mask the original.
1143
1150
1144 2005-01-21 *** Released version 0.6.7
1151 2005-01-21 *** Released version 0.6.7
1145
1152
1146 2005-01-21 Fernando Perez <fperez@colorado.edu>
1153 2005-01-21 Fernando Perez <fperez@colorado.edu>
1147
1154
1148 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1155 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1149 signal handling for win32 users in multithreaded mode.
1156 signal handling for win32 users in multithreaded mode.
1150
1157
1151 2005-01-17 Fernando Perez <fperez@colorado.edu>
1158 2005-01-17 Fernando Perez <fperez@colorado.edu>
1152
1159
1153 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1160 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1154 instances with no __init__. After a crash report by Norbert Nemec
1161 instances with no __init__. After a crash report by Norbert Nemec
1155 <Norbert-AT-nemec-online.de>.
1162 <Norbert-AT-nemec-online.de>.
1156
1163
1157 2005-01-14 Fernando Perez <fperez@colorado.edu>
1164 2005-01-14 Fernando Perez <fperez@colorado.edu>
1158
1165
1159 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1166 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1160 names for verbose exceptions, when multiple dotted names and the
1167 names for verbose exceptions, when multiple dotted names and the
1161 'parent' object were present on the same line.
1168 'parent' object were present on the same line.
1162
1169
1163 2005-01-11 Fernando Perez <fperez@colorado.edu>
1170 2005-01-11 Fernando Perez <fperez@colorado.edu>
1164
1171
1165 * IPython/genutils.py (flag_calls): new utility to trap and flag
1172 * IPython/genutils.py (flag_calls): new utility to trap and flag
1166 calls in functions. I need it to clean up matplotlib support.
1173 calls in functions. I need it to clean up matplotlib support.
1167 Also removed some deprecated code in genutils.
1174 Also removed some deprecated code in genutils.
1168
1175
1169 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1176 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1170 that matplotlib scripts called with %run, which don't call show()
1177 that matplotlib scripts called with %run, which don't call show()
1171 themselves, still have their plotting windows open.
1178 themselves, still have their plotting windows open.
1172
1179
1173 2005-01-05 Fernando Perez <fperez@colorado.edu>
1180 2005-01-05 Fernando Perez <fperez@colorado.edu>
1174
1181
1175 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1182 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1176 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1183 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1177
1184
1178 2004-12-19 Fernando Perez <fperez@colorado.edu>
1185 2004-12-19 Fernando Perez <fperez@colorado.edu>
1179
1186
1180 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1187 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1181 parent_runcode, which was an eyesore. The same result can be
1188 parent_runcode, which was an eyesore. The same result can be
1182 obtained with Python's regular superclass mechanisms.
1189 obtained with Python's regular superclass mechanisms.
1183
1190
1184 2004-12-17 Fernando Perez <fperez@colorado.edu>
1191 2004-12-17 Fernando Perez <fperez@colorado.edu>
1185
1192
1186 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1193 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1187 reported by Prabhu.
1194 reported by Prabhu.
1188 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1195 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1189 sys.stderr) instead of explicitly calling sys.stderr. This helps
1196 sys.stderr) instead of explicitly calling sys.stderr. This helps
1190 maintain our I/O abstractions clean, for future GUI embeddings.
1197 maintain our I/O abstractions clean, for future GUI embeddings.
1191
1198
1192 * IPython/genutils.py (info): added new utility for sys.stderr
1199 * IPython/genutils.py (info): added new utility for sys.stderr
1193 unified info message handling (thin wrapper around warn()).
1200 unified info message handling (thin wrapper around warn()).
1194
1201
1195 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1202 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1196 composite (dotted) names on verbose exceptions.
1203 composite (dotted) names on verbose exceptions.
1197 (VerboseTB.nullrepr): harden against another kind of errors which
1204 (VerboseTB.nullrepr): harden against another kind of errors which
1198 Python's inspect module can trigger, and which were crashing
1205 Python's inspect module can trigger, and which were crashing
1199 IPython. Thanks to a report by Marco Lombardi
1206 IPython. Thanks to a report by Marco Lombardi
1200 <mlombard-AT-ma010192.hq.eso.org>.
1207 <mlombard-AT-ma010192.hq.eso.org>.
1201
1208
1202 2004-12-13 *** Released version 0.6.6
1209 2004-12-13 *** Released version 0.6.6
1203
1210
1204 2004-12-12 Fernando Perez <fperez@colorado.edu>
1211 2004-12-12 Fernando Perez <fperez@colorado.edu>
1205
1212
1206 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1213 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1207 generated by pygtk upon initialization if it was built without
1214 generated by pygtk upon initialization if it was built without
1208 threads (for matplotlib users). After a crash reported by
1215 threads (for matplotlib users). After a crash reported by
1209 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1216 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1210
1217
1211 * IPython/ipmaker.py (make_IPython): fix small bug in the
1218 * IPython/ipmaker.py (make_IPython): fix small bug in the
1212 import_some parameter for multiple imports.
1219 import_some parameter for multiple imports.
1213
1220
1214 * IPython/iplib.py (ipmagic): simplified the interface of
1221 * IPython/iplib.py (ipmagic): simplified the interface of
1215 ipmagic() to take a single string argument, just as it would be
1222 ipmagic() to take a single string argument, just as it would be
1216 typed at the IPython cmd line.
1223 typed at the IPython cmd line.
1217 (ipalias): Added new ipalias() with an interface identical to
1224 (ipalias): Added new ipalias() with an interface identical to
1218 ipmagic(). This completes exposing a pure python interface to the
1225 ipmagic(). This completes exposing a pure python interface to the
1219 alias and magic system, which can be used in loops or more complex
1226 alias and magic system, which can be used in loops or more complex
1220 code where IPython's automatic line mangling is not active.
1227 code where IPython's automatic line mangling is not active.
1221
1228
1222 * IPython/genutils.py (timing): changed interface of timing to
1229 * IPython/genutils.py (timing): changed interface of timing to
1223 simply run code once, which is the most common case. timings()
1230 simply run code once, which is the most common case. timings()
1224 remains unchanged, for the cases where you want multiple runs.
1231 remains unchanged, for the cases where you want multiple runs.
1225
1232
1226 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1233 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1227 bug where Python2.2 crashes with exec'ing code which does not end
1234 bug where Python2.2 crashes with exec'ing code which does not end
1228 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1235 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1229 before.
1236 before.
1230
1237
1231 2004-12-10 Fernando Perez <fperez@colorado.edu>
1238 2004-12-10 Fernando Perez <fperez@colorado.edu>
1232
1239
1233 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1240 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1234 -t to -T, to accomodate the new -t flag in %run (the %run and
1241 -t to -T, to accomodate the new -t flag in %run (the %run and
1235 %prun options are kind of intermixed, and it's not easy to change
1242 %prun options are kind of intermixed, and it's not easy to change
1236 this with the limitations of python's getopt).
1243 this with the limitations of python's getopt).
1237
1244
1238 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1245 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1239 the execution of scripts. It's not as fine-tuned as timeit.py,
1246 the execution of scripts. It's not as fine-tuned as timeit.py,
1240 but it works from inside ipython (and under 2.2, which lacks
1247 but it works from inside ipython (and under 2.2, which lacks
1241 timeit.py). Optionally a number of runs > 1 can be given for
1248 timeit.py). Optionally a number of runs > 1 can be given for
1242 timing very short-running code.
1249 timing very short-running code.
1243
1250
1244 * IPython/genutils.py (uniq_stable): new routine which returns a
1251 * IPython/genutils.py (uniq_stable): new routine which returns a
1245 list of unique elements in any iterable, but in stable order of
1252 list of unique elements in any iterable, but in stable order of
1246 appearance. I needed this for the ultraTB fixes, and it's a handy
1253 appearance. I needed this for the ultraTB fixes, and it's a handy
1247 utility.
1254 utility.
1248
1255
1249 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1256 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1250 dotted names in Verbose exceptions. This had been broken since
1257 dotted names in Verbose exceptions. This had been broken since
1251 the very start, now x.y will properly be printed in a Verbose
1258 the very start, now x.y will properly be printed in a Verbose
1252 traceback, instead of x being shown and y appearing always as an
1259 traceback, instead of x being shown and y appearing always as an
1253 'undefined global'. Getting this to work was a bit tricky,
1260 'undefined global'. Getting this to work was a bit tricky,
1254 because by default python tokenizers are stateless. Saved by
1261 because by default python tokenizers are stateless. Saved by
1255 python's ability to easily add a bit of state to an arbitrary
1262 python's ability to easily add a bit of state to an arbitrary
1256 function (without needing to build a full-blown callable object).
1263 function (without needing to build a full-blown callable object).
1257
1264
1258 Also big cleanup of this code, which had horrendous runtime
1265 Also big cleanup of this code, which had horrendous runtime
1259 lookups of zillions of attributes for colorization. Moved all
1266 lookups of zillions of attributes for colorization. Moved all
1260 this code into a few templates, which make it cleaner and quicker.
1267 this code into a few templates, which make it cleaner and quicker.
1261
1268
1262 Printout quality was also improved for Verbose exceptions: one
1269 Printout quality was also improved for Verbose exceptions: one
1263 variable per line, and memory addresses are printed (this can be
1270 variable per line, and memory addresses are printed (this can be
1264 quite handy in nasty debugging situations, which is what Verbose
1271 quite handy in nasty debugging situations, which is what Verbose
1265 is for).
1272 is for).
1266
1273
1267 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1274 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1268 the command line as scripts to be loaded by embedded instances.
1275 the command line as scripts to be loaded by embedded instances.
1269 Doing so has the potential for an infinite recursion if there are
1276 Doing so has the potential for an infinite recursion if there are
1270 exceptions thrown in the process. This fixes a strange crash
1277 exceptions thrown in the process. This fixes a strange crash
1271 reported by Philippe MULLER <muller-AT-irit.fr>.
1278 reported by Philippe MULLER <muller-AT-irit.fr>.
1272
1279
1273 2004-12-09 Fernando Perez <fperez@colorado.edu>
1280 2004-12-09 Fernando Perez <fperez@colorado.edu>
1274
1281
1275 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1282 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1276 to reflect new names in matplotlib, which now expose the
1283 to reflect new names in matplotlib, which now expose the
1277 matlab-compatible interface via a pylab module instead of the
1284 matlab-compatible interface via a pylab module instead of the
1278 'matlab' name. The new code is backwards compatible, so users of
1285 'matlab' name. The new code is backwards compatible, so users of
1279 all matplotlib versions are OK. Patch by J. Hunter.
1286 all matplotlib versions are OK. Patch by J. Hunter.
1280
1287
1281 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1288 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1282 of __init__ docstrings for instances (class docstrings are already
1289 of __init__ docstrings for instances (class docstrings are already
1283 automatically printed). Instances with customized docstrings
1290 automatically printed). Instances with customized docstrings
1284 (indep. of the class) are also recognized and all 3 separate
1291 (indep. of the class) are also recognized and all 3 separate
1285 docstrings are printed (instance, class, constructor). After some
1292 docstrings are printed (instance, class, constructor). After some
1286 comments/suggestions by J. Hunter.
1293 comments/suggestions by J. Hunter.
1287
1294
1288 2004-12-05 Fernando Perez <fperez@colorado.edu>
1295 2004-12-05 Fernando Perez <fperez@colorado.edu>
1289
1296
1290 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1297 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1291 warnings when tab-completion fails and triggers an exception.
1298 warnings when tab-completion fails and triggers an exception.
1292
1299
1293 2004-12-03 Fernando Perez <fperez@colorado.edu>
1300 2004-12-03 Fernando Perez <fperez@colorado.edu>
1294
1301
1295 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1302 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1296 be triggered when using 'run -p'. An incorrect option flag was
1303 be triggered when using 'run -p'. An incorrect option flag was
1297 being set ('d' instead of 'D').
1304 being set ('d' instead of 'D').
1298 (manpage): fix missing escaped \- sign.
1305 (manpage): fix missing escaped \- sign.
1299
1306
1300 2004-11-30 *** Released version 0.6.5
1307 2004-11-30 *** Released version 0.6.5
1301
1308
1302 2004-11-30 Fernando Perez <fperez@colorado.edu>
1309 2004-11-30 Fernando Perez <fperez@colorado.edu>
1303
1310
1304 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1311 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1305 setting with -d option.
1312 setting with -d option.
1306
1313
1307 * setup.py (docfiles): Fix problem where the doc glob I was using
1314 * setup.py (docfiles): Fix problem where the doc glob I was using
1308 was COMPLETELY BROKEN. It was giving the right files by pure
1315 was COMPLETELY BROKEN. It was giving the right files by pure
1309 accident, but failed once I tried to include ipython.el. Note:
1316 accident, but failed once I tried to include ipython.el. Note:
1310 glob() does NOT allow you to do exclusion on multiple endings!
1317 glob() does NOT allow you to do exclusion on multiple endings!
1311
1318
1312 2004-11-29 Fernando Perez <fperez@colorado.edu>
1319 2004-11-29 Fernando Perez <fperez@colorado.edu>
1313
1320
1314 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1321 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1315 the manpage as the source. Better formatting & consistency.
1322 the manpage as the source. Better formatting & consistency.
1316
1323
1317 * IPython/Magic.py (magic_run): Added new -d option, to run
1324 * IPython/Magic.py (magic_run): Added new -d option, to run
1318 scripts under the control of the python pdb debugger. Note that
1325 scripts under the control of the python pdb debugger. Note that
1319 this required changing the %prun option -d to -D, to avoid a clash
1326 this required changing the %prun option -d to -D, to avoid a clash
1320 (since %run must pass options to %prun, and getopt is too dumb to
1327 (since %run must pass options to %prun, and getopt is too dumb to
1321 handle options with string values with embedded spaces). Thanks
1328 handle options with string values with embedded spaces). Thanks
1322 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1329 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1323 (magic_who_ls): added type matching to %who and %whos, so that one
1330 (magic_who_ls): added type matching to %who and %whos, so that one
1324 can filter their output to only include variables of certain
1331 can filter their output to only include variables of certain
1325 types. Another suggestion by Matthew.
1332 types. Another suggestion by Matthew.
1326 (magic_whos): Added memory summaries in kb and Mb for arrays.
1333 (magic_whos): Added memory summaries in kb and Mb for arrays.
1327 (magic_who): Improve formatting (break lines every 9 vars).
1334 (magic_who): Improve formatting (break lines every 9 vars).
1328
1335
1329 2004-11-28 Fernando Perez <fperez@colorado.edu>
1336 2004-11-28 Fernando Perez <fperez@colorado.edu>
1330
1337
1331 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1338 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1332 cache when empty lines were present.
1339 cache when empty lines were present.
1333
1340
1334 2004-11-24 Fernando Perez <fperez@colorado.edu>
1341 2004-11-24 Fernando Perez <fperez@colorado.edu>
1335
1342
1336 * IPython/usage.py (__doc__): document the re-activated threading
1343 * IPython/usage.py (__doc__): document the re-activated threading
1337 options for WX and GTK.
1344 options for WX and GTK.
1338
1345
1339 2004-11-23 Fernando Perez <fperez@colorado.edu>
1346 2004-11-23 Fernando Perez <fperez@colorado.edu>
1340
1347
1341 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1348 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1342 the -wthread and -gthread options, along with a new -tk one to try
1349 the -wthread and -gthread options, along with a new -tk one to try
1343 and coordinate Tk threading with wx/gtk. The tk support is very
1350 and coordinate Tk threading with wx/gtk. The tk support is very
1344 platform dependent, since it seems to require Tcl and Tk to be
1351 platform dependent, since it seems to require Tcl and Tk to be
1345 built with threads (Fedora1/2 appears NOT to have it, but in
1352 built with threads (Fedora1/2 appears NOT to have it, but in
1346 Prabhu's Debian boxes it works OK). But even with some Tk
1353 Prabhu's Debian boxes it works OK). But even with some Tk
1347 limitations, this is a great improvement.
1354 limitations, this is a great improvement.
1348
1355
1349 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1356 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1350 info in user prompts. Patch by Prabhu.
1357 info in user prompts. Patch by Prabhu.
1351
1358
1352 2004-11-18 Fernando Perez <fperez@colorado.edu>
1359 2004-11-18 Fernando Perez <fperez@colorado.edu>
1353
1360
1354 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1361 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1355 EOFErrors and bail, to avoid infinite loops if a non-terminating
1362 EOFErrors and bail, to avoid infinite loops if a non-terminating
1356 file is fed into ipython. Patch submitted in issue 19 by user,
1363 file is fed into ipython. Patch submitted in issue 19 by user,
1357 many thanks.
1364 many thanks.
1358
1365
1359 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1366 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1360 autoquote/parens in continuation prompts, which can cause lots of
1367 autoquote/parens in continuation prompts, which can cause lots of
1361 problems. Closes roundup issue 20.
1368 problems. Closes roundup issue 20.
1362
1369
1363 2004-11-17 Fernando Perez <fperez@colorado.edu>
1370 2004-11-17 Fernando Perez <fperez@colorado.edu>
1364
1371
1365 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1372 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1366 reported as debian bug #280505. I'm not sure my local changelog
1373 reported as debian bug #280505. I'm not sure my local changelog
1367 entry has the proper debian format (Jack?).
1374 entry has the proper debian format (Jack?).
1368
1375
1369 2004-11-08 *** Released version 0.6.4
1376 2004-11-08 *** Released version 0.6.4
1370
1377
1371 2004-11-08 Fernando Perez <fperez@colorado.edu>
1378 2004-11-08 Fernando Perez <fperez@colorado.edu>
1372
1379
1373 * IPython/iplib.py (init_readline): Fix exit message for Windows
1380 * IPython/iplib.py (init_readline): Fix exit message for Windows
1374 when readline is active. Thanks to a report by Eric Jones
1381 when readline is active. Thanks to a report by Eric Jones
1375 <eric-AT-enthought.com>.
1382 <eric-AT-enthought.com>.
1376
1383
1377 2004-11-07 Fernando Perez <fperez@colorado.edu>
1384 2004-11-07 Fernando Perez <fperez@colorado.edu>
1378
1385
1379 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1386 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1380 sometimes seen by win2k/cygwin users.
1387 sometimes seen by win2k/cygwin users.
1381
1388
1382 2004-11-06 Fernando Perez <fperez@colorado.edu>
1389 2004-11-06 Fernando Perez <fperez@colorado.edu>
1383
1390
1384 * IPython/iplib.py (interact): Change the handling of %Exit from
1391 * IPython/iplib.py (interact): Change the handling of %Exit from
1385 trying to propagate a SystemExit to an internal ipython flag.
1392 trying to propagate a SystemExit to an internal ipython flag.
1386 This is less elegant than using Python's exception mechanism, but
1393 This is less elegant than using Python's exception mechanism, but
1387 I can't get that to work reliably with threads, so under -pylab
1394 I can't get that to work reliably with threads, so under -pylab
1388 %Exit was hanging IPython. Cross-thread exception handling is
1395 %Exit was hanging IPython. Cross-thread exception handling is
1389 really a bitch. Thaks to a bug report by Stephen Walton
1396 really a bitch. Thaks to a bug report by Stephen Walton
1390 <stephen.walton-AT-csun.edu>.
1397 <stephen.walton-AT-csun.edu>.
1391
1398
1392 2004-11-04 Fernando Perez <fperez@colorado.edu>
1399 2004-11-04 Fernando Perez <fperez@colorado.edu>
1393
1400
1394 * IPython/iplib.py (raw_input_original): store a pointer to the
1401 * IPython/iplib.py (raw_input_original): store a pointer to the
1395 true raw_input to harden against code which can modify it
1402 true raw_input to harden against code which can modify it
1396 (wx.py.PyShell does this and would otherwise crash ipython).
1403 (wx.py.PyShell does this and would otherwise crash ipython).
1397 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1404 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1398
1405
1399 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1406 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1400 Ctrl-C problem, which does not mess up the input line.
1407 Ctrl-C problem, which does not mess up the input line.
1401
1408
1402 2004-11-03 Fernando Perez <fperez@colorado.edu>
1409 2004-11-03 Fernando Perez <fperez@colorado.edu>
1403
1410
1404 * IPython/Release.py: Changed licensing to BSD, in all files.
1411 * IPython/Release.py: Changed licensing to BSD, in all files.
1405 (name): lowercase name for tarball/RPM release.
1412 (name): lowercase name for tarball/RPM release.
1406
1413
1407 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1414 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1408 use throughout ipython.
1415 use throughout ipython.
1409
1416
1410 * IPython/Magic.py (Magic._ofind): Switch to using the new
1417 * IPython/Magic.py (Magic._ofind): Switch to using the new
1411 OInspect.getdoc() function.
1418 OInspect.getdoc() function.
1412
1419
1413 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1420 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1414 of the line currently being canceled via Ctrl-C. It's extremely
1421 of the line currently being canceled via Ctrl-C. It's extremely
1415 ugly, but I don't know how to do it better (the problem is one of
1422 ugly, but I don't know how to do it better (the problem is one of
1416 handling cross-thread exceptions).
1423 handling cross-thread exceptions).
1417
1424
1418 2004-10-28 Fernando Perez <fperez@colorado.edu>
1425 2004-10-28 Fernando Perez <fperez@colorado.edu>
1419
1426
1420 * IPython/Shell.py (signal_handler): add signal handlers to trap
1427 * IPython/Shell.py (signal_handler): add signal handlers to trap
1421 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1428 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1422 report by Francesc Alted.
1429 report by Francesc Alted.
1423
1430
1424 2004-10-21 Fernando Perez <fperez@colorado.edu>
1431 2004-10-21 Fernando Perez <fperez@colorado.edu>
1425
1432
1426 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1433 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1427 to % for pysh syntax extensions.
1434 to % for pysh syntax extensions.
1428
1435
1429 2004-10-09 Fernando Perez <fperez@colorado.edu>
1436 2004-10-09 Fernando Perez <fperez@colorado.edu>
1430
1437
1431 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1438 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1432 arrays to print a more useful summary, without calling str(arr).
1439 arrays to print a more useful summary, without calling str(arr).
1433 This avoids the problem of extremely lengthy computations which
1440 This avoids the problem of extremely lengthy computations which
1434 occur if arr is large, and appear to the user as a system lockup
1441 occur if arr is large, and appear to the user as a system lockup
1435 with 100% cpu activity. After a suggestion by Kristian Sandberg
1442 with 100% cpu activity. After a suggestion by Kristian Sandberg
1436 <Kristian.Sandberg@colorado.edu>.
1443 <Kristian.Sandberg@colorado.edu>.
1437 (Magic.__init__): fix bug in global magic escapes not being
1444 (Magic.__init__): fix bug in global magic escapes not being
1438 correctly set.
1445 correctly set.
1439
1446
1440 2004-10-08 Fernando Perez <fperez@colorado.edu>
1447 2004-10-08 Fernando Perez <fperez@colorado.edu>
1441
1448
1442 * IPython/Magic.py (__license__): change to absolute imports of
1449 * IPython/Magic.py (__license__): change to absolute imports of
1443 ipython's own internal packages, to start adapting to the absolute
1450 ipython's own internal packages, to start adapting to the absolute
1444 import requirement of PEP-328.
1451 import requirement of PEP-328.
1445
1452
1446 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1453 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1447 files, and standardize author/license marks through the Release
1454 files, and standardize author/license marks through the Release
1448 module instead of having per/file stuff (except for files with
1455 module instead of having per/file stuff (except for files with
1449 particular licenses, like the MIT/PSF-licensed codes).
1456 particular licenses, like the MIT/PSF-licensed codes).
1450
1457
1451 * IPython/Debugger.py: remove dead code for python 2.1
1458 * IPython/Debugger.py: remove dead code for python 2.1
1452
1459
1453 2004-10-04 Fernando Perez <fperez@colorado.edu>
1460 2004-10-04 Fernando Perez <fperez@colorado.edu>
1454
1461
1455 * IPython/iplib.py (ipmagic): New function for accessing magics
1462 * IPython/iplib.py (ipmagic): New function for accessing magics
1456 via a normal python function call.
1463 via a normal python function call.
1457
1464
1458 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1465 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1459 from '@' to '%', to accomodate the new @decorator syntax of python
1466 from '@' to '%', to accomodate the new @decorator syntax of python
1460 2.4.
1467 2.4.
1461
1468
1462 2004-09-29 Fernando Perez <fperez@colorado.edu>
1469 2004-09-29 Fernando Perez <fperez@colorado.edu>
1463
1470
1464 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1471 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1465 matplotlib.use to prevent running scripts which try to switch
1472 matplotlib.use to prevent running scripts which try to switch
1466 interactive backends from within ipython. This will just crash
1473 interactive backends from within ipython. This will just crash
1467 the python interpreter, so we can't allow it (but a detailed error
1474 the python interpreter, so we can't allow it (but a detailed error
1468 is given to the user).
1475 is given to the user).
1469
1476
1470 2004-09-28 Fernando Perez <fperez@colorado.edu>
1477 2004-09-28 Fernando Perez <fperez@colorado.edu>
1471
1478
1472 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1479 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1473 matplotlib-related fixes so that using @run with non-matplotlib
1480 matplotlib-related fixes so that using @run with non-matplotlib
1474 scripts doesn't pop up spurious plot windows. This requires
1481 scripts doesn't pop up spurious plot windows. This requires
1475 matplotlib >= 0.63, where I had to make some changes as well.
1482 matplotlib >= 0.63, where I had to make some changes as well.
1476
1483
1477 * IPython/ipmaker.py (make_IPython): update version requirement to
1484 * IPython/ipmaker.py (make_IPython): update version requirement to
1478 python 2.2.
1485 python 2.2.
1479
1486
1480 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1487 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1481 banner arg for embedded customization.
1488 banner arg for embedded customization.
1482
1489
1483 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1490 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1484 explicit uses of __IP as the IPython's instance name. Now things
1491 explicit uses of __IP as the IPython's instance name. Now things
1485 are properly handled via the shell.name value. The actual code
1492 are properly handled via the shell.name value. The actual code
1486 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1493 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1487 is much better than before. I'll clean things completely when the
1494 is much better than before. I'll clean things completely when the
1488 magic stuff gets a real overhaul.
1495 magic stuff gets a real overhaul.
1489
1496
1490 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1497 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1491 minor changes to debian dir.
1498 minor changes to debian dir.
1492
1499
1493 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1500 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1494 pointer to the shell itself in the interactive namespace even when
1501 pointer to the shell itself in the interactive namespace even when
1495 a user-supplied dict is provided. This is needed for embedding
1502 a user-supplied dict is provided. This is needed for embedding
1496 purposes (found by tests with Michel Sanner).
1503 purposes (found by tests with Michel Sanner).
1497
1504
1498 2004-09-27 Fernando Perez <fperez@colorado.edu>
1505 2004-09-27 Fernando Perez <fperez@colorado.edu>
1499
1506
1500 * IPython/UserConfig/ipythonrc: remove []{} from
1507 * IPython/UserConfig/ipythonrc: remove []{} from
1501 readline_remove_delims, so that things like [modname.<TAB> do
1508 readline_remove_delims, so that things like [modname.<TAB> do
1502 proper completion. This disables [].TAB, but that's a less common
1509 proper completion. This disables [].TAB, but that's a less common
1503 case than module names in list comprehensions, for example.
1510 case than module names in list comprehensions, for example.
1504 Thanks to a report by Andrea Riciputi.
1511 Thanks to a report by Andrea Riciputi.
1505
1512
1506 2004-09-09 Fernando Perez <fperez@colorado.edu>
1513 2004-09-09 Fernando Perez <fperez@colorado.edu>
1507
1514
1508 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1515 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1509 blocking problems in win32 and osx. Fix by John.
1516 blocking problems in win32 and osx. Fix by John.
1510
1517
1511 2004-09-08 Fernando Perez <fperez@colorado.edu>
1518 2004-09-08 Fernando Perez <fperez@colorado.edu>
1512
1519
1513 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1520 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1514 for Win32 and OSX. Fix by John Hunter.
1521 for Win32 and OSX. Fix by John Hunter.
1515
1522
1516 2004-08-30 *** Released version 0.6.3
1523 2004-08-30 *** Released version 0.6.3
1517
1524
1518 2004-08-30 Fernando Perez <fperez@colorado.edu>
1525 2004-08-30 Fernando Perez <fperez@colorado.edu>
1519
1526
1520 * setup.py (isfile): Add manpages to list of dependent files to be
1527 * setup.py (isfile): Add manpages to list of dependent files to be
1521 updated.
1528 updated.
1522
1529
1523 2004-08-27 Fernando Perez <fperez@colorado.edu>
1530 2004-08-27 Fernando Perez <fperez@colorado.edu>
1524
1531
1525 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1532 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1526 for now. They don't really work with standalone WX/GTK code
1533 for now. They don't really work with standalone WX/GTK code
1527 (though matplotlib IS working fine with both of those backends).
1534 (though matplotlib IS working fine with both of those backends).
1528 This will neeed much more testing. I disabled most things with
1535 This will neeed much more testing. I disabled most things with
1529 comments, so turning it back on later should be pretty easy.
1536 comments, so turning it back on later should be pretty easy.
1530
1537
1531 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1538 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1532 autocalling of expressions like r'foo', by modifying the line
1539 autocalling of expressions like r'foo', by modifying the line
1533 split regexp. Closes
1540 split regexp. Closes
1534 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1541 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1535 Riley <ipythonbugs-AT-sabi.net>.
1542 Riley <ipythonbugs-AT-sabi.net>.
1536 (InteractiveShell.mainloop): honor --nobanner with banner
1543 (InteractiveShell.mainloop): honor --nobanner with banner
1537 extensions.
1544 extensions.
1538
1545
1539 * IPython/Shell.py: Significant refactoring of all classes, so
1546 * IPython/Shell.py: Significant refactoring of all classes, so
1540 that we can really support ALL matplotlib backends and threading
1547 that we can really support ALL matplotlib backends and threading
1541 models (John spotted a bug with Tk which required this). Now we
1548 models (John spotted a bug with Tk which required this). Now we
1542 should support single-threaded, WX-threads and GTK-threads, both
1549 should support single-threaded, WX-threads and GTK-threads, both
1543 for generic code and for matplotlib.
1550 for generic code and for matplotlib.
1544
1551
1545 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1552 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1546 -pylab, to simplify things for users. Will also remove the pylab
1553 -pylab, to simplify things for users. Will also remove the pylab
1547 profile, since now all of matplotlib configuration is directly
1554 profile, since now all of matplotlib configuration is directly
1548 handled here. This also reduces startup time.
1555 handled here. This also reduces startup time.
1549
1556
1550 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1557 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1551 shell wasn't being correctly called. Also in IPShellWX.
1558 shell wasn't being correctly called. Also in IPShellWX.
1552
1559
1553 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1560 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1554 fine-tune banner.
1561 fine-tune banner.
1555
1562
1556 * IPython/numutils.py (spike): Deprecate these spike functions,
1563 * IPython/numutils.py (spike): Deprecate these spike functions,
1557 delete (long deprecated) gnuplot_exec handler.
1564 delete (long deprecated) gnuplot_exec handler.
1558
1565
1559 2004-08-26 Fernando Perez <fperez@colorado.edu>
1566 2004-08-26 Fernando Perez <fperez@colorado.edu>
1560
1567
1561 * ipython.1: Update for threading options, plus some others which
1568 * ipython.1: Update for threading options, plus some others which
1562 were missing.
1569 were missing.
1563
1570
1564 * IPython/ipmaker.py (__call__): Added -wthread option for
1571 * IPython/ipmaker.py (__call__): Added -wthread option for
1565 wxpython thread handling. Make sure threading options are only
1572 wxpython thread handling. Make sure threading options are only
1566 valid at the command line.
1573 valid at the command line.
1567
1574
1568 * scripts/ipython: moved shell selection into a factory function
1575 * scripts/ipython: moved shell selection into a factory function
1569 in Shell.py, to keep the starter script to a minimum.
1576 in Shell.py, to keep the starter script to a minimum.
1570
1577
1571 2004-08-25 Fernando Perez <fperez@colorado.edu>
1578 2004-08-25 Fernando Perez <fperez@colorado.edu>
1572
1579
1573 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1580 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1574 John. Along with some recent changes he made to matplotlib, the
1581 John. Along with some recent changes he made to matplotlib, the
1575 next versions of both systems should work very well together.
1582 next versions of both systems should work very well together.
1576
1583
1577 2004-08-24 Fernando Perez <fperez@colorado.edu>
1584 2004-08-24 Fernando Perez <fperez@colorado.edu>
1578
1585
1579 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1586 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1580 tried to switch the profiling to using hotshot, but I'm getting
1587 tried to switch the profiling to using hotshot, but I'm getting
1581 strange errors from prof.runctx() there. I may be misreading the
1588 strange errors from prof.runctx() there. I may be misreading the
1582 docs, but it looks weird. For now the profiling code will
1589 docs, but it looks weird. For now the profiling code will
1583 continue to use the standard profiler.
1590 continue to use the standard profiler.
1584
1591
1585 2004-08-23 Fernando Perez <fperez@colorado.edu>
1592 2004-08-23 Fernando Perez <fperez@colorado.edu>
1586
1593
1587 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1594 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1588 threaded shell, by John Hunter. It's not quite ready yet, but
1595 threaded shell, by John Hunter. It's not quite ready yet, but
1589 close.
1596 close.
1590
1597
1591 2004-08-22 Fernando Perez <fperez@colorado.edu>
1598 2004-08-22 Fernando Perez <fperez@colorado.edu>
1592
1599
1593 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1600 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1594 in Magic and ultraTB.
1601 in Magic and ultraTB.
1595
1602
1596 * ipython.1: document threading options in manpage.
1603 * ipython.1: document threading options in manpage.
1597
1604
1598 * scripts/ipython: Changed name of -thread option to -gthread,
1605 * scripts/ipython: Changed name of -thread option to -gthread,
1599 since this is GTK specific. I want to leave the door open for a
1606 since this is GTK specific. I want to leave the door open for a
1600 -wthread option for WX, which will most likely be necessary. This
1607 -wthread option for WX, which will most likely be necessary. This
1601 change affects usage and ipmaker as well.
1608 change affects usage and ipmaker as well.
1602
1609
1603 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1610 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1604 handle the matplotlib shell issues. Code by John Hunter
1611 handle the matplotlib shell issues. Code by John Hunter
1605 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1612 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1606 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1613 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1607 broken (and disabled for end users) for now, but it puts the
1614 broken (and disabled for end users) for now, but it puts the
1608 infrastructure in place.
1615 infrastructure in place.
1609
1616
1610 2004-08-21 Fernando Perez <fperez@colorado.edu>
1617 2004-08-21 Fernando Perez <fperez@colorado.edu>
1611
1618
1612 * ipythonrc-pylab: Add matplotlib support.
1619 * ipythonrc-pylab: Add matplotlib support.
1613
1620
1614 * matplotlib_config.py: new files for matplotlib support, part of
1621 * matplotlib_config.py: new files for matplotlib support, part of
1615 the pylab profile.
1622 the pylab profile.
1616
1623
1617 * IPython/usage.py (__doc__): documented the threading options.
1624 * IPython/usage.py (__doc__): documented the threading options.
1618
1625
1619 2004-08-20 Fernando Perez <fperez@colorado.edu>
1626 2004-08-20 Fernando Perez <fperez@colorado.edu>
1620
1627
1621 * ipython: Modified the main calling routine to handle the -thread
1628 * ipython: Modified the main calling routine to handle the -thread
1622 and -mpthread options. This needs to be done as a top-level hack,
1629 and -mpthread options. This needs to be done as a top-level hack,
1623 because it determines which class to instantiate for IPython
1630 because it determines which class to instantiate for IPython
1624 itself.
1631 itself.
1625
1632
1626 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1633 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1627 classes to support multithreaded GTK operation without blocking,
1634 classes to support multithreaded GTK operation without blocking,
1628 and matplotlib with all backends. This is a lot of still very
1635 and matplotlib with all backends. This is a lot of still very
1629 experimental code, and threads are tricky. So it may still have a
1636 experimental code, and threads are tricky. So it may still have a
1630 few rough edges... This code owes a lot to
1637 few rough edges... This code owes a lot to
1631 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1638 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1632 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1639 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1633 to John Hunter for all the matplotlib work.
1640 to John Hunter for all the matplotlib work.
1634
1641
1635 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1642 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1636 options for gtk thread and matplotlib support.
1643 options for gtk thread and matplotlib support.
1637
1644
1638 2004-08-16 Fernando Perez <fperez@colorado.edu>
1645 2004-08-16 Fernando Perez <fperez@colorado.edu>
1639
1646
1640 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1647 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1641 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1648 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1642 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1649 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1643
1650
1644 2004-08-11 Fernando Perez <fperez@colorado.edu>
1651 2004-08-11 Fernando Perez <fperez@colorado.edu>
1645
1652
1646 * setup.py (isfile): Fix build so documentation gets updated for
1653 * setup.py (isfile): Fix build so documentation gets updated for
1647 rpms (it was only done for .tgz builds).
1654 rpms (it was only done for .tgz builds).
1648
1655
1649 2004-08-10 Fernando Perez <fperez@colorado.edu>
1656 2004-08-10 Fernando Perez <fperez@colorado.edu>
1650
1657
1651 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1658 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1652
1659
1653 * iplib.py : Silence syntax error exceptions in tab-completion.
1660 * iplib.py : Silence syntax error exceptions in tab-completion.
1654
1661
1655 2004-08-05 Fernando Perez <fperez@colorado.edu>
1662 2004-08-05 Fernando Perez <fperez@colorado.edu>
1656
1663
1657 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1664 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1658 'color off' mark for continuation prompts. This was causing long
1665 'color off' mark for continuation prompts. This was causing long
1659 continuation lines to mis-wrap.
1666 continuation lines to mis-wrap.
1660
1667
1661 2004-08-01 Fernando Perez <fperez@colorado.edu>
1668 2004-08-01 Fernando Perez <fperez@colorado.edu>
1662
1669
1663 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1670 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1664 for building ipython to be a parameter. All this is necessary
1671 for building ipython to be a parameter. All this is necessary
1665 right now to have a multithreaded version, but this insane
1672 right now to have a multithreaded version, but this insane
1666 non-design will be cleaned up soon. For now, it's a hack that
1673 non-design will be cleaned up soon. For now, it's a hack that
1667 works.
1674 works.
1668
1675
1669 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1676 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1670 args in various places. No bugs so far, but it's a dangerous
1677 args in various places. No bugs so far, but it's a dangerous
1671 practice.
1678 practice.
1672
1679
1673 2004-07-31 Fernando Perez <fperez@colorado.edu>
1680 2004-07-31 Fernando Perez <fperez@colorado.edu>
1674
1681
1675 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1682 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1676 fix completion of files with dots in their names under most
1683 fix completion of files with dots in their names under most
1677 profiles (pysh was OK because the completion order is different).
1684 profiles (pysh was OK because the completion order is different).
1678
1685
1679 2004-07-27 Fernando Perez <fperez@colorado.edu>
1686 2004-07-27 Fernando Perez <fperez@colorado.edu>
1680
1687
1681 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1688 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1682 keywords manually, b/c the one in keyword.py was removed in python
1689 keywords manually, b/c the one in keyword.py was removed in python
1683 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1690 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1684 This is NOT a bug under python 2.3 and earlier.
1691 This is NOT a bug under python 2.3 and earlier.
1685
1692
1686 2004-07-26 Fernando Perez <fperez@colorado.edu>
1693 2004-07-26 Fernando Perez <fperez@colorado.edu>
1687
1694
1688 * IPython/ultraTB.py (VerboseTB.text): Add another
1695 * IPython/ultraTB.py (VerboseTB.text): Add another
1689 linecache.checkcache() call to try to prevent inspect.py from
1696 linecache.checkcache() call to try to prevent inspect.py from
1690 crashing under python 2.3. I think this fixes
1697 crashing under python 2.3. I think this fixes
1691 http://www.scipy.net/roundup/ipython/issue17.
1698 http://www.scipy.net/roundup/ipython/issue17.
1692
1699
1693 2004-07-26 *** Released version 0.6.2
1700 2004-07-26 *** Released version 0.6.2
1694
1701
1695 2004-07-26 Fernando Perez <fperez@colorado.edu>
1702 2004-07-26 Fernando Perez <fperez@colorado.edu>
1696
1703
1697 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1704 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1698 fail for any number.
1705 fail for any number.
1699 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1706 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1700 empty bookmarks.
1707 empty bookmarks.
1701
1708
1702 2004-07-26 *** Released version 0.6.1
1709 2004-07-26 *** Released version 0.6.1
1703
1710
1704 2004-07-26 Fernando Perez <fperez@colorado.edu>
1711 2004-07-26 Fernando Perez <fperez@colorado.edu>
1705
1712
1706 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1713 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1707
1714
1708 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1715 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1709 escaping '()[]{}' in filenames.
1716 escaping '()[]{}' in filenames.
1710
1717
1711 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1718 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1712 Python 2.2 users who lack a proper shlex.split.
1719 Python 2.2 users who lack a proper shlex.split.
1713
1720
1714 2004-07-19 Fernando Perez <fperez@colorado.edu>
1721 2004-07-19 Fernando Perez <fperez@colorado.edu>
1715
1722
1716 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1723 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1717 for reading readline's init file. I follow the normal chain:
1724 for reading readline's init file. I follow the normal chain:
1718 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1725 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1719 report by Mike Heeter. This closes
1726 report by Mike Heeter. This closes
1720 http://www.scipy.net/roundup/ipython/issue16.
1727 http://www.scipy.net/roundup/ipython/issue16.
1721
1728
1722 2004-07-18 Fernando Perez <fperez@colorado.edu>
1729 2004-07-18 Fernando Perez <fperez@colorado.edu>
1723
1730
1724 * IPython/iplib.py (__init__): Add better handling of '\' under
1731 * IPython/iplib.py (__init__): Add better handling of '\' under
1725 Win32 for filenames. After a patch by Ville.
1732 Win32 for filenames. After a patch by Ville.
1726
1733
1727 2004-07-17 Fernando Perez <fperez@colorado.edu>
1734 2004-07-17 Fernando Perez <fperez@colorado.edu>
1728
1735
1729 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1736 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1730 autocalling would be triggered for 'foo is bar' if foo is
1737 autocalling would be triggered for 'foo is bar' if foo is
1731 callable. I also cleaned up the autocall detection code to use a
1738 callable. I also cleaned up the autocall detection code to use a
1732 regexp, which is faster. Bug reported by Alexander Schmolck.
1739 regexp, which is faster. Bug reported by Alexander Schmolck.
1733
1740
1734 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1741 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1735 '?' in them would confuse the help system. Reported by Alex
1742 '?' in them would confuse the help system. Reported by Alex
1736 Schmolck.
1743 Schmolck.
1737
1744
1738 2004-07-16 Fernando Perez <fperez@colorado.edu>
1745 2004-07-16 Fernando Perez <fperez@colorado.edu>
1739
1746
1740 * IPython/GnuplotInteractive.py (__all__): added plot2.
1747 * IPython/GnuplotInteractive.py (__all__): added plot2.
1741
1748
1742 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1749 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1743 plotting dictionaries, lists or tuples of 1d arrays.
1750 plotting dictionaries, lists or tuples of 1d arrays.
1744
1751
1745 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1752 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1746 optimizations.
1753 optimizations.
1747
1754
1748 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1755 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1749 the information which was there from Janko's original IPP code:
1756 the information which was there from Janko's original IPP code:
1750
1757
1751 03.05.99 20:53 porto.ifm.uni-kiel.de
1758 03.05.99 20:53 porto.ifm.uni-kiel.de
1752 --Started changelog.
1759 --Started changelog.
1753 --make clear do what it say it does
1760 --make clear do what it say it does
1754 --added pretty output of lines from inputcache
1761 --added pretty output of lines from inputcache
1755 --Made Logger a mixin class, simplifies handling of switches
1762 --Made Logger a mixin class, simplifies handling of switches
1756 --Added own completer class. .string<TAB> expands to last history
1763 --Added own completer class. .string<TAB> expands to last history
1757 line which starts with string. The new expansion is also present
1764 line which starts with string. The new expansion is also present
1758 with Ctrl-r from the readline library. But this shows, who this
1765 with Ctrl-r from the readline library. But this shows, who this
1759 can be done for other cases.
1766 can be done for other cases.
1760 --Added convention that all shell functions should accept a
1767 --Added convention that all shell functions should accept a
1761 parameter_string This opens the door for different behaviour for
1768 parameter_string This opens the door for different behaviour for
1762 each function. @cd is a good example of this.
1769 each function. @cd is a good example of this.
1763
1770
1764 04.05.99 12:12 porto.ifm.uni-kiel.de
1771 04.05.99 12:12 porto.ifm.uni-kiel.de
1765 --added logfile rotation
1772 --added logfile rotation
1766 --added new mainloop method which freezes first the namespace
1773 --added new mainloop method which freezes first the namespace
1767
1774
1768 07.05.99 21:24 porto.ifm.uni-kiel.de
1775 07.05.99 21:24 porto.ifm.uni-kiel.de
1769 --added the docreader classes. Now there is a help system.
1776 --added the docreader classes. Now there is a help system.
1770 -This is only a first try. Currently it's not easy to put new
1777 -This is only a first try. Currently it's not easy to put new
1771 stuff in the indices. But this is the way to go. Info would be
1778 stuff in the indices. But this is the way to go. Info would be
1772 better, but HTML is every where and not everybody has an info
1779 better, but HTML is every where and not everybody has an info
1773 system installed and it's not so easy to change html-docs to info.
1780 system installed and it's not so easy to change html-docs to info.
1774 --added global logfile option
1781 --added global logfile option
1775 --there is now a hook for object inspection method pinfo needs to
1782 --there is now a hook for object inspection method pinfo needs to
1776 be provided for this. Can be reached by two '??'.
1783 be provided for this. Can be reached by two '??'.
1777
1784
1778 08.05.99 20:51 porto.ifm.uni-kiel.de
1785 08.05.99 20:51 porto.ifm.uni-kiel.de
1779 --added a README
1786 --added a README
1780 --bug in rc file. Something has changed so functions in the rc
1787 --bug in rc file. Something has changed so functions in the rc
1781 file need to reference the shell and not self. Not clear if it's a
1788 file need to reference the shell and not self. Not clear if it's a
1782 bug or feature.
1789 bug or feature.
1783 --changed rc file for new behavior
1790 --changed rc file for new behavior
1784
1791
1785 2004-07-15 Fernando Perez <fperez@colorado.edu>
1792 2004-07-15 Fernando Perez <fperez@colorado.edu>
1786
1793
1787 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1794 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1788 cache was falling out of sync in bizarre manners when multi-line
1795 cache was falling out of sync in bizarre manners when multi-line
1789 input was present. Minor optimizations and cleanup.
1796 input was present. Minor optimizations and cleanup.
1790
1797
1791 (Logger): Remove old Changelog info for cleanup. This is the
1798 (Logger): Remove old Changelog info for cleanup. This is the
1792 information which was there from Janko's original code:
1799 information which was there from Janko's original code:
1793
1800
1794 Changes to Logger: - made the default log filename a parameter
1801 Changes to Logger: - made the default log filename a parameter
1795
1802
1796 - put a check for lines beginning with !@? in log(). Needed
1803 - put a check for lines beginning with !@? in log(). Needed
1797 (even if the handlers properly log their lines) for mid-session
1804 (even if the handlers properly log their lines) for mid-session
1798 logging activation to work properly. Without this, lines logged
1805 logging activation to work properly. Without this, lines logged
1799 in mid session, which get read from the cache, would end up
1806 in mid session, which get read from the cache, would end up
1800 'bare' (with !@? in the open) in the log. Now they are caught
1807 'bare' (with !@? in the open) in the log. Now they are caught
1801 and prepended with a #.
1808 and prepended with a #.
1802
1809
1803 * IPython/iplib.py (InteractiveShell.init_readline): added check
1810 * IPython/iplib.py (InteractiveShell.init_readline): added check
1804 in case MagicCompleter fails to be defined, so we don't crash.
1811 in case MagicCompleter fails to be defined, so we don't crash.
1805
1812
1806 2004-07-13 Fernando Perez <fperez@colorado.edu>
1813 2004-07-13 Fernando Perez <fperez@colorado.edu>
1807
1814
1808 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1815 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1809 of EPS if the requested filename ends in '.eps'.
1816 of EPS if the requested filename ends in '.eps'.
1810
1817
1811 2004-07-04 Fernando Perez <fperez@colorado.edu>
1818 2004-07-04 Fernando Perez <fperez@colorado.edu>
1812
1819
1813 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1820 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1814 escaping of quotes when calling the shell.
1821 escaping of quotes when calling the shell.
1815
1822
1816 2004-07-02 Fernando Perez <fperez@colorado.edu>
1823 2004-07-02 Fernando Perez <fperez@colorado.edu>
1817
1824
1818 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1825 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1819 gettext not working because we were clobbering '_'. Fixes
1826 gettext not working because we were clobbering '_'. Fixes
1820 http://www.scipy.net/roundup/ipython/issue6.
1827 http://www.scipy.net/roundup/ipython/issue6.
1821
1828
1822 2004-07-01 Fernando Perez <fperez@colorado.edu>
1829 2004-07-01 Fernando Perez <fperez@colorado.edu>
1823
1830
1824 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1831 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1825 into @cd. Patch by Ville.
1832 into @cd. Patch by Ville.
1826
1833
1827 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1834 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1828 new function to store things after ipmaker runs. Patch by Ville.
1835 new function to store things after ipmaker runs. Patch by Ville.
1829 Eventually this will go away once ipmaker is removed and the class
1836 Eventually this will go away once ipmaker is removed and the class
1830 gets cleaned up, but for now it's ok. Key functionality here is
1837 gets cleaned up, but for now it's ok. Key functionality here is
1831 the addition of the persistent storage mechanism, a dict for
1838 the addition of the persistent storage mechanism, a dict for
1832 keeping data across sessions (for now just bookmarks, but more can
1839 keeping data across sessions (for now just bookmarks, but more can
1833 be implemented later).
1840 be implemented later).
1834
1841
1835 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1842 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1836 persistent across sections. Patch by Ville, I modified it
1843 persistent across sections. Patch by Ville, I modified it
1837 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1844 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1838 added a '-l' option to list all bookmarks.
1845 added a '-l' option to list all bookmarks.
1839
1846
1840 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1847 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1841 center for cleanup. Registered with atexit.register(). I moved
1848 center for cleanup. Registered with atexit.register(). I moved
1842 here the old exit_cleanup(). After a patch by Ville.
1849 here the old exit_cleanup(). After a patch by Ville.
1843
1850
1844 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1851 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1845 characters in the hacked shlex_split for python 2.2.
1852 characters in the hacked shlex_split for python 2.2.
1846
1853
1847 * IPython/iplib.py (file_matches): more fixes to filenames with
1854 * IPython/iplib.py (file_matches): more fixes to filenames with
1848 whitespace in them. It's not perfect, but limitations in python's
1855 whitespace in them. It's not perfect, but limitations in python's
1849 readline make it impossible to go further.
1856 readline make it impossible to go further.
1850
1857
1851 2004-06-29 Fernando Perez <fperez@colorado.edu>
1858 2004-06-29 Fernando Perez <fperez@colorado.edu>
1852
1859
1853 * IPython/iplib.py (file_matches): escape whitespace correctly in
1860 * IPython/iplib.py (file_matches): escape whitespace correctly in
1854 filename completions. Bug reported by Ville.
1861 filename completions. Bug reported by Ville.
1855
1862
1856 2004-06-28 Fernando Perez <fperez@colorado.edu>
1863 2004-06-28 Fernando Perez <fperez@colorado.edu>
1857
1864
1858 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1865 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1859 the history file will be called 'history-PROFNAME' (or just
1866 the history file will be called 'history-PROFNAME' (or just
1860 'history' if no profile is loaded). I was getting annoyed at
1867 'history' if no profile is loaded). I was getting annoyed at
1861 getting my Numerical work history clobbered by pysh sessions.
1868 getting my Numerical work history clobbered by pysh sessions.
1862
1869
1863 * IPython/iplib.py (InteractiveShell.__init__): Internal
1870 * IPython/iplib.py (InteractiveShell.__init__): Internal
1864 getoutputerror() function so that we can honor the system_verbose
1871 getoutputerror() function so that we can honor the system_verbose
1865 flag for _all_ system calls. I also added escaping of #
1872 flag for _all_ system calls. I also added escaping of #
1866 characters here to avoid confusing Itpl.
1873 characters here to avoid confusing Itpl.
1867
1874
1868 * IPython/Magic.py (shlex_split): removed call to shell in
1875 * IPython/Magic.py (shlex_split): removed call to shell in
1869 parse_options and replaced it with shlex.split(). The annoying
1876 parse_options and replaced it with shlex.split(). The annoying
1870 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1877 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1871 to backport it from 2.3, with several frail hacks (the shlex
1878 to backport it from 2.3, with several frail hacks (the shlex
1872 module is rather limited in 2.2). Thanks to a suggestion by Ville
1879 module is rather limited in 2.2). Thanks to a suggestion by Ville
1873 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1880 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1874 problem.
1881 problem.
1875
1882
1876 (Magic.magic_system_verbose): new toggle to print the actual
1883 (Magic.magic_system_verbose): new toggle to print the actual
1877 system calls made by ipython. Mainly for debugging purposes.
1884 system calls made by ipython. Mainly for debugging purposes.
1878
1885
1879 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1886 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1880 doesn't support persistence. Reported (and fix suggested) by
1887 doesn't support persistence. Reported (and fix suggested) by
1881 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1888 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1882
1889
1883 2004-06-26 Fernando Perez <fperez@colorado.edu>
1890 2004-06-26 Fernando Perez <fperez@colorado.edu>
1884
1891
1885 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1892 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1886 continue prompts.
1893 continue prompts.
1887
1894
1888 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1895 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1889 function (basically a big docstring) and a few more things here to
1896 function (basically a big docstring) and a few more things here to
1890 speedup startup. pysh.py is now very lightweight. We want because
1897 speedup startup. pysh.py is now very lightweight. We want because
1891 it gets execfile'd, while InterpreterExec gets imported, so
1898 it gets execfile'd, while InterpreterExec gets imported, so
1892 byte-compilation saves time.
1899 byte-compilation saves time.
1893
1900
1894 2004-06-25 Fernando Perez <fperez@colorado.edu>
1901 2004-06-25 Fernando Perez <fperez@colorado.edu>
1895
1902
1896 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1903 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1897 -NUM', which was recently broken.
1904 -NUM', which was recently broken.
1898
1905
1899 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1906 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1900 in multi-line input (but not !!, which doesn't make sense there).
1907 in multi-line input (but not !!, which doesn't make sense there).
1901
1908
1902 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1909 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1903 It's just too useful, and people can turn it off in the less
1910 It's just too useful, and people can turn it off in the less
1904 common cases where it's a problem.
1911 common cases where it's a problem.
1905
1912
1906 2004-06-24 Fernando Perez <fperez@colorado.edu>
1913 2004-06-24 Fernando Perez <fperez@colorado.edu>
1907
1914
1908 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1915 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1909 special syntaxes (like alias calling) is now allied in multi-line
1916 special syntaxes (like alias calling) is now allied in multi-line
1910 input. This is still _very_ experimental, but it's necessary for
1917 input. This is still _very_ experimental, but it's necessary for
1911 efficient shell usage combining python looping syntax with system
1918 efficient shell usage combining python looping syntax with system
1912 calls. For now it's restricted to aliases, I don't think it
1919 calls. For now it's restricted to aliases, I don't think it
1913 really even makes sense to have this for magics.
1920 really even makes sense to have this for magics.
1914
1921
1915 2004-06-23 Fernando Perez <fperez@colorado.edu>
1922 2004-06-23 Fernando Perez <fperez@colorado.edu>
1916
1923
1917 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1924 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1918 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1925 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1919
1926
1920 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1927 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1921 extensions under Windows (after code sent by Gary Bishop). The
1928 extensions under Windows (after code sent by Gary Bishop). The
1922 extensions considered 'executable' are stored in IPython's rc
1929 extensions considered 'executable' are stored in IPython's rc
1923 structure as win_exec_ext.
1930 structure as win_exec_ext.
1924
1931
1925 * IPython/genutils.py (shell): new function, like system() but
1932 * IPython/genutils.py (shell): new function, like system() but
1926 without return value. Very useful for interactive shell work.
1933 without return value. Very useful for interactive shell work.
1927
1934
1928 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1935 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1929 delete aliases.
1936 delete aliases.
1930
1937
1931 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1938 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1932 sure that the alias table doesn't contain python keywords.
1939 sure that the alias table doesn't contain python keywords.
1933
1940
1934 2004-06-21 Fernando Perez <fperez@colorado.edu>
1941 2004-06-21 Fernando Perez <fperez@colorado.edu>
1935
1942
1936 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1943 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1937 non-existent items are found in $PATH. Reported by Thorsten.
1944 non-existent items are found in $PATH. Reported by Thorsten.
1938
1945
1939 2004-06-20 Fernando Perez <fperez@colorado.edu>
1946 2004-06-20 Fernando Perez <fperez@colorado.edu>
1940
1947
1941 * IPython/iplib.py (complete): modified the completer so that the
1948 * IPython/iplib.py (complete): modified the completer so that the
1942 order of priorities can be easily changed at runtime.
1949 order of priorities can be easily changed at runtime.
1943
1950
1944 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1951 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1945 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1952 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1946
1953
1947 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1954 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1948 expand Python variables prepended with $ in all system calls. The
1955 expand Python variables prepended with $ in all system calls. The
1949 same was done to InteractiveShell.handle_shell_escape. Now all
1956 same was done to InteractiveShell.handle_shell_escape. Now all
1950 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1957 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1951 expansion of python variables and expressions according to the
1958 expansion of python variables and expressions according to the
1952 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1959 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1953
1960
1954 Though PEP-215 has been rejected, a similar (but simpler) one
1961 Though PEP-215 has been rejected, a similar (but simpler) one
1955 seems like it will go into Python 2.4, PEP-292 -
1962 seems like it will go into Python 2.4, PEP-292 -
1956 http://www.python.org/peps/pep-0292.html.
1963 http://www.python.org/peps/pep-0292.html.
1957
1964
1958 I'll keep the full syntax of PEP-215, since IPython has since the
1965 I'll keep the full syntax of PEP-215, since IPython has since the
1959 start used Ka-Ping Yee's reference implementation discussed there
1966 start used Ka-Ping Yee's reference implementation discussed there
1960 (Itpl), and I actually like the powerful semantics it offers.
1967 (Itpl), and I actually like the powerful semantics it offers.
1961
1968
1962 In order to access normal shell variables, the $ has to be escaped
1969 In order to access normal shell variables, the $ has to be escaped
1963 via an extra $. For example:
1970 via an extra $. For example:
1964
1971
1965 In [7]: PATH='a python variable'
1972 In [7]: PATH='a python variable'
1966
1973
1967 In [8]: !echo $PATH
1974 In [8]: !echo $PATH
1968 a python variable
1975 a python variable
1969
1976
1970 In [9]: !echo $$PATH
1977 In [9]: !echo $$PATH
1971 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1978 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1972
1979
1973 (Magic.parse_options): escape $ so the shell doesn't evaluate
1980 (Magic.parse_options): escape $ so the shell doesn't evaluate
1974 things prematurely.
1981 things prematurely.
1975
1982
1976 * IPython/iplib.py (InteractiveShell.call_alias): added the
1983 * IPython/iplib.py (InteractiveShell.call_alias): added the
1977 ability for aliases to expand python variables via $.
1984 ability for aliases to expand python variables via $.
1978
1985
1979 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1986 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1980 system, now there's a @rehash/@rehashx pair of magics. These work
1987 system, now there's a @rehash/@rehashx pair of magics. These work
1981 like the csh rehash command, and can be invoked at any time. They
1988 like the csh rehash command, and can be invoked at any time. They
1982 build a table of aliases to everything in the user's $PATH
1989 build a table of aliases to everything in the user's $PATH
1983 (@rehash uses everything, @rehashx is slower but only adds
1990 (@rehash uses everything, @rehashx is slower but only adds
1984 executable files). With this, the pysh.py-based shell profile can
1991 executable files). With this, the pysh.py-based shell profile can
1985 now simply call rehash upon startup, and full access to all
1992 now simply call rehash upon startup, and full access to all
1986 programs in the user's path is obtained.
1993 programs in the user's path is obtained.
1987
1994
1988 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1995 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1989 functionality is now fully in place. I removed the old dynamic
1996 functionality is now fully in place. I removed the old dynamic
1990 code generation based approach, in favor of a much lighter one
1997 code generation based approach, in favor of a much lighter one
1991 based on a simple dict. The advantage is that this allows me to
1998 based on a simple dict. The advantage is that this allows me to
1992 now have thousands of aliases with negligible cost (unthinkable
1999 now have thousands of aliases with negligible cost (unthinkable
1993 with the old system).
2000 with the old system).
1994
2001
1995 2004-06-19 Fernando Perez <fperez@colorado.edu>
2002 2004-06-19 Fernando Perez <fperez@colorado.edu>
1996
2003
1997 * IPython/iplib.py (__init__): extended MagicCompleter class to
2004 * IPython/iplib.py (__init__): extended MagicCompleter class to
1998 also complete (last in priority) on user aliases.
2005 also complete (last in priority) on user aliases.
1999
2006
2000 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2007 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2001 call to eval.
2008 call to eval.
2002 (ItplNS.__init__): Added a new class which functions like Itpl,
2009 (ItplNS.__init__): Added a new class which functions like Itpl,
2003 but allows configuring the namespace for the evaluation to occur
2010 but allows configuring the namespace for the evaluation to occur
2004 in.
2011 in.
2005
2012
2006 2004-06-18 Fernando Perez <fperez@colorado.edu>
2013 2004-06-18 Fernando Perez <fperez@colorado.edu>
2007
2014
2008 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2015 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2009 better message when 'exit' or 'quit' are typed (a common newbie
2016 better message when 'exit' or 'quit' are typed (a common newbie
2010 confusion).
2017 confusion).
2011
2018
2012 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2019 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2013 check for Windows users.
2020 check for Windows users.
2014
2021
2015 * IPython/iplib.py (InteractiveShell.user_setup): removed
2022 * IPython/iplib.py (InteractiveShell.user_setup): removed
2016 disabling of colors for Windows. I'll test at runtime and issue a
2023 disabling of colors for Windows. I'll test at runtime and issue a
2017 warning if Gary's readline isn't found, as to nudge users to
2024 warning if Gary's readline isn't found, as to nudge users to
2018 download it.
2025 download it.
2019
2026
2020 2004-06-16 Fernando Perez <fperez@colorado.edu>
2027 2004-06-16 Fernando Perez <fperez@colorado.edu>
2021
2028
2022 * IPython/genutils.py (Stream.__init__): changed to print errors
2029 * IPython/genutils.py (Stream.__init__): changed to print errors
2023 to sys.stderr. I had a circular dependency here. Now it's
2030 to sys.stderr. I had a circular dependency here. Now it's
2024 possible to run ipython as IDLE's shell (consider this pre-alpha,
2031 possible to run ipython as IDLE's shell (consider this pre-alpha,
2025 since true stdout things end up in the starting terminal instead
2032 since true stdout things end up in the starting terminal instead
2026 of IDLE's out).
2033 of IDLE's out).
2027
2034
2028 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2035 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2029 users who haven't # updated their prompt_in2 definitions. Remove
2036 users who haven't # updated their prompt_in2 definitions. Remove
2030 eventually.
2037 eventually.
2031 (multiple_replace): added credit to original ASPN recipe.
2038 (multiple_replace): added credit to original ASPN recipe.
2032
2039
2033 2004-06-15 Fernando Perez <fperez@colorado.edu>
2040 2004-06-15 Fernando Perez <fperez@colorado.edu>
2034
2041
2035 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2042 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2036 list of auto-defined aliases.
2043 list of auto-defined aliases.
2037
2044
2038 2004-06-13 Fernando Perez <fperez@colorado.edu>
2045 2004-06-13 Fernando Perez <fperez@colorado.edu>
2039
2046
2040 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2047 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2041 install was really requested (so setup.py can be used for other
2048 install was really requested (so setup.py can be used for other
2042 things under Windows).
2049 things under Windows).
2043
2050
2044 2004-06-10 Fernando Perez <fperez@colorado.edu>
2051 2004-06-10 Fernando Perez <fperez@colorado.edu>
2045
2052
2046 * IPython/Logger.py (Logger.create_log): Manually remove any old
2053 * IPython/Logger.py (Logger.create_log): Manually remove any old
2047 backup, since os.remove may fail under Windows. Fixes bug
2054 backup, since os.remove may fail under Windows. Fixes bug
2048 reported by Thorsten.
2055 reported by Thorsten.
2049
2056
2050 2004-06-09 Fernando Perez <fperez@colorado.edu>
2057 2004-06-09 Fernando Perez <fperez@colorado.edu>
2051
2058
2052 * examples/example-embed.py: fixed all references to %n (replaced
2059 * examples/example-embed.py: fixed all references to %n (replaced
2053 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2060 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2054 for all examples and the manual as well.
2061 for all examples and the manual as well.
2055
2062
2056 2004-06-08 Fernando Perez <fperez@colorado.edu>
2063 2004-06-08 Fernando Perez <fperez@colorado.edu>
2057
2064
2058 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2065 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2059 alignment and color management. All 3 prompt subsystems now
2066 alignment and color management. All 3 prompt subsystems now
2060 inherit from BasePrompt.
2067 inherit from BasePrompt.
2061
2068
2062 * tools/release: updates for windows installer build and tag rpms
2069 * tools/release: updates for windows installer build and tag rpms
2063 with python version (since paths are fixed).
2070 with python version (since paths are fixed).
2064
2071
2065 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2072 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2066 which will become eventually obsolete. Also fixed the default
2073 which will become eventually obsolete. Also fixed the default
2067 prompt_in2 to use \D, so at least new users start with the correct
2074 prompt_in2 to use \D, so at least new users start with the correct
2068 defaults.
2075 defaults.
2069 WARNING: Users with existing ipythonrc files will need to apply
2076 WARNING: Users with existing ipythonrc files will need to apply
2070 this fix manually!
2077 this fix manually!
2071
2078
2072 * setup.py: make windows installer (.exe). This is finally the
2079 * setup.py: make windows installer (.exe). This is finally the
2073 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2080 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2074 which I hadn't included because it required Python 2.3 (or recent
2081 which I hadn't included because it required Python 2.3 (or recent
2075 distutils).
2082 distutils).
2076
2083
2077 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2084 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2078 usage of new '\D' escape.
2085 usage of new '\D' escape.
2079
2086
2080 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2087 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2081 lacks os.getuid())
2088 lacks os.getuid())
2082 (CachedOutput.set_colors): Added the ability to turn coloring
2089 (CachedOutput.set_colors): Added the ability to turn coloring
2083 on/off with @colors even for manually defined prompt colors. It
2090 on/off with @colors even for manually defined prompt colors. It
2084 uses a nasty global, but it works safely and via the generic color
2091 uses a nasty global, but it works safely and via the generic color
2085 handling mechanism.
2092 handling mechanism.
2086 (Prompt2.__init__): Introduced new escape '\D' for continuation
2093 (Prompt2.__init__): Introduced new escape '\D' for continuation
2087 prompts. It represents the counter ('\#') as dots.
2094 prompts. It represents the counter ('\#') as dots.
2088 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2095 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2089 need to update their ipythonrc files and replace '%n' with '\D' in
2096 need to update their ipythonrc files and replace '%n' with '\D' in
2090 their prompt_in2 settings everywhere. Sorry, but there's
2097 their prompt_in2 settings everywhere. Sorry, but there's
2091 otherwise no clean way to get all prompts to properly align. The
2098 otherwise no clean way to get all prompts to properly align. The
2092 ipythonrc shipped with IPython has been updated.
2099 ipythonrc shipped with IPython has been updated.
2093
2100
2094 2004-06-07 Fernando Perez <fperez@colorado.edu>
2101 2004-06-07 Fernando Perez <fperez@colorado.edu>
2095
2102
2096 * setup.py (isfile): Pass local_icons option to latex2html, so the
2103 * setup.py (isfile): Pass local_icons option to latex2html, so the
2097 resulting HTML file is self-contained. Thanks to
2104 resulting HTML file is self-contained. Thanks to
2098 dryice-AT-liu.com.cn for the tip.
2105 dryice-AT-liu.com.cn for the tip.
2099
2106
2100 * pysh.py: I created a new profile 'shell', which implements a
2107 * pysh.py: I created a new profile 'shell', which implements a
2101 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2108 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2102 system shell, nor will it become one anytime soon. It's mainly
2109 system shell, nor will it become one anytime soon. It's mainly
2103 meant to illustrate the use of the new flexible bash-like prompts.
2110 meant to illustrate the use of the new flexible bash-like prompts.
2104 I guess it could be used by hardy souls for true shell management,
2111 I guess it could be used by hardy souls for true shell management,
2105 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2112 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2106 profile. This uses the InterpreterExec extension provided by
2113 profile. This uses the InterpreterExec extension provided by
2107 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2114 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2108
2115
2109 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2116 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2110 auto-align itself with the length of the previous input prompt
2117 auto-align itself with the length of the previous input prompt
2111 (taking into account the invisible color escapes).
2118 (taking into account the invisible color escapes).
2112 (CachedOutput.__init__): Large restructuring of this class. Now
2119 (CachedOutput.__init__): Large restructuring of this class. Now
2113 all three prompts (primary1, primary2, output) are proper objects,
2120 all three prompts (primary1, primary2, output) are proper objects,
2114 managed by the 'parent' CachedOutput class. The code is still a
2121 managed by the 'parent' CachedOutput class. The code is still a
2115 bit hackish (all prompts share state via a pointer to the cache),
2122 bit hackish (all prompts share state via a pointer to the cache),
2116 but it's overall far cleaner than before.
2123 but it's overall far cleaner than before.
2117
2124
2118 * IPython/genutils.py (getoutputerror): modified to add verbose,
2125 * IPython/genutils.py (getoutputerror): modified to add verbose,
2119 debug and header options. This makes the interface of all getout*
2126 debug and header options. This makes the interface of all getout*
2120 functions uniform.
2127 functions uniform.
2121 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2128 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2122
2129
2123 * IPython/Magic.py (Magic.default_option): added a function to
2130 * IPython/Magic.py (Magic.default_option): added a function to
2124 allow registering default options for any magic command. This
2131 allow registering default options for any magic command. This
2125 makes it easy to have profiles which customize the magics globally
2132 makes it easy to have profiles which customize the magics globally
2126 for a certain use. The values set through this function are
2133 for a certain use. The values set through this function are
2127 picked up by the parse_options() method, which all magics should
2134 picked up by the parse_options() method, which all magics should
2128 use to parse their options.
2135 use to parse their options.
2129
2136
2130 * IPython/genutils.py (warn): modified the warnings framework to
2137 * IPython/genutils.py (warn): modified the warnings framework to
2131 use the Term I/O class. I'm trying to slowly unify all of
2138 use the Term I/O class. I'm trying to slowly unify all of
2132 IPython's I/O operations to pass through Term.
2139 IPython's I/O operations to pass through Term.
2133
2140
2134 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2141 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2135 the secondary prompt to correctly match the length of the primary
2142 the secondary prompt to correctly match the length of the primary
2136 one for any prompt. Now multi-line code will properly line up
2143 one for any prompt. Now multi-line code will properly line up
2137 even for path dependent prompts, such as the new ones available
2144 even for path dependent prompts, such as the new ones available
2138 via the prompt_specials.
2145 via the prompt_specials.
2139
2146
2140 2004-06-06 Fernando Perez <fperez@colorado.edu>
2147 2004-06-06 Fernando Perez <fperez@colorado.edu>
2141
2148
2142 * IPython/Prompts.py (prompt_specials): Added the ability to have
2149 * IPython/Prompts.py (prompt_specials): Added the ability to have
2143 bash-like special sequences in the prompts, which get
2150 bash-like special sequences in the prompts, which get
2144 automatically expanded. Things like hostname, current working
2151 automatically expanded. Things like hostname, current working
2145 directory and username are implemented already, but it's easy to
2152 directory and username are implemented already, but it's easy to
2146 add more in the future. Thanks to a patch by W.J. van der Laan
2153 add more in the future. Thanks to a patch by W.J. van der Laan
2147 <gnufnork-AT-hetdigitalegat.nl>
2154 <gnufnork-AT-hetdigitalegat.nl>
2148 (prompt_specials): Added color support for prompt strings, so
2155 (prompt_specials): Added color support for prompt strings, so
2149 users can define arbitrary color setups for their prompts.
2156 users can define arbitrary color setups for their prompts.
2150
2157
2151 2004-06-05 Fernando Perez <fperez@colorado.edu>
2158 2004-06-05 Fernando Perez <fperez@colorado.edu>
2152
2159
2153 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2160 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2154 code to load Gary Bishop's readline and configure it
2161 code to load Gary Bishop's readline and configure it
2155 automatically. Thanks to Gary for help on this.
2162 automatically. Thanks to Gary for help on this.
2156
2163
2157 2004-06-01 Fernando Perez <fperez@colorado.edu>
2164 2004-06-01 Fernando Perez <fperez@colorado.edu>
2158
2165
2159 * IPython/Logger.py (Logger.create_log): fix bug for logging
2166 * IPython/Logger.py (Logger.create_log): fix bug for logging
2160 with no filename (previous fix was incomplete).
2167 with no filename (previous fix was incomplete).
2161
2168
2162 2004-05-25 Fernando Perez <fperez@colorado.edu>
2169 2004-05-25 Fernando Perez <fperez@colorado.edu>
2163
2170
2164 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2171 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2165 parens would get passed to the shell.
2172 parens would get passed to the shell.
2166
2173
2167 2004-05-20 Fernando Perez <fperez@colorado.edu>
2174 2004-05-20 Fernando Perez <fperez@colorado.edu>
2168
2175
2169 * IPython/Magic.py (Magic.magic_prun): changed default profile
2176 * IPython/Magic.py (Magic.magic_prun): changed default profile
2170 sort order to 'time' (the more common profiling need).
2177 sort order to 'time' (the more common profiling need).
2171
2178
2172 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2179 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2173 so that source code shown is guaranteed in sync with the file on
2180 so that source code shown is guaranteed in sync with the file on
2174 disk (also changed in psource). Similar fix to the one for
2181 disk (also changed in psource). Similar fix to the one for
2175 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2182 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2176 <yann.ledu-AT-noos.fr>.
2183 <yann.ledu-AT-noos.fr>.
2177
2184
2178 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2185 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2179 with a single option would not be correctly parsed. Closes
2186 with a single option would not be correctly parsed. Closes
2180 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2187 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2181 introduced in 0.6.0 (on 2004-05-06).
2188 introduced in 0.6.0 (on 2004-05-06).
2182
2189
2183 2004-05-13 *** Released version 0.6.0
2190 2004-05-13 *** Released version 0.6.0
2184
2191
2185 2004-05-13 Fernando Perez <fperez@colorado.edu>
2192 2004-05-13 Fernando Perez <fperez@colorado.edu>
2186
2193
2187 * debian/: Added debian/ directory to CVS, so that debian support
2194 * debian/: Added debian/ directory to CVS, so that debian support
2188 is publicly accessible. The debian package is maintained by Jack
2195 is publicly accessible. The debian package is maintained by Jack
2189 Moffit <jack-AT-xiph.org>.
2196 Moffit <jack-AT-xiph.org>.
2190
2197
2191 * Documentation: included the notes about an ipython-based system
2198 * Documentation: included the notes about an ipython-based system
2192 shell (the hypothetical 'pysh') into the new_design.pdf document,
2199 shell (the hypothetical 'pysh') into the new_design.pdf document,
2193 so that these ideas get distributed to users along with the
2200 so that these ideas get distributed to users along with the
2194 official documentation.
2201 official documentation.
2195
2202
2196 2004-05-10 Fernando Perez <fperez@colorado.edu>
2203 2004-05-10 Fernando Perez <fperez@colorado.edu>
2197
2204
2198 * IPython/Logger.py (Logger.create_log): fix recently introduced
2205 * IPython/Logger.py (Logger.create_log): fix recently introduced
2199 bug (misindented line) where logstart would fail when not given an
2206 bug (misindented line) where logstart would fail when not given an
2200 explicit filename.
2207 explicit filename.
2201
2208
2202 2004-05-09 Fernando Perez <fperez@colorado.edu>
2209 2004-05-09 Fernando Perez <fperez@colorado.edu>
2203
2210
2204 * IPython/Magic.py (Magic.parse_options): skip system call when
2211 * IPython/Magic.py (Magic.parse_options): skip system call when
2205 there are no options to look for. Faster, cleaner for the common
2212 there are no options to look for. Faster, cleaner for the common
2206 case.
2213 case.
2207
2214
2208 * Documentation: many updates to the manual: describing Windows
2215 * Documentation: many updates to the manual: describing Windows
2209 support better, Gnuplot updates, credits, misc small stuff. Also
2216 support better, Gnuplot updates, credits, misc small stuff. Also
2210 updated the new_design doc a bit.
2217 updated the new_design doc a bit.
2211
2218
2212 2004-05-06 *** Released version 0.6.0.rc1
2219 2004-05-06 *** Released version 0.6.0.rc1
2213
2220
2214 2004-05-06 Fernando Perez <fperez@colorado.edu>
2221 2004-05-06 Fernando Perez <fperez@colorado.edu>
2215
2222
2216 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2223 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2217 operations to use the vastly more efficient list/''.join() method.
2224 operations to use the vastly more efficient list/''.join() method.
2218 (FormattedTB.text): Fix
2225 (FormattedTB.text): Fix
2219 http://www.scipy.net/roundup/ipython/issue12 - exception source
2226 http://www.scipy.net/roundup/ipython/issue12 - exception source
2220 extract not updated after reload. Thanks to Mike Salib
2227 extract not updated after reload. Thanks to Mike Salib
2221 <msalib-AT-mit.edu> for pinning the source of the problem.
2228 <msalib-AT-mit.edu> for pinning the source of the problem.
2222 Fortunately, the solution works inside ipython and doesn't require
2229 Fortunately, the solution works inside ipython and doesn't require
2223 any changes to python proper.
2230 any changes to python proper.
2224
2231
2225 * IPython/Magic.py (Magic.parse_options): Improved to process the
2232 * IPython/Magic.py (Magic.parse_options): Improved to process the
2226 argument list as a true shell would (by actually using the
2233 argument list as a true shell would (by actually using the
2227 underlying system shell). This way, all @magics automatically get
2234 underlying system shell). This way, all @magics automatically get
2228 shell expansion for variables. Thanks to a comment by Alex
2235 shell expansion for variables. Thanks to a comment by Alex
2229 Schmolck.
2236 Schmolck.
2230
2237
2231 2004-04-04 Fernando Perez <fperez@colorado.edu>
2238 2004-04-04 Fernando Perez <fperez@colorado.edu>
2232
2239
2233 * IPython/iplib.py (InteractiveShell.interact): Added a special
2240 * IPython/iplib.py (InteractiveShell.interact): Added a special
2234 trap for a debugger quit exception, which is basically impossible
2241 trap for a debugger quit exception, which is basically impossible
2235 to handle by normal mechanisms, given what pdb does to the stack.
2242 to handle by normal mechanisms, given what pdb does to the stack.
2236 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2243 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2237
2244
2238 2004-04-03 Fernando Perez <fperez@colorado.edu>
2245 2004-04-03 Fernando Perez <fperez@colorado.edu>
2239
2246
2240 * IPython/genutils.py (Term): Standardized the names of the Term
2247 * IPython/genutils.py (Term): Standardized the names of the Term
2241 class streams to cin/cout/cerr, following C++ naming conventions
2248 class streams to cin/cout/cerr, following C++ naming conventions
2242 (I can't use in/out/err because 'in' is not a valid attribute
2249 (I can't use in/out/err because 'in' is not a valid attribute
2243 name).
2250 name).
2244
2251
2245 * IPython/iplib.py (InteractiveShell.interact): don't increment
2252 * IPython/iplib.py (InteractiveShell.interact): don't increment
2246 the prompt if there's no user input. By Daniel 'Dang' Griffith
2253 the prompt if there's no user input. By Daniel 'Dang' Griffith
2247 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2254 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2248 Francois Pinard.
2255 Francois Pinard.
2249
2256
2250 2004-04-02 Fernando Perez <fperez@colorado.edu>
2257 2004-04-02 Fernando Perez <fperez@colorado.edu>
2251
2258
2252 * IPython/genutils.py (Stream.__init__): Modified to survive at
2259 * IPython/genutils.py (Stream.__init__): Modified to survive at
2253 least importing in contexts where stdin/out/err aren't true file
2260 least importing in contexts where stdin/out/err aren't true file
2254 objects, such as PyCrust (they lack fileno() and mode). However,
2261 objects, such as PyCrust (they lack fileno() and mode). However,
2255 the recovery facilities which rely on these things existing will
2262 the recovery facilities which rely on these things existing will
2256 not work.
2263 not work.
2257
2264
2258 2004-04-01 Fernando Perez <fperez@colorado.edu>
2265 2004-04-01 Fernando Perez <fperez@colorado.edu>
2259
2266
2260 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2267 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2261 use the new getoutputerror() function, so it properly
2268 use the new getoutputerror() function, so it properly
2262 distinguishes stdout/err.
2269 distinguishes stdout/err.
2263
2270
2264 * IPython/genutils.py (getoutputerror): added a function to
2271 * IPython/genutils.py (getoutputerror): added a function to
2265 capture separately the standard output and error of a command.
2272 capture separately the standard output and error of a command.
2266 After a comment from dang on the mailing lists. This code is
2273 After a comment from dang on the mailing lists. This code is
2267 basically a modified version of commands.getstatusoutput(), from
2274 basically a modified version of commands.getstatusoutput(), from
2268 the standard library.
2275 the standard library.
2269
2276
2270 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2277 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2271 '!!' as a special syntax (shorthand) to access @sx.
2278 '!!' as a special syntax (shorthand) to access @sx.
2272
2279
2273 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2280 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2274 command and return its output as a list split on '\n'.
2281 command and return its output as a list split on '\n'.
2275
2282
2276 2004-03-31 Fernando Perez <fperez@colorado.edu>
2283 2004-03-31 Fernando Perez <fperez@colorado.edu>
2277
2284
2278 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2285 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2279 method to dictionaries used as FakeModule instances if they lack
2286 method to dictionaries used as FakeModule instances if they lack
2280 it. At least pydoc in python2.3 breaks for runtime-defined
2287 it. At least pydoc in python2.3 breaks for runtime-defined
2281 functions without this hack. At some point I need to _really_
2288 functions without this hack. At some point I need to _really_
2282 understand what FakeModule is doing, because it's a gross hack.
2289 understand what FakeModule is doing, because it's a gross hack.
2283 But it solves Arnd's problem for now...
2290 But it solves Arnd's problem for now...
2284
2291
2285 2004-02-27 Fernando Perez <fperez@colorado.edu>
2292 2004-02-27 Fernando Perez <fperez@colorado.edu>
2286
2293
2287 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2294 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2288 mode would behave erratically. Also increased the number of
2295 mode would behave erratically. Also increased the number of
2289 possible logs in rotate mod to 999. Thanks to Rod Holland
2296 possible logs in rotate mod to 999. Thanks to Rod Holland
2290 <rhh@StructureLABS.com> for the report and fixes.
2297 <rhh@StructureLABS.com> for the report and fixes.
2291
2298
2292 2004-02-26 Fernando Perez <fperez@colorado.edu>
2299 2004-02-26 Fernando Perez <fperez@colorado.edu>
2293
2300
2294 * IPython/genutils.py (page): Check that the curses module really
2301 * IPython/genutils.py (page): Check that the curses module really
2295 has the initscr attribute before trying to use it. For some
2302 has the initscr attribute before trying to use it. For some
2296 reason, the Solaris curses module is missing this. I think this
2303 reason, the Solaris curses module is missing this. I think this
2297 should be considered a Solaris python bug, but I'm not sure.
2304 should be considered a Solaris python bug, but I'm not sure.
2298
2305
2299 2004-01-17 Fernando Perez <fperez@colorado.edu>
2306 2004-01-17 Fernando Perez <fperez@colorado.edu>
2300
2307
2301 * IPython/genutils.py (Stream.__init__): Changes to try to make
2308 * IPython/genutils.py (Stream.__init__): Changes to try to make
2302 ipython robust against stdin/out/err being closed by the user.
2309 ipython robust against stdin/out/err being closed by the user.
2303 This is 'user error' (and blocks a normal python session, at least
2310 This is 'user error' (and blocks a normal python session, at least
2304 the stdout case). However, Ipython should be able to survive such
2311 the stdout case). However, Ipython should be able to survive such
2305 instances of abuse as gracefully as possible. To simplify the
2312 instances of abuse as gracefully as possible. To simplify the
2306 coding and maintain compatibility with Gary Bishop's Term
2313 coding and maintain compatibility with Gary Bishop's Term
2307 contributions, I've made use of classmethods for this. I think
2314 contributions, I've made use of classmethods for this. I think
2308 this introduces a dependency on python 2.2.
2315 this introduces a dependency on python 2.2.
2309
2316
2310 2004-01-13 Fernando Perez <fperez@colorado.edu>
2317 2004-01-13 Fernando Perez <fperez@colorado.edu>
2311
2318
2312 * IPython/numutils.py (exp_safe): simplified the code a bit and
2319 * IPython/numutils.py (exp_safe): simplified the code a bit and
2313 removed the need for importing the kinds module altogether.
2320 removed the need for importing the kinds module altogether.
2314
2321
2315 2004-01-06 Fernando Perez <fperez@colorado.edu>
2322 2004-01-06 Fernando Perez <fperez@colorado.edu>
2316
2323
2317 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2324 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2318 a magic function instead, after some community feedback. No
2325 a magic function instead, after some community feedback. No
2319 special syntax will exist for it, but its name is deliberately
2326 special syntax will exist for it, but its name is deliberately
2320 very short.
2327 very short.
2321
2328
2322 2003-12-20 Fernando Perez <fperez@colorado.edu>
2329 2003-12-20 Fernando Perez <fperez@colorado.edu>
2323
2330
2324 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2331 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2325 new functionality, to automagically assign the result of a shell
2332 new functionality, to automagically assign the result of a shell
2326 command to a variable. I'll solicit some community feedback on
2333 command to a variable. I'll solicit some community feedback on
2327 this before making it permanent.
2334 this before making it permanent.
2328
2335
2329 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2336 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2330 requested about callables for which inspect couldn't obtain a
2337 requested about callables for which inspect couldn't obtain a
2331 proper argspec. Thanks to a crash report sent by Etienne
2338 proper argspec. Thanks to a crash report sent by Etienne
2332 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2339 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2333
2340
2334 2003-12-09 Fernando Perez <fperez@colorado.edu>
2341 2003-12-09 Fernando Perez <fperez@colorado.edu>
2335
2342
2336 * IPython/genutils.py (page): patch for the pager to work across
2343 * IPython/genutils.py (page): patch for the pager to work across
2337 various versions of Windows. By Gary Bishop.
2344 various versions of Windows. By Gary Bishop.
2338
2345
2339 2003-12-04 Fernando Perez <fperez@colorado.edu>
2346 2003-12-04 Fernando Perez <fperez@colorado.edu>
2340
2347
2341 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2348 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2342 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2349 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2343 While I tested this and it looks ok, there may still be corner
2350 While I tested this and it looks ok, there may still be corner
2344 cases I've missed.
2351 cases I've missed.
2345
2352
2346 2003-12-01 Fernando Perez <fperez@colorado.edu>
2353 2003-12-01 Fernando Perez <fperez@colorado.edu>
2347
2354
2348 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2355 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2349 where a line like 'p,q=1,2' would fail because the automagic
2356 where a line like 'p,q=1,2' would fail because the automagic
2350 system would be triggered for @p.
2357 system would be triggered for @p.
2351
2358
2352 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2359 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2353 cleanups, code unmodified.
2360 cleanups, code unmodified.
2354
2361
2355 * IPython/genutils.py (Term): added a class for IPython to handle
2362 * IPython/genutils.py (Term): added a class for IPython to handle
2356 output. In most cases it will just be a proxy for stdout/err, but
2363 output. In most cases it will just be a proxy for stdout/err, but
2357 having this allows modifications to be made for some platforms,
2364 having this allows modifications to be made for some platforms,
2358 such as handling color escapes under Windows. All of this code
2365 such as handling color escapes under Windows. All of this code
2359 was contributed by Gary Bishop, with minor modifications by me.
2366 was contributed by Gary Bishop, with minor modifications by me.
2360 The actual changes affect many files.
2367 The actual changes affect many files.
2361
2368
2362 2003-11-30 Fernando Perez <fperez@colorado.edu>
2369 2003-11-30 Fernando Perez <fperez@colorado.edu>
2363
2370
2364 * IPython/iplib.py (file_matches): new completion code, courtesy
2371 * IPython/iplib.py (file_matches): new completion code, courtesy
2365 of Jeff Collins. This enables filename completion again under
2372 of Jeff Collins. This enables filename completion again under
2366 python 2.3, which disabled it at the C level.
2373 python 2.3, which disabled it at the C level.
2367
2374
2368 2003-11-11 Fernando Perez <fperez@colorado.edu>
2375 2003-11-11 Fernando Perez <fperez@colorado.edu>
2369
2376
2370 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2377 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2371 for Numeric.array(map(...)), but often convenient.
2378 for Numeric.array(map(...)), but often convenient.
2372
2379
2373 2003-11-05 Fernando Perez <fperez@colorado.edu>
2380 2003-11-05 Fernando Perez <fperez@colorado.edu>
2374
2381
2375 * IPython/numutils.py (frange): Changed a call from int() to
2382 * IPython/numutils.py (frange): Changed a call from int() to
2376 int(round()) to prevent a problem reported with arange() in the
2383 int(round()) to prevent a problem reported with arange() in the
2377 numpy list.
2384 numpy list.
2378
2385
2379 2003-10-06 Fernando Perez <fperez@colorado.edu>
2386 2003-10-06 Fernando Perez <fperez@colorado.edu>
2380
2387
2381 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2388 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2382 prevent crashes if sys lacks an argv attribute (it happens with
2389 prevent crashes if sys lacks an argv attribute (it happens with
2383 embedded interpreters which build a bare-bones sys module).
2390 embedded interpreters which build a bare-bones sys module).
2384 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2391 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2385
2392
2386 2003-09-24 Fernando Perez <fperez@colorado.edu>
2393 2003-09-24 Fernando Perez <fperez@colorado.edu>
2387
2394
2388 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2395 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2389 to protect against poorly written user objects where __getattr__
2396 to protect against poorly written user objects where __getattr__
2390 raises exceptions other than AttributeError. Thanks to a bug
2397 raises exceptions other than AttributeError. Thanks to a bug
2391 report by Oliver Sander <osander-AT-gmx.de>.
2398 report by Oliver Sander <osander-AT-gmx.de>.
2392
2399
2393 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2400 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2394 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2401 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2395
2402
2396 2003-09-09 Fernando Perez <fperez@colorado.edu>
2403 2003-09-09 Fernando Perez <fperez@colorado.edu>
2397
2404
2398 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2405 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2399 unpacking a list whith a callable as first element would
2406 unpacking a list whith a callable as first element would
2400 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2407 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2401 Collins.
2408 Collins.
2402
2409
2403 2003-08-25 *** Released version 0.5.0
2410 2003-08-25 *** Released version 0.5.0
2404
2411
2405 2003-08-22 Fernando Perez <fperez@colorado.edu>
2412 2003-08-22 Fernando Perez <fperez@colorado.edu>
2406
2413
2407 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2414 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2408 improperly defined user exceptions. Thanks to feedback from Mark
2415 improperly defined user exceptions. Thanks to feedback from Mark
2409 Russell <mrussell-AT-verio.net>.
2416 Russell <mrussell-AT-verio.net>.
2410
2417
2411 2003-08-20 Fernando Perez <fperez@colorado.edu>
2418 2003-08-20 Fernando Perez <fperez@colorado.edu>
2412
2419
2413 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2420 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2414 printing so that it would print multi-line string forms starting
2421 printing so that it would print multi-line string forms starting
2415 with a new line. This way the formatting is better respected for
2422 with a new line. This way the formatting is better respected for
2416 objects which work hard to make nice string forms.
2423 objects which work hard to make nice string forms.
2417
2424
2418 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2425 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2419 autocall would overtake data access for objects with both
2426 autocall would overtake data access for objects with both
2420 __getitem__ and __call__.
2427 __getitem__ and __call__.
2421
2428
2422 2003-08-19 *** Released version 0.5.0-rc1
2429 2003-08-19 *** Released version 0.5.0-rc1
2423
2430
2424 2003-08-19 Fernando Perez <fperez@colorado.edu>
2431 2003-08-19 Fernando Perez <fperez@colorado.edu>
2425
2432
2426 * IPython/deep_reload.py (load_tail): single tiny change here
2433 * IPython/deep_reload.py (load_tail): single tiny change here
2427 seems to fix the long-standing bug of dreload() failing to work
2434 seems to fix the long-standing bug of dreload() failing to work
2428 for dotted names. But this module is pretty tricky, so I may have
2435 for dotted names. But this module is pretty tricky, so I may have
2429 missed some subtlety. Needs more testing!.
2436 missed some subtlety. Needs more testing!.
2430
2437
2431 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2438 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2432 exceptions which have badly implemented __str__ methods.
2439 exceptions which have badly implemented __str__ methods.
2433 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2440 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2434 which I've been getting reports about from Python 2.3 users. I
2441 which I've been getting reports about from Python 2.3 users. I
2435 wish I had a simple test case to reproduce the problem, so I could
2442 wish I had a simple test case to reproduce the problem, so I could
2436 either write a cleaner workaround or file a bug report if
2443 either write a cleaner workaround or file a bug report if
2437 necessary.
2444 necessary.
2438
2445
2439 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2446 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2440 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2447 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2441 a bug report by Tjabo Kloppenburg.
2448 a bug report by Tjabo Kloppenburg.
2442
2449
2443 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2450 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2444 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2451 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2445 seems rather unstable. Thanks to a bug report by Tjabo
2452 seems rather unstable. Thanks to a bug report by Tjabo
2446 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2453 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2447
2454
2448 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2455 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2449 this out soon because of the critical fixes in the inner loop for
2456 this out soon because of the critical fixes in the inner loop for
2450 generators.
2457 generators.
2451
2458
2452 * IPython/Magic.py (Magic.getargspec): removed. This (and
2459 * IPython/Magic.py (Magic.getargspec): removed. This (and
2453 _get_def) have been obsoleted by OInspect for a long time, I
2460 _get_def) have been obsoleted by OInspect for a long time, I
2454 hadn't noticed that they were dead code.
2461 hadn't noticed that they were dead code.
2455 (Magic._ofind): restored _ofind functionality for a few literals
2462 (Magic._ofind): restored _ofind functionality for a few literals
2456 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2463 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2457 for things like "hello".capitalize?, since that would require a
2464 for things like "hello".capitalize?, since that would require a
2458 potentially dangerous eval() again.
2465 potentially dangerous eval() again.
2459
2466
2460 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2467 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2461 logic a bit more to clean up the escapes handling and minimize the
2468 logic a bit more to clean up the escapes handling and minimize the
2462 use of _ofind to only necessary cases. The interactive 'feel' of
2469 use of _ofind to only necessary cases. The interactive 'feel' of
2463 IPython should have improved quite a bit with the changes in
2470 IPython should have improved quite a bit with the changes in
2464 _prefilter and _ofind (besides being far safer than before).
2471 _prefilter and _ofind (besides being far safer than before).
2465
2472
2466 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2473 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2467 obscure, never reported). Edit would fail to find the object to
2474 obscure, never reported). Edit would fail to find the object to
2468 edit under some circumstances.
2475 edit under some circumstances.
2469 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2476 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2470 which were causing double-calling of generators. Those eval calls
2477 which were causing double-calling of generators. Those eval calls
2471 were _very_ dangerous, since code with side effects could be
2478 were _very_ dangerous, since code with side effects could be
2472 triggered. As they say, 'eval is evil'... These were the
2479 triggered. As they say, 'eval is evil'... These were the
2473 nastiest evals in IPython. Besides, _ofind is now far simpler,
2480 nastiest evals in IPython. Besides, _ofind is now far simpler,
2474 and it should also be quite a bit faster. Its use of inspect is
2481 and it should also be quite a bit faster. Its use of inspect is
2475 also safer, so perhaps some of the inspect-related crashes I've
2482 also safer, so perhaps some of the inspect-related crashes I've
2476 seen lately with Python 2.3 might be taken care of. That will
2483 seen lately with Python 2.3 might be taken care of. That will
2477 need more testing.
2484 need more testing.
2478
2485
2479 2003-08-17 Fernando Perez <fperez@colorado.edu>
2486 2003-08-17 Fernando Perez <fperez@colorado.edu>
2480
2487
2481 * IPython/iplib.py (InteractiveShell._prefilter): significant
2488 * IPython/iplib.py (InteractiveShell._prefilter): significant
2482 simplifications to the logic for handling user escapes. Faster
2489 simplifications to the logic for handling user escapes. Faster
2483 and simpler code.
2490 and simpler code.
2484
2491
2485 2003-08-14 Fernando Perez <fperez@colorado.edu>
2492 2003-08-14 Fernando Perez <fperez@colorado.edu>
2486
2493
2487 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2494 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2488 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2495 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2489 but it should be quite a bit faster. And the recursive version
2496 but it should be quite a bit faster. And the recursive version
2490 generated O(log N) intermediate storage for all rank>1 arrays,
2497 generated O(log N) intermediate storage for all rank>1 arrays,
2491 even if they were contiguous.
2498 even if they were contiguous.
2492 (l1norm): Added this function.
2499 (l1norm): Added this function.
2493 (norm): Added this function for arbitrary norms (including
2500 (norm): Added this function for arbitrary norms (including
2494 l-infinity). l1 and l2 are still special cases for convenience
2501 l-infinity). l1 and l2 are still special cases for convenience
2495 and speed.
2502 and speed.
2496
2503
2497 2003-08-03 Fernando Perez <fperez@colorado.edu>
2504 2003-08-03 Fernando Perez <fperez@colorado.edu>
2498
2505
2499 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2506 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2500 exceptions, which now raise PendingDeprecationWarnings in Python
2507 exceptions, which now raise PendingDeprecationWarnings in Python
2501 2.3. There were some in Magic and some in Gnuplot2.
2508 2.3. There were some in Magic and some in Gnuplot2.
2502
2509
2503 2003-06-30 Fernando Perez <fperez@colorado.edu>
2510 2003-06-30 Fernando Perez <fperez@colorado.edu>
2504
2511
2505 * IPython/genutils.py (page): modified to call curses only for
2512 * IPython/genutils.py (page): modified to call curses only for
2506 terminals where TERM=='xterm'. After problems under many other
2513 terminals where TERM=='xterm'. After problems under many other
2507 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2514 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2508
2515
2509 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2516 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2510 would be triggered when readline was absent. This was just an old
2517 would be triggered when readline was absent. This was just an old
2511 debugging statement I'd forgotten to take out.
2518 debugging statement I'd forgotten to take out.
2512
2519
2513 2003-06-20 Fernando Perez <fperez@colorado.edu>
2520 2003-06-20 Fernando Perez <fperez@colorado.edu>
2514
2521
2515 * IPython/genutils.py (clock): modified to return only user time
2522 * IPython/genutils.py (clock): modified to return only user time
2516 (not counting system time), after a discussion on scipy. While
2523 (not counting system time), after a discussion on scipy. While
2517 system time may be a useful quantity occasionally, it may much
2524 system time may be a useful quantity occasionally, it may much
2518 more easily be skewed by occasional swapping or other similar
2525 more easily be skewed by occasional swapping or other similar
2519 activity.
2526 activity.
2520
2527
2521 2003-06-05 Fernando Perez <fperez@colorado.edu>
2528 2003-06-05 Fernando Perez <fperez@colorado.edu>
2522
2529
2523 * IPython/numutils.py (identity): new function, for building
2530 * IPython/numutils.py (identity): new function, for building
2524 arbitrary rank Kronecker deltas (mostly backwards compatible with
2531 arbitrary rank Kronecker deltas (mostly backwards compatible with
2525 Numeric.identity)
2532 Numeric.identity)
2526
2533
2527 2003-06-03 Fernando Perez <fperez@colorado.edu>
2534 2003-06-03 Fernando Perez <fperez@colorado.edu>
2528
2535
2529 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2536 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2530 arguments passed to magics with spaces, to allow trailing '\' to
2537 arguments passed to magics with spaces, to allow trailing '\' to
2531 work normally (mainly for Windows users).
2538 work normally (mainly for Windows users).
2532
2539
2533 2003-05-29 Fernando Perez <fperez@colorado.edu>
2540 2003-05-29 Fernando Perez <fperez@colorado.edu>
2534
2541
2535 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2542 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2536 instead of pydoc.help. This fixes a bizarre behavior where
2543 instead of pydoc.help. This fixes a bizarre behavior where
2537 printing '%s' % locals() would trigger the help system. Now
2544 printing '%s' % locals() would trigger the help system. Now
2538 ipython behaves like normal python does.
2545 ipython behaves like normal python does.
2539
2546
2540 Note that if one does 'from pydoc import help', the bizarre
2547 Note that if one does 'from pydoc import help', the bizarre
2541 behavior returns, but this will also happen in normal python, so
2548 behavior returns, but this will also happen in normal python, so
2542 it's not an ipython bug anymore (it has to do with how pydoc.help
2549 it's not an ipython bug anymore (it has to do with how pydoc.help
2543 is implemented).
2550 is implemented).
2544
2551
2545 2003-05-22 Fernando Perez <fperez@colorado.edu>
2552 2003-05-22 Fernando Perez <fperez@colorado.edu>
2546
2553
2547 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2554 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2548 return [] instead of None when nothing matches, also match to end
2555 return [] instead of None when nothing matches, also match to end
2549 of line. Patch by Gary Bishop.
2556 of line. Patch by Gary Bishop.
2550
2557
2551 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2558 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2552 protection as before, for files passed on the command line. This
2559 protection as before, for files passed on the command line. This
2553 prevents the CrashHandler from kicking in if user files call into
2560 prevents the CrashHandler from kicking in if user files call into
2554 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2561 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2555 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2562 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2556
2563
2557 2003-05-20 *** Released version 0.4.0
2564 2003-05-20 *** Released version 0.4.0
2558
2565
2559 2003-05-20 Fernando Perez <fperez@colorado.edu>
2566 2003-05-20 Fernando Perez <fperez@colorado.edu>
2560
2567
2561 * setup.py: added support for manpages. It's a bit hackish b/c of
2568 * setup.py: added support for manpages. It's a bit hackish b/c of
2562 a bug in the way the bdist_rpm distutils target handles gzipped
2569 a bug in the way the bdist_rpm distutils target handles gzipped
2563 manpages, but it works. After a patch by Jack.
2570 manpages, but it works. After a patch by Jack.
2564
2571
2565 2003-05-19 Fernando Perez <fperez@colorado.edu>
2572 2003-05-19 Fernando Perez <fperez@colorado.edu>
2566
2573
2567 * IPython/numutils.py: added a mockup of the kinds module, since
2574 * IPython/numutils.py: added a mockup of the kinds module, since
2568 it was recently removed from Numeric. This way, numutils will
2575 it was recently removed from Numeric. This way, numutils will
2569 work for all users even if they are missing kinds.
2576 work for all users even if they are missing kinds.
2570
2577
2571 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2578 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2572 failure, which can occur with SWIG-wrapped extensions. After a
2579 failure, which can occur with SWIG-wrapped extensions. After a
2573 crash report from Prabhu.
2580 crash report from Prabhu.
2574
2581
2575 2003-05-16 Fernando Perez <fperez@colorado.edu>
2582 2003-05-16 Fernando Perez <fperez@colorado.edu>
2576
2583
2577 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2584 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2578 protect ipython from user code which may call directly
2585 protect ipython from user code which may call directly
2579 sys.excepthook (this looks like an ipython crash to the user, even
2586 sys.excepthook (this looks like an ipython crash to the user, even
2580 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2587 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2581 This is especially important to help users of WxWindows, but may
2588 This is especially important to help users of WxWindows, but may
2582 also be useful in other cases.
2589 also be useful in other cases.
2583
2590
2584 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2591 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2585 an optional tb_offset to be specified, and to preserve exception
2592 an optional tb_offset to be specified, and to preserve exception
2586 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2593 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2587
2594
2588 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2595 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2589
2596
2590 2003-05-15 Fernando Perez <fperez@colorado.edu>
2597 2003-05-15 Fernando Perez <fperez@colorado.edu>
2591
2598
2592 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2599 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2593 installing for a new user under Windows.
2600 installing for a new user under Windows.
2594
2601
2595 2003-05-12 Fernando Perez <fperez@colorado.edu>
2602 2003-05-12 Fernando Perez <fperez@colorado.edu>
2596
2603
2597 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2604 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2598 handler for Emacs comint-based lines. Currently it doesn't do
2605 handler for Emacs comint-based lines. Currently it doesn't do
2599 much (but importantly, it doesn't update the history cache). In
2606 much (but importantly, it doesn't update the history cache). In
2600 the future it may be expanded if Alex needs more functionality
2607 the future it may be expanded if Alex needs more functionality
2601 there.
2608 there.
2602
2609
2603 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2610 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2604 info to crash reports.
2611 info to crash reports.
2605
2612
2606 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2613 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2607 just like Python's -c. Also fixed crash with invalid -color
2614 just like Python's -c. Also fixed crash with invalid -color
2608 option value at startup. Thanks to Will French
2615 option value at startup. Thanks to Will French
2609 <wfrench-AT-bestweb.net> for the bug report.
2616 <wfrench-AT-bestweb.net> for the bug report.
2610
2617
2611 2003-05-09 Fernando Perez <fperez@colorado.edu>
2618 2003-05-09 Fernando Perez <fperez@colorado.edu>
2612
2619
2613 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2620 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2614 to EvalDict (it's a mapping, after all) and simplified its code
2621 to EvalDict (it's a mapping, after all) and simplified its code
2615 quite a bit, after a nice discussion on c.l.py where Gustavo
2622 quite a bit, after a nice discussion on c.l.py where Gustavo
2616 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2623 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2617
2624
2618 2003-04-30 Fernando Perez <fperez@colorado.edu>
2625 2003-04-30 Fernando Perez <fperez@colorado.edu>
2619
2626
2620 * IPython/genutils.py (timings_out): modified it to reduce its
2627 * IPython/genutils.py (timings_out): modified it to reduce its
2621 overhead in the common reps==1 case.
2628 overhead in the common reps==1 case.
2622
2629
2623 2003-04-29 Fernando Perez <fperez@colorado.edu>
2630 2003-04-29 Fernando Perez <fperez@colorado.edu>
2624
2631
2625 * IPython/genutils.py (timings_out): Modified to use the resource
2632 * IPython/genutils.py (timings_out): Modified to use the resource
2626 module, which avoids the wraparound problems of time.clock().
2633 module, which avoids the wraparound problems of time.clock().
2627
2634
2628 2003-04-17 *** Released version 0.2.15pre4
2635 2003-04-17 *** Released version 0.2.15pre4
2629
2636
2630 2003-04-17 Fernando Perez <fperez@colorado.edu>
2637 2003-04-17 Fernando Perez <fperez@colorado.edu>
2631
2638
2632 * setup.py (scriptfiles): Split windows-specific stuff over to a
2639 * setup.py (scriptfiles): Split windows-specific stuff over to a
2633 separate file, in an attempt to have a Windows GUI installer.
2640 separate file, in an attempt to have a Windows GUI installer.
2634 That didn't work, but part of the groundwork is done.
2641 That didn't work, but part of the groundwork is done.
2635
2642
2636 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2643 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2637 indent/unindent with 4 spaces. Particularly useful in combination
2644 indent/unindent with 4 spaces. Particularly useful in combination
2638 with the new auto-indent option.
2645 with the new auto-indent option.
2639
2646
2640 2003-04-16 Fernando Perez <fperez@colorado.edu>
2647 2003-04-16 Fernando Perez <fperez@colorado.edu>
2641
2648
2642 * IPython/Magic.py: various replacements of self.rc for
2649 * IPython/Magic.py: various replacements of self.rc for
2643 self.shell.rc. A lot more remains to be done to fully disentangle
2650 self.shell.rc. A lot more remains to be done to fully disentangle
2644 this class from the main Shell class.
2651 this class from the main Shell class.
2645
2652
2646 * IPython/GnuplotRuntime.py: added checks for mouse support so
2653 * IPython/GnuplotRuntime.py: added checks for mouse support so
2647 that we don't try to enable it if the current gnuplot doesn't
2654 that we don't try to enable it if the current gnuplot doesn't
2648 really support it. Also added checks so that we don't try to
2655 really support it. Also added checks so that we don't try to
2649 enable persist under Windows (where Gnuplot doesn't recognize the
2656 enable persist under Windows (where Gnuplot doesn't recognize the
2650 option).
2657 option).
2651
2658
2652 * IPython/iplib.py (InteractiveShell.interact): Added optional
2659 * IPython/iplib.py (InteractiveShell.interact): Added optional
2653 auto-indenting code, after a patch by King C. Shu
2660 auto-indenting code, after a patch by King C. Shu
2654 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2661 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2655 get along well with pasting indented code. If I ever figure out
2662 get along well with pasting indented code. If I ever figure out
2656 how to make that part go well, it will become on by default.
2663 how to make that part go well, it will become on by default.
2657
2664
2658 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2665 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2659 crash ipython if there was an unmatched '%' in the user's prompt
2666 crash ipython if there was an unmatched '%' in the user's prompt
2660 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2667 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2661
2668
2662 * IPython/iplib.py (InteractiveShell.interact): removed the
2669 * IPython/iplib.py (InteractiveShell.interact): removed the
2663 ability to ask the user whether he wants to crash or not at the
2670 ability to ask the user whether he wants to crash or not at the
2664 'last line' exception handler. Calling functions at that point
2671 'last line' exception handler. Calling functions at that point
2665 changes the stack, and the error reports would have incorrect
2672 changes the stack, and the error reports would have incorrect
2666 tracebacks.
2673 tracebacks.
2667
2674
2668 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2675 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2669 pass through a peger a pretty-printed form of any object. After a
2676 pass through a peger a pretty-printed form of any object. After a
2670 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2677 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2671
2678
2672 2003-04-14 Fernando Perez <fperez@colorado.edu>
2679 2003-04-14 Fernando Perez <fperez@colorado.edu>
2673
2680
2674 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2681 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2675 all files in ~ would be modified at first install (instead of
2682 all files in ~ would be modified at first install (instead of
2676 ~/.ipython). This could be potentially disastrous, as the
2683 ~/.ipython). This could be potentially disastrous, as the
2677 modification (make line-endings native) could damage binary files.
2684 modification (make line-endings native) could damage binary files.
2678
2685
2679 2003-04-10 Fernando Perez <fperez@colorado.edu>
2686 2003-04-10 Fernando Perez <fperez@colorado.edu>
2680
2687
2681 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2688 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2682 handle only lines which are invalid python. This now means that
2689 handle only lines which are invalid python. This now means that
2683 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2690 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2684 for the bug report.
2691 for the bug report.
2685
2692
2686 2003-04-01 Fernando Perez <fperez@colorado.edu>
2693 2003-04-01 Fernando Perez <fperez@colorado.edu>
2687
2694
2688 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2695 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2689 where failing to set sys.last_traceback would crash pdb.pm().
2696 where failing to set sys.last_traceback would crash pdb.pm().
2690 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2697 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2691 report.
2698 report.
2692
2699
2693 2003-03-25 Fernando Perez <fperez@colorado.edu>
2700 2003-03-25 Fernando Perez <fperez@colorado.edu>
2694
2701
2695 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2702 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2696 before printing it (it had a lot of spurious blank lines at the
2703 before printing it (it had a lot of spurious blank lines at the
2697 end).
2704 end).
2698
2705
2699 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2706 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2700 output would be sent 21 times! Obviously people don't use this
2707 output would be sent 21 times! Obviously people don't use this
2701 too often, or I would have heard about it.
2708 too often, or I would have heard about it.
2702
2709
2703 2003-03-24 Fernando Perez <fperez@colorado.edu>
2710 2003-03-24 Fernando Perez <fperez@colorado.edu>
2704
2711
2705 * setup.py (scriptfiles): renamed the data_files parameter from
2712 * setup.py (scriptfiles): renamed the data_files parameter from
2706 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2713 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2707 for the patch.
2714 for the patch.
2708
2715
2709 2003-03-20 Fernando Perez <fperez@colorado.edu>
2716 2003-03-20 Fernando Perez <fperez@colorado.edu>
2710
2717
2711 * IPython/genutils.py (error): added error() and fatal()
2718 * IPython/genutils.py (error): added error() and fatal()
2712 functions.
2719 functions.
2713
2720
2714 2003-03-18 *** Released version 0.2.15pre3
2721 2003-03-18 *** Released version 0.2.15pre3
2715
2722
2716 2003-03-18 Fernando Perez <fperez@colorado.edu>
2723 2003-03-18 Fernando Perez <fperez@colorado.edu>
2717
2724
2718 * setupext/install_data_ext.py
2725 * setupext/install_data_ext.py
2719 (install_data_ext.initialize_options): Class contributed by Jack
2726 (install_data_ext.initialize_options): Class contributed by Jack
2720 Moffit for fixing the old distutils hack. He is sending this to
2727 Moffit for fixing the old distutils hack. He is sending this to
2721 the distutils folks so in the future we may not need it as a
2728 the distutils folks so in the future we may not need it as a
2722 private fix.
2729 private fix.
2723
2730
2724 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2731 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2725 changes for Debian packaging. See his patch for full details.
2732 changes for Debian packaging. See his patch for full details.
2726 The old distutils hack of making the ipythonrc* files carry a
2733 The old distutils hack of making the ipythonrc* files carry a
2727 bogus .py extension is gone, at last. Examples were moved to a
2734 bogus .py extension is gone, at last. Examples were moved to a
2728 separate subdir under doc/, and the separate executable scripts
2735 separate subdir under doc/, and the separate executable scripts
2729 now live in their own directory. Overall a great cleanup. The
2736 now live in their own directory. Overall a great cleanup. The
2730 manual was updated to use the new files, and setup.py has been
2737 manual was updated to use the new files, and setup.py has been
2731 fixed for this setup.
2738 fixed for this setup.
2732
2739
2733 * IPython/PyColorize.py (Parser.usage): made non-executable and
2740 * IPython/PyColorize.py (Parser.usage): made non-executable and
2734 created a pycolor wrapper around it to be included as a script.
2741 created a pycolor wrapper around it to be included as a script.
2735
2742
2736 2003-03-12 *** Released version 0.2.15pre2
2743 2003-03-12 *** Released version 0.2.15pre2
2737
2744
2738 2003-03-12 Fernando Perez <fperez@colorado.edu>
2745 2003-03-12 Fernando Perez <fperez@colorado.edu>
2739
2746
2740 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2747 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2741 long-standing problem with garbage characters in some terminals.
2748 long-standing problem with garbage characters in some terminals.
2742 The issue was really that the \001 and \002 escapes must _only_ be
2749 The issue was really that the \001 and \002 escapes must _only_ be
2743 passed to input prompts (which call readline), but _never_ to
2750 passed to input prompts (which call readline), but _never_ to
2744 normal text to be printed on screen. I changed ColorANSI to have
2751 normal text to be printed on screen. I changed ColorANSI to have
2745 two classes: TermColors and InputTermColors, each with the
2752 two classes: TermColors and InputTermColors, each with the
2746 appropriate escapes for input prompts or normal text. The code in
2753 appropriate escapes for input prompts or normal text. The code in
2747 Prompts.py got slightly more complicated, but this very old and
2754 Prompts.py got slightly more complicated, but this very old and
2748 annoying bug is finally fixed.
2755 annoying bug is finally fixed.
2749
2756
2750 All the credit for nailing down the real origin of this problem
2757 All the credit for nailing down the real origin of this problem
2751 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2758 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2752 *Many* thanks to him for spending quite a bit of effort on this.
2759 *Many* thanks to him for spending quite a bit of effort on this.
2753
2760
2754 2003-03-05 *** Released version 0.2.15pre1
2761 2003-03-05 *** Released version 0.2.15pre1
2755
2762
2756 2003-03-03 Fernando Perez <fperez@colorado.edu>
2763 2003-03-03 Fernando Perez <fperez@colorado.edu>
2757
2764
2758 * IPython/FakeModule.py: Moved the former _FakeModule to a
2765 * IPython/FakeModule.py: Moved the former _FakeModule to a
2759 separate file, because it's also needed by Magic (to fix a similar
2766 separate file, because it's also needed by Magic (to fix a similar
2760 pickle-related issue in @run).
2767 pickle-related issue in @run).
2761
2768
2762 2003-03-02 Fernando Perez <fperez@colorado.edu>
2769 2003-03-02 Fernando Perez <fperez@colorado.edu>
2763
2770
2764 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2771 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2765 the autocall option at runtime.
2772 the autocall option at runtime.
2766 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2773 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2767 across Magic.py to start separating Magic from InteractiveShell.
2774 across Magic.py to start separating Magic from InteractiveShell.
2768 (Magic._ofind): Fixed to return proper namespace for dotted
2775 (Magic._ofind): Fixed to return proper namespace for dotted
2769 names. Before, a dotted name would always return 'not currently
2776 names. Before, a dotted name would always return 'not currently
2770 defined', because it would find the 'parent'. s.x would be found,
2777 defined', because it would find the 'parent'. s.x would be found,
2771 but since 'x' isn't defined by itself, it would get confused.
2778 but since 'x' isn't defined by itself, it would get confused.
2772 (Magic.magic_run): Fixed pickling problems reported by Ralf
2779 (Magic.magic_run): Fixed pickling problems reported by Ralf
2773 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2780 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2774 that I'd used when Mike Heeter reported similar issues at the
2781 that I'd used when Mike Heeter reported similar issues at the
2775 top-level, but now for @run. It boils down to injecting the
2782 top-level, but now for @run. It boils down to injecting the
2776 namespace where code is being executed with something that looks
2783 namespace where code is being executed with something that looks
2777 enough like a module to fool pickle.dump(). Since a pickle stores
2784 enough like a module to fool pickle.dump(). Since a pickle stores
2778 a named reference to the importing module, we need this for
2785 a named reference to the importing module, we need this for
2779 pickles to save something sensible.
2786 pickles to save something sensible.
2780
2787
2781 * IPython/ipmaker.py (make_IPython): added an autocall option.
2788 * IPython/ipmaker.py (make_IPython): added an autocall option.
2782
2789
2783 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2790 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2784 the auto-eval code. Now autocalling is an option, and the code is
2791 the auto-eval code. Now autocalling is an option, and the code is
2785 also vastly safer. There is no more eval() involved at all.
2792 also vastly safer. There is no more eval() involved at all.
2786
2793
2787 2003-03-01 Fernando Perez <fperez@colorado.edu>
2794 2003-03-01 Fernando Perez <fperez@colorado.edu>
2788
2795
2789 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2796 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2790 dict with named keys instead of a tuple.
2797 dict with named keys instead of a tuple.
2791
2798
2792 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2799 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2793
2800
2794 * setup.py (make_shortcut): Fixed message about directories
2801 * setup.py (make_shortcut): Fixed message about directories
2795 created during Windows installation (the directories were ok, just
2802 created during Windows installation (the directories were ok, just
2796 the printed message was misleading). Thanks to Chris Liechti
2803 the printed message was misleading). Thanks to Chris Liechti
2797 <cliechti-AT-gmx.net> for the heads up.
2804 <cliechti-AT-gmx.net> for the heads up.
2798
2805
2799 2003-02-21 Fernando Perez <fperez@colorado.edu>
2806 2003-02-21 Fernando Perez <fperez@colorado.edu>
2800
2807
2801 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2808 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2802 of ValueError exception when checking for auto-execution. This
2809 of ValueError exception when checking for auto-execution. This
2803 one is raised by things like Numeric arrays arr.flat when the
2810 one is raised by things like Numeric arrays arr.flat when the
2804 array is non-contiguous.
2811 array is non-contiguous.
2805
2812
2806 2003-01-31 Fernando Perez <fperez@colorado.edu>
2813 2003-01-31 Fernando Perez <fperez@colorado.edu>
2807
2814
2808 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2815 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2809 not return any value at all (even though the command would get
2816 not return any value at all (even though the command would get
2810 executed).
2817 executed).
2811 (xsys): Flush stdout right after printing the command to ensure
2818 (xsys): Flush stdout right after printing the command to ensure
2812 proper ordering of commands and command output in the total
2819 proper ordering of commands and command output in the total
2813 output.
2820 output.
2814 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2821 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2815 system/getoutput as defaults. The old ones are kept for
2822 system/getoutput as defaults. The old ones are kept for
2816 compatibility reasons, so no code which uses this library needs
2823 compatibility reasons, so no code which uses this library needs
2817 changing.
2824 changing.
2818
2825
2819 2003-01-27 *** Released version 0.2.14
2826 2003-01-27 *** Released version 0.2.14
2820
2827
2821 2003-01-25 Fernando Perez <fperez@colorado.edu>
2828 2003-01-25 Fernando Perez <fperez@colorado.edu>
2822
2829
2823 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2830 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2824 functions defined in previous edit sessions could not be re-edited
2831 functions defined in previous edit sessions could not be re-edited
2825 (because the temp files were immediately removed). Now temp files
2832 (because the temp files were immediately removed). Now temp files
2826 are removed only at IPython's exit.
2833 are removed only at IPython's exit.
2827 (Magic.magic_run): Improved @run to perform shell-like expansions
2834 (Magic.magic_run): Improved @run to perform shell-like expansions
2828 on its arguments (~users and $VARS). With this, @run becomes more
2835 on its arguments (~users and $VARS). With this, @run becomes more
2829 like a normal command-line.
2836 like a normal command-line.
2830
2837
2831 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2838 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2832 bugs related to embedding and cleaned up that code. A fairly
2839 bugs related to embedding and cleaned up that code. A fairly
2833 important one was the impossibility to access the global namespace
2840 important one was the impossibility to access the global namespace
2834 through the embedded IPython (only local variables were visible).
2841 through the embedded IPython (only local variables were visible).
2835
2842
2836 2003-01-14 Fernando Perez <fperez@colorado.edu>
2843 2003-01-14 Fernando Perez <fperez@colorado.edu>
2837
2844
2838 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2845 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2839 auto-calling to be a bit more conservative. Now it doesn't get
2846 auto-calling to be a bit more conservative. Now it doesn't get
2840 triggered if any of '!=()<>' are in the rest of the input line, to
2847 triggered if any of '!=()<>' are in the rest of the input line, to
2841 allow comparing callables. Thanks to Alex for the heads up.
2848 allow comparing callables. Thanks to Alex for the heads up.
2842
2849
2843 2003-01-07 Fernando Perez <fperez@colorado.edu>
2850 2003-01-07 Fernando Perez <fperez@colorado.edu>
2844
2851
2845 * IPython/genutils.py (page): fixed estimation of the number of
2852 * IPython/genutils.py (page): fixed estimation of the number of
2846 lines in a string to be paged to simply count newlines. This
2853 lines in a string to be paged to simply count newlines. This
2847 prevents over-guessing due to embedded escape sequences. A better
2854 prevents over-guessing due to embedded escape sequences. A better
2848 long-term solution would involve stripping out the control chars
2855 long-term solution would involve stripping out the control chars
2849 for the count, but it's potentially so expensive I just don't
2856 for the count, but it's potentially so expensive I just don't
2850 think it's worth doing.
2857 think it's worth doing.
2851
2858
2852 2002-12-19 *** Released version 0.2.14pre50
2859 2002-12-19 *** Released version 0.2.14pre50
2853
2860
2854 2002-12-19 Fernando Perez <fperez@colorado.edu>
2861 2002-12-19 Fernando Perez <fperez@colorado.edu>
2855
2862
2856 * tools/release (version): Changed release scripts to inform
2863 * tools/release (version): Changed release scripts to inform
2857 Andrea and build a NEWS file with a list of recent changes.
2864 Andrea and build a NEWS file with a list of recent changes.
2858
2865
2859 * IPython/ColorANSI.py (__all__): changed terminal detection
2866 * IPython/ColorANSI.py (__all__): changed terminal detection
2860 code. Seems to work better for xterms without breaking
2867 code. Seems to work better for xterms without breaking
2861 konsole. Will need more testing to determine if WinXP and Mac OSX
2868 konsole. Will need more testing to determine if WinXP and Mac OSX
2862 also work ok.
2869 also work ok.
2863
2870
2864 2002-12-18 *** Released version 0.2.14pre49
2871 2002-12-18 *** Released version 0.2.14pre49
2865
2872
2866 2002-12-18 Fernando Perez <fperez@colorado.edu>
2873 2002-12-18 Fernando Perez <fperez@colorado.edu>
2867
2874
2868 * Docs: added new info about Mac OSX, from Andrea.
2875 * Docs: added new info about Mac OSX, from Andrea.
2869
2876
2870 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2877 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2871 allow direct plotting of python strings whose format is the same
2878 allow direct plotting of python strings whose format is the same
2872 of gnuplot data files.
2879 of gnuplot data files.
2873
2880
2874 2002-12-16 Fernando Perez <fperez@colorado.edu>
2881 2002-12-16 Fernando Perez <fperez@colorado.edu>
2875
2882
2876 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2883 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2877 value of exit question to be acknowledged.
2884 value of exit question to be acknowledged.
2878
2885
2879 2002-12-03 Fernando Perez <fperez@colorado.edu>
2886 2002-12-03 Fernando Perez <fperez@colorado.edu>
2880
2887
2881 * IPython/ipmaker.py: removed generators, which had been added
2888 * IPython/ipmaker.py: removed generators, which had been added
2882 by mistake in an earlier debugging run. This was causing trouble
2889 by mistake in an earlier debugging run. This was causing trouble
2883 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2890 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2884 for pointing this out.
2891 for pointing this out.
2885
2892
2886 2002-11-17 Fernando Perez <fperez@colorado.edu>
2893 2002-11-17 Fernando Perez <fperez@colorado.edu>
2887
2894
2888 * Manual: updated the Gnuplot section.
2895 * Manual: updated the Gnuplot section.
2889
2896
2890 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2897 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2891 a much better split of what goes in Runtime and what goes in
2898 a much better split of what goes in Runtime and what goes in
2892 Interactive.
2899 Interactive.
2893
2900
2894 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2901 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2895 being imported from iplib.
2902 being imported from iplib.
2896
2903
2897 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2904 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2898 for command-passing. Now the global Gnuplot instance is called
2905 for command-passing. Now the global Gnuplot instance is called
2899 'gp' instead of 'g', which was really a far too fragile and
2906 'gp' instead of 'g', which was really a far too fragile and
2900 common name.
2907 common name.
2901
2908
2902 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2909 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2903 bounding boxes generated by Gnuplot for square plots.
2910 bounding boxes generated by Gnuplot for square plots.
2904
2911
2905 * IPython/genutils.py (popkey): new function added. I should
2912 * IPython/genutils.py (popkey): new function added. I should
2906 suggest this on c.l.py as a dict method, it seems useful.
2913 suggest this on c.l.py as a dict method, it seems useful.
2907
2914
2908 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2915 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2909 to transparently handle PostScript generation. MUCH better than
2916 to transparently handle PostScript generation. MUCH better than
2910 the previous plot_eps/replot_eps (which I removed now). The code
2917 the previous plot_eps/replot_eps (which I removed now). The code
2911 is also fairly clean and well documented now (including
2918 is also fairly clean and well documented now (including
2912 docstrings).
2919 docstrings).
2913
2920
2914 2002-11-13 Fernando Perez <fperez@colorado.edu>
2921 2002-11-13 Fernando Perez <fperez@colorado.edu>
2915
2922
2916 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2923 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2917 (inconsistent with options).
2924 (inconsistent with options).
2918
2925
2919 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2926 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2920 manually disabled, I don't know why. Fixed it.
2927 manually disabled, I don't know why. Fixed it.
2921 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2928 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2922 eps output.
2929 eps output.
2923
2930
2924 2002-11-12 Fernando Perez <fperez@colorado.edu>
2931 2002-11-12 Fernando Perez <fperez@colorado.edu>
2925
2932
2926 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2933 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2927 don't propagate up to caller. Fixes crash reported by François
2934 don't propagate up to caller. Fixes crash reported by François
2928 Pinard.
2935 Pinard.
2929
2936
2930 2002-11-09 Fernando Perez <fperez@colorado.edu>
2937 2002-11-09 Fernando Perez <fperez@colorado.edu>
2931
2938
2932 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2939 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2933 history file for new users.
2940 history file for new users.
2934 (make_IPython): fixed bug where initial install would leave the
2941 (make_IPython): fixed bug where initial install would leave the
2935 user running in the .ipython dir.
2942 user running in the .ipython dir.
2936 (make_IPython): fixed bug where config dir .ipython would be
2943 (make_IPython): fixed bug where config dir .ipython would be
2937 created regardless of the given -ipythondir option. Thanks to Cory
2944 created regardless of the given -ipythondir option. Thanks to Cory
2938 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2945 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2939
2946
2940 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2947 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2941 type confirmations. Will need to use it in all of IPython's code
2948 type confirmations. Will need to use it in all of IPython's code
2942 consistently.
2949 consistently.
2943
2950
2944 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2951 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2945 context to print 31 lines instead of the default 5. This will make
2952 context to print 31 lines instead of the default 5. This will make
2946 the crash reports extremely detailed in case the problem is in
2953 the crash reports extremely detailed in case the problem is in
2947 libraries I don't have access to.
2954 libraries I don't have access to.
2948
2955
2949 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2956 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2950 line of defense' code to still crash, but giving users fair
2957 line of defense' code to still crash, but giving users fair
2951 warning. I don't want internal errors to go unreported: if there's
2958 warning. I don't want internal errors to go unreported: if there's
2952 an internal problem, IPython should crash and generate a full
2959 an internal problem, IPython should crash and generate a full
2953 report.
2960 report.
2954
2961
2955 2002-11-08 Fernando Perez <fperez@colorado.edu>
2962 2002-11-08 Fernando Perez <fperez@colorado.edu>
2956
2963
2957 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2964 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2958 otherwise uncaught exceptions which can appear if people set
2965 otherwise uncaught exceptions which can appear if people set
2959 sys.stdout to something badly broken. Thanks to a crash report
2966 sys.stdout to something badly broken. Thanks to a crash report
2960 from henni-AT-mail.brainbot.com.
2967 from henni-AT-mail.brainbot.com.
2961
2968
2962 2002-11-04 Fernando Perez <fperez@colorado.edu>
2969 2002-11-04 Fernando Perez <fperez@colorado.edu>
2963
2970
2964 * IPython/iplib.py (InteractiveShell.interact): added
2971 * IPython/iplib.py (InteractiveShell.interact): added
2965 __IPYTHON__active to the builtins. It's a flag which goes on when
2972 __IPYTHON__active to the builtins. It's a flag which goes on when
2966 the interaction starts and goes off again when it stops. This
2973 the interaction starts and goes off again when it stops. This
2967 allows embedding code to detect being inside IPython. Before this
2974 allows embedding code to detect being inside IPython. Before this
2968 was done via __IPYTHON__, but that only shows that an IPython
2975 was done via __IPYTHON__, but that only shows that an IPython
2969 instance has been created.
2976 instance has been created.
2970
2977
2971 * IPython/Magic.py (Magic.magic_env): I realized that in a
2978 * IPython/Magic.py (Magic.magic_env): I realized that in a
2972 UserDict, instance.data holds the data as a normal dict. So I
2979 UserDict, instance.data holds the data as a normal dict. So I
2973 modified @env to return os.environ.data instead of rebuilding a
2980 modified @env to return os.environ.data instead of rebuilding a
2974 dict by hand.
2981 dict by hand.
2975
2982
2976 2002-11-02 Fernando Perez <fperez@colorado.edu>
2983 2002-11-02 Fernando Perez <fperez@colorado.edu>
2977
2984
2978 * IPython/genutils.py (warn): changed so that level 1 prints no
2985 * IPython/genutils.py (warn): changed so that level 1 prints no
2979 header. Level 2 is now the default (with 'WARNING' header, as
2986 header. Level 2 is now the default (with 'WARNING' header, as
2980 before). I think I tracked all places where changes were needed in
2987 before). I think I tracked all places where changes were needed in
2981 IPython, but outside code using the old level numbering may have
2988 IPython, but outside code using the old level numbering may have
2982 broken.
2989 broken.
2983
2990
2984 * IPython/iplib.py (InteractiveShell.runcode): added this to
2991 * IPython/iplib.py (InteractiveShell.runcode): added this to
2985 handle the tracebacks in SystemExit traps correctly. The previous
2992 handle the tracebacks in SystemExit traps correctly. The previous
2986 code (through interact) was printing more of the stack than
2993 code (through interact) was printing more of the stack than
2987 necessary, showing IPython internal code to the user.
2994 necessary, showing IPython internal code to the user.
2988
2995
2989 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2996 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2990 default. Now that the default at the confirmation prompt is yes,
2997 default. Now that the default at the confirmation prompt is yes,
2991 it's not so intrusive. François' argument that ipython sessions
2998 it's not so intrusive. François' argument that ipython sessions
2992 tend to be complex enough not to lose them from an accidental C-d,
2999 tend to be complex enough not to lose them from an accidental C-d,
2993 is a valid one.
3000 is a valid one.
2994
3001
2995 * IPython/iplib.py (InteractiveShell.interact): added a
3002 * IPython/iplib.py (InteractiveShell.interact): added a
2996 showtraceback() call to the SystemExit trap, and modified the exit
3003 showtraceback() call to the SystemExit trap, and modified the exit
2997 confirmation to have yes as the default.
3004 confirmation to have yes as the default.
2998
3005
2999 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3006 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3000 this file. It's been gone from the code for a long time, this was
3007 this file. It's been gone from the code for a long time, this was
3001 simply leftover junk.
3008 simply leftover junk.
3002
3009
3003 2002-11-01 Fernando Perez <fperez@colorado.edu>
3010 2002-11-01 Fernando Perez <fperez@colorado.edu>
3004
3011
3005 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3012 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3006 added. If set, IPython now traps EOF and asks for
3013 added. If set, IPython now traps EOF and asks for
3007 confirmation. After a request by François Pinard.
3014 confirmation. After a request by François Pinard.
3008
3015
3009 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3016 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3010 of @abort, and with a new (better) mechanism for handling the
3017 of @abort, and with a new (better) mechanism for handling the
3011 exceptions.
3018 exceptions.
3012
3019
3013 2002-10-27 Fernando Perez <fperez@colorado.edu>
3020 2002-10-27 Fernando Perez <fperez@colorado.edu>
3014
3021
3015 * IPython/usage.py (__doc__): updated the --help information and
3022 * IPython/usage.py (__doc__): updated the --help information and
3016 the ipythonrc file to indicate that -log generates
3023 the ipythonrc file to indicate that -log generates
3017 ./ipython.log. Also fixed the corresponding info in @logstart.
3024 ./ipython.log. Also fixed the corresponding info in @logstart.
3018 This and several other fixes in the manuals thanks to reports by
3025 This and several other fixes in the manuals thanks to reports by
3019 François Pinard <pinard-AT-iro.umontreal.ca>.
3026 François Pinard <pinard-AT-iro.umontreal.ca>.
3020
3027
3021 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3028 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3022 refer to @logstart (instead of @log, which doesn't exist).
3029 refer to @logstart (instead of @log, which doesn't exist).
3023
3030
3024 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3031 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3025 AttributeError crash. Thanks to Christopher Armstrong
3032 AttributeError crash. Thanks to Christopher Armstrong
3026 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3033 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3027 introduced recently (in 0.2.14pre37) with the fix to the eval
3034 introduced recently (in 0.2.14pre37) with the fix to the eval
3028 problem mentioned below.
3035 problem mentioned below.
3029
3036
3030 2002-10-17 Fernando Perez <fperez@colorado.edu>
3037 2002-10-17 Fernando Perez <fperez@colorado.edu>
3031
3038
3032 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3039 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3033 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3040 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3034
3041
3035 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3042 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3036 this function to fix a problem reported by Alex Schmolck. He saw
3043 this function to fix a problem reported by Alex Schmolck. He saw
3037 it with list comprehensions and generators, which were getting
3044 it with list comprehensions and generators, which were getting
3038 called twice. The real problem was an 'eval' call in testing for
3045 called twice. The real problem was an 'eval' call in testing for
3039 automagic which was evaluating the input line silently.
3046 automagic which was evaluating the input line silently.
3040
3047
3041 This is a potentially very nasty bug, if the input has side
3048 This is a potentially very nasty bug, if the input has side
3042 effects which must not be repeated. The code is much cleaner now,
3049 effects which must not be repeated. The code is much cleaner now,
3043 without any blanket 'except' left and with a regexp test for
3050 without any blanket 'except' left and with a regexp test for
3044 actual function names.
3051 actual function names.
3045
3052
3046 But an eval remains, which I'm not fully comfortable with. I just
3053 But an eval remains, which I'm not fully comfortable with. I just
3047 don't know how to find out if an expression could be a callable in
3054 don't know how to find out if an expression could be a callable in
3048 the user's namespace without doing an eval on the string. However
3055 the user's namespace without doing an eval on the string. However
3049 that string is now much more strictly checked so that no code
3056 that string is now much more strictly checked so that no code
3050 slips by, so the eval should only happen for things that can
3057 slips by, so the eval should only happen for things that can
3051 really be only function/method names.
3058 really be only function/method names.
3052
3059
3053 2002-10-15 Fernando Perez <fperez@colorado.edu>
3060 2002-10-15 Fernando Perez <fperez@colorado.edu>
3054
3061
3055 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3062 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3056 OSX information to main manual, removed README_Mac_OSX file from
3063 OSX information to main manual, removed README_Mac_OSX file from
3057 distribution. Also updated credits for recent additions.
3064 distribution. Also updated credits for recent additions.
3058
3065
3059 2002-10-10 Fernando Perez <fperez@colorado.edu>
3066 2002-10-10 Fernando Perez <fperez@colorado.edu>
3060
3067
3061 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3068 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3062 terminal-related issues. Many thanks to Andrea Riciputi
3069 terminal-related issues. Many thanks to Andrea Riciputi
3063 <andrea.riciputi-AT-libero.it> for writing it.
3070 <andrea.riciputi-AT-libero.it> for writing it.
3064
3071
3065 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3072 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3066 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3073 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3067
3074
3068 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3075 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3069 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3076 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3070 <syver-en-AT-online.no> who both submitted patches for this problem.
3077 <syver-en-AT-online.no> who both submitted patches for this problem.
3071
3078
3072 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3079 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3073 global embedding to make sure that things don't overwrite user
3080 global embedding to make sure that things don't overwrite user
3074 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3081 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3075
3082
3076 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3083 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3077 compatibility. Thanks to Hayden Callow
3084 compatibility. Thanks to Hayden Callow
3078 <h.callow-AT-elec.canterbury.ac.nz>
3085 <h.callow-AT-elec.canterbury.ac.nz>
3079
3086
3080 2002-10-04 Fernando Perez <fperez@colorado.edu>
3087 2002-10-04 Fernando Perez <fperez@colorado.edu>
3081
3088
3082 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3089 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3083 Gnuplot.File objects.
3090 Gnuplot.File objects.
3084
3091
3085 2002-07-23 Fernando Perez <fperez@colorado.edu>
3092 2002-07-23 Fernando Perez <fperez@colorado.edu>
3086
3093
3087 * IPython/genutils.py (timing): Added timings() and timing() for
3094 * IPython/genutils.py (timing): Added timings() and timing() for
3088 quick access to the most commonly needed data, the execution
3095 quick access to the most commonly needed data, the execution
3089 times. Old timing() renamed to timings_out().
3096 times. Old timing() renamed to timings_out().
3090
3097
3091 2002-07-18 Fernando Perez <fperez@colorado.edu>
3098 2002-07-18 Fernando Perez <fperez@colorado.edu>
3092
3099
3093 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3100 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3094 bug with nested instances disrupting the parent's tab completion.
3101 bug with nested instances disrupting the parent's tab completion.
3095
3102
3096 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3103 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3097 all_completions code to begin the emacs integration.
3104 all_completions code to begin the emacs integration.
3098
3105
3099 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3106 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3100 argument to allow titling individual arrays when plotting.
3107 argument to allow titling individual arrays when plotting.
3101
3108
3102 2002-07-15 Fernando Perez <fperez@colorado.edu>
3109 2002-07-15 Fernando Perez <fperez@colorado.edu>
3103
3110
3104 * setup.py (make_shortcut): changed to retrieve the value of
3111 * setup.py (make_shortcut): changed to retrieve the value of
3105 'Program Files' directory from the registry (this value changes in
3112 'Program Files' directory from the registry (this value changes in
3106 non-english versions of Windows). Thanks to Thomas Fanslau
3113 non-english versions of Windows). Thanks to Thomas Fanslau
3107 <tfanslau-AT-gmx.de> for the report.
3114 <tfanslau-AT-gmx.de> for the report.
3108
3115
3109 2002-07-10 Fernando Perez <fperez@colorado.edu>
3116 2002-07-10 Fernando Perez <fperez@colorado.edu>
3110
3117
3111 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3118 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3112 a bug in pdb, which crashes if a line with only whitespace is
3119 a bug in pdb, which crashes if a line with only whitespace is
3113 entered. Bug report submitted to sourceforge.
3120 entered. Bug report submitted to sourceforge.
3114
3121
3115 2002-07-09 Fernando Perez <fperez@colorado.edu>
3122 2002-07-09 Fernando Perez <fperez@colorado.edu>
3116
3123
3117 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3124 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3118 reporting exceptions (it's a bug in inspect.py, I just set a
3125 reporting exceptions (it's a bug in inspect.py, I just set a
3119 workaround).
3126 workaround).
3120
3127
3121 2002-07-08 Fernando Perez <fperez@colorado.edu>
3128 2002-07-08 Fernando Perez <fperez@colorado.edu>
3122
3129
3123 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3130 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3124 __IPYTHON__ in __builtins__ to show up in user_ns.
3131 __IPYTHON__ in __builtins__ to show up in user_ns.
3125
3132
3126 2002-07-03 Fernando Perez <fperez@colorado.edu>
3133 2002-07-03 Fernando Perez <fperez@colorado.edu>
3127
3134
3128 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3135 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3129 name from @gp_set_instance to @gp_set_default.
3136 name from @gp_set_instance to @gp_set_default.
3130
3137
3131 * IPython/ipmaker.py (make_IPython): default editor value set to
3138 * IPython/ipmaker.py (make_IPython): default editor value set to
3132 '0' (a string), to match the rc file. Otherwise will crash when
3139 '0' (a string), to match the rc file. Otherwise will crash when
3133 .strip() is called on it.
3140 .strip() is called on it.
3134
3141
3135
3142
3136 2002-06-28 Fernando Perez <fperez@colorado.edu>
3143 2002-06-28 Fernando Perez <fperez@colorado.edu>
3137
3144
3138 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3145 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3139 of files in current directory when a file is executed via
3146 of files in current directory when a file is executed via
3140 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3147 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3141
3148
3142 * setup.py (manfiles): fix for rpm builds, submitted by RA
3149 * setup.py (manfiles): fix for rpm builds, submitted by RA
3143 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3150 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3144
3151
3145 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3152 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3146 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3153 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3147 string!). A. Schmolck caught this one.
3154 string!). A. Schmolck caught this one.
3148
3155
3149 2002-06-27 Fernando Perez <fperez@colorado.edu>
3156 2002-06-27 Fernando Perez <fperez@colorado.edu>
3150
3157
3151 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3158 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3152 defined files at the cmd line. __name__ wasn't being set to
3159 defined files at the cmd line. __name__ wasn't being set to
3153 __main__.
3160 __main__.
3154
3161
3155 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3162 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3156 regular lists and tuples besides Numeric arrays.
3163 regular lists and tuples besides Numeric arrays.
3157
3164
3158 * IPython/Prompts.py (CachedOutput.__call__): Added output
3165 * IPython/Prompts.py (CachedOutput.__call__): Added output
3159 supression for input ending with ';'. Similar to Mathematica and
3166 supression for input ending with ';'. Similar to Mathematica and
3160 Matlab. The _* vars and Out[] list are still updated, just like
3167 Matlab. The _* vars and Out[] list are still updated, just like
3161 Mathematica behaves.
3168 Mathematica behaves.
3162
3169
3163 2002-06-25 Fernando Perez <fperez@colorado.edu>
3170 2002-06-25 Fernando Perez <fperez@colorado.edu>
3164
3171
3165 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3172 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3166 .ini extensions for profiels under Windows.
3173 .ini extensions for profiels under Windows.
3167
3174
3168 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3175 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3169 string form. Fix contributed by Alexander Schmolck
3176 string form. Fix contributed by Alexander Schmolck
3170 <a.schmolck-AT-gmx.net>
3177 <a.schmolck-AT-gmx.net>
3171
3178
3172 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3179 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3173 pre-configured Gnuplot instance.
3180 pre-configured Gnuplot instance.
3174
3181
3175 2002-06-21 Fernando Perez <fperez@colorado.edu>
3182 2002-06-21 Fernando Perez <fperez@colorado.edu>
3176
3183
3177 * IPython/numutils.py (exp_safe): new function, works around the
3184 * IPython/numutils.py (exp_safe): new function, works around the
3178 underflow problems in Numeric.
3185 underflow problems in Numeric.
3179 (log2): New fn. Safe log in base 2: returns exact integer answer
3186 (log2): New fn. Safe log in base 2: returns exact integer answer
3180 for exact integer powers of 2.
3187 for exact integer powers of 2.
3181
3188
3182 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3189 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3183 properly.
3190 properly.
3184
3191
3185 2002-06-20 Fernando Perez <fperez@colorado.edu>
3192 2002-06-20 Fernando Perez <fperez@colorado.edu>
3186
3193
3187 * IPython/genutils.py (timing): new function like
3194 * IPython/genutils.py (timing): new function like
3188 Mathematica's. Similar to time_test, but returns more info.
3195 Mathematica's. Similar to time_test, but returns more info.
3189
3196
3190 2002-06-18 Fernando Perez <fperez@colorado.edu>
3197 2002-06-18 Fernando Perez <fperez@colorado.edu>
3191
3198
3192 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3199 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3193 according to Mike Heeter's suggestions.
3200 according to Mike Heeter's suggestions.
3194
3201
3195 2002-06-16 Fernando Perez <fperez@colorado.edu>
3202 2002-06-16 Fernando Perez <fperez@colorado.edu>
3196
3203
3197 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3204 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3198 system. GnuplotMagic is gone as a user-directory option. New files
3205 system. GnuplotMagic is gone as a user-directory option. New files
3199 make it easier to use all the gnuplot stuff both from external
3206 make it easier to use all the gnuplot stuff both from external
3200 programs as well as from IPython. Had to rewrite part of
3207 programs as well as from IPython. Had to rewrite part of
3201 hardcopy() b/c of a strange bug: often the ps files simply don't
3208 hardcopy() b/c of a strange bug: often the ps files simply don't
3202 get created, and require a repeat of the command (often several
3209 get created, and require a repeat of the command (often several
3203 times).
3210 times).
3204
3211
3205 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3212 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3206 resolve output channel at call time, so that if sys.stderr has
3213 resolve output channel at call time, so that if sys.stderr has
3207 been redirected by user this gets honored.
3214 been redirected by user this gets honored.
3208
3215
3209 2002-06-13 Fernando Perez <fperez@colorado.edu>
3216 2002-06-13 Fernando Perez <fperez@colorado.edu>
3210
3217
3211 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3218 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3212 IPShell. Kept a copy with the old names to avoid breaking people's
3219 IPShell. Kept a copy with the old names to avoid breaking people's
3213 embedded code.
3220 embedded code.
3214
3221
3215 * IPython/ipython: simplified it to the bare minimum after
3222 * IPython/ipython: simplified it to the bare minimum after
3216 Holger's suggestions. Added info about how to use it in
3223 Holger's suggestions. Added info about how to use it in
3217 PYTHONSTARTUP.
3224 PYTHONSTARTUP.
3218
3225
3219 * IPython/Shell.py (IPythonShell): changed the options passing
3226 * IPython/Shell.py (IPythonShell): changed the options passing
3220 from a string with funky %s replacements to a straight list. Maybe
3227 from a string with funky %s replacements to a straight list. Maybe
3221 a bit more typing, but it follows sys.argv conventions, so there's
3228 a bit more typing, but it follows sys.argv conventions, so there's
3222 less special-casing to remember.
3229 less special-casing to remember.
3223
3230
3224 2002-06-12 Fernando Perez <fperez@colorado.edu>
3231 2002-06-12 Fernando Perez <fperez@colorado.edu>
3225
3232
3226 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3233 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3227 command. Thanks to a suggestion by Mike Heeter.
3234 command. Thanks to a suggestion by Mike Heeter.
3228 (Magic.magic_pfile): added behavior to look at filenames if given
3235 (Magic.magic_pfile): added behavior to look at filenames if given
3229 arg is not a defined object.
3236 arg is not a defined object.
3230 (Magic.magic_save): New @save function to save code snippets. Also
3237 (Magic.magic_save): New @save function to save code snippets. Also
3231 a Mike Heeter idea.
3238 a Mike Heeter idea.
3232
3239
3233 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3240 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3234 plot() and replot(). Much more convenient now, especially for
3241 plot() and replot(). Much more convenient now, especially for
3235 interactive use.
3242 interactive use.
3236
3243
3237 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3244 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3238 filenames.
3245 filenames.
3239
3246
3240 2002-06-02 Fernando Perez <fperez@colorado.edu>
3247 2002-06-02 Fernando Perez <fperez@colorado.edu>
3241
3248
3242 * IPython/Struct.py (Struct.__init__): modified to admit
3249 * IPython/Struct.py (Struct.__init__): modified to admit
3243 initialization via another struct.
3250 initialization via another struct.
3244
3251
3245 * IPython/genutils.py (SystemExec.__init__): New stateful
3252 * IPython/genutils.py (SystemExec.__init__): New stateful
3246 interface to xsys and bq. Useful for writing system scripts.
3253 interface to xsys and bq. Useful for writing system scripts.
3247
3254
3248 2002-05-30 Fernando Perez <fperez@colorado.edu>
3255 2002-05-30 Fernando Perez <fperez@colorado.edu>
3249
3256
3250 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3257 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3251 documents. This will make the user download smaller (it's getting
3258 documents. This will make the user download smaller (it's getting
3252 too big).
3259 too big).
3253
3260
3254 2002-05-29 Fernando Perez <fperez@colorado.edu>
3261 2002-05-29 Fernando Perez <fperez@colorado.edu>
3255
3262
3256 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3263 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3257 fix problems with shelve and pickle. Seems to work, but I don't
3264 fix problems with shelve and pickle. Seems to work, but I don't
3258 know if corner cases break it. Thanks to Mike Heeter
3265 know if corner cases break it. Thanks to Mike Heeter
3259 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3266 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3260
3267
3261 2002-05-24 Fernando Perez <fperez@colorado.edu>
3268 2002-05-24 Fernando Perez <fperez@colorado.edu>
3262
3269
3263 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3270 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3264 macros having broken.
3271 macros having broken.
3265
3272
3266 2002-05-21 Fernando Perez <fperez@colorado.edu>
3273 2002-05-21 Fernando Perez <fperez@colorado.edu>
3267
3274
3268 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3275 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3269 introduced logging bug: all history before logging started was
3276 introduced logging bug: all history before logging started was
3270 being written one character per line! This came from the redesign
3277 being written one character per line! This came from the redesign
3271 of the input history as a special list which slices to strings,
3278 of the input history as a special list which slices to strings,
3272 not to lists.
3279 not to lists.
3273
3280
3274 2002-05-20 Fernando Perez <fperez@colorado.edu>
3281 2002-05-20 Fernando Perez <fperez@colorado.edu>
3275
3282
3276 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3283 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3277 be an attribute of all classes in this module. The design of these
3284 be an attribute of all classes in this module. The design of these
3278 classes needs some serious overhauling.
3285 classes needs some serious overhauling.
3279
3286
3280 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3287 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3281 which was ignoring '_' in option names.
3288 which was ignoring '_' in option names.
3282
3289
3283 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3290 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3284 'Verbose_novars' to 'Context' and made it the new default. It's a
3291 'Verbose_novars' to 'Context' and made it the new default. It's a
3285 bit more readable and also safer than verbose.
3292 bit more readable and also safer than verbose.
3286
3293
3287 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3294 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3288 triple-quoted strings.
3295 triple-quoted strings.
3289
3296
3290 * IPython/OInspect.py (__all__): new module exposing the object
3297 * IPython/OInspect.py (__all__): new module exposing the object
3291 introspection facilities. Now the corresponding magics are dummy
3298 introspection facilities. Now the corresponding magics are dummy
3292 wrappers around this. Having this module will make it much easier
3299 wrappers around this. Having this module will make it much easier
3293 to put these functions into our modified pdb.
3300 to put these functions into our modified pdb.
3294 This new object inspector system uses the new colorizing module,
3301 This new object inspector system uses the new colorizing module,
3295 so source code and other things are nicely syntax highlighted.
3302 so source code and other things are nicely syntax highlighted.
3296
3303
3297 2002-05-18 Fernando Perez <fperez@colorado.edu>
3304 2002-05-18 Fernando Perez <fperez@colorado.edu>
3298
3305
3299 * IPython/ColorANSI.py: Split the coloring tools into a separate
3306 * IPython/ColorANSI.py: Split the coloring tools into a separate
3300 module so I can use them in other code easier (they were part of
3307 module so I can use them in other code easier (they were part of
3301 ultraTB).
3308 ultraTB).
3302
3309
3303 2002-05-17 Fernando Perez <fperez@colorado.edu>
3310 2002-05-17 Fernando Perez <fperez@colorado.edu>
3304
3311
3305 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3312 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3306 fixed it to set the global 'g' also to the called instance, as
3313 fixed it to set the global 'g' also to the called instance, as
3307 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3314 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3308 user's 'g' variables).
3315 user's 'g' variables).
3309
3316
3310 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3317 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3311 global variables (aliases to _ih,_oh) so that users which expect
3318 global variables (aliases to _ih,_oh) so that users which expect
3312 In[5] or Out[7] to work aren't unpleasantly surprised.
3319 In[5] or Out[7] to work aren't unpleasantly surprised.
3313 (InputList.__getslice__): new class to allow executing slices of
3320 (InputList.__getslice__): new class to allow executing slices of
3314 input history directly. Very simple class, complements the use of
3321 input history directly. Very simple class, complements the use of
3315 macros.
3322 macros.
3316
3323
3317 2002-05-16 Fernando Perez <fperez@colorado.edu>
3324 2002-05-16 Fernando Perez <fperez@colorado.edu>
3318
3325
3319 * setup.py (docdirbase): make doc directory be just doc/IPython
3326 * setup.py (docdirbase): make doc directory be just doc/IPython
3320 without version numbers, it will reduce clutter for users.
3327 without version numbers, it will reduce clutter for users.
3321
3328
3322 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3329 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3323 execfile call to prevent possible memory leak. See for details:
3330 execfile call to prevent possible memory leak. See for details:
3324 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3331 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3325
3332
3326 2002-05-15 Fernando Perez <fperez@colorado.edu>
3333 2002-05-15 Fernando Perez <fperez@colorado.edu>
3327
3334
3328 * IPython/Magic.py (Magic.magic_psource): made the object
3335 * IPython/Magic.py (Magic.magic_psource): made the object
3329 introspection names be more standard: pdoc, pdef, pfile and
3336 introspection names be more standard: pdoc, pdef, pfile and
3330 psource. They all print/page their output, and it makes
3337 psource. They all print/page their output, and it makes
3331 remembering them easier. Kept old names for compatibility as
3338 remembering them easier. Kept old names for compatibility as
3332 aliases.
3339 aliases.
3333
3340
3334 2002-05-14 Fernando Perez <fperez@colorado.edu>
3341 2002-05-14 Fernando Perez <fperez@colorado.edu>
3335
3342
3336 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3343 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3337 what the mouse problem was. The trick is to use gnuplot with temp
3344 what the mouse problem was. The trick is to use gnuplot with temp
3338 files and NOT with pipes (for data communication), because having
3345 files and NOT with pipes (for data communication), because having
3339 both pipes and the mouse on is bad news.
3346 both pipes and the mouse on is bad news.
3340
3347
3341 2002-05-13 Fernando Perez <fperez@colorado.edu>
3348 2002-05-13 Fernando Perez <fperez@colorado.edu>
3342
3349
3343 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3350 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3344 bug. Information would be reported about builtins even when
3351 bug. Information would be reported about builtins even when
3345 user-defined functions overrode them.
3352 user-defined functions overrode them.
3346
3353
3347 2002-05-11 Fernando Perez <fperez@colorado.edu>
3354 2002-05-11 Fernando Perez <fperez@colorado.edu>
3348
3355
3349 * IPython/__init__.py (__all__): removed FlexCompleter from
3356 * IPython/__init__.py (__all__): removed FlexCompleter from
3350 __all__ so that things don't fail in platforms without readline.
3357 __all__ so that things don't fail in platforms without readline.
3351
3358
3352 2002-05-10 Fernando Perez <fperez@colorado.edu>
3359 2002-05-10 Fernando Perez <fperez@colorado.edu>
3353
3360
3354 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3361 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3355 it requires Numeric, effectively making Numeric a dependency for
3362 it requires Numeric, effectively making Numeric a dependency for
3356 IPython.
3363 IPython.
3357
3364
3358 * Released 0.2.13
3365 * Released 0.2.13
3359
3366
3360 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3367 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3361 profiler interface. Now all the major options from the profiler
3368 profiler interface. Now all the major options from the profiler
3362 module are directly supported in IPython, both for single
3369 module are directly supported in IPython, both for single
3363 expressions (@prun) and for full programs (@run -p).
3370 expressions (@prun) and for full programs (@run -p).
3364
3371
3365 2002-05-09 Fernando Perez <fperez@colorado.edu>
3372 2002-05-09 Fernando Perez <fperez@colorado.edu>
3366
3373
3367 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3374 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3368 magic properly formatted for screen.
3375 magic properly formatted for screen.
3369
3376
3370 * setup.py (make_shortcut): Changed things to put pdf version in
3377 * setup.py (make_shortcut): Changed things to put pdf version in
3371 doc/ instead of doc/manual (had to change lyxport a bit).
3378 doc/ instead of doc/manual (had to change lyxport a bit).
3372
3379
3373 * IPython/Magic.py (Profile.string_stats): made profile runs go
3380 * IPython/Magic.py (Profile.string_stats): made profile runs go
3374 through pager (they are long and a pager allows searching, saving,
3381 through pager (they are long and a pager allows searching, saving,
3375 etc.)
3382 etc.)
3376
3383
3377 2002-05-08 Fernando Perez <fperez@colorado.edu>
3384 2002-05-08 Fernando Perez <fperez@colorado.edu>
3378
3385
3379 * Released 0.2.12
3386 * Released 0.2.12
3380
3387
3381 2002-05-06 Fernando Perez <fperez@colorado.edu>
3388 2002-05-06 Fernando Perez <fperez@colorado.edu>
3382
3389
3383 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3390 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3384 introduced); 'hist n1 n2' was broken.
3391 introduced); 'hist n1 n2' was broken.
3385 (Magic.magic_pdb): added optional on/off arguments to @pdb
3392 (Magic.magic_pdb): added optional on/off arguments to @pdb
3386 (Magic.magic_run): added option -i to @run, which executes code in
3393 (Magic.magic_run): added option -i to @run, which executes code in
3387 the IPython namespace instead of a clean one. Also added @irun as
3394 the IPython namespace instead of a clean one. Also added @irun as
3388 an alias to @run -i.
3395 an alias to @run -i.
3389
3396
3390 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3397 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3391 fixed (it didn't really do anything, the namespaces were wrong).
3398 fixed (it didn't really do anything, the namespaces were wrong).
3392
3399
3393 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3400 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3394
3401
3395 * IPython/__init__.py (__all__): Fixed package namespace, now
3402 * IPython/__init__.py (__all__): Fixed package namespace, now
3396 'import IPython' does give access to IPython.<all> as
3403 'import IPython' does give access to IPython.<all> as
3397 expected. Also renamed __release__ to Release.
3404 expected. Also renamed __release__ to Release.
3398
3405
3399 * IPython/Debugger.py (__license__): created new Pdb class which
3406 * IPython/Debugger.py (__license__): created new Pdb class which
3400 functions like a drop-in for the normal pdb.Pdb but does NOT
3407 functions like a drop-in for the normal pdb.Pdb but does NOT
3401 import readline by default. This way it doesn't muck up IPython's
3408 import readline by default. This way it doesn't muck up IPython's
3402 readline handling, and now tab-completion finally works in the
3409 readline handling, and now tab-completion finally works in the
3403 debugger -- sort of. It completes things globally visible, but the
3410 debugger -- sort of. It completes things globally visible, but the
3404 completer doesn't track the stack as pdb walks it. That's a bit
3411 completer doesn't track the stack as pdb walks it. That's a bit
3405 tricky, and I'll have to implement it later.
3412 tricky, and I'll have to implement it later.
3406
3413
3407 2002-05-05 Fernando Perez <fperez@colorado.edu>
3414 2002-05-05 Fernando Perez <fperez@colorado.edu>
3408
3415
3409 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3416 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3410 magic docstrings when printed via ? (explicit \'s were being
3417 magic docstrings when printed via ? (explicit \'s were being
3411 printed).
3418 printed).
3412
3419
3413 * IPython/ipmaker.py (make_IPython): fixed namespace
3420 * IPython/ipmaker.py (make_IPython): fixed namespace
3414 identification bug. Now variables loaded via logs or command-line
3421 identification bug. Now variables loaded via logs or command-line
3415 files are recognized in the interactive namespace by @who.
3422 files are recognized in the interactive namespace by @who.
3416
3423
3417 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3424 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3418 log replay system stemming from the string form of Structs.
3425 log replay system stemming from the string form of Structs.
3419
3426
3420 * IPython/Magic.py (Macro.__init__): improved macros to properly
3427 * IPython/Magic.py (Macro.__init__): improved macros to properly
3421 handle magic commands in them.
3428 handle magic commands in them.
3422 (Magic.magic_logstart): usernames are now expanded so 'logstart
3429 (Magic.magic_logstart): usernames are now expanded so 'logstart
3423 ~/mylog' now works.
3430 ~/mylog' now works.
3424
3431
3425 * IPython/iplib.py (complete): fixed bug where paths starting with
3432 * IPython/iplib.py (complete): fixed bug where paths starting with
3426 '/' would be completed as magic names.
3433 '/' would be completed as magic names.
3427
3434
3428 2002-05-04 Fernando Perez <fperez@colorado.edu>
3435 2002-05-04 Fernando Perez <fperez@colorado.edu>
3429
3436
3430 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3437 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3431 allow running full programs under the profiler's control.
3438 allow running full programs under the profiler's control.
3432
3439
3433 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3440 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3434 mode to report exceptions verbosely but without formatting
3441 mode to report exceptions verbosely but without formatting
3435 variables. This addresses the issue of ipython 'freezing' (it's
3442 variables. This addresses the issue of ipython 'freezing' (it's
3436 not frozen, but caught in an expensive formatting loop) when huge
3443 not frozen, but caught in an expensive formatting loop) when huge
3437 variables are in the context of an exception.
3444 variables are in the context of an exception.
3438 (VerboseTB.text): Added '--->' markers at line where exception was
3445 (VerboseTB.text): Added '--->' markers at line where exception was
3439 triggered. Much clearer to read, especially in NoColor modes.
3446 triggered. Much clearer to read, especially in NoColor modes.
3440
3447
3441 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3448 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3442 implemented in reverse when changing to the new parse_options().
3449 implemented in reverse when changing to the new parse_options().
3443
3450
3444 2002-05-03 Fernando Perez <fperez@colorado.edu>
3451 2002-05-03 Fernando Perez <fperez@colorado.edu>
3445
3452
3446 * IPython/Magic.py (Magic.parse_options): new function so that
3453 * IPython/Magic.py (Magic.parse_options): new function so that
3447 magics can parse options easier.
3454 magics can parse options easier.
3448 (Magic.magic_prun): new function similar to profile.run(),
3455 (Magic.magic_prun): new function similar to profile.run(),
3449 suggested by Chris Hart.
3456 suggested by Chris Hart.
3450 (Magic.magic_cd): fixed behavior so that it only changes if
3457 (Magic.magic_cd): fixed behavior so that it only changes if
3451 directory actually is in history.
3458 directory actually is in history.
3452
3459
3453 * IPython/usage.py (__doc__): added information about potential
3460 * IPython/usage.py (__doc__): added information about potential
3454 slowness of Verbose exception mode when there are huge data
3461 slowness of Verbose exception mode when there are huge data
3455 structures to be formatted (thanks to Archie Paulson).
3462 structures to be formatted (thanks to Archie Paulson).
3456
3463
3457 * IPython/ipmaker.py (make_IPython): Changed default logging
3464 * IPython/ipmaker.py (make_IPython): Changed default logging
3458 (when simply called with -log) to use curr_dir/ipython.log in
3465 (when simply called with -log) to use curr_dir/ipython.log in
3459 rotate mode. Fixed crash which was occuring with -log before
3466 rotate mode. Fixed crash which was occuring with -log before
3460 (thanks to Jim Boyle).
3467 (thanks to Jim Boyle).
3461
3468
3462 2002-05-01 Fernando Perez <fperez@colorado.edu>
3469 2002-05-01 Fernando Perez <fperez@colorado.edu>
3463
3470
3464 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3471 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3465 was nasty -- though somewhat of a corner case).
3472 was nasty -- though somewhat of a corner case).
3466
3473
3467 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3474 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3468 text (was a bug).
3475 text (was a bug).
3469
3476
3470 2002-04-30 Fernando Perez <fperez@colorado.edu>
3477 2002-04-30 Fernando Perez <fperez@colorado.edu>
3471
3478
3472 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3479 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3473 a print after ^D or ^C from the user so that the In[] prompt
3480 a print after ^D or ^C from the user so that the In[] prompt
3474 doesn't over-run the gnuplot one.
3481 doesn't over-run the gnuplot one.
3475
3482
3476 2002-04-29 Fernando Perez <fperez@colorado.edu>
3483 2002-04-29 Fernando Perez <fperez@colorado.edu>
3477
3484
3478 * Released 0.2.10
3485 * Released 0.2.10
3479
3486
3480 * IPython/__release__.py (version): get date dynamically.
3487 * IPython/__release__.py (version): get date dynamically.
3481
3488
3482 * Misc. documentation updates thanks to Arnd's comments. Also ran
3489 * Misc. documentation updates thanks to Arnd's comments. Also ran
3483 a full spellcheck on the manual (hadn't been done in a while).
3490 a full spellcheck on the manual (hadn't been done in a while).
3484
3491
3485 2002-04-27 Fernando Perez <fperez@colorado.edu>
3492 2002-04-27 Fernando Perez <fperez@colorado.edu>
3486
3493
3487 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3494 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3488 starting a log in mid-session would reset the input history list.
3495 starting a log in mid-session would reset the input history list.
3489
3496
3490 2002-04-26 Fernando Perez <fperez@colorado.edu>
3497 2002-04-26 Fernando Perez <fperez@colorado.edu>
3491
3498
3492 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3499 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3493 all files were being included in an update. Now anything in
3500 all files were being included in an update. Now anything in
3494 UserConfig that matches [A-Za-z]*.py will go (this excludes
3501 UserConfig that matches [A-Za-z]*.py will go (this excludes
3495 __init__.py)
3502 __init__.py)
3496
3503
3497 2002-04-25 Fernando Perez <fperez@colorado.edu>
3504 2002-04-25 Fernando Perez <fperez@colorado.edu>
3498
3505
3499 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3506 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3500 to __builtins__ so that any form of embedded or imported code can
3507 to __builtins__ so that any form of embedded or imported code can
3501 test for being inside IPython.
3508 test for being inside IPython.
3502
3509
3503 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3510 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3504 changed to GnuplotMagic because it's now an importable module,
3511 changed to GnuplotMagic because it's now an importable module,
3505 this makes the name follow that of the standard Gnuplot module.
3512 this makes the name follow that of the standard Gnuplot module.
3506 GnuplotMagic can now be loaded at any time in mid-session.
3513 GnuplotMagic can now be loaded at any time in mid-session.
3507
3514
3508 2002-04-24 Fernando Perez <fperez@colorado.edu>
3515 2002-04-24 Fernando Perez <fperez@colorado.edu>
3509
3516
3510 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3517 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3511 the globals (IPython has its own namespace) and the
3518 the globals (IPython has its own namespace) and the
3512 PhysicalQuantity stuff is much better anyway.
3519 PhysicalQuantity stuff is much better anyway.
3513
3520
3514 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3521 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3515 embedding example to standard user directory for
3522 embedding example to standard user directory for
3516 distribution. Also put it in the manual.
3523 distribution. Also put it in the manual.
3517
3524
3518 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3525 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3519 instance as first argument (so it doesn't rely on some obscure
3526 instance as first argument (so it doesn't rely on some obscure
3520 hidden global).
3527 hidden global).
3521
3528
3522 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3529 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3523 delimiters. While it prevents ().TAB from working, it allows
3530 delimiters. While it prevents ().TAB from working, it allows
3524 completions in open (... expressions. This is by far a more common
3531 completions in open (... expressions. This is by far a more common
3525 case.
3532 case.
3526
3533
3527 2002-04-23 Fernando Perez <fperez@colorado.edu>
3534 2002-04-23 Fernando Perez <fperez@colorado.edu>
3528
3535
3529 * IPython/Extensions/InterpreterPasteInput.py: new
3536 * IPython/Extensions/InterpreterPasteInput.py: new
3530 syntax-processing module for pasting lines with >>> or ... at the
3537 syntax-processing module for pasting lines with >>> or ... at the
3531 start.
3538 start.
3532
3539
3533 * IPython/Extensions/PhysicalQ_Interactive.py
3540 * IPython/Extensions/PhysicalQ_Interactive.py
3534 (PhysicalQuantityInteractive.__int__): fixed to work with either
3541 (PhysicalQuantityInteractive.__int__): fixed to work with either
3535 Numeric or math.
3542 Numeric or math.
3536
3543
3537 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3544 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3538 provided profiles. Now we have:
3545 provided profiles. Now we have:
3539 -math -> math module as * and cmath with its own namespace.
3546 -math -> math module as * and cmath with its own namespace.
3540 -numeric -> Numeric as *, plus gnuplot & grace
3547 -numeric -> Numeric as *, plus gnuplot & grace
3541 -physics -> same as before
3548 -physics -> same as before
3542
3549
3543 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3550 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3544 user-defined magics wouldn't be found by @magic if they were
3551 user-defined magics wouldn't be found by @magic if they were
3545 defined as class methods. Also cleaned up the namespace search
3552 defined as class methods. Also cleaned up the namespace search
3546 logic and the string building (to use %s instead of many repeated
3553 logic and the string building (to use %s instead of many repeated
3547 string adds).
3554 string adds).
3548
3555
3549 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3556 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3550 of user-defined magics to operate with class methods (cleaner, in
3557 of user-defined magics to operate with class methods (cleaner, in
3551 line with the gnuplot code).
3558 line with the gnuplot code).
3552
3559
3553 2002-04-22 Fernando Perez <fperez@colorado.edu>
3560 2002-04-22 Fernando Perez <fperez@colorado.edu>
3554
3561
3555 * setup.py: updated dependency list so that manual is updated when
3562 * setup.py: updated dependency list so that manual is updated when
3556 all included files change.
3563 all included files change.
3557
3564
3558 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3565 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3559 the delimiter removal option (the fix is ugly right now).
3566 the delimiter removal option (the fix is ugly right now).
3560
3567
3561 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3568 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3562 all of the math profile (quicker loading, no conflict between
3569 all of the math profile (quicker loading, no conflict between
3563 g-9.8 and g-gnuplot).
3570 g-9.8 and g-gnuplot).
3564
3571
3565 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3572 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3566 name of post-mortem files to IPython_crash_report.txt.
3573 name of post-mortem files to IPython_crash_report.txt.
3567
3574
3568 * Cleanup/update of the docs. Added all the new readline info and
3575 * Cleanup/update of the docs. Added all the new readline info and
3569 formatted all lists as 'real lists'.
3576 formatted all lists as 'real lists'.
3570
3577
3571 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3578 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3572 tab-completion options, since the full readline parse_and_bind is
3579 tab-completion options, since the full readline parse_and_bind is
3573 now accessible.
3580 now accessible.
3574
3581
3575 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3582 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3576 handling of readline options. Now users can specify any string to
3583 handling of readline options. Now users can specify any string to
3577 be passed to parse_and_bind(), as well as the delimiters to be
3584 be passed to parse_and_bind(), as well as the delimiters to be
3578 removed.
3585 removed.
3579 (InteractiveShell.__init__): Added __name__ to the global
3586 (InteractiveShell.__init__): Added __name__ to the global
3580 namespace so that things like Itpl which rely on its existence
3587 namespace so that things like Itpl which rely on its existence
3581 don't crash.
3588 don't crash.
3582 (InteractiveShell._prefilter): Defined the default with a _ so
3589 (InteractiveShell._prefilter): Defined the default with a _ so
3583 that prefilter() is easier to override, while the default one
3590 that prefilter() is easier to override, while the default one
3584 remains available.
3591 remains available.
3585
3592
3586 2002-04-18 Fernando Perez <fperez@colorado.edu>
3593 2002-04-18 Fernando Perez <fperez@colorado.edu>
3587
3594
3588 * Added information about pdb in the docs.
3595 * Added information about pdb in the docs.
3589
3596
3590 2002-04-17 Fernando Perez <fperez@colorado.edu>
3597 2002-04-17 Fernando Perez <fperez@colorado.edu>
3591
3598
3592 * IPython/ipmaker.py (make_IPython): added rc_override option to
3599 * IPython/ipmaker.py (make_IPython): added rc_override option to
3593 allow passing config options at creation time which may override
3600 allow passing config options at creation time which may override
3594 anything set in the config files or command line. This is
3601 anything set in the config files or command line. This is
3595 particularly useful for configuring embedded instances.
3602 particularly useful for configuring embedded instances.
3596
3603
3597 2002-04-15 Fernando Perez <fperez@colorado.edu>
3604 2002-04-15 Fernando Perez <fperez@colorado.edu>
3598
3605
3599 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3606 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3600 crash embedded instances because of the input cache falling out of
3607 crash embedded instances because of the input cache falling out of
3601 sync with the output counter.
3608 sync with the output counter.
3602
3609
3603 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3610 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3604 mode which calls pdb after an uncaught exception in IPython itself.
3611 mode which calls pdb after an uncaught exception in IPython itself.
3605
3612
3606 2002-04-14 Fernando Perez <fperez@colorado.edu>
3613 2002-04-14 Fernando Perez <fperez@colorado.edu>
3607
3614
3608 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3615 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3609 readline, fix it back after each call.
3616 readline, fix it back after each call.
3610
3617
3611 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3618 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3612 method to force all access via __call__(), which guarantees that
3619 method to force all access via __call__(), which guarantees that
3613 traceback references are properly deleted.
3620 traceback references are properly deleted.
3614
3621
3615 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3622 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3616 improve printing when pprint is in use.
3623 improve printing when pprint is in use.
3617
3624
3618 2002-04-13 Fernando Perez <fperez@colorado.edu>
3625 2002-04-13 Fernando Perez <fperez@colorado.edu>
3619
3626
3620 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3627 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3621 exceptions aren't caught anymore. If the user triggers one, he
3628 exceptions aren't caught anymore. If the user triggers one, he
3622 should know why he's doing it and it should go all the way up,
3629 should know why he's doing it and it should go all the way up,
3623 just like any other exception. So now @abort will fully kill the
3630 just like any other exception. So now @abort will fully kill the
3624 embedded interpreter and the embedding code (unless that happens
3631 embedded interpreter and the embedding code (unless that happens
3625 to catch SystemExit).
3632 to catch SystemExit).
3626
3633
3627 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3634 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3628 and a debugger() method to invoke the interactive pdb debugger
3635 and a debugger() method to invoke the interactive pdb debugger
3629 after printing exception information. Also added the corresponding
3636 after printing exception information. Also added the corresponding
3630 -pdb option and @pdb magic to control this feature, and updated
3637 -pdb option and @pdb magic to control this feature, and updated
3631 the docs. After a suggestion from Christopher Hart
3638 the docs. After a suggestion from Christopher Hart
3632 (hart-AT-caltech.edu).
3639 (hart-AT-caltech.edu).
3633
3640
3634 2002-04-12 Fernando Perez <fperez@colorado.edu>
3641 2002-04-12 Fernando Perez <fperez@colorado.edu>
3635
3642
3636 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3643 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3637 the exception handlers defined by the user (not the CrashHandler)
3644 the exception handlers defined by the user (not the CrashHandler)
3638 so that user exceptions don't trigger an ipython bug report.
3645 so that user exceptions don't trigger an ipython bug report.
3639
3646
3640 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3647 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3641 configurable (it should have always been so).
3648 configurable (it should have always been so).
3642
3649
3643 2002-03-26 Fernando Perez <fperez@colorado.edu>
3650 2002-03-26 Fernando Perez <fperez@colorado.edu>
3644
3651
3645 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3652 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3646 and there to fix embedding namespace issues. This should all be
3653 and there to fix embedding namespace issues. This should all be
3647 done in a more elegant way.
3654 done in a more elegant way.
3648
3655
3649 2002-03-25 Fernando Perez <fperez@colorado.edu>
3656 2002-03-25 Fernando Perez <fperez@colorado.edu>
3650
3657
3651 * IPython/genutils.py (get_home_dir): Try to make it work under
3658 * IPython/genutils.py (get_home_dir): Try to make it work under
3652 win9x also.
3659 win9x also.
3653
3660
3654 2002-03-20 Fernando Perez <fperez@colorado.edu>
3661 2002-03-20 Fernando Perez <fperez@colorado.edu>
3655
3662
3656 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3663 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3657 sys.displayhook untouched upon __init__.
3664 sys.displayhook untouched upon __init__.
3658
3665
3659 2002-03-19 Fernando Perez <fperez@colorado.edu>
3666 2002-03-19 Fernando Perez <fperez@colorado.edu>
3660
3667
3661 * Released 0.2.9 (for embedding bug, basically).
3668 * Released 0.2.9 (for embedding bug, basically).
3662
3669
3663 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3670 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3664 exceptions so that enclosing shell's state can be restored.
3671 exceptions so that enclosing shell's state can be restored.
3665
3672
3666 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3673 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3667 naming conventions in the .ipython/ dir.
3674 naming conventions in the .ipython/ dir.
3668
3675
3669 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3676 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3670 from delimiters list so filenames with - in them get expanded.
3677 from delimiters list so filenames with - in them get expanded.
3671
3678
3672 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3679 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3673 sys.displayhook not being properly restored after an embedded call.
3680 sys.displayhook not being properly restored after an embedded call.
3674
3681
3675 2002-03-18 Fernando Perez <fperez@colorado.edu>
3682 2002-03-18 Fernando Perez <fperez@colorado.edu>
3676
3683
3677 * Released 0.2.8
3684 * Released 0.2.8
3678
3685
3679 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3686 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3680 some files weren't being included in a -upgrade.
3687 some files weren't being included in a -upgrade.
3681 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3688 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3682 on' so that the first tab completes.
3689 on' so that the first tab completes.
3683 (InteractiveShell.handle_magic): fixed bug with spaces around
3690 (InteractiveShell.handle_magic): fixed bug with spaces around
3684 quotes breaking many magic commands.
3691 quotes breaking many magic commands.
3685
3692
3686 * setup.py: added note about ignoring the syntax error messages at
3693 * setup.py: added note about ignoring the syntax error messages at
3687 installation.
3694 installation.
3688
3695
3689 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3696 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3690 streamlining the gnuplot interface, now there's only one magic @gp.
3697 streamlining the gnuplot interface, now there's only one magic @gp.
3691
3698
3692 2002-03-17 Fernando Perez <fperez@colorado.edu>
3699 2002-03-17 Fernando Perez <fperez@colorado.edu>
3693
3700
3694 * IPython/UserConfig/magic_gnuplot.py: new name for the
3701 * IPython/UserConfig/magic_gnuplot.py: new name for the
3695 example-magic_pm.py file. Much enhanced system, now with a shell
3702 example-magic_pm.py file. Much enhanced system, now with a shell
3696 for communicating directly with gnuplot, one command at a time.
3703 for communicating directly with gnuplot, one command at a time.
3697
3704
3698 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3705 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3699 setting __name__=='__main__'.
3706 setting __name__=='__main__'.
3700
3707
3701 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3708 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3702 mini-shell for accessing gnuplot from inside ipython. Should
3709 mini-shell for accessing gnuplot from inside ipython. Should
3703 extend it later for grace access too. Inspired by Arnd's
3710 extend it later for grace access too. Inspired by Arnd's
3704 suggestion.
3711 suggestion.
3705
3712
3706 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3713 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3707 calling magic functions with () in their arguments. Thanks to Arnd
3714 calling magic functions with () in their arguments. Thanks to Arnd
3708 Baecker for pointing this to me.
3715 Baecker for pointing this to me.
3709
3716
3710 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3717 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3711 infinitely for integer or complex arrays (only worked with floats).
3718 infinitely for integer or complex arrays (only worked with floats).
3712
3719
3713 2002-03-16 Fernando Perez <fperez@colorado.edu>
3720 2002-03-16 Fernando Perez <fperez@colorado.edu>
3714
3721
3715 * setup.py: Merged setup and setup_windows into a single script
3722 * setup.py: Merged setup and setup_windows into a single script
3716 which properly handles things for windows users.
3723 which properly handles things for windows users.
3717
3724
3718 2002-03-15 Fernando Perez <fperez@colorado.edu>
3725 2002-03-15 Fernando Perez <fperez@colorado.edu>
3719
3726
3720 * Big change to the manual: now the magics are all automatically
3727 * Big change to the manual: now the magics are all automatically
3721 documented. This information is generated from their docstrings
3728 documented. This information is generated from their docstrings
3722 and put in a latex file included by the manual lyx file. This way
3729 and put in a latex file included by the manual lyx file. This way
3723 we get always up to date information for the magics. The manual
3730 we get always up to date information for the magics. The manual
3724 now also has proper version information, also auto-synced.
3731 now also has proper version information, also auto-synced.
3725
3732
3726 For this to work, an undocumented --magic_docstrings option was added.
3733 For this to work, an undocumented --magic_docstrings option was added.
3727
3734
3728 2002-03-13 Fernando Perez <fperez@colorado.edu>
3735 2002-03-13 Fernando Perez <fperez@colorado.edu>
3729
3736
3730 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3737 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3731 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3738 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3732
3739
3733 2002-03-12 Fernando Perez <fperez@colorado.edu>
3740 2002-03-12 Fernando Perez <fperez@colorado.edu>
3734
3741
3735 * IPython/ultraTB.py (TermColors): changed color escapes again to
3742 * IPython/ultraTB.py (TermColors): changed color escapes again to
3736 fix the (old, reintroduced) line-wrapping bug. Basically, if
3743 fix the (old, reintroduced) line-wrapping bug. Basically, if
3737 \001..\002 aren't given in the color escapes, lines get wrapped
3744 \001..\002 aren't given in the color escapes, lines get wrapped
3738 weirdly. But giving those screws up old xterms and emacs terms. So
3745 weirdly. But giving those screws up old xterms and emacs terms. So
3739 I added some logic for emacs terms to be ok, but I can't identify old
3746 I added some logic for emacs terms to be ok, but I can't identify old
3740 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3747 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3741
3748
3742 2002-03-10 Fernando Perez <fperez@colorado.edu>
3749 2002-03-10 Fernando Perez <fperez@colorado.edu>
3743
3750
3744 * IPython/usage.py (__doc__): Various documentation cleanups and
3751 * IPython/usage.py (__doc__): Various documentation cleanups and
3745 updates, both in usage docstrings and in the manual.
3752 updates, both in usage docstrings and in the manual.
3746
3753
3747 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3754 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3748 handling of caching. Set minimum acceptabe value for having a
3755 handling of caching. Set minimum acceptabe value for having a
3749 cache at 20 values.
3756 cache at 20 values.
3750
3757
3751 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3758 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3752 install_first_time function to a method, renamed it and added an
3759 install_first_time function to a method, renamed it and added an
3753 'upgrade' mode. Now people can update their config directory with
3760 'upgrade' mode. Now people can update their config directory with
3754 a simple command line switch (-upgrade, also new).
3761 a simple command line switch (-upgrade, also new).
3755
3762
3756 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3763 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3757 @file (convenient for automagic users under Python >= 2.2).
3764 @file (convenient for automagic users under Python >= 2.2).
3758 Removed @files (it seemed more like a plural than an abbrev. of
3765 Removed @files (it seemed more like a plural than an abbrev. of
3759 'file show').
3766 'file show').
3760
3767
3761 * IPython/iplib.py (install_first_time): Fixed crash if there were
3768 * IPython/iplib.py (install_first_time): Fixed crash if there were
3762 backup files ('~') in .ipython/ install directory.
3769 backup files ('~') in .ipython/ install directory.
3763
3770
3764 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3771 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3765 system. Things look fine, but these changes are fairly
3772 system. Things look fine, but these changes are fairly
3766 intrusive. Test them for a few days.
3773 intrusive. Test them for a few days.
3767
3774
3768 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3775 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3769 the prompts system. Now all in/out prompt strings are user
3776 the prompts system. Now all in/out prompt strings are user
3770 controllable. This is particularly useful for embedding, as one
3777 controllable. This is particularly useful for embedding, as one
3771 can tag embedded instances with particular prompts.
3778 can tag embedded instances with particular prompts.
3772
3779
3773 Also removed global use of sys.ps1/2, which now allows nested
3780 Also removed global use of sys.ps1/2, which now allows nested
3774 embeddings without any problems. Added command-line options for
3781 embeddings without any problems. Added command-line options for
3775 the prompt strings.
3782 the prompt strings.
3776
3783
3777 2002-03-08 Fernando Perez <fperez@colorado.edu>
3784 2002-03-08 Fernando Perez <fperez@colorado.edu>
3778
3785
3779 * IPython/UserConfig/example-embed-short.py (ipshell): added
3786 * IPython/UserConfig/example-embed-short.py (ipshell): added
3780 example file with the bare minimum code for embedding.
3787 example file with the bare minimum code for embedding.
3781
3788
3782 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3789 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3783 functionality for the embeddable shell to be activated/deactivated
3790 functionality for the embeddable shell to be activated/deactivated
3784 either globally or at each call.
3791 either globally or at each call.
3785
3792
3786 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3793 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3787 rewriting the prompt with '--->' for auto-inputs with proper
3794 rewriting the prompt with '--->' for auto-inputs with proper
3788 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3795 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3789 this is handled by the prompts class itself, as it should.
3796 this is handled by the prompts class itself, as it should.
3790
3797
3791 2002-03-05 Fernando Perez <fperez@colorado.edu>
3798 2002-03-05 Fernando Perez <fperez@colorado.edu>
3792
3799
3793 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3800 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3794 @logstart to avoid name clashes with the math log function.
3801 @logstart to avoid name clashes with the math log function.
3795
3802
3796 * Big updates to X/Emacs section of the manual.
3803 * Big updates to X/Emacs section of the manual.
3797
3804
3798 * Removed ipython_emacs. Milan explained to me how to pass
3805 * Removed ipython_emacs. Milan explained to me how to pass
3799 arguments to ipython through Emacs. Some day I'm going to end up
3806 arguments to ipython through Emacs. Some day I'm going to end up
3800 learning some lisp...
3807 learning some lisp...
3801
3808
3802 2002-03-04 Fernando Perez <fperez@colorado.edu>
3809 2002-03-04 Fernando Perez <fperez@colorado.edu>
3803
3810
3804 * IPython/ipython_emacs: Created script to be used as the
3811 * IPython/ipython_emacs: Created script to be used as the
3805 py-python-command Emacs variable so we can pass IPython
3812 py-python-command Emacs variable so we can pass IPython
3806 parameters. I can't figure out how to tell Emacs directly to pass
3813 parameters. I can't figure out how to tell Emacs directly to pass
3807 parameters to IPython, so a dummy shell script will do it.
3814 parameters to IPython, so a dummy shell script will do it.
3808
3815
3809 Other enhancements made for things to work better under Emacs'
3816 Other enhancements made for things to work better under Emacs'
3810 various types of terminals. Many thanks to Milan Zamazal
3817 various types of terminals. Many thanks to Milan Zamazal
3811 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3818 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3812
3819
3813 2002-03-01 Fernando Perez <fperez@colorado.edu>
3820 2002-03-01 Fernando Perez <fperez@colorado.edu>
3814
3821
3815 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3822 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3816 that loading of readline is now optional. This gives better
3823 that loading of readline is now optional. This gives better
3817 control to emacs users.
3824 control to emacs users.
3818
3825
3819 * IPython/ultraTB.py (__date__): Modified color escape sequences
3826 * IPython/ultraTB.py (__date__): Modified color escape sequences
3820 and now things work fine under xterm and in Emacs' term buffers
3827 and now things work fine under xterm and in Emacs' term buffers
3821 (though not shell ones). Well, in emacs you get colors, but all
3828 (though not shell ones). Well, in emacs you get colors, but all
3822 seem to be 'light' colors (no difference between dark and light
3829 seem to be 'light' colors (no difference between dark and light
3823 ones). But the garbage chars are gone, and also in xterms. It
3830 ones). But the garbage chars are gone, and also in xterms. It
3824 seems that now I'm using 'cleaner' ansi sequences.
3831 seems that now I'm using 'cleaner' ansi sequences.
3825
3832
3826 2002-02-21 Fernando Perez <fperez@colorado.edu>
3833 2002-02-21 Fernando Perez <fperez@colorado.edu>
3827
3834
3828 * Released 0.2.7 (mainly to publish the scoping fix).
3835 * Released 0.2.7 (mainly to publish the scoping fix).
3829
3836
3830 * IPython/Logger.py (Logger.logstate): added. A corresponding
3837 * IPython/Logger.py (Logger.logstate): added. A corresponding
3831 @logstate magic was created.
3838 @logstate magic was created.
3832
3839
3833 * IPython/Magic.py: fixed nested scoping problem under Python
3840 * IPython/Magic.py: fixed nested scoping problem under Python
3834 2.1.x (automagic wasn't working).
3841 2.1.x (automagic wasn't working).
3835
3842
3836 2002-02-20 Fernando Perez <fperez@colorado.edu>
3843 2002-02-20 Fernando Perez <fperez@colorado.edu>
3837
3844
3838 * Released 0.2.6.
3845 * Released 0.2.6.
3839
3846
3840 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3847 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3841 option so that logs can come out without any headers at all.
3848 option so that logs can come out without any headers at all.
3842
3849
3843 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3850 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3844 SciPy.
3851 SciPy.
3845
3852
3846 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3853 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3847 that embedded IPython calls don't require vars() to be explicitly
3854 that embedded IPython calls don't require vars() to be explicitly
3848 passed. Now they are extracted from the caller's frame (code
3855 passed. Now they are extracted from the caller's frame (code
3849 snatched from Eric Jones' weave). Added better documentation to
3856 snatched from Eric Jones' weave). Added better documentation to
3850 the section on embedding and the example file.
3857 the section on embedding and the example file.
3851
3858
3852 * IPython/genutils.py (page): Changed so that under emacs, it just
3859 * IPython/genutils.py (page): Changed so that under emacs, it just
3853 prints the string. You can then page up and down in the emacs
3860 prints the string. You can then page up and down in the emacs
3854 buffer itself. This is how the builtin help() works.
3861 buffer itself. This is how the builtin help() works.
3855
3862
3856 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3863 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3857 macro scoping: macros need to be executed in the user's namespace
3864 macro scoping: macros need to be executed in the user's namespace
3858 to work as if they had been typed by the user.
3865 to work as if they had been typed by the user.
3859
3866
3860 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3867 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3861 execute automatically (no need to type 'exec...'). They then
3868 execute automatically (no need to type 'exec...'). They then
3862 behave like 'true macros'. The printing system was also modified
3869 behave like 'true macros'. The printing system was also modified
3863 for this to work.
3870 for this to work.
3864
3871
3865 2002-02-19 Fernando Perez <fperez@colorado.edu>
3872 2002-02-19 Fernando Perez <fperez@colorado.edu>
3866
3873
3867 * IPython/genutils.py (page_file): new function for paging files
3874 * IPython/genutils.py (page_file): new function for paging files
3868 in an OS-independent way. Also necessary for file viewing to work
3875 in an OS-independent way. Also necessary for file viewing to work
3869 well inside Emacs buffers.
3876 well inside Emacs buffers.
3870 (page): Added checks for being in an emacs buffer.
3877 (page): Added checks for being in an emacs buffer.
3871 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3878 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3872 same bug in iplib.
3879 same bug in iplib.
3873
3880
3874 2002-02-18 Fernando Perez <fperez@colorado.edu>
3881 2002-02-18 Fernando Perez <fperez@colorado.edu>
3875
3882
3876 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3883 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3877 of readline so that IPython can work inside an Emacs buffer.
3884 of readline so that IPython can work inside an Emacs buffer.
3878
3885
3879 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3886 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3880 method signatures (they weren't really bugs, but it looks cleaner
3887 method signatures (they weren't really bugs, but it looks cleaner
3881 and keeps PyChecker happy).
3888 and keeps PyChecker happy).
3882
3889
3883 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3890 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3884 for implementing various user-defined hooks. Currently only
3891 for implementing various user-defined hooks. Currently only
3885 display is done.
3892 display is done.
3886
3893
3887 * IPython/Prompts.py (CachedOutput._display): changed display
3894 * IPython/Prompts.py (CachedOutput._display): changed display
3888 functions so that they can be dynamically changed by users easily.
3895 functions so that they can be dynamically changed by users easily.
3889
3896
3890 * IPython/Extensions/numeric_formats.py (num_display): added an
3897 * IPython/Extensions/numeric_formats.py (num_display): added an
3891 extension for printing NumPy arrays in flexible manners. It
3898 extension for printing NumPy arrays in flexible manners. It
3892 doesn't do anything yet, but all the structure is in
3899 doesn't do anything yet, but all the structure is in
3893 place. Ultimately the plan is to implement output format control
3900 place. Ultimately the plan is to implement output format control
3894 like in Octave.
3901 like in Octave.
3895
3902
3896 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3903 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3897 methods are found at run-time by all the automatic machinery.
3904 methods are found at run-time by all the automatic machinery.
3898
3905
3899 2002-02-17 Fernando Perez <fperez@colorado.edu>
3906 2002-02-17 Fernando Perez <fperez@colorado.edu>
3900
3907
3901 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3908 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3902 whole file a little.
3909 whole file a little.
3903
3910
3904 * ToDo: closed this document. Now there's a new_design.lyx
3911 * ToDo: closed this document. Now there's a new_design.lyx
3905 document for all new ideas. Added making a pdf of it for the
3912 document for all new ideas. Added making a pdf of it for the
3906 end-user distro.
3913 end-user distro.
3907
3914
3908 * IPython/Logger.py (Logger.switch_log): Created this to replace
3915 * IPython/Logger.py (Logger.switch_log): Created this to replace
3909 logon() and logoff(). It also fixes a nasty crash reported by
3916 logon() and logoff(). It also fixes a nasty crash reported by
3910 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3917 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3911
3918
3912 * IPython/iplib.py (complete): got auto-completion to work with
3919 * IPython/iplib.py (complete): got auto-completion to work with
3913 automagic (I had wanted this for a long time).
3920 automagic (I had wanted this for a long time).
3914
3921
3915 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3922 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3916 to @file, since file() is now a builtin and clashes with automagic
3923 to @file, since file() is now a builtin and clashes with automagic
3917 for @file.
3924 for @file.
3918
3925
3919 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3926 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3920 of this was previously in iplib, which had grown to more than 2000
3927 of this was previously in iplib, which had grown to more than 2000
3921 lines, way too long. No new functionality, but it makes managing
3928 lines, way too long. No new functionality, but it makes managing
3922 the code a bit easier.
3929 the code a bit easier.
3923
3930
3924 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3931 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3925 information to crash reports.
3932 information to crash reports.
3926
3933
3927 2002-02-12 Fernando Perez <fperez@colorado.edu>
3934 2002-02-12 Fernando Perez <fperez@colorado.edu>
3928
3935
3929 * Released 0.2.5.
3936 * Released 0.2.5.
3930
3937
3931 2002-02-11 Fernando Perez <fperez@colorado.edu>
3938 2002-02-11 Fernando Perez <fperez@colorado.edu>
3932
3939
3933 * Wrote a relatively complete Windows installer. It puts
3940 * Wrote a relatively complete Windows installer. It puts
3934 everything in place, creates Start Menu entries and fixes the
3941 everything in place, creates Start Menu entries and fixes the
3935 color issues. Nothing fancy, but it works.
3942 color issues. Nothing fancy, but it works.
3936
3943
3937 2002-02-10 Fernando Perez <fperez@colorado.edu>
3944 2002-02-10 Fernando Perez <fperez@colorado.edu>
3938
3945
3939 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3946 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3940 os.path.expanduser() call so that we can type @run ~/myfile.py and
3947 os.path.expanduser() call so that we can type @run ~/myfile.py and
3941 have thigs work as expected.
3948 have thigs work as expected.
3942
3949
3943 * IPython/genutils.py (page): fixed exception handling so things
3950 * IPython/genutils.py (page): fixed exception handling so things
3944 work both in Unix and Windows correctly. Quitting a pager triggers
3951 work both in Unix and Windows correctly. Quitting a pager triggers
3945 an IOError/broken pipe in Unix, and in windows not finding a pager
3952 an IOError/broken pipe in Unix, and in windows not finding a pager
3946 is also an IOError, so I had to actually look at the return value
3953 is also an IOError, so I had to actually look at the return value
3947 of the exception, not just the exception itself. Should be ok now.
3954 of the exception, not just the exception itself. Should be ok now.
3948
3955
3949 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3956 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3950 modified to allow case-insensitive color scheme changes.
3957 modified to allow case-insensitive color scheme changes.
3951
3958
3952 2002-02-09 Fernando Perez <fperez@colorado.edu>
3959 2002-02-09 Fernando Perez <fperez@colorado.edu>
3953
3960
3954 * IPython/genutils.py (native_line_ends): new function to leave
3961 * IPython/genutils.py (native_line_ends): new function to leave
3955 user config files with os-native line-endings.
3962 user config files with os-native line-endings.
3956
3963
3957 * README and manual updates.
3964 * README and manual updates.
3958
3965
3959 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3966 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3960 instead of StringType to catch Unicode strings.
3967 instead of StringType to catch Unicode strings.
3961
3968
3962 * IPython/genutils.py (filefind): fixed bug for paths with
3969 * IPython/genutils.py (filefind): fixed bug for paths with
3963 embedded spaces (very common in Windows).
3970 embedded spaces (very common in Windows).
3964
3971
3965 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3972 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3966 files under Windows, so that they get automatically associated
3973 files under Windows, so that they get automatically associated
3967 with a text editor. Windows makes it a pain to handle
3974 with a text editor. Windows makes it a pain to handle
3968 extension-less files.
3975 extension-less files.
3969
3976
3970 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3977 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3971 warning about readline only occur for Posix. In Windows there's no
3978 warning about readline only occur for Posix. In Windows there's no
3972 way to get readline, so why bother with the warning.
3979 way to get readline, so why bother with the warning.
3973
3980
3974 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3981 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3975 for __str__ instead of dir(self), since dir() changed in 2.2.
3982 for __str__ instead of dir(self), since dir() changed in 2.2.
3976
3983
3977 * Ported to Windows! Tested on XP, I suspect it should work fine
3984 * Ported to Windows! Tested on XP, I suspect it should work fine
3978 on NT/2000, but I don't think it will work on 98 et al. That
3985 on NT/2000, but I don't think it will work on 98 et al. That
3979 series of Windows is such a piece of junk anyway that I won't try
3986 series of Windows is such a piece of junk anyway that I won't try
3980 porting it there. The XP port was straightforward, showed a few
3987 porting it there. The XP port was straightforward, showed a few
3981 bugs here and there (fixed all), in particular some string
3988 bugs here and there (fixed all), in particular some string
3982 handling stuff which required considering Unicode strings (which
3989 handling stuff which required considering Unicode strings (which
3983 Windows uses). This is good, but hasn't been too tested :) No
3990 Windows uses). This is good, but hasn't been too tested :) No
3984 fancy installer yet, I'll put a note in the manual so people at
3991 fancy installer yet, I'll put a note in the manual so people at
3985 least make manually a shortcut.
3992 least make manually a shortcut.
3986
3993
3987 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3994 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3988 into a single one, "colors". This now controls both prompt and
3995 into a single one, "colors". This now controls both prompt and
3989 exception color schemes, and can be changed both at startup
3996 exception color schemes, and can be changed both at startup
3990 (either via command-line switches or via ipythonrc files) and at
3997 (either via command-line switches or via ipythonrc files) and at
3991 runtime, with @colors.
3998 runtime, with @colors.
3992 (Magic.magic_run): renamed @prun to @run and removed the old
3999 (Magic.magic_run): renamed @prun to @run and removed the old
3993 @run. The two were too similar to warrant keeping both.
4000 @run. The two were too similar to warrant keeping both.
3994
4001
3995 2002-02-03 Fernando Perez <fperez@colorado.edu>
4002 2002-02-03 Fernando Perez <fperez@colorado.edu>
3996
4003
3997 * IPython/iplib.py (install_first_time): Added comment on how to
4004 * IPython/iplib.py (install_first_time): Added comment on how to
3998 configure the color options for first-time users. Put a <return>
4005 configure the color options for first-time users. Put a <return>
3999 request at the end so that small-terminal users get a chance to
4006 request at the end so that small-terminal users get a chance to
4000 read the startup info.
4007 read the startup info.
4001
4008
4002 2002-01-23 Fernando Perez <fperez@colorado.edu>
4009 2002-01-23 Fernando Perez <fperez@colorado.edu>
4003
4010
4004 * IPython/iplib.py (CachedOutput.update): Changed output memory
4011 * IPython/iplib.py (CachedOutput.update): Changed output memory
4005 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4012 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4006 input history we still use _i. Did this b/c these variable are
4013 input history we still use _i. Did this b/c these variable are
4007 very commonly used in interactive work, so the less we need to
4014 very commonly used in interactive work, so the less we need to
4008 type the better off we are.
4015 type the better off we are.
4009 (Magic.magic_prun): updated @prun to better handle the namespaces
4016 (Magic.magic_prun): updated @prun to better handle the namespaces
4010 the file will run in, including a fix for __name__ not being set
4017 the file will run in, including a fix for __name__ not being set
4011 before.
4018 before.
4012
4019
4013 2002-01-20 Fernando Perez <fperez@colorado.edu>
4020 2002-01-20 Fernando Perez <fperez@colorado.edu>
4014
4021
4015 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4022 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4016 extra garbage for Python 2.2. Need to look more carefully into
4023 extra garbage for Python 2.2. Need to look more carefully into
4017 this later.
4024 this later.
4018
4025
4019 2002-01-19 Fernando Perez <fperez@colorado.edu>
4026 2002-01-19 Fernando Perez <fperez@colorado.edu>
4020
4027
4021 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4028 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4022 display SyntaxError exceptions properly formatted when they occur
4029 display SyntaxError exceptions properly formatted when they occur
4023 (they can be triggered by imported code).
4030 (they can be triggered by imported code).
4024
4031
4025 2002-01-18 Fernando Perez <fperez@colorado.edu>
4032 2002-01-18 Fernando Perez <fperez@colorado.edu>
4026
4033
4027 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4034 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4028 SyntaxError exceptions are reported nicely formatted, instead of
4035 SyntaxError exceptions are reported nicely formatted, instead of
4029 spitting out only offset information as before.
4036 spitting out only offset information as before.
4030 (Magic.magic_prun): Added the @prun function for executing
4037 (Magic.magic_prun): Added the @prun function for executing
4031 programs with command line args inside IPython.
4038 programs with command line args inside IPython.
4032
4039
4033 2002-01-16 Fernando Perez <fperez@colorado.edu>
4040 2002-01-16 Fernando Perez <fperez@colorado.edu>
4034
4041
4035 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4042 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4036 to *not* include the last item given in a range. This brings their
4043 to *not* include the last item given in a range. This brings their
4037 behavior in line with Python's slicing:
4044 behavior in line with Python's slicing:
4038 a[n1:n2] -> a[n1]...a[n2-1]
4045 a[n1:n2] -> a[n1]...a[n2-1]
4039 It may be a bit less convenient, but I prefer to stick to Python's
4046 It may be a bit less convenient, but I prefer to stick to Python's
4040 conventions *everywhere*, so users never have to wonder.
4047 conventions *everywhere*, so users never have to wonder.
4041 (Magic.magic_macro): Added @macro function to ease the creation of
4048 (Magic.magic_macro): Added @macro function to ease the creation of
4042 macros.
4049 macros.
4043
4050
4044 2002-01-05 Fernando Perez <fperez@colorado.edu>
4051 2002-01-05 Fernando Perez <fperez@colorado.edu>
4045
4052
4046 * Released 0.2.4.
4053 * Released 0.2.4.
4047
4054
4048 * IPython/iplib.py (Magic.magic_pdef):
4055 * IPython/iplib.py (Magic.magic_pdef):
4049 (InteractiveShell.safe_execfile): report magic lines and error
4056 (InteractiveShell.safe_execfile): report magic lines and error
4050 lines without line numbers so one can easily copy/paste them for
4057 lines without line numbers so one can easily copy/paste them for
4051 re-execution.
4058 re-execution.
4052
4059
4053 * Updated manual with recent changes.
4060 * Updated manual with recent changes.
4054
4061
4055 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4062 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4056 docstring printing when class? is called. Very handy for knowing
4063 docstring printing when class? is called. Very handy for knowing
4057 how to create class instances (as long as __init__ is well
4064 how to create class instances (as long as __init__ is well
4058 documented, of course :)
4065 documented, of course :)
4059 (Magic.magic_doc): print both class and constructor docstrings.
4066 (Magic.magic_doc): print both class and constructor docstrings.
4060 (Magic.magic_pdef): give constructor info if passed a class and
4067 (Magic.magic_pdef): give constructor info if passed a class and
4061 __call__ info for callable object instances.
4068 __call__ info for callable object instances.
4062
4069
4063 2002-01-04 Fernando Perez <fperez@colorado.edu>
4070 2002-01-04 Fernando Perez <fperez@colorado.edu>
4064
4071
4065 * Made deep_reload() off by default. It doesn't always work
4072 * Made deep_reload() off by default. It doesn't always work
4066 exactly as intended, so it's probably safer to have it off. It's
4073 exactly as intended, so it's probably safer to have it off. It's
4067 still available as dreload() anyway, so nothing is lost.
4074 still available as dreload() anyway, so nothing is lost.
4068
4075
4069 2002-01-02 Fernando Perez <fperez@colorado.edu>
4076 2002-01-02 Fernando Perez <fperez@colorado.edu>
4070
4077
4071 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4078 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4072 so I wanted an updated release).
4079 so I wanted an updated release).
4073
4080
4074 2001-12-27 Fernando Perez <fperez@colorado.edu>
4081 2001-12-27 Fernando Perez <fperez@colorado.edu>
4075
4082
4076 * IPython/iplib.py (InteractiveShell.interact): Added the original
4083 * IPython/iplib.py (InteractiveShell.interact): Added the original
4077 code from 'code.py' for this module in order to change the
4084 code from 'code.py' for this module in order to change the
4078 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4085 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4079 the history cache would break when the user hit Ctrl-C, and
4086 the history cache would break when the user hit Ctrl-C, and
4080 interact() offers no way to add any hooks to it.
4087 interact() offers no way to add any hooks to it.
4081
4088
4082 2001-12-23 Fernando Perez <fperez@colorado.edu>
4089 2001-12-23 Fernando Perez <fperez@colorado.edu>
4083
4090
4084 * setup.py: added check for 'MANIFEST' before trying to remove
4091 * setup.py: added check for 'MANIFEST' before trying to remove
4085 it. Thanks to Sean Reifschneider.
4092 it. Thanks to Sean Reifschneider.
4086
4093
4087 2001-12-22 Fernando Perez <fperez@colorado.edu>
4094 2001-12-22 Fernando Perez <fperez@colorado.edu>
4088
4095
4089 * Released 0.2.2.
4096 * Released 0.2.2.
4090
4097
4091 * Finished (reasonably) writing the manual. Later will add the
4098 * Finished (reasonably) writing the manual. Later will add the
4092 python-standard navigation stylesheets, but for the time being
4099 python-standard navigation stylesheets, but for the time being
4093 it's fairly complete. Distribution will include html and pdf
4100 it's fairly complete. Distribution will include html and pdf
4094 versions.
4101 versions.
4095
4102
4096 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4103 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4097 (MayaVi author).
4104 (MayaVi author).
4098
4105
4099 2001-12-21 Fernando Perez <fperez@colorado.edu>
4106 2001-12-21 Fernando Perez <fperez@colorado.edu>
4100
4107
4101 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4108 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4102 good public release, I think (with the manual and the distutils
4109 good public release, I think (with the manual and the distutils
4103 installer). The manual can use some work, but that can go
4110 installer). The manual can use some work, but that can go
4104 slowly. Otherwise I think it's quite nice for end users. Next
4111 slowly. Otherwise I think it's quite nice for end users. Next
4105 summer, rewrite the guts of it...
4112 summer, rewrite the guts of it...
4106
4113
4107 * Changed format of ipythonrc files to use whitespace as the
4114 * Changed format of ipythonrc files to use whitespace as the
4108 separator instead of an explicit '='. Cleaner.
4115 separator instead of an explicit '='. Cleaner.
4109
4116
4110 2001-12-20 Fernando Perez <fperez@colorado.edu>
4117 2001-12-20 Fernando Perez <fperez@colorado.edu>
4111
4118
4112 * Started a manual in LyX. For now it's just a quick merge of the
4119 * Started a manual in LyX. For now it's just a quick merge of the
4113 various internal docstrings and READMEs. Later it may grow into a
4120 various internal docstrings and READMEs. Later it may grow into a
4114 nice, full-blown manual.
4121 nice, full-blown manual.
4115
4122
4116 * Set up a distutils based installer. Installation should now be
4123 * Set up a distutils based installer. Installation should now be
4117 trivially simple for end-users.
4124 trivially simple for end-users.
4118
4125
4119 2001-12-11 Fernando Perez <fperez@colorado.edu>
4126 2001-12-11 Fernando Perez <fperez@colorado.edu>
4120
4127
4121 * Released 0.2.0. First public release, announced it at
4128 * Released 0.2.0. First public release, announced it at
4122 comp.lang.python. From now on, just bugfixes...
4129 comp.lang.python. From now on, just bugfixes...
4123
4130
4124 * Went through all the files, set copyright/license notices and
4131 * Went through all the files, set copyright/license notices and
4125 cleaned up things. Ready for release.
4132 cleaned up things. Ready for release.
4126
4133
4127 2001-12-10 Fernando Perez <fperez@colorado.edu>
4134 2001-12-10 Fernando Perez <fperez@colorado.edu>
4128
4135
4129 * Changed the first-time installer not to use tarfiles. It's more
4136 * Changed the first-time installer not to use tarfiles. It's more
4130 robust now and less unix-dependent. Also makes it easier for
4137 robust now and less unix-dependent. Also makes it easier for
4131 people to later upgrade versions.
4138 people to later upgrade versions.
4132
4139
4133 * Changed @exit to @abort to reflect the fact that it's pretty
4140 * Changed @exit to @abort to reflect the fact that it's pretty
4134 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4141 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4135 becomes significant only when IPyhton is embedded: in that case,
4142 becomes significant only when IPyhton is embedded: in that case,
4136 C-D closes IPython only, but @abort kills the enclosing program
4143 C-D closes IPython only, but @abort kills the enclosing program
4137 too (unless it had called IPython inside a try catching
4144 too (unless it had called IPython inside a try catching
4138 SystemExit).
4145 SystemExit).
4139
4146
4140 * Created Shell module which exposes the actuall IPython Shell
4147 * Created Shell module which exposes the actuall IPython Shell
4141 classes, currently the normal and the embeddable one. This at
4148 classes, currently the normal and the embeddable one. This at
4142 least offers a stable interface we won't need to change when
4149 least offers a stable interface we won't need to change when
4143 (later) the internals are rewritten. That rewrite will be confined
4150 (later) the internals are rewritten. That rewrite will be confined
4144 to iplib and ipmaker, but the Shell interface should remain as is.
4151 to iplib and ipmaker, but the Shell interface should remain as is.
4145
4152
4146 * Added embed module which offers an embeddable IPShell object,
4153 * Added embed module which offers an embeddable IPShell object,
4147 useful to fire up IPython *inside* a running program. Great for
4154 useful to fire up IPython *inside* a running program. Great for
4148 debugging or dynamical data analysis.
4155 debugging or dynamical data analysis.
4149
4156
4150 2001-12-08 Fernando Perez <fperez@colorado.edu>
4157 2001-12-08 Fernando Perez <fperez@colorado.edu>
4151
4158
4152 * Fixed small bug preventing seeing info from methods of defined
4159 * Fixed small bug preventing seeing info from methods of defined
4153 objects (incorrect namespace in _ofind()).
4160 objects (incorrect namespace in _ofind()).
4154
4161
4155 * Documentation cleanup. Moved the main usage docstrings to a
4162 * Documentation cleanup. Moved the main usage docstrings to a
4156 separate file, usage.py (cleaner to maintain, and hopefully in the
4163 separate file, usage.py (cleaner to maintain, and hopefully in the
4157 future some perlpod-like way of producing interactive, man and
4164 future some perlpod-like way of producing interactive, man and
4158 html docs out of it will be found).
4165 html docs out of it will be found).
4159
4166
4160 * Added @profile to see your profile at any time.
4167 * Added @profile to see your profile at any time.
4161
4168
4162 * Added @p as an alias for 'print'. It's especially convenient if
4169 * Added @p as an alias for 'print'. It's especially convenient if
4163 using automagic ('p x' prints x).
4170 using automagic ('p x' prints x).
4164
4171
4165 * Small cleanups and fixes after a pychecker run.
4172 * Small cleanups and fixes after a pychecker run.
4166
4173
4167 * Changed the @cd command to handle @cd - and @cd -<n> for
4174 * Changed the @cd command to handle @cd - and @cd -<n> for
4168 visiting any directory in _dh.
4175 visiting any directory in _dh.
4169
4176
4170 * Introduced _dh, a history of visited directories. @dhist prints
4177 * Introduced _dh, a history of visited directories. @dhist prints
4171 it out with numbers.
4178 it out with numbers.
4172
4179
4173 2001-12-07 Fernando Perez <fperez@colorado.edu>
4180 2001-12-07 Fernando Perez <fperez@colorado.edu>
4174
4181
4175 * Released 0.1.22
4182 * Released 0.1.22
4176
4183
4177 * Made initialization a bit more robust against invalid color
4184 * Made initialization a bit more robust against invalid color
4178 options in user input (exit, not traceback-crash).
4185 options in user input (exit, not traceback-crash).
4179
4186
4180 * Changed the bug crash reporter to write the report only in the
4187 * Changed the bug crash reporter to write the report only in the
4181 user's .ipython directory. That way IPython won't litter people's
4188 user's .ipython directory. That way IPython won't litter people's
4182 hard disks with crash files all over the place. Also print on
4189 hard disks with crash files all over the place. Also print on
4183 screen the necessary mail command.
4190 screen the necessary mail command.
4184
4191
4185 * With the new ultraTB, implemented LightBG color scheme for light
4192 * With the new ultraTB, implemented LightBG color scheme for light
4186 background terminals. A lot of people like white backgrounds, so I
4193 background terminals. A lot of people like white backgrounds, so I
4187 guess we should at least give them something readable.
4194 guess we should at least give them something readable.
4188
4195
4189 2001-12-06 Fernando Perez <fperez@colorado.edu>
4196 2001-12-06 Fernando Perez <fperez@colorado.edu>
4190
4197
4191 * Modified the structure of ultraTB. Now there's a proper class
4198 * Modified the structure of ultraTB. Now there's a proper class
4192 for tables of color schemes which allow adding schemes easily and
4199 for tables of color schemes which allow adding schemes easily and
4193 switching the active scheme without creating a new instance every
4200 switching the active scheme without creating a new instance every
4194 time (which was ridiculous). The syntax for creating new schemes
4201 time (which was ridiculous). The syntax for creating new schemes
4195 is also cleaner. I think ultraTB is finally done, with a clean
4202 is also cleaner. I think ultraTB is finally done, with a clean
4196 class structure. Names are also much cleaner (now there's proper
4203 class structure. Names are also much cleaner (now there's proper
4197 color tables, no need for every variable to also have 'color' in
4204 color tables, no need for every variable to also have 'color' in
4198 its name).
4205 its name).
4199
4206
4200 * Broke down genutils into separate files. Now genutils only
4207 * Broke down genutils into separate files. Now genutils only
4201 contains utility functions, and classes have been moved to their
4208 contains utility functions, and classes have been moved to their
4202 own files (they had enough independent functionality to warrant
4209 own files (they had enough independent functionality to warrant
4203 it): ConfigLoader, OutputTrap, Struct.
4210 it): ConfigLoader, OutputTrap, Struct.
4204
4211
4205 2001-12-05 Fernando Perez <fperez@colorado.edu>
4212 2001-12-05 Fernando Perez <fperez@colorado.edu>
4206
4213
4207 * IPython turns 21! Released version 0.1.21, as a candidate for
4214 * IPython turns 21! Released version 0.1.21, as a candidate for
4208 public consumption. If all goes well, release in a few days.
4215 public consumption. If all goes well, release in a few days.
4209
4216
4210 * Fixed path bug (files in Extensions/ directory wouldn't be found
4217 * Fixed path bug (files in Extensions/ directory wouldn't be found
4211 unless IPython/ was explicitly in sys.path).
4218 unless IPython/ was explicitly in sys.path).
4212
4219
4213 * Extended the FlexCompleter class as MagicCompleter to allow
4220 * Extended the FlexCompleter class as MagicCompleter to allow
4214 completion of @-starting lines.
4221 completion of @-starting lines.
4215
4222
4216 * Created __release__.py file as a central repository for release
4223 * Created __release__.py file as a central repository for release
4217 info that other files can read from.
4224 info that other files can read from.
4218
4225
4219 * Fixed small bug in logging: when logging was turned on in
4226 * Fixed small bug in logging: when logging was turned on in
4220 mid-session, old lines with special meanings (!@?) were being
4227 mid-session, old lines with special meanings (!@?) were being
4221 logged without the prepended comment, which is necessary since
4228 logged without the prepended comment, which is necessary since
4222 they are not truly valid python syntax. This should make session
4229 they are not truly valid python syntax. This should make session
4223 restores produce less errors.
4230 restores produce less errors.
4224
4231
4225 * The namespace cleanup forced me to make a FlexCompleter class
4232 * The namespace cleanup forced me to make a FlexCompleter class
4226 which is nothing but a ripoff of rlcompleter, but with selectable
4233 which is nothing but a ripoff of rlcompleter, but with selectable
4227 namespace (rlcompleter only works in __main__.__dict__). I'll try
4234 namespace (rlcompleter only works in __main__.__dict__). I'll try
4228 to submit a note to the authors to see if this change can be
4235 to submit a note to the authors to see if this change can be
4229 incorporated in future rlcompleter releases (Dec.6: done)
4236 incorporated in future rlcompleter releases (Dec.6: done)
4230
4237
4231 * More fixes to namespace handling. It was a mess! Now all
4238 * More fixes to namespace handling. It was a mess! Now all
4232 explicit references to __main__.__dict__ are gone (except when
4239 explicit references to __main__.__dict__ are gone (except when
4233 really needed) and everything is handled through the namespace
4240 really needed) and everything is handled through the namespace
4234 dicts in the IPython instance. We seem to be getting somewhere
4241 dicts in the IPython instance. We seem to be getting somewhere
4235 with this, finally...
4242 with this, finally...
4236
4243
4237 * Small documentation updates.
4244 * Small documentation updates.
4238
4245
4239 * Created the Extensions directory under IPython (with an
4246 * Created the Extensions directory under IPython (with an
4240 __init__.py). Put the PhysicalQ stuff there. This directory should
4247 __init__.py). Put the PhysicalQ stuff there. This directory should
4241 be used for all special-purpose extensions.
4248 be used for all special-purpose extensions.
4242
4249
4243 * File renaming:
4250 * File renaming:
4244 ipythonlib --> ipmaker
4251 ipythonlib --> ipmaker
4245 ipplib --> iplib
4252 ipplib --> iplib
4246 This makes a bit more sense in terms of what these files actually do.
4253 This makes a bit more sense in terms of what these files actually do.
4247
4254
4248 * Moved all the classes and functions in ipythonlib to ipplib, so
4255 * Moved all the classes and functions in ipythonlib to ipplib, so
4249 now ipythonlib only has make_IPython(). This will ease up its
4256 now ipythonlib only has make_IPython(). This will ease up its
4250 splitting in smaller functional chunks later.
4257 splitting in smaller functional chunks later.
4251
4258
4252 * Cleaned up (done, I think) output of @whos. Better column
4259 * Cleaned up (done, I think) output of @whos. Better column
4253 formatting, and now shows str(var) for as much as it can, which is
4260 formatting, and now shows str(var) for as much as it can, which is
4254 typically what one gets with a 'print var'.
4261 typically what one gets with a 'print var'.
4255
4262
4256 2001-12-04 Fernando Perez <fperez@colorado.edu>
4263 2001-12-04 Fernando Perez <fperez@colorado.edu>
4257
4264
4258 * Fixed namespace problems. Now builtin/IPyhton/user names get
4265 * Fixed namespace problems. Now builtin/IPyhton/user names get
4259 properly reported in their namespace. Internal namespace handling
4266 properly reported in their namespace. Internal namespace handling
4260 is finally getting decent (not perfect yet, but much better than
4267 is finally getting decent (not perfect yet, but much better than
4261 the ad-hoc mess we had).
4268 the ad-hoc mess we had).
4262
4269
4263 * Removed -exit option. If people just want to run a python
4270 * Removed -exit option. If people just want to run a python
4264 script, that's what the normal interpreter is for. Less
4271 script, that's what the normal interpreter is for. Less
4265 unnecessary options, less chances for bugs.
4272 unnecessary options, less chances for bugs.
4266
4273
4267 * Added a crash handler which generates a complete post-mortem if
4274 * Added a crash handler which generates a complete post-mortem if
4268 IPython crashes. This will help a lot in tracking bugs down the
4275 IPython crashes. This will help a lot in tracking bugs down the
4269 road.
4276 road.
4270
4277
4271 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4278 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4272 which were boud to functions being reassigned would bypass the
4279 which were boud to functions being reassigned would bypass the
4273 logger, breaking the sync of _il with the prompt counter. This
4280 logger, breaking the sync of _il with the prompt counter. This
4274 would then crash IPython later when a new line was logged.
4281 would then crash IPython later when a new line was logged.
4275
4282
4276 2001-12-02 Fernando Perez <fperez@colorado.edu>
4283 2001-12-02 Fernando Perez <fperez@colorado.edu>
4277
4284
4278 * Made IPython a package. This means people don't have to clutter
4285 * Made IPython a package. This means people don't have to clutter
4279 their sys.path with yet another directory. Changed the INSTALL
4286 their sys.path with yet another directory. Changed the INSTALL
4280 file accordingly.
4287 file accordingly.
4281
4288
4282 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4289 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4283 sorts its output (so @who shows it sorted) and @whos formats the
4290 sorts its output (so @who shows it sorted) and @whos formats the
4284 table according to the width of the first column. Nicer, easier to
4291 table according to the width of the first column. Nicer, easier to
4285 read. Todo: write a generic table_format() which takes a list of
4292 read. Todo: write a generic table_format() which takes a list of
4286 lists and prints it nicely formatted, with optional row/column
4293 lists and prints it nicely formatted, with optional row/column
4287 separators and proper padding and justification.
4294 separators and proper padding and justification.
4288
4295
4289 * Released 0.1.20
4296 * Released 0.1.20
4290
4297
4291 * Fixed bug in @log which would reverse the inputcache list (a
4298 * Fixed bug in @log which would reverse the inputcache list (a
4292 copy operation was missing).
4299 copy operation was missing).
4293
4300
4294 * Code cleanup. @config was changed to use page(). Better, since
4301 * Code cleanup. @config was changed to use page(). Better, since
4295 its output is always quite long.
4302 its output is always quite long.
4296
4303
4297 * Itpl is back as a dependency. I was having too many problems
4304 * Itpl is back as a dependency. I was having too many problems
4298 getting the parametric aliases to work reliably, and it's just
4305 getting the parametric aliases to work reliably, and it's just
4299 easier to code weird string operations with it than playing %()s
4306 easier to code weird string operations with it than playing %()s
4300 games. It's only ~6k, so I don't think it's too big a deal.
4307 games. It's only ~6k, so I don't think it's too big a deal.
4301
4308
4302 * Found (and fixed) a very nasty bug with history. !lines weren't
4309 * Found (and fixed) a very nasty bug with history. !lines weren't
4303 getting cached, and the out of sync caches would crash
4310 getting cached, and the out of sync caches would crash
4304 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4311 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4305 division of labor a bit better. Bug fixed, cleaner structure.
4312 division of labor a bit better. Bug fixed, cleaner structure.
4306
4313
4307 2001-12-01 Fernando Perez <fperez@colorado.edu>
4314 2001-12-01 Fernando Perez <fperez@colorado.edu>
4308
4315
4309 * Released 0.1.19
4316 * Released 0.1.19
4310
4317
4311 * Added option -n to @hist to prevent line number printing. Much
4318 * Added option -n to @hist to prevent line number printing. Much
4312 easier to copy/paste code this way.
4319 easier to copy/paste code this way.
4313
4320
4314 * Created global _il to hold the input list. Allows easy
4321 * Created global _il to hold the input list. Allows easy
4315 re-execution of blocks of code by slicing it (inspired by Janko's
4322 re-execution of blocks of code by slicing it (inspired by Janko's
4316 comment on 'macros').
4323 comment on 'macros').
4317
4324
4318 * Small fixes and doc updates.
4325 * Small fixes and doc updates.
4319
4326
4320 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4327 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4321 much too fragile with automagic. Handles properly multi-line
4328 much too fragile with automagic. Handles properly multi-line
4322 statements and takes parameters.
4329 statements and takes parameters.
4323
4330
4324 2001-11-30 Fernando Perez <fperez@colorado.edu>
4331 2001-11-30 Fernando Perez <fperez@colorado.edu>
4325
4332
4326 * Version 0.1.18 released.
4333 * Version 0.1.18 released.
4327
4334
4328 * Fixed nasty namespace bug in initial module imports.
4335 * Fixed nasty namespace bug in initial module imports.
4329
4336
4330 * Added copyright/license notes to all code files (except
4337 * Added copyright/license notes to all code files (except
4331 DPyGetOpt). For the time being, LGPL. That could change.
4338 DPyGetOpt). For the time being, LGPL. That could change.
4332
4339
4333 * Rewrote a much nicer README, updated INSTALL, cleaned up
4340 * Rewrote a much nicer README, updated INSTALL, cleaned up
4334 ipythonrc-* samples.
4341 ipythonrc-* samples.
4335
4342
4336 * Overall code/documentation cleanup. Basically ready for
4343 * Overall code/documentation cleanup. Basically ready for
4337 release. Only remaining thing: licence decision (LGPL?).
4344 release. Only remaining thing: licence decision (LGPL?).
4338
4345
4339 * Converted load_config to a class, ConfigLoader. Now recursion
4346 * Converted load_config to a class, ConfigLoader. Now recursion
4340 control is better organized. Doesn't include the same file twice.
4347 control is better organized. Doesn't include the same file twice.
4341
4348
4342 2001-11-29 Fernando Perez <fperez@colorado.edu>
4349 2001-11-29 Fernando Perez <fperez@colorado.edu>
4343
4350
4344 * Got input history working. Changed output history variables from
4351 * Got input history working. Changed output history variables from
4345 _p to _o so that _i is for input and _o for output. Just cleaner
4352 _p to _o so that _i is for input and _o for output. Just cleaner
4346 convention.
4353 convention.
4347
4354
4348 * Implemented parametric aliases. This pretty much allows the
4355 * Implemented parametric aliases. This pretty much allows the
4349 alias system to offer full-blown shell convenience, I think.
4356 alias system to offer full-blown shell convenience, I think.
4350
4357
4351 * Version 0.1.17 released, 0.1.18 opened.
4358 * Version 0.1.17 released, 0.1.18 opened.
4352
4359
4353 * dot_ipython/ipythonrc (alias): added documentation.
4360 * dot_ipython/ipythonrc (alias): added documentation.
4354 (xcolor): Fixed small bug (xcolors -> xcolor)
4361 (xcolor): Fixed small bug (xcolors -> xcolor)
4355
4362
4356 * Changed the alias system. Now alias is a magic command to define
4363 * Changed the alias system. Now alias is a magic command to define
4357 aliases just like the shell. Rationale: the builtin magics should
4364 aliases just like the shell. Rationale: the builtin magics should
4358 be there for things deeply connected to IPython's
4365 be there for things deeply connected to IPython's
4359 architecture. And this is a much lighter system for what I think
4366 architecture. And this is a much lighter system for what I think
4360 is the really important feature: allowing users to define quickly
4367 is the really important feature: allowing users to define quickly
4361 magics that will do shell things for them, so they can customize
4368 magics that will do shell things for them, so they can customize
4362 IPython easily to match their work habits. If someone is really
4369 IPython easily to match their work habits. If someone is really
4363 desperate to have another name for a builtin alias, they can
4370 desperate to have another name for a builtin alias, they can
4364 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4371 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4365 works.
4372 works.
4366
4373
4367 2001-11-28 Fernando Perez <fperez@colorado.edu>
4374 2001-11-28 Fernando Perez <fperez@colorado.edu>
4368
4375
4369 * Changed @file so that it opens the source file at the proper
4376 * Changed @file so that it opens the source file at the proper
4370 line. Since it uses less, if your EDITOR environment is
4377 line. Since it uses less, if your EDITOR environment is
4371 configured, typing v will immediately open your editor of choice
4378 configured, typing v will immediately open your editor of choice
4372 right at the line where the object is defined. Not as quick as
4379 right at the line where the object is defined. Not as quick as
4373 having a direct @edit command, but for all intents and purposes it
4380 having a direct @edit command, but for all intents and purposes it
4374 works. And I don't have to worry about writing @edit to deal with
4381 works. And I don't have to worry about writing @edit to deal with
4375 all the editors, less does that.
4382 all the editors, less does that.
4376
4383
4377 * Version 0.1.16 released, 0.1.17 opened.
4384 * Version 0.1.16 released, 0.1.17 opened.
4378
4385
4379 * Fixed some nasty bugs in the page/page_dumb combo that could
4386 * Fixed some nasty bugs in the page/page_dumb combo that could
4380 crash IPython.
4387 crash IPython.
4381
4388
4382 2001-11-27 Fernando Perez <fperez@colorado.edu>
4389 2001-11-27 Fernando Perez <fperez@colorado.edu>
4383
4390
4384 * Version 0.1.15 released, 0.1.16 opened.
4391 * Version 0.1.15 released, 0.1.16 opened.
4385
4392
4386 * Finally got ? and ?? to work for undefined things: now it's
4393 * Finally got ? and ?? to work for undefined things: now it's
4387 possible to type {}.get? and get information about the get method
4394 possible to type {}.get? and get information about the get method
4388 of dicts, or os.path? even if only os is defined (so technically
4395 of dicts, or os.path? even if only os is defined (so technically
4389 os.path isn't). Works at any level. For example, after import os,
4396 os.path isn't). Works at any level. For example, after import os,
4390 os?, os.path?, os.path.abspath? all work. This is great, took some
4397 os?, os.path?, os.path.abspath? all work. This is great, took some
4391 work in _ofind.
4398 work in _ofind.
4392
4399
4393 * Fixed more bugs with logging. The sanest way to do it was to add
4400 * Fixed more bugs with logging. The sanest way to do it was to add
4394 to @log a 'mode' parameter. Killed two in one shot (this mode
4401 to @log a 'mode' parameter. Killed two in one shot (this mode
4395 option was a request of Janko's). I think it's finally clean
4402 option was a request of Janko's). I think it's finally clean
4396 (famous last words).
4403 (famous last words).
4397
4404
4398 * Added a page_dumb() pager which does a decent job of paging on
4405 * Added a page_dumb() pager which does a decent job of paging on
4399 screen, if better things (like less) aren't available. One less
4406 screen, if better things (like less) aren't available. One less
4400 unix dependency (someday maybe somebody will port this to
4407 unix dependency (someday maybe somebody will port this to
4401 windows).
4408 windows).
4402
4409
4403 * Fixed problem in magic_log: would lock of logging out if log
4410 * Fixed problem in magic_log: would lock of logging out if log
4404 creation failed (because it would still think it had succeeded).
4411 creation failed (because it would still think it had succeeded).
4405
4412
4406 * Improved the page() function using curses to auto-detect screen
4413 * Improved the page() function using curses to auto-detect screen
4407 size. Now it can make a much better decision on whether to print
4414 size. Now it can make a much better decision on whether to print
4408 or page a string. Option screen_length was modified: a value 0
4415 or page a string. Option screen_length was modified: a value 0
4409 means auto-detect, and that's the default now.
4416 means auto-detect, and that's the default now.
4410
4417
4411 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4418 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4412 go out. I'll test it for a few days, then talk to Janko about
4419 go out. I'll test it for a few days, then talk to Janko about
4413 licences and announce it.
4420 licences and announce it.
4414
4421
4415 * Fixed the length of the auto-generated ---> prompt which appears
4422 * Fixed the length of the auto-generated ---> prompt which appears
4416 for auto-parens and auto-quotes. Getting this right isn't trivial,
4423 for auto-parens and auto-quotes. Getting this right isn't trivial,
4417 with all the color escapes, different prompt types and optional
4424 with all the color escapes, different prompt types and optional
4418 separators. But it seems to be working in all the combinations.
4425 separators. But it seems to be working in all the combinations.
4419
4426
4420 2001-11-26 Fernando Perez <fperez@colorado.edu>
4427 2001-11-26 Fernando Perez <fperez@colorado.edu>
4421
4428
4422 * Wrote a regexp filter to get option types from the option names
4429 * Wrote a regexp filter to get option types from the option names
4423 string. This eliminates the need to manually keep two duplicate
4430 string. This eliminates the need to manually keep two duplicate
4424 lists.
4431 lists.
4425
4432
4426 * Removed the unneeded check_option_names. Now options are handled
4433 * Removed the unneeded check_option_names. Now options are handled
4427 in a much saner manner and it's easy to visually check that things
4434 in a much saner manner and it's easy to visually check that things
4428 are ok.
4435 are ok.
4429
4436
4430 * Updated version numbers on all files I modified to carry a
4437 * Updated version numbers on all files I modified to carry a
4431 notice so Janko and Nathan have clear version markers.
4438 notice so Janko and Nathan have clear version markers.
4432
4439
4433 * Updated docstring for ultraTB with my changes. I should send
4440 * Updated docstring for ultraTB with my changes. I should send
4434 this to Nathan.
4441 this to Nathan.
4435
4442
4436 * Lots of small fixes. Ran everything through pychecker again.
4443 * Lots of small fixes. Ran everything through pychecker again.
4437
4444
4438 * Made loading of deep_reload an cmd line option. If it's not too
4445 * Made loading of deep_reload an cmd line option. If it's not too
4439 kosher, now people can just disable it. With -nodeep_reload it's
4446 kosher, now people can just disable it. With -nodeep_reload it's
4440 still available as dreload(), it just won't overwrite reload().
4447 still available as dreload(), it just won't overwrite reload().
4441
4448
4442 * Moved many options to the no| form (-opt and -noopt
4449 * Moved many options to the no| form (-opt and -noopt
4443 accepted). Cleaner.
4450 accepted). Cleaner.
4444
4451
4445 * Changed magic_log so that if called with no parameters, it uses
4452 * Changed magic_log so that if called with no parameters, it uses
4446 'rotate' mode. That way auto-generated logs aren't automatically
4453 'rotate' mode. That way auto-generated logs aren't automatically
4447 over-written. For normal logs, now a backup is made if it exists
4454 over-written. For normal logs, now a backup is made if it exists
4448 (only 1 level of backups). A new 'backup' mode was added to the
4455 (only 1 level of backups). A new 'backup' mode was added to the
4449 Logger class to support this. This was a request by Janko.
4456 Logger class to support this. This was a request by Janko.
4450
4457
4451 * Added @logoff/@logon to stop/restart an active log.
4458 * Added @logoff/@logon to stop/restart an active log.
4452
4459
4453 * Fixed a lot of bugs in log saving/replay. It was pretty
4460 * Fixed a lot of bugs in log saving/replay. It was pretty
4454 broken. Now special lines (!@,/) appear properly in the command
4461 broken. Now special lines (!@,/) appear properly in the command
4455 history after a log replay.
4462 history after a log replay.
4456
4463
4457 * Tried and failed to implement full session saving via pickle. My
4464 * Tried and failed to implement full session saving via pickle. My
4458 idea was to pickle __main__.__dict__, but modules can't be
4465 idea was to pickle __main__.__dict__, but modules can't be
4459 pickled. This would be a better alternative to replaying logs, but
4466 pickled. This would be a better alternative to replaying logs, but
4460 seems quite tricky to get to work. Changed -session to be called
4467 seems quite tricky to get to work. Changed -session to be called
4461 -logplay, which more accurately reflects what it does. And if we
4468 -logplay, which more accurately reflects what it does. And if we
4462 ever get real session saving working, -session is now available.
4469 ever get real session saving working, -session is now available.
4463
4470
4464 * Implemented color schemes for prompts also. As for tracebacks,
4471 * Implemented color schemes for prompts also. As for tracebacks,
4465 currently only NoColor and Linux are supported. But now the
4472 currently only NoColor and Linux are supported. But now the
4466 infrastructure is in place, based on a generic ColorScheme
4473 infrastructure is in place, based on a generic ColorScheme
4467 class. So writing and activating new schemes both for the prompts
4474 class. So writing and activating new schemes both for the prompts
4468 and the tracebacks should be straightforward.
4475 and the tracebacks should be straightforward.
4469
4476
4470 * Version 0.1.13 released, 0.1.14 opened.
4477 * Version 0.1.13 released, 0.1.14 opened.
4471
4478
4472 * Changed handling of options for output cache. Now counter is
4479 * Changed handling of options for output cache. Now counter is
4473 hardwired starting at 1 and one specifies the maximum number of
4480 hardwired starting at 1 and one specifies the maximum number of
4474 entries *in the outcache* (not the max prompt counter). This is
4481 entries *in the outcache* (not the max prompt counter). This is
4475 much better, since many statements won't increase the cache
4482 much better, since many statements won't increase the cache
4476 count. It also eliminated some confusing options, now there's only
4483 count. It also eliminated some confusing options, now there's only
4477 one: cache_size.
4484 one: cache_size.
4478
4485
4479 * Added 'alias' magic function and magic_alias option in the
4486 * Added 'alias' magic function and magic_alias option in the
4480 ipythonrc file. Now the user can easily define whatever names he
4487 ipythonrc file. Now the user can easily define whatever names he
4481 wants for the magic functions without having to play weird
4488 wants for the magic functions without having to play weird
4482 namespace games. This gives IPython a real shell-like feel.
4489 namespace games. This gives IPython a real shell-like feel.
4483
4490
4484 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4491 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4485 @ or not).
4492 @ or not).
4486
4493
4487 This was one of the last remaining 'visible' bugs (that I know
4494 This was one of the last remaining 'visible' bugs (that I know
4488 of). I think if I can clean up the session loading so it works
4495 of). I think if I can clean up the session loading so it works
4489 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4496 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4490 about licensing).
4497 about licensing).
4491
4498
4492 2001-11-25 Fernando Perez <fperez@colorado.edu>
4499 2001-11-25 Fernando Perez <fperez@colorado.edu>
4493
4500
4494 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4501 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4495 there's a cleaner distinction between what ? and ?? show.
4502 there's a cleaner distinction between what ? and ?? show.
4496
4503
4497 * Added screen_length option. Now the user can define his own
4504 * Added screen_length option. Now the user can define his own
4498 screen size for page() operations.
4505 screen size for page() operations.
4499
4506
4500 * Implemented magic shell-like functions with automatic code
4507 * Implemented magic shell-like functions with automatic code
4501 generation. Now adding another function is just a matter of adding
4508 generation. Now adding another function is just a matter of adding
4502 an entry to a dict, and the function is dynamically generated at
4509 an entry to a dict, and the function is dynamically generated at
4503 run-time. Python has some really cool features!
4510 run-time. Python has some really cool features!
4504
4511
4505 * Renamed many options to cleanup conventions a little. Now all
4512 * Renamed many options to cleanup conventions a little. Now all
4506 are lowercase, and only underscores where needed. Also in the code
4513 are lowercase, and only underscores where needed. Also in the code
4507 option name tables are clearer.
4514 option name tables are clearer.
4508
4515
4509 * Changed prompts a little. Now input is 'In [n]:' instead of
4516 * Changed prompts a little. Now input is 'In [n]:' instead of
4510 'In[n]:='. This allows it the numbers to be aligned with the
4517 'In[n]:='. This allows it the numbers to be aligned with the
4511 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4518 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4512 Python (it was a Mathematica thing). The '...' continuation prompt
4519 Python (it was a Mathematica thing). The '...' continuation prompt
4513 was also changed a little to align better.
4520 was also changed a little to align better.
4514
4521
4515 * Fixed bug when flushing output cache. Not all _p<n> variables
4522 * Fixed bug when flushing output cache. Not all _p<n> variables
4516 exist, so their deletion needs to be wrapped in a try:
4523 exist, so their deletion needs to be wrapped in a try:
4517
4524
4518 * Figured out how to properly use inspect.formatargspec() (it
4525 * Figured out how to properly use inspect.formatargspec() (it
4519 requires the args preceded by *). So I removed all the code from
4526 requires the args preceded by *). So I removed all the code from
4520 _get_pdef in Magic, which was just replicating that.
4527 _get_pdef in Magic, which was just replicating that.
4521
4528
4522 * Added test to prefilter to allow redefining magic function names
4529 * Added test to prefilter to allow redefining magic function names
4523 as variables. This is ok, since the @ form is always available,
4530 as variables. This is ok, since the @ form is always available,
4524 but whe should allow the user to define a variable called 'ls' if
4531 but whe should allow the user to define a variable called 'ls' if
4525 he needs it.
4532 he needs it.
4526
4533
4527 * Moved the ToDo information from README into a separate ToDo.
4534 * Moved the ToDo information from README into a separate ToDo.
4528
4535
4529 * General code cleanup and small bugfixes. I think it's close to a
4536 * General code cleanup and small bugfixes. I think it's close to a
4530 state where it can be released, obviously with a big 'beta'
4537 state where it can be released, obviously with a big 'beta'
4531 warning on it.
4538 warning on it.
4532
4539
4533 * Got the magic function split to work. Now all magics are defined
4540 * Got the magic function split to work. Now all magics are defined
4534 in a separate class. It just organizes things a bit, and now
4541 in a separate class. It just organizes things a bit, and now
4535 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4542 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4536 was too long).
4543 was too long).
4537
4544
4538 * Changed @clear to @reset to avoid potential confusions with
4545 * Changed @clear to @reset to avoid potential confusions with
4539 the shell command clear. Also renamed @cl to @clear, which does
4546 the shell command clear. Also renamed @cl to @clear, which does
4540 exactly what people expect it to from their shell experience.
4547 exactly what people expect it to from their shell experience.
4541
4548
4542 Added a check to the @reset command (since it's so
4549 Added a check to the @reset command (since it's so
4543 destructive, it's probably a good idea to ask for confirmation).
4550 destructive, it's probably a good idea to ask for confirmation).
4544 But now reset only works for full namespace resetting. Since the
4551 But now reset only works for full namespace resetting. Since the
4545 del keyword is already there for deleting a few specific
4552 del keyword is already there for deleting a few specific
4546 variables, I don't see the point of having a redundant magic
4553 variables, I don't see the point of having a redundant magic
4547 function for the same task.
4554 function for the same task.
4548
4555
4549 2001-11-24 Fernando Perez <fperez@colorado.edu>
4556 2001-11-24 Fernando Perez <fperez@colorado.edu>
4550
4557
4551 * Updated the builtin docs (esp. the ? ones).
4558 * Updated the builtin docs (esp. the ? ones).
4552
4559
4553 * Ran all the code through pychecker. Not terribly impressed with
4560 * Ran all the code through pychecker. Not terribly impressed with
4554 it: lots of spurious warnings and didn't really find anything of
4561 it: lots of spurious warnings and didn't really find anything of
4555 substance (just a few modules being imported and not used).
4562 substance (just a few modules being imported and not used).
4556
4563
4557 * Implemented the new ultraTB functionality into IPython. New
4564 * Implemented the new ultraTB functionality into IPython. New
4558 option: xcolors. This chooses color scheme. xmode now only selects
4565 option: xcolors. This chooses color scheme. xmode now only selects
4559 between Plain and Verbose. Better orthogonality.
4566 between Plain and Verbose. Better orthogonality.
4560
4567
4561 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4568 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4562 mode and color scheme for the exception handlers. Now it's
4569 mode and color scheme for the exception handlers. Now it's
4563 possible to have the verbose traceback with no coloring.
4570 possible to have the verbose traceback with no coloring.
4564
4571
4565 2001-11-23 Fernando Perez <fperez@colorado.edu>
4572 2001-11-23 Fernando Perez <fperez@colorado.edu>
4566
4573
4567 * Version 0.1.12 released, 0.1.13 opened.
4574 * Version 0.1.12 released, 0.1.13 opened.
4568
4575
4569 * Removed option to set auto-quote and auto-paren escapes by
4576 * Removed option to set auto-quote and auto-paren escapes by
4570 user. The chances of breaking valid syntax are just too high. If
4577 user. The chances of breaking valid syntax are just too high. If
4571 someone *really* wants, they can always dig into the code.
4578 someone *really* wants, they can always dig into the code.
4572
4579
4573 * Made prompt separators configurable.
4580 * Made prompt separators configurable.
4574
4581
4575 2001-11-22 Fernando Perez <fperez@colorado.edu>
4582 2001-11-22 Fernando Perez <fperez@colorado.edu>
4576
4583
4577 * Small bugfixes in many places.
4584 * Small bugfixes in many places.
4578
4585
4579 * Removed the MyCompleter class from ipplib. It seemed redundant
4586 * Removed the MyCompleter class from ipplib. It seemed redundant
4580 with the C-p,C-n history search functionality. Less code to
4587 with the C-p,C-n history search functionality. Less code to
4581 maintain.
4588 maintain.
4582
4589
4583 * Moved all the original ipython.py code into ipythonlib.py. Right
4590 * Moved all the original ipython.py code into ipythonlib.py. Right
4584 now it's just one big dump into a function called make_IPython, so
4591 now it's just one big dump into a function called make_IPython, so
4585 no real modularity has been gained. But at least it makes the
4592 no real modularity has been gained. But at least it makes the
4586 wrapper script tiny, and since ipythonlib is a module, it gets
4593 wrapper script tiny, and since ipythonlib is a module, it gets
4587 compiled and startup is much faster.
4594 compiled and startup is much faster.
4588
4595
4589 This is a reasobably 'deep' change, so we should test it for a
4596 This is a reasobably 'deep' change, so we should test it for a
4590 while without messing too much more with the code.
4597 while without messing too much more with the code.
4591
4598
4592 2001-11-21 Fernando Perez <fperez@colorado.edu>
4599 2001-11-21 Fernando Perez <fperez@colorado.edu>
4593
4600
4594 * Version 0.1.11 released, 0.1.12 opened for further work.
4601 * Version 0.1.11 released, 0.1.12 opened for further work.
4595
4602
4596 * Removed dependency on Itpl. It was only needed in one place. It
4603 * Removed dependency on Itpl. It was only needed in one place. It
4597 would be nice if this became part of python, though. It makes life
4604 would be nice if this became part of python, though. It makes life
4598 *a lot* easier in some cases.
4605 *a lot* easier in some cases.
4599
4606
4600 * Simplified the prefilter code a bit. Now all handlers are
4607 * Simplified the prefilter code a bit. Now all handlers are
4601 expected to explicitly return a value (at least a blank string).
4608 expected to explicitly return a value (at least a blank string).
4602
4609
4603 * Heavy edits in ipplib. Removed the help system altogether. Now
4610 * Heavy edits in ipplib. Removed the help system altogether. Now
4604 obj?/?? is used for inspecting objects, a magic @doc prints
4611 obj?/?? is used for inspecting objects, a magic @doc prints
4605 docstrings, and full-blown Python help is accessed via the 'help'
4612 docstrings, and full-blown Python help is accessed via the 'help'
4606 keyword. This cleans up a lot of code (less to maintain) and does
4613 keyword. This cleans up a lot of code (less to maintain) and does
4607 the job. Since 'help' is now a standard Python component, might as
4614 the job. Since 'help' is now a standard Python component, might as
4608 well use it and remove duplicate functionality.
4615 well use it and remove duplicate functionality.
4609
4616
4610 Also removed the option to use ipplib as a standalone program. By
4617 Also removed the option to use ipplib as a standalone program. By
4611 now it's too dependent on other parts of IPython to function alone.
4618 now it's too dependent on other parts of IPython to function alone.
4612
4619
4613 * Fixed bug in genutils.pager. It would crash if the pager was
4620 * Fixed bug in genutils.pager. It would crash if the pager was
4614 exited immediately after opening (broken pipe).
4621 exited immediately after opening (broken pipe).
4615
4622
4616 * Trimmed down the VerboseTB reporting a little. The header is
4623 * Trimmed down the VerboseTB reporting a little. The header is
4617 much shorter now and the repeated exception arguments at the end
4624 much shorter now and the repeated exception arguments at the end
4618 have been removed. For interactive use the old header seemed a bit
4625 have been removed. For interactive use the old header seemed a bit
4619 excessive.
4626 excessive.
4620
4627
4621 * Fixed small bug in output of @whos for variables with multi-word
4628 * Fixed small bug in output of @whos for variables with multi-word
4622 types (only first word was displayed).
4629 types (only first word was displayed).
4623
4630
4624 2001-11-17 Fernando Perez <fperez@colorado.edu>
4631 2001-11-17 Fernando Perez <fperez@colorado.edu>
4625
4632
4626 * Version 0.1.10 released, 0.1.11 opened for further work.
4633 * Version 0.1.10 released, 0.1.11 opened for further work.
4627
4634
4628 * Modified dirs and friends. dirs now *returns* the stack (not
4635 * Modified dirs and friends. dirs now *returns* the stack (not
4629 prints), so one can manipulate it as a variable. Convenient to
4636 prints), so one can manipulate it as a variable. Convenient to
4630 travel along many directories.
4637 travel along many directories.
4631
4638
4632 * Fixed bug in magic_pdef: would only work with functions with
4639 * Fixed bug in magic_pdef: would only work with functions with
4633 arguments with default values.
4640 arguments with default values.
4634
4641
4635 2001-11-14 Fernando Perez <fperez@colorado.edu>
4642 2001-11-14 Fernando Perez <fperez@colorado.edu>
4636
4643
4637 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4644 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4638 example with IPython. Various other minor fixes and cleanups.
4645 example with IPython. Various other minor fixes and cleanups.
4639
4646
4640 * Version 0.1.9 released, 0.1.10 opened for further work.
4647 * Version 0.1.9 released, 0.1.10 opened for further work.
4641
4648
4642 * Added sys.path to the list of directories searched in the
4649 * Added sys.path to the list of directories searched in the
4643 execfile= option. It used to be the current directory and the
4650 execfile= option. It used to be the current directory and the
4644 user's IPYTHONDIR only.
4651 user's IPYTHONDIR only.
4645
4652
4646 2001-11-13 Fernando Perez <fperez@colorado.edu>
4653 2001-11-13 Fernando Perez <fperez@colorado.edu>
4647
4654
4648 * Reinstated the raw_input/prefilter separation that Janko had
4655 * Reinstated the raw_input/prefilter separation that Janko had
4649 initially. This gives a more convenient setup for extending the
4656 initially. This gives a more convenient setup for extending the
4650 pre-processor from the outside: raw_input always gets a string,
4657 pre-processor from the outside: raw_input always gets a string,
4651 and prefilter has to process it. We can then redefine prefilter
4658 and prefilter has to process it. We can then redefine prefilter
4652 from the outside and implement extensions for special
4659 from the outside and implement extensions for special
4653 purposes.
4660 purposes.
4654
4661
4655 Today I got one for inputting PhysicalQuantity objects
4662 Today I got one for inputting PhysicalQuantity objects
4656 (from Scientific) without needing any function calls at
4663 (from Scientific) without needing any function calls at
4657 all. Extremely convenient, and it's all done as a user-level
4664 all. Extremely convenient, and it's all done as a user-level
4658 extension (no IPython code was touched). Now instead of:
4665 extension (no IPython code was touched). Now instead of:
4659 a = PhysicalQuantity(4.2,'m/s**2')
4666 a = PhysicalQuantity(4.2,'m/s**2')
4660 one can simply say
4667 one can simply say
4661 a = 4.2 m/s**2
4668 a = 4.2 m/s**2
4662 or even
4669 or even
4663 a = 4.2 m/s^2
4670 a = 4.2 m/s^2
4664
4671
4665 I use this, but it's also a proof of concept: IPython really is
4672 I use this, but it's also a proof of concept: IPython really is
4666 fully user-extensible, even at the level of the parsing of the
4673 fully user-extensible, even at the level of the parsing of the
4667 command line. It's not trivial, but it's perfectly doable.
4674 command line. It's not trivial, but it's perfectly doable.
4668
4675
4669 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4676 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4670 the problem of modules being loaded in the inverse order in which
4677 the problem of modules being loaded in the inverse order in which
4671 they were defined in
4678 they were defined in
4672
4679
4673 * Version 0.1.8 released, 0.1.9 opened for further work.
4680 * Version 0.1.8 released, 0.1.9 opened for further work.
4674
4681
4675 * Added magics pdef, source and file. They respectively show the
4682 * Added magics pdef, source and file. They respectively show the
4676 definition line ('prototype' in C), source code and full python
4683 definition line ('prototype' in C), source code and full python
4677 file for any callable object. The object inspector oinfo uses
4684 file for any callable object. The object inspector oinfo uses
4678 these to show the same information.
4685 these to show the same information.
4679
4686
4680 * Version 0.1.7 released, 0.1.8 opened for further work.
4687 * Version 0.1.7 released, 0.1.8 opened for further work.
4681
4688
4682 * Separated all the magic functions into a class called Magic. The
4689 * Separated all the magic functions into a class called Magic. The
4683 InteractiveShell class was becoming too big for Xemacs to handle
4690 InteractiveShell class was becoming too big for Xemacs to handle
4684 (de-indenting a line would lock it up for 10 seconds while it
4691 (de-indenting a line would lock it up for 10 seconds while it
4685 backtracked on the whole class!)
4692 backtracked on the whole class!)
4686
4693
4687 FIXME: didn't work. It can be done, but right now namespaces are
4694 FIXME: didn't work. It can be done, but right now namespaces are
4688 all messed up. Do it later (reverted it for now, so at least
4695 all messed up. Do it later (reverted it for now, so at least
4689 everything works as before).
4696 everything works as before).
4690
4697
4691 * Got the object introspection system (magic_oinfo) working! I
4698 * Got the object introspection system (magic_oinfo) working! I
4692 think this is pretty much ready for release to Janko, so he can
4699 think this is pretty much ready for release to Janko, so he can
4693 test it for a while and then announce it. Pretty much 100% of what
4700 test it for a while and then announce it. Pretty much 100% of what
4694 I wanted for the 'phase 1' release is ready. Happy, tired.
4701 I wanted for the 'phase 1' release is ready. Happy, tired.
4695
4702
4696 2001-11-12 Fernando Perez <fperez@colorado.edu>
4703 2001-11-12 Fernando Perez <fperez@colorado.edu>
4697
4704
4698 * Version 0.1.6 released, 0.1.7 opened for further work.
4705 * Version 0.1.6 released, 0.1.7 opened for further work.
4699
4706
4700 * Fixed bug in printing: it used to test for truth before
4707 * Fixed bug in printing: it used to test for truth before
4701 printing, so 0 wouldn't print. Now checks for None.
4708 printing, so 0 wouldn't print. Now checks for None.
4702
4709
4703 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4710 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4704 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4711 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4705 reaches by hand into the outputcache. Think of a better way to do
4712 reaches by hand into the outputcache. Think of a better way to do
4706 this later.
4713 this later.
4707
4714
4708 * Various small fixes thanks to Nathan's comments.
4715 * Various small fixes thanks to Nathan's comments.
4709
4716
4710 * Changed magic_pprint to magic_Pprint. This way it doesn't
4717 * Changed magic_pprint to magic_Pprint. This way it doesn't
4711 collide with pprint() and the name is consistent with the command
4718 collide with pprint() and the name is consistent with the command
4712 line option.
4719 line option.
4713
4720
4714 * Changed prompt counter behavior to be fully like
4721 * Changed prompt counter behavior to be fully like
4715 Mathematica's. That is, even input that doesn't return a result
4722 Mathematica's. That is, even input that doesn't return a result
4716 raises the prompt counter. The old behavior was kind of confusing
4723 raises the prompt counter. The old behavior was kind of confusing
4717 (getting the same prompt number several times if the operation
4724 (getting the same prompt number several times if the operation
4718 didn't return a result).
4725 didn't return a result).
4719
4726
4720 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4727 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4721
4728
4722 * Fixed -Classic mode (wasn't working anymore).
4729 * Fixed -Classic mode (wasn't working anymore).
4723
4730
4724 * Added colored prompts using Nathan's new code. Colors are
4731 * Added colored prompts using Nathan's new code. Colors are
4725 currently hardwired, they can be user-configurable. For
4732 currently hardwired, they can be user-configurable. For
4726 developers, they can be chosen in file ipythonlib.py, at the
4733 developers, they can be chosen in file ipythonlib.py, at the
4727 beginning of the CachedOutput class def.
4734 beginning of the CachedOutput class def.
4728
4735
4729 2001-11-11 Fernando Perez <fperez@colorado.edu>
4736 2001-11-11 Fernando Perez <fperez@colorado.edu>
4730
4737
4731 * Version 0.1.5 released, 0.1.6 opened for further work.
4738 * Version 0.1.5 released, 0.1.6 opened for further work.
4732
4739
4733 * Changed magic_env to *return* the environment as a dict (not to
4740 * Changed magic_env to *return* the environment as a dict (not to
4734 print it). This way it prints, but it can also be processed.
4741 print it). This way it prints, but it can also be processed.
4735
4742
4736 * Added Verbose exception reporting to interactive
4743 * Added Verbose exception reporting to interactive
4737 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4744 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4738 traceback. Had to make some changes to the ultraTB file. This is
4745 traceback. Had to make some changes to the ultraTB file. This is
4739 probably the last 'big' thing in my mental todo list. This ties
4746 probably the last 'big' thing in my mental todo list. This ties
4740 in with the next entry:
4747 in with the next entry:
4741
4748
4742 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4749 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4743 has to specify is Plain, Color or Verbose for all exception
4750 has to specify is Plain, Color or Verbose for all exception
4744 handling.
4751 handling.
4745
4752
4746 * Removed ShellServices option. All this can really be done via
4753 * Removed ShellServices option. All this can really be done via
4747 the magic system. It's easier to extend, cleaner and has automatic
4754 the magic system. It's easier to extend, cleaner and has automatic
4748 namespace protection and documentation.
4755 namespace protection and documentation.
4749
4756
4750 2001-11-09 Fernando Perez <fperez@colorado.edu>
4757 2001-11-09 Fernando Perez <fperez@colorado.edu>
4751
4758
4752 * Fixed bug in output cache flushing (missing parameter to
4759 * Fixed bug in output cache flushing (missing parameter to
4753 __init__). Other small bugs fixed (found using pychecker).
4760 __init__). Other small bugs fixed (found using pychecker).
4754
4761
4755 * Version 0.1.4 opened for bugfixing.
4762 * Version 0.1.4 opened for bugfixing.
4756
4763
4757 2001-11-07 Fernando Perez <fperez@colorado.edu>
4764 2001-11-07 Fernando Perez <fperez@colorado.edu>
4758
4765
4759 * Version 0.1.3 released, mainly because of the raw_input bug.
4766 * Version 0.1.3 released, mainly because of the raw_input bug.
4760
4767
4761 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4768 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4762 and when testing for whether things were callable, a call could
4769 and when testing for whether things were callable, a call could
4763 actually be made to certain functions. They would get called again
4770 actually be made to certain functions. They would get called again
4764 once 'really' executed, with a resulting double call. A disaster
4771 once 'really' executed, with a resulting double call. A disaster
4765 in many cases (list.reverse() would never work!).
4772 in many cases (list.reverse() would never work!).
4766
4773
4767 * Removed prefilter() function, moved its code to raw_input (which
4774 * Removed prefilter() function, moved its code to raw_input (which
4768 after all was just a near-empty caller for prefilter). This saves
4775 after all was just a near-empty caller for prefilter). This saves
4769 a function call on every prompt, and simplifies the class a tiny bit.
4776 a function call on every prompt, and simplifies the class a tiny bit.
4770
4777
4771 * Fix _ip to __ip name in magic example file.
4778 * Fix _ip to __ip name in magic example file.
4772
4779
4773 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4780 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4774 work with non-gnu versions of tar.
4781 work with non-gnu versions of tar.
4775
4782
4776 2001-11-06 Fernando Perez <fperez@colorado.edu>
4783 2001-11-06 Fernando Perez <fperez@colorado.edu>
4777
4784
4778 * Version 0.1.2. Just to keep track of the recent changes.
4785 * Version 0.1.2. Just to keep track of the recent changes.
4779
4786
4780 * Fixed nasty bug in output prompt routine. It used to check 'if
4787 * Fixed nasty bug in output prompt routine. It used to check 'if
4781 arg != None...'. Problem is, this fails if arg implements a
4788 arg != None...'. Problem is, this fails if arg implements a
4782 special comparison (__cmp__) which disallows comparing to
4789 special comparison (__cmp__) which disallows comparing to
4783 None. Found it when trying to use the PhysicalQuantity module from
4790 None. Found it when trying to use the PhysicalQuantity module from
4784 ScientificPython.
4791 ScientificPython.
4785
4792
4786 2001-11-05 Fernando Perez <fperez@colorado.edu>
4793 2001-11-05 Fernando Perez <fperez@colorado.edu>
4787
4794
4788 * Also added dirs. Now the pushd/popd/dirs family functions
4795 * Also added dirs. Now the pushd/popd/dirs family functions
4789 basically like the shell, with the added convenience of going home
4796 basically like the shell, with the added convenience of going home
4790 when called with no args.
4797 when called with no args.
4791
4798
4792 * pushd/popd slightly modified to mimic shell behavior more
4799 * pushd/popd slightly modified to mimic shell behavior more
4793 closely.
4800 closely.
4794
4801
4795 * Added env,pushd,popd from ShellServices as magic functions. I
4802 * Added env,pushd,popd from ShellServices as magic functions. I
4796 think the cleanest will be to port all desired functions from
4803 think the cleanest will be to port all desired functions from
4797 ShellServices as magics and remove ShellServices altogether. This
4804 ShellServices as magics and remove ShellServices altogether. This
4798 will provide a single, clean way of adding functionality
4805 will provide a single, clean way of adding functionality
4799 (shell-type or otherwise) to IP.
4806 (shell-type or otherwise) to IP.
4800
4807
4801 2001-11-04 Fernando Perez <fperez@colorado.edu>
4808 2001-11-04 Fernando Perez <fperez@colorado.edu>
4802
4809
4803 * Added .ipython/ directory to sys.path. This way users can keep
4810 * Added .ipython/ directory to sys.path. This way users can keep
4804 customizations there and access them via import.
4811 customizations there and access them via import.
4805
4812
4806 2001-11-03 Fernando Perez <fperez@colorado.edu>
4813 2001-11-03 Fernando Perez <fperez@colorado.edu>
4807
4814
4808 * Opened version 0.1.1 for new changes.
4815 * Opened version 0.1.1 for new changes.
4809
4816
4810 * Changed version number to 0.1.0: first 'public' release, sent to
4817 * Changed version number to 0.1.0: first 'public' release, sent to
4811 Nathan and Janko.
4818 Nathan and Janko.
4812
4819
4813 * Lots of small fixes and tweaks.
4820 * Lots of small fixes and tweaks.
4814
4821
4815 * Minor changes to whos format. Now strings are shown, snipped if
4822 * Minor changes to whos format. Now strings are shown, snipped if
4816 too long.
4823 too long.
4817
4824
4818 * Changed ShellServices to work on __main__ so they show up in @who
4825 * Changed ShellServices to work on __main__ so they show up in @who
4819
4826
4820 * Help also works with ? at the end of a line:
4827 * Help also works with ? at the end of a line:
4821 ?sin and sin?
4828 ?sin and sin?
4822 both produce the same effect. This is nice, as often I use the
4829 both produce the same effect. This is nice, as often I use the
4823 tab-complete to find the name of a method, but I used to then have
4830 tab-complete to find the name of a method, but I used to then have
4824 to go to the beginning of the line to put a ? if I wanted more
4831 to go to the beginning of the line to put a ? if I wanted more
4825 info. Now I can just add the ? and hit return. Convenient.
4832 info. Now I can just add the ? and hit return. Convenient.
4826
4833
4827 2001-11-02 Fernando Perez <fperez@colorado.edu>
4834 2001-11-02 Fernando Perez <fperez@colorado.edu>
4828
4835
4829 * Python version check (>=2.1) added.
4836 * Python version check (>=2.1) added.
4830
4837
4831 * Added LazyPython documentation. At this point the docs are quite
4838 * Added LazyPython documentation. At this point the docs are quite
4832 a mess. A cleanup is in order.
4839 a mess. A cleanup is in order.
4833
4840
4834 * Auto-installer created. For some bizarre reason, the zipfiles
4841 * Auto-installer created. For some bizarre reason, the zipfiles
4835 module isn't working on my system. So I made a tar version
4842 module isn't working on my system. So I made a tar version
4836 (hopefully the command line options in various systems won't kill
4843 (hopefully the command line options in various systems won't kill
4837 me).
4844 me).
4838
4845
4839 * Fixes to Struct in genutils. Now all dictionary-like methods are
4846 * Fixes to Struct in genutils. Now all dictionary-like methods are
4840 protected (reasonably).
4847 protected (reasonably).
4841
4848
4842 * Added pager function to genutils and changed ? to print usage
4849 * Added pager function to genutils and changed ? to print usage
4843 note through it (it was too long).
4850 note through it (it was too long).
4844
4851
4845 * Added the LazyPython functionality. Works great! I changed the
4852 * Added the LazyPython functionality. Works great! I changed the
4846 auto-quote escape to ';', it's on home row and next to '. But
4853 auto-quote escape to ';', it's on home row and next to '. But
4847 both auto-quote and auto-paren (still /) escapes are command-line
4854 both auto-quote and auto-paren (still /) escapes are command-line
4848 parameters.
4855 parameters.
4849
4856
4850
4857
4851 2001-11-01 Fernando Perez <fperez@colorado.edu>
4858 2001-11-01 Fernando Perez <fperez@colorado.edu>
4852
4859
4853 * Version changed to 0.0.7. Fairly large change: configuration now
4860 * Version changed to 0.0.7. Fairly large change: configuration now
4854 is all stored in a directory, by default .ipython. There, all
4861 is all stored in a directory, by default .ipython. There, all
4855 config files have normal looking names (not .names)
4862 config files have normal looking names (not .names)
4856
4863
4857 * Version 0.0.6 Released first to Lucas and Archie as a test
4864 * Version 0.0.6 Released first to Lucas and Archie as a test
4858 run. Since it's the first 'semi-public' release, change version to
4865 run. Since it's the first 'semi-public' release, change version to
4859 > 0.0.6 for any changes now.
4866 > 0.0.6 for any changes now.
4860
4867
4861 * Stuff I had put in the ipplib.py changelog:
4868 * Stuff I had put in the ipplib.py changelog:
4862
4869
4863 Changes to InteractiveShell:
4870 Changes to InteractiveShell:
4864
4871
4865 - Made the usage message a parameter.
4872 - Made the usage message a parameter.
4866
4873
4867 - Require the name of the shell variable to be given. It's a bit
4874 - Require the name of the shell variable to be given. It's a bit
4868 of a hack, but allows the name 'shell' not to be hardwire in the
4875 of a hack, but allows the name 'shell' not to be hardwire in the
4869 magic (@) handler, which is problematic b/c it requires
4876 magic (@) handler, which is problematic b/c it requires
4870 polluting the global namespace with 'shell'. This in turn is
4877 polluting the global namespace with 'shell'. This in turn is
4871 fragile: if a user redefines a variable called shell, things
4878 fragile: if a user redefines a variable called shell, things
4872 break.
4879 break.
4873
4880
4874 - magic @: all functions available through @ need to be defined
4881 - magic @: all functions available through @ need to be defined
4875 as magic_<name>, even though they can be called simply as
4882 as magic_<name>, even though they can be called simply as
4876 @<name>. This allows the special command @magic to gather
4883 @<name>. This allows the special command @magic to gather
4877 information automatically about all existing magic functions,
4884 information automatically about all existing magic functions,
4878 even if they are run-time user extensions, by parsing the shell
4885 even if they are run-time user extensions, by parsing the shell
4879 instance __dict__ looking for special magic_ names.
4886 instance __dict__ looking for special magic_ names.
4880
4887
4881 - mainloop: added *two* local namespace parameters. This allows
4888 - mainloop: added *two* local namespace parameters. This allows
4882 the class to differentiate between parameters which were there
4889 the class to differentiate between parameters which were there
4883 before and after command line initialization was processed. This
4890 before and after command line initialization was processed. This
4884 way, later @who can show things loaded at startup by the
4891 way, later @who can show things loaded at startup by the
4885 user. This trick was necessary to make session saving/reloading
4892 user. This trick was necessary to make session saving/reloading
4886 really work: ideally after saving/exiting/reloading a session,
4893 really work: ideally after saving/exiting/reloading a session,
4887 *everythin* should look the same, including the output of @who. I
4894 *everythin* should look the same, including the output of @who. I
4888 was only able to make this work with this double namespace
4895 was only able to make this work with this double namespace
4889 trick.
4896 trick.
4890
4897
4891 - added a header to the logfile which allows (almost) full
4898 - added a header to the logfile which allows (almost) full
4892 session restoring.
4899 session restoring.
4893
4900
4894 - prepend lines beginning with @ or !, with a and log
4901 - prepend lines beginning with @ or !, with a and log
4895 them. Why? !lines: may be useful to know what you did @lines:
4902 them. Why? !lines: may be useful to know what you did @lines:
4896 they may affect session state. So when restoring a session, at
4903 they may affect session state. So when restoring a session, at
4897 least inform the user of their presence. I couldn't quite get
4904 least inform the user of their presence. I couldn't quite get
4898 them to properly re-execute, but at least the user is warned.
4905 them to properly re-execute, but at least the user is warned.
4899
4906
4900 * Started ChangeLog.
4907 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now