##// END OF EJS Templates
Made ! and !! shell escapes work again in multiline statements.
vivainio -
Show More
@@ -1,2157 +1,2157 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 newer.
5 Requires Python 2.1 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 1007 2006-01-12 17:15:41Z vivainio $
9 $Id: iplib.py 1012 2006-01-12 21:29:37Z 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
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 ini_spaces_re = re.compile(r'^(\s+)')
85 ini_spaces_re = re.compile(r'^(\s+)')
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 def softspace(file, newvalue):
92 def softspace(file, newvalue):
93 """Copied from code.py, to remove the dependency"""
93 """Copied from code.py, to remove the dependency"""
94 oldvalue = 0
94 oldvalue = 0
95 try:
95 try:
96 oldvalue = file.softspace
96 oldvalue = file.softspace
97 except AttributeError:
97 except AttributeError:
98 pass
98 pass
99 try:
99 try:
100 file.softspace = newvalue
100 file.softspace = newvalue
101 except (AttributeError, TypeError):
101 except (AttributeError, TypeError):
102 # "attribute-less object" or "read-only attributes"
102 # "attribute-less object" or "read-only attributes"
103 pass
103 pass
104 return oldvalue
104 return oldvalue
105
105
106
106
107 #****************************************************************************
107 #****************************************************************************
108 # Local use exceptions
108 # Local use exceptions
109 class SpaceInInput(exceptions.Exception): pass
109 class SpaceInInput(exceptions.Exception): pass
110
110
111
111
112 #****************************************************************************
112 #****************************************************************************
113 # Local use classes
113 # Local use classes
114 class Bunch: pass
114 class Bunch: pass
115
115
116 class Undefined: pass
116 class Undefined: pass
117
117
118 class InputList(list):
118 class InputList(list):
119 """Class to store user input.
119 """Class to store user input.
120
120
121 It's basically a list, but slices return a string instead of a list, thus
121 It's basically a list, but slices return a string instead of a list, thus
122 allowing things like (assuming 'In' is an instance):
122 allowing things like (assuming 'In' is an instance):
123
123
124 exec In[4:7]
124 exec In[4:7]
125
125
126 or
126 or
127
127
128 exec In[5:9] + In[14] + In[21:25]"""
128 exec In[5:9] + In[14] + In[21:25]"""
129
129
130 def __getslice__(self,i,j):
130 def __getslice__(self,i,j):
131 return ''.join(list.__getslice__(self,i,j))
131 return ''.join(list.__getslice__(self,i,j))
132
132
133 class SyntaxTB(ultraTB.ListTB):
133 class SyntaxTB(ultraTB.ListTB):
134 """Extension which holds some state: the last exception value"""
134 """Extension which holds some state: the last exception value"""
135
135
136 def __init__(self,color_scheme = 'NoColor'):
136 def __init__(self,color_scheme = 'NoColor'):
137 ultraTB.ListTB.__init__(self,color_scheme)
137 ultraTB.ListTB.__init__(self,color_scheme)
138 self.last_syntax_error = None
138 self.last_syntax_error = None
139
139
140 def __call__(self, etype, value, elist):
140 def __call__(self, etype, value, elist):
141 self.last_syntax_error = value
141 self.last_syntax_error = value
142 ultraTB.ListTB.__call__(self,etype,value,elist)
142 ultraTB.ListTB.__call__(self,etype,value,elist)
143
143
144 def clear_err_state(self):
144 def clear_err_state(self):
145 """Return the current error state and clear it"""
145 """Return the current error state and clear it"""
146 e = self.last_syntax_error
146 e = self.last_syntax_error
147 self.last_syntax_error = None
147 self.last_syntax_error = None
148 return e
148 return e
149
149
150 #****************************************************************************
150 #****************************************************************************
151 # Main IPython class
151 # Main IPython class
152
152
153 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
153 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
154 # until a full rewrite is made. I've cleaned all cross-class uses of
154 # until a full rewrite is made. I've cleaned all cross-class uses of
155 # attributes and methods, but too much user code out there relies on the
155 # attributes and methods, but too much user code out there relies on the
156 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
156 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
157 #
157 #
158 # But at least now, all the pieces have been separated and we could, in
158 # But at least now, all the pieces have been separated and we could, in
159 # principle, stop using the mixin. This will ease the transition to the
159 # principle, stop using the mixin. This will ease the transition to the
160 # chainsaw branch.
160 # chainsaw branch.
161
161
162 # For reference, the following is the list of 'self.foo' uses in the Magic
162 # For reference, the following is the list of 'self.foo' uses in the Magic
163 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
163 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
164 # class, to prevent clashes.
164 # class, to prevent clashes.
165
165
166 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
166 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
167 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
167 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
168 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
168 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
169 # 'self.value']
169 # 'self.value']
170
170
171 class InteractiveShell(object,Magic):
171 class InteractiveShell(object,Magic):
172 """An enhanced console for Python."""
172 """An enhanced console for Python."""
173
173
174 # class attribute to indicate whether the class supports threads or not.
174 # class attribute to indicate whether the class supports threads or not.
175 # Subclasses with thread support should override this as needed.
175 # Subclasses with thread support should override this as needed.
176 isthreaded = False
176 isthreaded = False
177
177
178 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
178 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
179 user_ns = None,user_global_ns=None,banner2='',
179 user_ns = None,user_global_ns=None,banner2='',
180 custom_exceptions=((),None),embedded=False):
180 custom_exceptions=((),None),embedded=False):
181
181
182 # some minimal strict typechecks. For some core data structures, I
182 # some minimal strict typechecks. For some core data structures, I
183 # want actual basic python types, not just anything that looks like
183 # want actual basic python types, not just anything that looks like
184 # one. This is especially true for namespaces.
184 # one. This is especially true for namespaces.
185 for ns in (user_ns,user_global_ns):
185 for ns in (user_ns,user_global_ns):
186 if ns is not None and type(ns) != types.DictType:
186 if ns is not None and type(ns) != types.DictType:
187 raise TypeError,'namespace must be a dictionary'
187 raise TypeError,'namespace must be a dictionary'
188
188
189 # Job manager (for jobs run as background threads)
189 # Job manager (for jobs run as background threads)
190 self.jobs = BackgroundJobManager()
190 self.jobs = BackgroundJobManager()
191
191
192 # track which builtins we add, so we can clean up later
192 # track which builtins we add, so we can clean up later
193 self.builtins_added = {}
193 self.builtins_added = {}
194 # This method will add the necessary builtins for operation, but
194 # This method will add the necessary builtins for operation, but
195 # tracking what it did via the builtins_added dict.
195 # tracking what it did via the builtins_added dict.
196 self.add_builtins()
196 self.add_builtins()
197
197
198 # Do the intuitively correct thing for quit/exit: we remove the
198 # Do the intuitively correct thing for quit/exit: we remove the
199 # builtins if they exist, and our own magics will deal with this
199 # builtins if they exist, and our own magics will deal with this
200 try:
200 try:
201 del __builtin__.exit, __builtin__.quit
201 del __builtin__.exit, __builtin__.quit
202 except AttributeError:
202 except AttributeError:
203 pass
203 pass
204
204
205 # Store the actual shell's name
205 # Store the actual shell's name
206 self.name = name
206 self.name = name
207
207
208 # We need to know whether the instance is meant for embedding, since
208 # We need to know whether the instance is meant for embedding, since
209 # global/local namespaces need to be handled differently in that case
209 # global/local namespaces need to be handled differently in that case
210 self.embedded = embedded
210 self.embedded = embedded
211
211
212 # command compiler
212 # command compiler
213 self.compile = codeop.CommandCompiler()
213 self.compile = codeop.CommandCompiler()
214
214
215 # User input buffer
215 # User input buffer
216 self.buffer = []
216 self.buffer = []
217
217
218 # Default name given in compilation of code
218 # Default name given in compilation of code
219 self.filename = '<ipython console>'
219 self.filename = '<ipython console>'
220
220
221 # Make an empty namespace, which extension writers can rely on both
221 # Make an empty namespace, which extension writers can rely on both
222 # existing and NEVER being used by ipython itself. This gives them a
222 # existing and NEVER being used by ipython itself. This gives them a
223 # convenient location for storing additional information and state
223 # convenient location for storing additional information and state
224 # their extensions may require, without fear of collisions with other
224 # their extensions may require, without fear of collisions with other
225 # ipython names that may develop later.
225 # ipython names that may develop later.
226 self.meta = Bunch()
226 self.meta = Bunch()
227
227
228 # Create the namespace where the user will operate. user_ns is
228 # Create the namespace where the user will operate. user_ns is
229 # normally the only one used, and it is passed to the exec calls as
229 # normally the only one used, and it is passed to the exec calls as
230 # the locals argument. But we do carry a user_global_ns namespace
230 # the locals argument. But we do carry a user_global_ns namespace
231 # given as the exec 'globals' argument, This is useful in embedding
231 # given as the exec 'globals' argument, This is useful in embedding
232 # situations where the ipython shell opens in a context where the
232 # situations where the ipython shell opens in a context where the
233 # distinction between locals and globals is meaningful.
233 # distinction between locals and globals is meaningful.
234
234
235 # FIXME. For some strange reason, __builtins__ is showing up at user
235 # FIXME. For some strange reason, __builtins__ is showing up at user
236 # level as a dict instead of a module. This is a manual fix, but I
236 # level as a dict instead of a module. This is a manual fix, but I
237 # should really track down where the problem is coming from. Alex
237 # should really track down where the problem is coming from. Alex
238 # Schmolck reported this problem first.
238 # Schmolck reported this problem first.
239
239
240 # A useful post by Alex Martelli on this topic:
240 # A useful post by Alex Martelli on this topic:
241 # Re: inconsistent value from __builtins__
241 # Re: inconsistent value from __builtins__
242 # Von: Alex Martelli <aleaxit@yahoo.com>
242 # Von: Alex Martelli <aleaxit@yahoo.com>
243 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
243 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
244 # Gruppen: comp.lang.python
244 # Gruppen: comp.lang.python
245
245
246 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
246 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
247 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
247 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
248 # > <type 'dict'>
248 # > <type 'dict'>
249 # > >>> print type(__builtins__)
249 # > >>> print type(__builtins__)
250 # > <type 'module'>
250 # > <type 'module'>
251 # > Is this difference in return value intentional?
251 # > Is this difference in return value intentional?
252
252
253 # Well, it's documented that '__builtins__' can be either a dictionary
253 # Well, it's documented that '__builtins__' can be either a dictionary
254 # or a module, and it's been that way for a long time. Whether it's
254 # or a module, and it's been that way for a long time. Whether it's
255 # intentional (or sensible), I don't know. In any case, the idea is
255 # intentional (or sensible), I don't know. In any case, the idea is
256 # that if you need to access the built-in namespace directly, you
256 # that if you need to access the built-in namespace directly, you
257 # should start with "import __builtin__" (note, no 's') which will
257 # should start with "import __builtin__" (note, no 's') which will
258 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
258 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
259
259
260 if user_ns is None:
260 if user_ns is None:
261 # Set __name__ to __main__ to better match the behavior of the
261 # Set __name__ to __main__ to better match the behavior of the
262 # normal interpreter.
262 # normal interpreter.
263 user_ns = {'__name__' :'__main__',
263 user_ns = {'__name__' :'__main__',
264 '__builtins__' : __builtin__,
264 '__builtins__' : __builtin__,
265 }
265 }
266
266
267 if user_global_ns is None:
267 if user_global_ns is None:
268 user_global_ns = {}
268 user_global_ns = {}
269
269
270 # Assign namespaces
270 # Assign namespaces
271 # This is the namespace where all normal user variables live
271 # This is the namespace where all normal user variables live
272 self.user_ns = user_ns
272 self.user_ns = user_ns
273 # Embedded instances require a separate namespace for globals.
273 # Embedded instances require a separate namespace for globals.
274 # Normally this one is unused by non-embedded instances.
274 # Normally this one is unused by non-embedded instances.
275 self.user_global_ns = user_global_ns
275 self.user_global_ns = user_global_ns
276 # A namespace to keep track of internal data structures to prevent
276 # A namespace to keep track of internal data structures to prevent
277 # them from cluttering user-visible stuff. Will be updated later
277 # them from cluttering user-visible stuff. Will be updated later
278 self.internal_ns = {}
278 self.internal_ns = {}
279
279
280 # Namespace of system aliases. Each entry in the alias
280 # Namespace of system aliases. Each entry in the alias
281 # table must be a 2-tuple of the form (N,name), where N is the number
281 # table must be a 2-tuple of the form (N,name), where N is the number
282 # of positional arguments of the alias.
282 # of positional arguments of the alias.
283 self.alias_table = {}
283 self.alias_table = {}
284
284
285 # A table holding all the namespaces IPython deals with, so that
285 # A table holding all the namespaces IPython deals with, so that
286 # introspection facilities can search easily.
286 # introspection facilities can search easily.
287 self.ns_table = {'user':user_ns,
287 self.ns_table = {'user':user_ns,
288 'user_global':user_global_ns,
288 'user_global':user_global_ns,
289 'alias':self.alias_table,
289 'alias':self.alias_table,
290 'internal':self.internal_ns,
290 'internal':self.internal_ns,
291 'builtin':__builtin__.__dict__
291 'builtin':__builtin__.__dict__
292 }
292 }
293
293
294 # The user namespace MUST have a pointer to the shell itself.
294 # The user namespace MUST have a pointer to the shell itself.
295 self.user_ns[name] = self
295 self.user_ns[name] = self
296
296
297 # We need to insert into sys.modules something that looks like a
297 # We need to insert into sys.modules something that looks like a
298 # module but which accesses the IPython namespace, for shelve and
298 # module but which accesses the IPython namespace, for shelve and
299 # pickle to work interactively. Normally they rely on getting
299 # pickle to work interactively. Normally they rely on getting
300 # everything out of __main__, but for embedding purposes each IPython
300 # everything out of __main__, but for embedding purposes each IPython
301 # instance has its own private namespace, so we can't go shoving
301 # instance has its own private namespace, so we can't go shoving
302 # everything into __main__.
302 # everything into __main__.
303
303
304 # note, however, that we should only do this for non-embedded
304 # note, however, that we should only do this for non-embedded
305 # ipythons, which really mimic the __main__.__dict__ with their own
305 # ipythons, which really mimic the __main__.__dict__ with their own
306 # namespace. Embedded instances, on the other hand, should not do
306 # namespace. Embedded instances, on the other hand, should not do
307 # this because they need to manage the user local/global namespaces
307 # this because they need to manage the user local/global namespaces
308 # only, but they live within a 'normal' __main__ (meaning, they
308 # only, but they live within a 'normal' __main__ (meaning, they
309 # shouldn't overtake the execution environment of the script they're
309 # shouldn't overtake the execution environment of the script they're
310 # embedded in).
310 # embedded in).
311
311
312 if not embedded:
312 if not embedded:
313 try:
313 try:
314 main_name = self.user_ns['__name__']
314 main_name = self.user_ns['__name__']
315 except KeyError:
315 except KeyError:
316 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
316 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
317 else:
317 else:
318 #print "pickle hack in place" # dbg
318 #print "pickle hack in place" # dbg
319 #print 'main_name:',main_name # dbg
319 #print 'main_name:',main_name # dbg
320 sys.modules[main_name] = FakeModule(self.user_ns)
320 sys.modules[main_name] = FakeModule(self.user_ns)
321
321
322 # List of input with multi-line handling.
322 # List of input with multi-line handling.
323 # Fill its zero entry, user counter starts at 1
323 # Fill its zero entry, user counter starts at 1
324 self.input_hist = InputList(['\n'])
324 self.input_hist = InputList(['\n'])
325
325
326 # list of visited directories
326 # list of visited directories
327 try:
327 try:
328 self.dir_hist = [os.getcwd()]
328 self.dir_hist = [os.getcwd()]
329 except IOError, e:
329 except IOError, e:
330 self.dir_hist = []
330 self.dir_hist = []
331
331
332 # dict of output history
332 # dict of output history
333 self.output_hist = {}
333 self.output_hist = {}
334
334
335 # dict of things NOT to alias (keywords, builtins and some magics)
335 # dict of things NOT to alias (keywords, builtins and some magics)
336 no_alias = {}
336 no_alias = {}
337 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
337 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
338 for key in keyword.kwlist + no_alias_magics:
338 for key in keyword.kwlist + no_alias_magics:
339 no_alias[key] = 1
339 no_alias[key] = 1
340 no_alias.update(__builtin__.__dict__)
340 no_alias.update(__builtin__.__dict__)
341 self.no_alias = no_alias
341 self.no_alias = no_alias
342
342
343 # make global variables for user access to these
343 # make global variables for user access to these
344 self.user_ns['_ih'] = self.input_hist
344 self.user_ns['_ih'] = self.input_hist
345 self.user_ns['_oh'] = self.output_hist
345 self.user_ns['_oh'] = self.output_hist
346 self.user_ns['_dh'] = self.dir_hist
346 self.user_ns['_dh'] = self.dir_hist
347
347
348 # user aliases to input and output histories
348 # user aliases to input and output histories
349 self.user_ns['In'] = self.input_hist
349 self.user_ns['In'] = self.input_hist
350 self.user_ns['Out'] = self.output_hist
350 self.user_ns['Out'] = self.output_hist
351
351
352 # Object variable to store code object waiting execution. This is
352 # Object variable to store code object waiting execution. This is
353 # used mainly by the multithreaded shells, but it can come in handy in
353 # used mainly by the multithreaded shells, but it can come in handy in
354 # other situations. No need to use a Queue here, since it's a single
354 # other situations. No need to use a Queue here, since it's a single
355 # item which gets cleared once run.
355 # item which gets cleared once run.
356 self.code_to_run = None
356 self.code_to_run = None
357
357
358 # escapes for automatic behavior on the command line
358 # escapes for automatic behavior on the command line
359 self.ESC_SHELL = '!'
359 self.ESC_SHELL = '!'
360 self.ESC_HELP = '?'
360 self.ESC_HELP = '?'
361 self.ESC_MAGIC = '%'
361 self.ESC_MAGIC = '%'
362 self.ESC_QUOTE = ','
362 self.ESC_QUOTE = ','
363 self.ESC_QUOTE2 = ';'
363 self.ESC_QUOTE2 = ';'
364 self.ESC_PAREN = '/'
364 self.ESC_PAREN = '/'
365
365
366 # And their associated handlers
366 # And their associated handlers
367 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
367 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
368 self.ESC_QUOTE : self.handle_auto,
368 self.ESC_QUOTE : self.handle_auto,
369 self.ESC_QUOTE2 : self.handle_auto,
369 self.ESC_QUOTE2 : self.handle_auto,
370 self.ESC_MAGIC : self.handle_magic,
370 self.ESC_MAGIC : self.handle_magic,
371 self.ESC_HELP : self.handle_help,
371 self.ESC_HELP : self.handle_help,
372 self.ESC_SHELL : self.handle_shell_escape,
372 self.ESC_SHELL : self.handle_shell_escape,
373 }
373 }
374
374
375 # class initializations
375 # class initializations
376 Magic.__init__(self,self)
376 Magic.__init__(self,self)
377
377
378 # Python source parser/formatter for syntax highlighting
378 # Python source parser/formatter for syntax highlighting
379 pyformat = PyColorize.Parser().format
379 pyformat = PyColorize.Parser().format
380 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
380 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
381
381
382 # hooks holds pointers used for user-side customizations
382 # hooks holds pointers used for user-side customizations
383 self.hooks = Struct()
383 self.hooks = Struct()
384
384
385 # Set all default hooks, defined in the IPython.hooks module.
385 # Set all default hooks, defined in the IPython.hooks module.
386 hooks = IPython.hooks
386 hooks = IPython.hooks
387 for hook_name in hooks.__all__:
387 for hook_name in hooks.__all__:
388 self.set_hook(hook_name,getattr(hooks,hook_name))
388 self.set_hook(hook_name,getattr(hooks,hook_name))
389
389
390 # Flag to mark unconditional exit
390 # Flag to mark unconditional exit
391 self.exit_now = False
391 self.exit_now = False
392
392
393 self.usage_min = """\
393 self.usage_min = """\
394 An enhanced console for Python.
394 An enhanced console for Python.
395 Some of its features are:
395 Some of its features are:
396 - Readline support if the readline library is present.
396 - Readline support if the readline library is present.
397 - Tab completion in the local namespace.
397 - Tab completion in the local namespace.
398 - Logging of input, see command-line options.
398 - Logging of input, see command-line options.
399 - System shell escape via ! , eg !ls.
399 - System shell escape via ! , eg !ls.
400 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
400 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
401 - Keeps track of locally defined variables via %who, %whos.
401 - Keeps track of locally defined variables via %who, %whos.
402 - Show object information with a ? eg ?x or x? (use ?? for more info).
402 - Show object information with a ? eg ?x or x? (use ?? for more info).
403 """
403 """
404 if usage: self.usage = usage
404 if usage: self.usage = usage
405 else: self.usage = self.usage_min
405 else: self.usage = self.usage_min
406
406
407 # Storage
407 # Storage
408 self.rc = rc # This will hold all configuration information
408 self.rc = rc # This will hold all configuration information
409 self.pager = 'less'
409 self.pager = 'less'
410 # temporary files used for various purposes. Deleted at exit.
410 # temporary files used for various purposes. Deleted at exit.
411 self.tempfiles = []
411 self.tempfiles = []
412
412
413 # Keep track of readline usage (later set by init_readline)
413 # Keep track of readline usage (later set by init_readline)
414 self.has_readline = False
414 self.has_readline = False
415
415
416 # template for logfile headers. It gets resolved at runtime by the
416 # template for logfile headers. It gets resolved at runtime by the
417 # logstart method.
417 # logstart method.
418 self.loghead_tpl = \
418 self.loghead_tpl = \
419 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
419 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
420 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
420 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
421 #log# opts = %s
421 #log# opts = %s
422 #log# args = %s
422 #log# args = %s
423 #log# It is safe to make manual edits below here.
423 #log# It is safe to make manual edits below here.
424 #log#-----------------------------------------------------------------------
424 #log#-----------------------------------------------------------------------
425 """
425 """
426 # for pushd/popd management
426 # for pushd/popd management
427 try:
427 try:
428 self.home_dir = get_home_dir()
428 self.home_dir = get_home_dir()
429 except HomeDirError,msg:
429 except HomeDirError,msg:
430 fatal(msg)
430 fatal(msg)
431
431
432 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
432 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
433
433
434 # Functions to call the underlying shell.
434 # Functions to call the underlying shell.
435
435
436 # utility to expand user variables via Itpl
436 # utility to expand user variables via Itpl
437 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
437 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
438 self.user_ns))
438 self.user_ns))
439 # The first is similar to os.system, but it doesn't return a value,
439 # The first is similar to os.system, but it doesn't return a value,
440 # and it allows interpolation of variables in the user's namespace.
440 # and it allows interpolation of variables in the user's namespace.
441 self.system = lambda cmd: shell(self.var_expand(cmd),
441 self.system = lambda cmd: shell(self.var_expand(cmd),
442 header='IPython system call: ',
442 header='IPython system call: ',
443 verbose=self.rc.system_verbose)
443 verbose=self.rc.system_verbose)
444 # These are for getoutput and getoutputerror:
444 # These are for getoutput and getoutputerror:
445 self.getoutput = lambda cmd: \
445 self.getoutput = lambda cmd: \
446 getoutput(self.var_expand(cmd),
446 getoutput(self.var_expand(cmd),
447 header='IPython system call: ',
447 header='IPython system call: ',
448 verbose=self.rc.system_verbose)
448 verbose=self.rc.system_verbose)
449 self.getoutputerror = lambda cmd: \
449 self.getoutputerror = lambda cmd: \
450 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
450 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
451 self.user_ns)),
451 self.user_ns)),
452 header='IPython system call: ',
452 header='IPython system call: ',
453 verbose=self.rc.system_verbose)
453 verbose=self.rc.system_verbose)
454
454
455 # RegExp for splitting line contents into pre-char//first
455 # RegExp for splitting line contents into pre-char//first
456 # word-method//rest. For clarity, each group in on one line.
456 # word-method//rest. For clarity, each group in on one line.
457
457
458 # WARNING: update the regexp if the above escapes are changed, as they
458 # WARNING: update the regexp if the above escapes are changed, as they
459 # are hardwired in.
459 # are hardwired in.
460
460
461 # Don't get carried away with trying to make the autocalling catch too
461 # Don't get carried away with trying to make the autocalling catch too
462 # much: it's better to be conservative rather than to trigger hidden
462 # much: it's better to be conservative rather than to trigger hidden
463 # evals() somewhere and end up causing side effects.
463 # evals() somewhere and end up causing side effects.
464
464
465 self.line_split = re.compile(r'^([\s*,;/])'
465 self.line_split = re.compile(r'^([\s*,;/])'
466 r'([\?\w\.]+\w*\s*)'
466 r'([\?\w\.]+\w*\s*)'
467 r'(\(?.*$)')
467 r'(\(?.*$)')
468
468
469 # Original re, keep around for a while in case changes break something
469 # Original re, keep around for a while in case changes break something
470 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
470 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
471 # r'(\s*[\?\w\.]+\w*\s*)'
471 # r'(\s*[\?\w\.]+\w*\s*)'
472 # r'(\(?.*$)')
472 # r'(\(?.*$)')
473
473
474 # RegExp to identify potential function names
474 # RegExp to identify potential function names
475 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
475 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
476 # RegExp to exclude strings with this start from autocalling
476 # RegExp to exclude strings with this start from autocalling
477 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
477 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
478
478
479 # try to catch also methods for stuff in lists/tuples/dicts: off
479 # try to catch also methods for stuff in lists/tuples/dicts: off
480 # (experimental). For this to work, the line_split regexp would need
480 # (experimental). For this to work, the line_split regexp would need
481 # to be modified so it wouldn't break things at '['. That line is
481 # to be modified so it wouldn't break things at '['. That line is
482 # nasty enough that I shouldn't change it until I can test it _well_.
482 # nasty enough that I shouldn't change it until I can test it _well_.
483 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
483 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
484
484
485 # keep track of where we started running (mainly for crash post-mortem)
485 # keep track of where we started running (mainly for crash post-mortem)
486 self.starting_dir = os.getcwd()
486 self.starting_dir = os.getcwd()
487
487
488 # Various switches which can be set
488 # Various switches which can be set
489 self.CACHELENGTH = 5000 # this is cheap, it's just text
489 self.CACHELENGTH = 5000 # this is cheap, it's just text
490 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
490 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
491 self.banner2 = banner2
491 self.banner2 = banner2
492
492
493 # TraceBack handlers:
493 # TraceBack handlers:
494
494
495 # Syntax error handler.
495 # Syntax error handler.
496 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
496 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
497
497
498 # The interactive one is initialized with an offset, meaning we always
498 # The interactive one is initialized with an offset, meaning we always
499 # want to remove the topmost item in the traceback, which is our own
499 # want to remove the topmost item in the traceback, which is our own
500 # internal code. Valid modes: ['Plain','Context','Verbose']
500 # internal code. Valid modes: ['Plain','Context','Verbose']
501 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
501 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
502 color_scheme='NoColor',
502 color_scheme='NoColor',
503 tb_offset = 1)
503 tb_offset = 1)
504
504
505 # IPython itself shouldn't crash. This will produce a detailed
505 # IPython itself shouldn't crash. This will produce a detailed
506 # post-mortem if it does. But we only install the crash handler for
506 # post-mortem if it does. But we only install the crash handler for
507 # non-threaded shells, the threaded ones use a normal verbose reporter
507 # non-threaded shells, the threaded ones use a normal verbose reporter
508 # and lose the crash handler. This is because exceptions in the main
508 # and lose the crash handler. This is because exceptions in the main
509 # thread (such as in GUI code) propagate directly to sys.excepthook,
509 # thread (such as in GUI code) propagate directly to sys.excepthook,
510 # and there's no point in printing crash dumps for every user exception.
510 # and there's no point in printing crash dumps for every user exception.
511 if self.isthreaded:
511 if self.isthreaded:
512 sys.excepthook = ultraTB.FormattedTB()
512 sys.excepthook = ultraTB.FormattedTB()
513 else:
513 else:
514 from IPython import CrashHandler
514 from IPython import CrashHandler
515 sys.excepthook = CrashHandler.CrashHandler(self)
515 sys.excepthook = CrashHandler.CrashHandler(self)
516
516
517 # The instance will store a pointer to this, so that runtime code
517 # The instance will store a pointer to this, so that runtime code
518 # (such as magics) can access it. This is because during the
518 # (such as magics) can access it. This is because during the
519 # read-eval loop, it gets temporarily overwritten (to deal with GUI
519 # read-eval loop, it gets temporarily overwritten (to deal with GUI
520 # frameworks).
520 # frameworks).
521 self.sys_excepthook = sys.excepthook
521 self.sys_excepthook = sys.excepthook
522
522
523 # and add any custom exception handlers the user may have specified
523 # and add any custom exception handlers the user may have specified
524 self.set_custom_exc(*custom_exceptions)
524 self.set_custom_exc(*custom_exceptions)
525
525
526 # Object inspector
526 # Object inspector
527 self.inspector = OInspect.Inspector(OInspect.InspectColors,
527 self.inspector = OInspect.Inspector(OInspect.InspectColors,
528 PyColorize.ANSICodeColors,
528 PyColorize.ANSICodeColors,
529 'NoColor')
529 'NoColor')
530 # indentation management
530 # indentation management
531 self.autoindent = False
531 self.autoindent = False
532 self.indent_current_nsp = 0
532 self.indent_current_nsp = 0
533 self.indent_current = '' # actual indent string
533 self.indent_current = '' # actual indent string
534
534
535 # Make some aliases automatically
535 # Make some aliases automatically
536 # Prepare list of shell aliases to auto-define
536 # Prepare list of shell aliases to auto-define
537 if os.name == 'posix':
537 if os.name == 'posix':
538 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
538 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
539 'mv mv -i','rm rm -i','cp cp -i',
539 'mv mv -i','rm rm -i','cp cp -i',
540 'cat cat','less less','clear clear',
540 'cat cat','less less','clear clear',
541 # a better ls
541 # a better ls
542 'ls ls -F',
542 'ls ls -F',
543 # long ls
543 # long ls
544 'll ls -lF',
544 'll ls -lF',
545 # color ls
545 # color ls
546 'lc ls -F -o --color',
546 'lc ls -F -o --color',
547 # ls normal files only
547 # ls normal files only
548 'lf ls -F -o --color %l | grep ^-',
548 'lf ls -F -o --color %l | grep ^-',
549 # ls symbolic links
549 # ls symbolic links
550 'lk ls -F -o --color %l | grep ^l',
550 'lk ls -F -o --color %l | grep ^l',
551 # directories or links to directories,
551 # directories or links to directories,
552 'ldir ls -F -o --color %l | grep /$',
552 'ldir ls -F -o --color %l | grep /$',
553 # things which are executable
553 # things which are executable
554 'lx ls -F -o --color %l | grep ^-..x',
554 'lx ls -F -o --color %l | grep ^-..x',
555 )
555 )
556 elif os.name in ['nt','dos']:
556 elif os.name in ['nt','dos']:
557 auto_alias = ('dir dir /on', 'ls dir /on',
557 auto_alias = ('dir dir /on', 'ls dir /on',
558 'ddir dir /ad /on', 'ldir dir /ad /on',
558 'ddir dir /ad /on', 'ldir dir /ad /on',
559 'mkdir mkdir','rmdir rmdir','echo echo',
559 'mkdir mkdir','rmdir rmdir','echo echo',
560 'ren ren','cls cls','copy copy')
560 'ren ren','cls cls','copy copy')
561 else:
561 else:
562 auto_alias = ()
562 auto_alias = ()
563 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
563 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
564 # Call the actual (public) initializer
564 # Call the actual (public) initializer
565 self.init_auto_alias()
565 self.init_auto_alias()
566 # end __init__
566 # end __init__
567
567
568 def post_config_initialization(self):
568 def post_config_initialization(self):
569 """Post configuration init method
569 """Post configuration init method
570
570
571 This is called after the configuration files have been processed to
571 This is called after the configuration files have been processed to
572 'finalize' the initialization."""
572 'finalize' the initialization."""
573
573
574 rc = self.rc
574 rc = self.rc
575
575
576 # Load readline proper
576 # Load readline proper
577 if rc.readline:
577 if rc.readline:
578 self.init_readline()
578 self.init_readline()
579
579
580 # log system
580 # log system
581 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
581 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
582 # local shortcut, this is used a LOT
582 # local shortcut, this is used a LOT
583 self.log = self.logger.log
583 self.log = self.logger.log
584
584
585 # Initialize cache, set in/out prompts and printing system
585 # Initialize cache, set in/out prompts and printing system
586 self.outputcache = CachedOutput(self,
586 self.outputcache = CachedOutput(self,
587 rc.cache_size,
587 rc.cache_size,
588 rc.pprint,
588 rc.pprint,
589 input_sep = rc.separate_in,
589 input_sep = rc.separate_in,
590 output_sep = rc.separate_out,
590 output_sep = rc.separate_out,
591 output_sep2 = rc.separate_out2,
591 output_sep2 = rc.separate_out2,
592 ps1 = rc.prompt_in1,
592 ps1 = rc.prompt_in1,
593 ps2 = rc.prompt_in2,
593 ps2 = rc.prompt_in2,
594 ps_out = rc.prompt_out,
594 ps_out = rc.prompt_out,
595 pad_left = rc.prompts_pad_left)
595 pad_left = rc.prompts_pad_left)
596
596
597 # user may have over-ridden the default print hook:
597 # user may have over-ridden the default print hook:
598 try:
598 try:
599 self.outputcache.__class__.display = self.hooks.display
599 self.outputcache.__class__.display = self.hooks.display
600 except AttributeError:
600 except AttributeError:
601 pass
601 pass
602
602
603 # I don't like assigning globally to sys, because it means when embedding
603 # I don't like assigning globally to sys, because it means when embedding
604 # instances, each embedded instance overrides the previous choice. But
604 # instances, each embedded instance overrides the previous choice. But
605 # sys.displayhook seems to be called internally by exec, so I don't see a
605 # sys.displayhook seems to be called internally by exec, so I don't see a
606 # way around it.
606 # way around it.
607 sys.displayhook = self.outputcache
607 sys.displayhook = self.outputcache
608
608
609 # Set user colors (don't do it in the constructor above so that it
609 # Set user colors (don't do it in the constructor above so that it
610 # doesn't crash if colors option is invalid)
610 # doesn't crash if colors option is invalid)
611 self.magic_colors(rc.colors)
611 self.magic_colors(rc.colors)
612
612
613 # Set calling of pdb on exceptions
613 # Set calling of pdb on exceptions
614 self.call_pdb = rc.pdb
614 self.call_pdb = rc.pdb
615
615
616 # Load user aliases
616 # Load user aliases
617 for alias in rc.alias:
617 for alias in rc.alias:
618 self.magic_alias(alias)
618 self.magic_alias(alias)
619
619
620 # dynamic data that survives through sessions
620 # dynamic data that survives through sessions
621 # XXX make the filename a config option?
621 # XXX make the filename a config option?
622 persist_base = 'persist'
622 persist_base = 'persist'
623 if rc.profile:
623 if rc.profile:
624 persist_base += '_%s' % rc.profile
624 persist_base += '_%s' % rc.profile
625 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
625 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
626
626
627 try:
627 try:
628 self.persist = pickle.load(file(self.persist_fname))
628 self.persist = pickle.load(file(self.persist_fname))
629 except:
629 except:
630 self.persist = {}
630 self.persist = {}
631
631
632
632
633 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
633 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
634 try:
634 try:
635 obj = pickle.loads(value)
635 obj = pickle.loads(value)
636 except:
636 except:
637
637
638 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
638 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
639 print "The error was:",sys.exc_info()[0]
639 print "The error was:",sys.exc_info()[0]
640 continue
640 continue
641
641
642
642
643 self.user_ns[key] = obj
643 self.user_ns[key] = obj
644
644
645 def add_builtins(self):
645 def add_builtins(self):
646 """Store ipython references into the builtin namespace.
646 """Store ipython references into the builtin namespace.
647
647
648 Some parts of ipython operate via builtins injected here, which hold a
648 Some parts of ipython operate via builtins injected here, which hold a
649 reference to IPython itself."""
649 reference to IPython itself."""
650
650
651 builtins_new = dict(__IPYTHON__ = self,
651 builtins_new = dict(__IPYTHON__ = self,
652 ip_set_hook = self.set_hook,
652 ip_set_hook = self.set_hook,
653 jobs = self.jobs,
653 jobs = self.jobs,
654 ipmagic = self.ipmagic,
654 ipmagic = self.ipmagic,
655 ipalias = self.ipalias,
655 ipalias = self.ipalias,
656 ipsystem = self.ipsystem,
656 ipsystem = self.ipsystem,
657 )
657 )
658 for biname,bival in builtins_new.items():
658 for biname,bival in builtins_new.items():
659 try:
659 try:
660 # store the orignal value so we can restore it
660 # store the orignal value so we can restore it
661 self.builtins_added[biname] = __builtin__.__dict__[biname]
661 self.builtins_added[biname] = __builtin__.__dict__[biname]
662 except KeyError:
662 except KeyError:
663 # or mark that it wasn't defined, and we'll just delete it at
663 # or mark that it wasn't defined, and we'll just delete it at
664 # cleanup
664 # cleanup
665 self.builtins_added[biname] = Undefined
665 self.builtins_added[biname] = Undefined
666 __builtin__.__dict__[biname] = bival
666 __builtin__.__dict__[biname] = bival
667
667
668 # Keep in the builtins a flag for when IPython is active. We set it
668 # Keep in the builtins a flag for when IPython is active. We set it
669 # with setdefault so that multiple nested IPythons don't clobber one
669 # with setdefault so that multiple nested IPythons don't clobber one
670 # another. Each will increase its value by one upon being activated,
670 # another. Each will increase its value by one upon being activated,
671 # which also gives us a way to determine the nesting level.
671 # which also gives us a way to determine the nesting level.
672 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
672 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
673
673
674 def clean_builtins(self):
674 def clean_builtins(self):
675 """Remove any builtins which might have been added by add_builtins, or
675 """Remove any builtins which might have been added by add_builtins, or
676 restore overwritten ones to their previous values."""
676 restore overwritten ones to their previous values."""
677 for biname,bival in self.builtins_added.items():
677 for biname,bival in self.builtins_added.items():
678 if bival is Undefined:
678 if bival is Undefined:
679 del __builtin__.__dict__[biname]
679 del __builtin__.__dict__[biname]
680 else:
680 else:
681 __builtin__.__dict__[biname] = bival
681 __builtin__.__dict__[biname] = bival
682 self.builtins_added.clear()
682 self.builtins_added.clear()
683
683
684 def set_hook(self,name,hook):
684 def set_hook(self,name,hook):
685 """set_hook(name,hook) -> sets an internal IPython hook.
685 """set_hook(name,hook) -> sets an internal IPython hook.
686
686
687 IPython exposes some of its internal API as user-modifiable hooks. By
687 IPython exposes some of its internal API as user-modifiable hooks. By
688 resetting one of these hooks, you can modify IPython's behavior to
688 resetting one of these hooks, you can modify IPython's behavior to
689 call at runtime your own routines."""
689 call at runtime your own routines."""
690
690
691 # At some point in the future, this should validate the hook before it
691 # At some point in the future, this should validate the hook before it
692 # accepts it. Probably at least check that the hook takes the number
692 # accepts it. Probably at least check that the hook takes the number
693 # of args it's supposed to.
693 # of args it's supposed to.
694 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
694 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
695
695
696 def set_custom_exc(self,exc_tuple,handler):
696 def set_custom_exc(self,exc_tuple,handler):
697 """set_custom_exc(exc_tuple,handler)
697 """set_custom_exc(exc_tuple,handler)
698
698
699 Set a custom exception handler, which will be called if any of the
699 Set a custom exception handler, which will be called if any of the
700 exceptions in exc_tuple occur in the mainloop (specifically, in the
700 exceptions in exc_tuple occur in the mainloop (specifically, in the
701 runcode() method.
701 runcode() method.
702
702
703 Inputs:
703 Inputs:
704
704
705 - exc_tuple: a *tuple* of valid exceptions to call the defined
705 - exc_tuple: a *tuple* of valid exceptions to call the defined
706 handler for. It is very important that you use a tuple, and NOT A
706 handler for. It is very important that you use a tuple, and NOT A
707 LIST here, because of the way Python's except statement works. If
707 LIST here, because of the way Python's except statement works. If
708 you only want to trap a single exception, use a singleton tuple:
708 you only want to trap a single exception, use a singleton tuple:
709
709
710 exc_tuple == (MyCustomException,)
710 exc_tuple == (MyCustomException,)
711
711
712 - handler: this must be defined as a function with the following
712 - handler: this must be defined as a function with the following
713 basic interface: def my_handler(self,etype,value,tb).
713 basic interface: def my_handler(self,etype,value,tb).
714
714
715 This will be made into an instance method (via new.instancemethod)
715 This will be made into an instance method (via new.instancemethod)
716 of IPython itself, and it will be called if any of the exceptions
716 of IPython itself, and it will be called if any of the exceptions
717 listed in the exc_tuple are caught. If the handler is None, an
717 listed in the exc_tuple are caught. If the handler is None, an
718 internal basic one is used, which just prints basic info.
718 internal basic one is used, which just prints basic info.
719
719
720 WARNING: by putting in your own exception handler into IPython's main
720 WARNING: by putting in your own exception handler into IPython's main
721 execution loop, you run a very good chance of nasty crashes. This
721 execution loop, you run a very good chance of nasty crashes. This
722 facility should only be used if you really know what you are doing."""
722 facility should only be used if you really know what you are doing."""
723
723
724 assert type(exc_tuple)==type(()) , \
724 assert type(exc_tuple)==type(()) , \
725 "The custom exceptions must be given AS A TUPLE."
725 "The custom exceptions must be given AS A TUPLE."
726
726
727 def dummy_handler(self,etype,value,tb):
727 def dummy_handler(self,etype,value,tb):
728 print '*** Simple custom exception handler ***'
728 print '*** Simple custom exception handler ***'
729 print 'Exception type :',etype
729 print 'Exception type :',etype
730 print 'Exception value:',value
730 print 'Exception value:',value
731 print 'Traceback :',tb
731 print 'Traceback :',tb
732 print 'Source code :','\n'.join(self.buffer)
732 print 'Source code :','\n'.join(self.buffer)
733
733
734 if handler is None: handler = dummy_handler
734 if handler is None: handler = dummy_handler
735
735
736 self.CustomTB = new.instancemethod(handler,self,self.__class__)
736 self.CustomTB = new.instancemethod(handler,self,self.__class__)
737 self.custom_exceptions = exc_tuple
737 self.custom_exceptions = exc_tuple
738
738
739 def set_custom_completer(self,completer,pos=0):
739 def set_custom_completer(self,completer,pos=0):
740 """set_custom_completer(completer,pos=0)
740 """set_custom_completer(completer,pos=0)
741
741
742 Adds a new custom completer function.
742 Adds a new custom completer function.
743
743
744 The position argument (defaults to 0) is the index in the completers
744 The position argument (defaults to 0) is the index in the completers
745 list where you want the completer to be inserted."""
745 list where you want the completer to be inserted."""
746
746
747 newcomp = new.instancemethod(completer,self.Completer,
747 newcomp = new.instancemethod(completer,self.Completer,
748 self.Completer.__class__)
748 self.Completer.__class__)
749 self.Completer.matchers.insert(pos,newcomp)
749 self.Completer.matchers.insert(pos,newcomp)
750
750
751 def _get_call_pdb(self):
751 def _get_call_pdb(self):
752 return self._call_pdb
752 return self._call_pdb
753
753
754 def _set_call_pdb(self,val):
754 def _set_call_pdb(self,val):
755
755
756 if val not in (0,1,False,True):
756 if val not in (0,1,False,True):
757 raise ValueError,'new call_pdb value must be boolean'
757 raise ValueError,'new call_pdb value must be boolean'
758
758
759 # store value in instance
759 # store value in instance
760 self._call_pdb = val
760 self._call_pdb = val
761
761
762 # notify the actual exception handlers
762 # notify the actual exception handlers
763 self.InteractiveTB.call_pdb = val
763 self.InteractiveTB.call_pdb = val
764 if self.isthreaded:
764 if self.isthreaded:
765 try:
765 try:
766 self.sys_excepthook.call_pdb = val
766 self.sys_excepthook.call_pdb = val
767 except:
767 except:
768 warn('Failed to activate pdb for threaded exception handler')
768 warn('Failed to activate pdb for threaded exception handler')
769
769
770 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
770 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
771 'Control auto-activation of pdb at exceptions')
771 'Control auto-activation of pdb at exceptions')
772
772
773
773
774 # These special functions get installed in the builtin namespace, to
774 # These special functions get installed in the builtin namespace, to
775 # provide programmatic (pure python) access to magics, aliases and system
775 # provide programmatic (pure python) access to magics, aliases and system
776 # calls. This is important for logging, user scripting, and more.
776 # calls. This is important for logging, user scripting, and more.
777
777
778 # We are basically exposing, via normal python functions, the three
778 # We are basically exposing, via normal python functions, the three
779 # mechanisms in which ipython offers special call modes (magics for
779 # mechanisms in which ipython offers special call modes (magics for
780 # internal control, aliases for direct system access via pre-selected
780 # internal control, aliases for direct system access via pre-selected
781 # names, and !cmd for calling arbitrary system commands).
781 # names, and !cmd for calling arbitrary system commands).
782
782
783 def ipmagic(self,arg_s):
783 def ipmagic(self,arg_s):
784 """Call a magic function by name.
784 """Call a magic function by name.
785
785
786 Input: a string containing the name of the magic function to call and any
786 Input: a string containing the name of the magic function to call and any
787 additional arguments to be passed to the magic.
787 additional arguments to be passed to the magic.
788
788
789 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
789 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
790 prompt:
790 prompt:
791
791
792 In[1]: %name -opt foo bar
792 In[1]: %name -opt foo bar
793
793
794 To call a magic without arguments, simply use ipmagic('name').
794 To call a magic without arguments, simply use ipmagic('name').
795
795
796 This provides a proper Python function to call IPython's magics in any
796 This provides a proper Python function to call IPython's magics in any
797 valid Python code you can type at the interpreter, including loops and
797 valid Python code you can type at the interpreter, including loops and
798 compound statements. It is added by IPython to the Python builtin
798 compound statements. It is added by IPython to the Python builtin
799 namespace upon initialization."""
799 namespace upon initialization."""
800
800
801 args = arg_s.split(' ',1)
801 args = arg_s.split(' ',1)
802 magic_name = args[0]
802 magic_name = args[0]
803 if magic_name.startswith(self.ESC_MAGIC):
803 if magic_name.startswith(self.ESC_MAGIC):
804 magic_name = magic_name[1:]
804 magic_name = magic_name[1:]
805 try:
805 try:
806 magic_args = args[1]
806 magic_args = args[1]
807 except IndexError:
807 except IndexError:
808 magic_args = ''
808 magic_args = ''
809 fn = getattr(self,'magic_'+magic_name,None)
809 fn = getattr(self,'magic_'+magic_name,None)
810 if fn is None:
810 if fn is None:
811 error("Magic function `%s` not found." % magic_name)
811 error("Magic function `%s` not found." % magic_name)
812 else:
812 else:
813 magic_args = self.var_expand(magic_args)
813 magic_args = self.var_expand(magic_args)
814 return fn(magic_args)
814 return fn(magic_args)
815
815
816 def ipalias(self,arg_s):
816 def ipalias(self,arg_s):
817 """Call an alias by name.
817 """Call an alias by name.
818
818
819 Input: a string containing the name of the alias to call and any
819 Input: a string containing the name of the alias to call and any
820 additional arguments to be passed to the magic.
820 additional arguments to be passed to the magic.
821
821
822 ipalias('name -opt foo bar') is equivalent to typing at the ipython
822 ipalias('name -opt foo bar') is equivalent to typing at the ipython
823 prompt:
823 prompt:
824
824
825 In[1]: name -opt foo bar
825 In[1]: name -opt foo bar
826
826
827 To call an alias without arguments, simply use ipalias('name').
827 To call an alias without arguments, simply use ipalias('name').
828
828
829 This provides a proper Python function to call IPython's aliases in any
829 This provides a proper Python function to call IPython's aliases in any
830 valid Python code you can type at the interpreter, including loops and
830 valid Python code you can type at the interpreter, including loops and
831 compound statements. It is added by IPython to the Python builtin
831 compound statements. It is added by IPython to the Python builtin
832 namespace upon initialization."""
832 namespace upon initialization."""
833
833
834 args = arg_s.split(' ',1)
834 args = arg_s.split(' ',1)
835 alias_name = args[0]
835 alias_name = args[0]
836 try:
836 try:
837 alias_args = args[1]
837 alias_args = args[1]
838 except IndexError:
838 except IndexError:
839 alias_args = ''
839 alias_args = ''
840 if alias_name in self.alias_table:
840 if alias_name in self.alias_table:
841 self.call_alias(alias_name,alias_args)
841 self.call_alias(alias_name,alias_args)
842 else:
842 else:
843 error("Alias `%s` not found." % alias_name)
843 error("Alias `%s` not found." % alias_name)
844
844
845 def ipsystem(self,arg_s):
845 def ipsystem(self,arg_s):
846 """Make a system call, using IPython."""
846 """Make a system call, using IPython."""
847
847
848 self.system(arg_s)
848 self.system(arg_s)
849
849
850 def complete(self,text):
850 def complete(self,text):
851 """Return a sorted list of all possible completions on text.
851 """Return a sorted list of all possible completions on text.
852
852
853 Inputs:
853 Inputs:
854
854
855 - text: a string of text to be completed on.
855 - text: a string of text to be completed on.
856
856
857 This is a wrapper around the completion mechanism, similar to what
857 This is a wrapper around the completion mechanism, similar to what
858 readline does at the command line when the TAB key is hit. By
858 readline does at the command line when the TAB key is hit. By
859 exposing it as a method, it can be used by other non-readline
859 exposing it as a method, it can be used by other non-readline
860 environments (such as GUIs) for text completion.
860 environments (such as GUIs) for text completion.
861
861
862 Simple usage example:
862 Simple usage example:
863
863
864 In [1]: x = 'hello'
864 In [1]: x = 'hello'
865
865
866 In [2]: __IP.complete('x.l')
866 In [2]: __IP.complete('x.l')
867 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
867 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
868
868
869 complete = self.Completer.complete
869 complete = self.Completer.complete
870 state = 0
870 state = 0
871 # use a dict so we get unique keys, since ipyhton's multiple
871 # use a dict so we get unique keys, since ipyhton's multiple
872 # completers can return duplicates.
872 # completers can return duplicates.
873 comps = {}
873 comps = {}
874 while True:
874 while True:
875 newcomp = complete(text,state)
875 newcomp = complete(text,state)
876 if newcomp is None:
876 if newcomp is None:
877 break
877 break
878 comps[newcomp] = 1
878 comps[newcomp] = 1
879 state += 1
879 state += 1
880 outcomps = comps.keys()
880 outcomps = comps.keys()
881 outcomps.sort()
881 outcomps.sort()
882 return outcomps
882 return outcomps
883
883
884 def set_completer_frame(self, frame=None):
884 def set_completer_frame(self, frame=None):
885 if frame:
885 if frame:
886 self.Completer.namespace = frame.f_locals
886 self.Completer.namespace = frame.f_locals
887 self.Completer.global_namespace = frame.f_globals
887 self.Completer.global_namespace = frame.f_globals
888 else:
888 else:
889 self.Completer.namespace = self.user_ns
889 self.Completer.namespace = self.user_ns
890 self.Completer.global_namespace = self.user_global_ns
890 self.Completer.global_namespace = self.user_global_ns
891
891
892 def init_auto_alias(self):
892 def init_auto_alias(self):
893 """Define some aliases automatically.
893 """Define some aliases automatically.
894
894
895 These are ALL parameter-less aliases"""
895 These are ALL parameter-less aliases"""
896
896
897 for alias,cmd in self.auto_alias:
897 for alias,cmd in self.auto_alias:
898 self.alias_table[alias] = (0,cmd)
898 self.alias_table[alias] = (0,cmd)
899
899
900 def alias_table_validate(self,verbose=0):
900 def alias_table_validate(self,verbose=0):
901 """Update information about the alias table.
901 """Update information about the alias table.
902
902
903 In particular, make sure no Python keywords/builtins are in it."""
903 In particular, make sure no Python keywords/builtins are in it."""
904
904
905 no_alias = self.no_alias
905 no_alias = self.no_alias
906 for k in self.alias_table.keys():
906 for k in self.alias_table.keys():
907 if k in no_alias:
907 if k in no_alias:
908 del self.alias_table[k]
908 del self.alias_table[k]
909 if verbose:
909 if verbose:
910 print ("Deleting alias <%s>, it's a Python "
910 print ("Deleting alias <%s>, it's a Python "
911 "keyword or builtin." % k)
911 "keyword or builtin." % k)
912
912
913 def set_autoindent(self,value=None):
913 def set_autoindent(self,value=None):
914 """Set the autoindent flag, checking for readline support.
914 """Set the autoindent flag, checking for readline support.
915
915
916 If called with no arguments, it acts as a toggle."""
916 If called with no arguments, it acts as a toggle."""
917
917
918 if not self.has_readline:
918 if not self.has_readline:
919 if os.name == 'posix':
919 if os.name == 'posix':
920 warn("The auto-indent feature requires the readline library")
920 warn("The auto-indent feature requires the readline library")
921 self.autoindent = 0
921 self.autoindent = 0
922 return
922 return
923 if value is None:
923 if value is None:
924 self.autoindent = not self.autoindent
924 self.autoindent = not self.autoindent
925 else:
925 else:
926 self.autoindent = value
926 self.autoindent = value
927
927
928 def rc_set_toggle(self,rc_field,value=None):
928 def rc_set_toggle(self,rc_field,value=None):
929 """Set or toggle a field in IPython's rc config. structure.
929 """Set or toggle a field in IPython's rc config. structure.
930
930
931 If called with no arguments, it acts as a toggle.
931 If called with no arguments, it acts as a toggle.
932
932
933 If called with a non-existent field, the resulting AttributeError
933 If called with a non-existent field, the resulting AttributeError
934 exception will propagate out."""
934 exception will propagate out."""
935
935
936 rc_val = getattr(self.rc,rc_field)
936 rc_val = getattr(self.rc,rc_field)
937 if value is None:
937 if value is None:
938 value = not rc_val
938 value = not rc_val
939 setattr(self.rc,rc_field,value)
939 setattr(self.rc,rc_field,value)
940
940
941 def user_setup(self,ipythondir,rc_suffix,mode='install'):
941 def user_setup(self,ipythondir,rc_suffix,mode='install'):
942 """Install the user configuration directory.
942 """Install the user configuration directory.
943
943
944 Can be called when running for the first time or to upgrade the user's
944 Can be called when running for the first time or to upgrade the user's
945 .ipython/ directory with the mode parameter. Valid modes are 'install'
945 .ipython/ directory with the mode parameter. Valid modes are 'install'
946 and 'upgrade'."""
946 and 'upgrade'."""
947
947
948 def wait():
948 def wait():
949 try:
949 try:
950 raw_input("Please press <RETURN> to start IPython.")
950 raw_input("Please press <RETURN> to start IPython.")
951 except EOFError:
951 except EOFError:
952 print >> Term.cout
952 print >> Term.cout
953 print '*'*70
953 print '*'*70
954
954
955 cwd = os.getcwd() # remember where we started
955 cwd = os.getcwd() # remember where we started
956 glb = glob.glob
956 glb = glob.glob
957 print '*'*70
957 print '*'*70
958 if mode == 'install':
958 if mode == 'install':
959 print \
959 print \
960 """Welcome to IPython. I will try to create a personal configuration directory
960 """Welcome to IPython. I will try to create a personal configuration directory
961 where you can customize many aspects of IPython's functionality in:\n"""
961 where you can customize many aspects of IPython's functionality in:\n"""
962 else:
962 else:
963 print 'I am going to upgrade your configuration in:'
963 print 'I am going to upgrade your configuration in:'
964
964
965 print ipythondir
965 print ipythondir
966
966
967 rcdirend = os.path.join('IPython','UserConfig')
967 rcdirend = os.path.join('IPython','UserConfig')
968 cfg = lambda d: os.path.join(d,rcdirend)
968 cfg = lambda d: os.path.join(d,rcdirend)
969 try:
969 try:
970 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
970 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
971 except IOError:
971 except IOError:
972 warning = """
972 warning = """
973 Installation error. IPython's directory was not found.
973 Installation error. IPython's directory was not found.
974
974
975 Check the following:
975 Check the following:
976
976
977 The ipython/IPython directory should be in a directory belonging to your
977 The ipython/IPython directory should be in a directory belonging to your
978 PYTHONPATH environment variable (that is, it should be in a directory
978 PYTHONPATH environment variable (that is, it should be in a directory
979 belonging to sys.path). You can copy it explicitly there or just link to it.
979 belonging to sys.path). You can copy it explicitly there or just link to it.
980
980
981 IPython will proceed with builtin defaults.
981 IPython will proceed with builtin defaults.
982 """
982 """
983 warn(warning)
983 warn(warning)
984 wait()
984 wait()
985 return
985 return
986
986
987 if mode == 'install':
987 if mode == 'install':
988 try:
988 try:
989 shutil.copytree(rcdir,ipythondir)
989 shutil.copytree(rcdir,ipythondir)
990 os.chdir(ipythondir)
990 os.chdir(ipythondir)
991 rc_files = glb("ipythonrc*")
991 rc_files = glb("ipythonrc*")
992 for rc_file in rc_files:
992 for rc_file in rc_files:
993 os.rename(rc_file,rc_file+rc_suffix)
993 os.rename(rc_file,rc_file+rc_suffix)
994 except:
994 except:
995 warning = """
995 warning = """
996
996
997 There was a problem with the installation:
997 There was a problem with the installation:
998 %s
998 %s
999 Try to correct it or contact the developers if you think it's a bug.
999 Try to correct it or contact the developers if you think it's a bug.
1000 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1000 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1001 warn(warning)
1001 warn(warning)
1002 wait()
1002 wait()
1003 return
1003 return
1004
1004
1005 elif mode == 'upgrade':
1005 elif mode == 'upgrade':
1006 try:
1006 try:
1007 os.chdir(ipythondir)
1007 os.chdir(ipythondir)
1008 except:
1008 except:
1009 print """
1009 print """
1010 Can not upgrade: changing to directory %s failed. Details:
1010 Can not upgrade: changing to directory %s failed. Details:
1011 %s
1011 %s
1012 """ % (ipythondir,sys.exc_info()[1])
1012 """ % (ipythondir,sys.exc_info()[1])
1013 wait()
1013 wait()
1014 return
1014 return
1015 else:
1015 else:
1016 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1016 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1017 for new_full_path in sources:
1017 for new_full_path in sources:
1018 new_filename = os.path.basename(new_full_path)
1018 new_filename = os.path.basename(new_full_path)
1019 if new_filename.startswith('ipythonrc'):
1019 if new_filename.startswith('ipythonrc'):
1020 new_filename = new_filename + rc_suffix
1020 new_filename = new_filename + rc_suffix
1021 # The config directory should only contain files, skip any
1021 # The config directory should only contain files, skip any
1022 # directories which may be there (like CVS)
1022 # directories which may be there (like CVS)
1023 if os.path.isdir(new_full_path):
1023 if os.path.isdir(new_full_path):
1024 continue
1024 continue
1025 if os.path.exists(new_filename):
1025 if os.path.exists(new_filename):
1026 old_file = new_filename+'.old'
1026 old_file = new_filename+'.old'
1027 if os.path.exists(old_file):
1027 if os.path.exists(old_file):
1028 os.remove(old_file)
1028 os.remove(old_file)
1029 os.rename(new_filename,old_file)
1029 os.rename(new_filename,old_file)
1030 shutil.copy(new_full_path,new_filename)
1030 shutil.copy(new_full_path,new_filename)
1031 else:
1031 else:
1032 raise ValueError,'unrecognized mode for install:',`mode`
1032 raise ValueError,'unrecognized mode for install:',`mode`
1033
1033
1034 # Fix line-endings to those native to each platform in the config
1034 # Fix line-endings to those native to each platform in the config
1035 # directory.
1035 # directory.
1036 try:
1036 try:
1037 os.chdir(ipythondir)
1037 os.chdir(ipythondir)
1038 except:
1038 except:
1039 print """
1039 print """
1040 Problem: changing to directory %s failed.
1040 Problem: changing to directory %s failed.
1041 Details:
1041 Details:
1042 %s
1042 %s
1043
1043
1044 Some configuration files may have incorrect line endings. This should not
1044 Some configuration files may have incorrect line endings. This should not
1045 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1045 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1046 wait()
1046 wait()
1047 else:
1047 else:
1048 for fname in glb('ipythonrc*'):
1048 for fname in glb('ipythonrc*'):
1049 try:
1049 try:
1050 native_line_ends(fname,backup=0)
1050 native_line_ends(fname,backup=0)
1051 except IOError:
1051 except IOError:
1052 pass
1052 pass
1053
1053
1054 if mode == 'install':
1054 if mode == 'install':
1055 print """
1055 print """
1056 Successful installation!
1056 Successful installation!
1057
1057
1058 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1058 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1059 IPython manual (there are both HTML and PDF versions supplied with the
1059 IPython manual (there are both HTML and PDF versions supplied with the
1060 distribution) to make sure that your system environment is properly configured
1060 distribution) to make sure that your system environment is properly configured
1061 to take advantage of IPython's features."""
1061 to take advantage of IPython's features."""
1062 else:
1062 else:
1063 print """
1063 print """
1064 Successful upgrade!
1064 Successful upgrade!
1065
1065
1066 All files in your directory:
1066 All files in your directory:
1067 %(ipythondir)s
1067 %(ipythondir)s
1068 which would have been overwritten by the upgrade were backed up with a .old
1068 which would have been overwritten by the upgrade were backed up with a .old
1069 extension. If you had made particular customizations in those files you may
1069 extension. If you had made particular customizations in those files you may
1070 want to merge them back into the new files.""" % locals()
1070 want to merge them back into the new files.""" % locals()
1071 wait()
1071 wait()
1072 os.chdir(cwd)
1072 os.chdir(cwd)
1073 # end user_setup()
1073 # end user_setup()
1074
1074
1075 def atexit_operations(self):
1075 def atexit_operations(self):
1076 """This will be executed at the time of exit.
1076 """This will be executed at the time of exit.
1077
1077
1078 Saving of persistent data should be performed here. """
1078 Saving of persistent data should be performed here. """
1079
1079
1080 # input history
1080 # input history
1081 self.savehist()
1081 self.savehist()
1082
1082
1083 # Cleanup all tempfiles left around
1083 # Cleanup all tempfiles left around
1084 for tfile in self.tempfiles:
1084 for tfile in self.tempfiles:
1085 try:
1085 try:
1086 os.unlink(tfile)
1086 os.unlink(tfile)
1087 except OSError:
1087 except OSError:
1088 pass
1088 pass
1089
1089
1090 # save the "persistent data" catch-all dictionary
1090 # save the "persistent data" catch-all dictionary
1091 try:
1091 try:
1092 pickle.dump(self.persist, open(self.persist_fname,"w"))
1092 pickle.dump(self.persist, open(self.persist_fname,"w"))
1093 except:
1093 except:
1094 print "*** ERROR *** persistent data saving failed."
1094 print "*** ERROR *** persistent data saving failed."
1095
1095
1096 def savehist(self):
1096 def savehist(self):
1097 """Save input history to a file (via readline library)."""
1097 """Save input history to a file (via readline library)."""
1098 try:
1098 try:
1099 self.readline.write_history_file(self.histfile)
1099 self.readline.write_history_file(self.histfile)
1100 except:
1100 except:
1101 print 'Unable to save IPython command history to file: ' + \
1101 print 'Unable to save IPython command history to file: ' + \
1102 `self.histfile`
1102 `self.histfile`
1103
1103
1104 def pre_readline(self):
1104 def pre_readline(self):
1105 """readline hook to be used at the start of each line.
1105 """readline hook to be used at the start of each line.
1106
1106
1107 Currently it handles auto-indent only."""
1107 Currently it handles auto-indent only."""
1108
1108
1109 self.readline.insert_text(self.indent_current)
1109 self.readline.insert_text(self.indent_current)
1110
1110
1111 def init_readline(self):
1111 def init_readline(self):
1112 """Command history completion/saving/reloading."""
1112 """Command history completion/saving/reloading."""
1113 try:
1113 try:
1114 import readline
1114 import readline
1115 except ImportError:
1115 except ImportError:
1116 self.has_readline = 0
1116 self.has_readline = 0
1117 self.readline = None
1117 self.readline = None
1118 # no point in bugging windows users with this every time:
1118 # no point in bugging windows users with this every time:
1119 if os.name == 'posix':
1119 if os.name == 'posix':
1120 warn('Readline services not available on this platform.')
1120 warn('Readline services not available on this platform.')
1121 else:
1121 else:
1122 import atexit
1122 import atexit
1123 from IPython.completer import IPCompleter
1123 from IPython.completer import IPCompleter
1124 self.Completer = IPCompleter(self,
1124 self.Completer = IPCompleter(self,
1125 self.user_ns,
1125 self.user_ns,
1126 self.user_global_ns,
1126 self.user_global_ns,
1127 self.rc.readline_omit__names,
1127 self.rc.readline_omit__names,
1128 self.alias_table)
1128 self.alias_table)
1129
1129
1130 # Platform-specific configuration
1130 # Platform-specific configuration
1131 if os.name == 'nt':
1131 if os.name == 'nt':
1132 self.readline_startup_hook = readline.set_pre_input_hook
1132 self.readline_startup_hook = readline.set_pre_input_hook
1133 else:
1133 else:
1134 self.readline_startup_hook = readline.set_startup_hook
1134 self.readline_startup_hook = readline.set_startup_hook
1135
1135
1136 # Load user's initrc file (readline config)
1136 # Load user's initrc file (readline config)
1137 inputrc_name = os.environ.get('INPUTRC')
1137 inputrc_name = os.environ.get('INPUTRC')
1138 if inputrc_name is None:
1138 if inputrc_name is None:
1139 home_dir = get_home_dir()
1139 home_dir = get_home_dir()
1140 if home_dir is not None:
1140 if home_dir is not None:
1141 inputrc_name = os.path.join(home_dir,'.inputrc')
1141 inputrc_name = os.path.join(home_dir,'.inputrc')
1142 if os.path.isfile(inputrc_name):
1142 if os.path.isfile(inputrc_name):
1143 try:
1143 try:
1144 readline.read_init_file(inputrc_name)
1144 readline.read_init_file(inputrc_name)
1145 except:
1145 except:
1146 warn('Problems reading readline initialization file <%s>'
1146 warn('Problems reading readline initialization file <%s>'
1147 % inputrc_name)
1147 % inputrc_name)
1148
1148
1149 self.has_readline = 1
1149 self.has_readline = 1
1150 self.readline = readline
1150 self.readline = readline
1151 # save this in sys so embedded copies can restore it properly
1151 # save this in sys so embedded copies can restore it properly
1152 sys.ipcompleter = self.Completer.complete
1152 sys.ipcompleter = self.Completer.complete
1153 readline.set_completer(self.Completer.complete)
1153 readline.set_completer(self.Completer.complete)
1154
1154
1155 # Configure readline according to user's prefs
1155 # Configure readline according to user's prefs
1156 for rlcommand in self.rc.readline_parse_and_bind:
1156 for rlcommand in self.rc.readline_parse_and_bind:
1157 readline.parse_and_bind(rlcommand)
1157 readline.parse_and_bind(rlcommand)
1158
1158
1159 # remove some chars from the delimiters list
1159 # remove some chars from the delimiters list
1160 delims = readline.get_completer_delims()
1160 delims = readline.get_completer_delims()
1161 delims = delims.translate(string._idmap,
1161 delims = delims.translate(string._idmap,
1162 self.rc.readline_remove_delims)
1162 self.rc.readline_remove_delims)
1163 readline.set_completer_delims(delims)
1163 readline.set_completer_delims(delims)
1164 # otherwise we end up with a monster history after a while:
1164 # otherwise we end up with a monster history after a while:
1165 readline.set_history_length(1000)
1165 readline.set_history_length(1000)
1166 try:
1166 try:
1167 #print '*** Reading readline history' # dbg
1167 #print '*** Reading readline history' # dbg
1168 readline.read_history_file(self.histfile)
1168 readline.read_history_file(self.histfile)
1169 except IOError:
1169 except IOError:
1170 pass # It doesn't exist yet.
1170 pass # It doesn't exist yet.
1171
1171
1172 atexit.register(self.atexit_operations)
1172 atexit.register(self.atexit_operations)
1173 del atexit
1173 del atexit
1174
1174
1175 # Configure auto-indent for all platforms
1175 # Configure auto-indent for all platforms
1176 self.set_autoindent(self.rc.autoindent)
1176 self.set_autoindent(self.rc.autoindent)
1177
1177
1178 def _should_recompile(self,e):
1178 def _should_recompile(self,e):
1179 """Utility routine for edit_syntax_error"""
1179 """Utility routine for edit_syntax_error"""
1180
1180
1181 if e.filename in ('<ipython console>','<input>','<string>',
1181 if e.filename in ('<ipython console>','<input>','<string>',
1182 '<console>',None):
1182 '<console>',None):
1183
1183
1184 return False
1184 return False
1185 try:
1185 try:
1186 if not ask_yes_no('Return to editor to correct syntax error? '
1186 if not ask_yes_no('Return to editor to correct syntax error? '
1187 '[Y/n] ','y'):
1187 '[Y/n] ','y'):
1188 return False
1188 return False
1189 except EOFError:
1189 except EOFError:
1190 return False
1190 return False
1191
1191
1192 def int0(x):
1192 def int0(x):
1193 try:
1193 try:
1194 return int(x)
1194 return int(x)
1195 except TypeError:
1195 except TypeError:
1196 return 0
1196 return 0
1197 # always pass integer line and offset values to editor hook
1197 # always pass integer line and offset values to editor hook
1198 self.hooks.fix_error_editor(e.filename,
1198 self.hooks.fix_error_editor(e.filename,
1199 int0(e.lineno),int0(e.offset),e.msg)
1199 int0(e.lineno),int0(e.offset),e.msg)
1200 return True
1200 return True
1201
1201
1202 def edit_syntax_error(self):
1202 def edit_syntax_error(self):
1203 """The bottom half of the syntax error handler called in the main loop.
1203 """The bottom half of the syntax error handler called in the main loop.
1204
1204
1205 Loop until syntax error is fixed or user cancels.
1205 Loop until syntax error is fixed or user cancels.
1206 """
1206 """
1207
1207
1208 while self.SyntaxTB.last_syntax_error:
1208 while self.SyntaxTB.last_syntax_error:
1209 # copy and clear last_syntax_error
1209 # copy and clear last_syntax_error
1210 err = self.SyntaxTB.clear_err_state()
1210 err = self.SyntaxTB.clear_err_state()
1211 if not self._should_recompile(err):
1211 if not self._should_recompile(err):
1212 return
1212 return
1213 try:
1213 try:
1214 # may set last_syntax_error again if a SyntaxError is raised
1214 # may set last_syntax_error again if a SyntaxError is raised
1215 self.safe_execfile(err.filename,self.shell.user_ns)
1215 self.safe_execfile(err.filename,self.shell.user_ns)
1216 except:
1216 except:
1217 self.showtraceback()
1217 self.showtraceback()
1218 else:
1218 else:
1219 f = file(err.filename)
1219 f = file(err.filename)
1220 try:
1220 try:
1221 sys.displayhook(f.read())
1221 sys.displayhook(f.read())
1222 finally:
1222 finally:
1223 f.close()
1223 f.close()
1224
1224
1225 def showsyntaxerror(self, filename=None):
1225 def showsyntaxerror(self, filename=None):
1226 """Display the syntax error that just occurred.
1226 """Display the syntax error that just occurred.
1227
1227
1228 This doesn't display a stack trace because there isn't one.
1228 This doesn't display a stack trace because there isn't one.
1229
1229
1230 If a filename is given, it is stuffed in the exception instead
1230 If a filename is given, it is stuffed in the exception instead
1231 of what was there before (because Python's parser always uses
1231 of what was there before (because Python's parser always uses
1232 "<string>" when reading from a string).
1232 "<string>" when reading from a string).
1233 """
1233 """
1234 etype, value, last_traceback = sys.exc_info()
1234 etype, value, last_traceback = sys.exc_info()
1235 if filename and etype is SyntaxError:
1235 if filename and etype is SyntaxError:
1236 # Work hard to stuff the correct filename in the exception
1236 # Work hard to stuff the correct filename in the exception
1237 try:
1237 try:
1238 msg, (dummy_filename, lineno, offset, line) = value
1238 msg, (dummy_filename, lineno, offset, line) = value
1239 except:
1239 except:
1240 # Not the format we expect; leave it alone
1240 # Not the format we expect; leave it alone
1241 pass
1241 pass
1242 else:
1242 else:
1243 # Stuff in the right filename
1243 # Stuff in the right filename
1244 try:
1244 try:
1245 # Assume SyntaxError is a class exception
1245 # Assume SyntaxError is a class exception
1246 value = SyntaxError(msg, (filename, lineno, offset, line))
1246 value = SyntaxError(msg, (filename, lineno, offset, line))
1247 except:
1247 except:
1248 # If that failed, assume SyntaxError is a string
1248 # If that failed, assume SyntaxError is a string
1249 value = msg, (filename, lineno, offset, line)
1249 value = msg, (filename, lineno, offset, line)
1250 self.SyntaxTB(etype,value,[])
1250 self.SyntaxTB(etype,value,[])
1251
1251
1252 def debugger(self):
1252 def debugger(self):
1253 """Call the pdb debugger."""
1253 """Call the pdb debugger."""
1254
1254
1255 if not self.rc.pdb:
1255 if not self.rc.pdb:
1256 return
1256 return
1257 pdb.pm()
1257 pdb.pm()
1258
1258
1259 def showtraceback(self,exc_tuple = None,filename=None):
1259 def showtraceback(self,exc_tuple = None,filename=None):
1260 """Display the exception that just occurred."""
1260 """Display the exception that just occurred."""
1261
1261
1262 # Though this won't be called by syntax errors in the input line,
1262 # Though this won't be called by syntax errors in the input line,
1263 # there may be SyntaxError cases whith imported code.
1263 # there may be SyntaxError cases whith imported code.
1264 if exc_tuple is None:
1264 if exc_tuple is None:
1265 type, value, tb = sys.exc_info()
1265 type, value, tb = sys.exc_info()
1266 else:
1266 else:
1267 type, value, tb = exc_tuple
1267 type, value, tb = exc_tuple
1268 if type is SyntaxError:
1268 if type is SyntaxError:
1269 self.showsyntaxerror(filename)
1269 self.showsyntaxerror(filename)
1270 else:
1270 else:
1271 self.InteractiveTB()
1271 self.InteractiveTB()
1272 if self.InteractiveTB.call_pdb and self.has_readline:
1272 if self.InteractiveTB.call_pdb and self.has_readline:
1273 # pdb mucks up readline, fix it back
1273 # pdb mucks up readline, fix it back
1274 self.readline.set_completer(self.Completer.complete)
1274 self.readline.set_completer(self.Completer.complete)
1275
1275
1276 def mainloop(self,banner=None):
1276 def mainloop(self,banner=None):
1277 """Creates the local namespace and starts the mainloop.
1277 """Creates the local namespace and starts the mainloop.
1278
1278
1279 If an optional banner argument is given, it will override the
1279 If an optional banner argument is given, it will override the
1280 internally created default banner."""
1280 internally created default banner."""
1281
1281
1282 if self.rc.c: # Emulate Python's -c option
1282 if self.rc.c: # Emulate Python's -c option
1283 self.exec_init_cmd()
1283 self.exec_init_cmd()
1284 if banner is None:
1284 if banner is None:
1285 if self.rc.banner:
1285 if self.rc.banner:
1286 banner = self.BANNER+self.banner2
1286 banner = self.BANNER+self.banner2
1287 else:
1287 else:
1288 banner = ''
1288 banner = ''
1289 self.interact(banner)
1289 self.interact(banner)
1290
1290
1291 def exec_init_cmd(self):
1291 def exec_init_cmd(self):
1292 """Execute a command given at the command line.
1292 """Execute a command given at the command line.
1293
1293
1294 This emulates Python's -c option."""
1294 This emulates Python's -c option."""
1295
1295
1296 sys.argv = ['-c']
1296 sys.argv = ['-c']
1297 self.push(self.rc.c)
1297 self.push(self.rc.c)
1298
1298
1299 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1299 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1300 """Embeds IPython into a running python program.
1300 """Embeds IPython into a running python program.
1301
1301
1302 Input:
1302 Input:
1303
1303
1304 - header: An optional header message can be specified.
1304 - header: An optional header message can be specified.
1305
1305
1306 - local_ns, global_ns: working namespaces. If given as None, the
1306 - local_ns, global_ns: working namespaces. If given as None, the
1307 IPython-initialized one is updated with __main__.__dict__, so that
1307 IPython-initialized one is updated with __main__.__dict__, so that
1308 program variables become visible but user-specific configuration
1308 program variables become visible but user-specific configuration
1309 remains possible.
1309 remains possible.
1310
1310
1311 - stack_depth: specifies how many levels in the stack to go to
1311 - stack_depth: specifies how many levels in the stack to go to
1312 looking for namespaces (when local_ns and global_ns are None). This
1312 looking for namespaces (when local_ns and global_ns are None). This
1313 allows an intermediate caller to make sure that this function gets
1313 allows an intermediate caller to make sure that this function gets
1314 the namespace from the intended level in the stack. By default (0)
1314 the namespace from the intended level in the stack. By default (0)
1315 it will get its locals and globals from the immediate caller.
1315 it will get its locals and globals from the immediate caller.
1316
1316
1317 Warning: it's possible to use this in a program which is being run by
1317 Warning: it's possible to use this in a program which is being run by
1318 IPython itself (via %run), but some funny things will happen (a few
1318 IPython itself (via %run), but some funny things will happen (a few
1319 globals get overwritten). In the future this will be cleaned up, as
1319 globals get overwritten). In the future this will be cleaned up, as
1320 there is no fundamental reason why it can't work perfectly."""
1320 there is no fundamental reason why it can't work perfectly."""
1321
1321
1322 # Get locals and globals from caller
1322 # Get locals and globals from caller
1323 if local_ns is None or global_ns is None:
1323 if local_ns is None or global_ns is None:
1324 call_frame = sys._getframe(stack_depth).f_back
1324 call_frame = sys._getframe(stack_depth).f_back
1325
1325
1326 if local_ns is None:
1326 if local_ns is None:
1327 local_ns = call_frame.f_locals
1327 local_ns = call_frame.f_locals
1328 if global_ns is None:
1328 if global_ns is None:
1329 global_ns = call_frame.f_globals
1329 global_ns = call_frame.f_globals
1330
1330
1331 # Update namespaces and fire up interpreter
1331 # Update namespaces and fire up interpreter
1332
1332
1333 # The global one is easy, we can just throw it in
1333 # The global one is easy, we can just throw it in
1334 self.user_global_ns = global_ns
1334 self.user_global_ns = global_ns
1335
1335
1336 # but the user/local one is tricky: ipython needs it to store internal
1336 # but the user/local one is tricky: ipython needs it to store internal
1337 # data, but we also need the locals. We'll copy locals in the user
1337 # data, but we also need the locals. We'll copy locals in the user
1338 # one, but will track what got copied so we can delete them at exit.
1338 # one, but will track what got copied so we can delete them at exit.
1339 # This is so that a later embedded call doesn't see locals from a
1339 # This is so that a later embedded call doesn't see locals from a
1340 # previous call (which most likely existed in a separate scope).
1340 # previous call (which most likely existed in a separate scope).
1341 local_varnames = local_ns.keys()
1341 local_varnames = local_ns.keys()
1342 self.user_ns.update(local_ns)
1342 self.user_ns.update(local_ns)
1343
1343
1344 # Patch for global embedding to make sure that things don't overwrite
1344 # Patch for global embedding to make sure that things don't overwrite
1345 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1345 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1346 # FIXME. Test this a bit more carefully (the if.. is new)
1346 # FIXME. Test this a bit more carefully (the if.. is new)
1347 if local_ns is None and global_ns is None:
1347 if local_ns is None and global_ns is None:
1348 self.user_global_ns.update(__main__.__dict__)
1348 self.user_global_ns.update(__main__.__dict__)
1349
1349
1350 # make sure the tab-completer has the correct frame information, so it
1350 # make sure the tab-completer has the correct frame information, so it
1351 # actually completes using the frame's locals/globals
1351 # actually completes using the frame's locals/globals
1352 self.set_completer_frame()
1352 self.set_completer_frame()
1353
1353
1354 # before activating the interactive mode, we need to make sure that
1354 # before activating the interactive mode, we need to make sure that
1355 # all names in the builtin namespace needed by ipython point to
1355 # all names in the builtin namespace needed by ipython point to
1356 # ourselves, and not to other instances.
1356 # ourselves, and not to other instances.
1357 self.add_builtins()
1357 self.add_builtins()
1358
1358
1359 self.interact(header)
1359 self.interact(header)
1360
1360
1361 # now, purge out the user namespace from anything we might have added
1361 # now, purge out the user namespace from anything we might have added
1362 # from the caller's local namespace
1362 # from the caller's local namespace
1363 delvar = self.user_ns.pop
1363 delvar = self.user_ns.pop
1364 for var in local_varnames:
1364 for var in local_varnames:
1365 delvar(var,None)
1365 delvar(var,None)
1366 # and clean builtins we may have overridden
1366 # and clean builtins we may have overridden
1367 self.clean_builtins()
1367 self.clean_builtins()
1368
1368
1369 def interact(self, banner=None):
1369 def interact(self, banner=None):
1370 """Closely emulate the interactive Python console.
1370 """Closely emulate the interactive Python console.
1371
1371
1372 The optional banner argument specify the banner to print
1372 The optional banner argument specify the banner to print
1373 before the first interaction; by default it prints a banner
1373 before the first interaction; by default it prints a banner
1374 similar to the one printed by the real Python interpreter,
1374 similar to the one printed by the real Python interpreter,
1375 followed by the current class name in parentheses (so as not
1375 followed by the current class name in parentheses (so as not
1376 to confuse this with the real interpreter -- since it's so
1376 to confuse this with the real interpreter -- since it's so
1377 close!).
1377 close!).
1378
1378
1379 """
1379 """
1380 cprt = 'Type "copyright", "credits" or "license" for more information.'
1380 cprt = 'Type "copyright", "credits" or "license" for more information.'
1381 if banner is None:
1381 if banner is None:
1382 self.write("Python %s on %s\n%s\n(%s)\n" %
1382 self.write("Python %s on %s\n%s\n(%s)\n" %
1383 (sys.version, sys.platform, cprt,
1383 (sys.version, sys.platform, cprt,
1384 self.__class__.__name__))
1384 self.__class__.__name__))
1385 else:
1385 else:
1386 self.write(banner)
1386 self.write(banner)
1387
1387
1388 more = 0
1388 more = 0
1389
1389
1390 # Mark activity in the builtins
1390 # Mark activity in the builtins
1391 __builtin__.__dict__['__IPYTHON__active'] += 1
1391 __builtin__.__dict__['__IPYTHON__active'] += 1
1392
1392
1393 # exit_now is set by a call to %Exit or %Quit
1393 # exit_now is set by a call to %Exit or %Quit
1394 self.exit_now = False
1394 self.exit_now = False
1395 while not self.exit_now:
1395 while not self.exit_now:
1396
1396
1397 try:
1397 try:
1398 if more:
1398 if more:
1399 prompt = self.outputcache.prompt2
1399 prompt = self.outputcache.prompt2
1400 if self.autoindent:
1400 if self.autoindent:
1401 self.readline_startup_hook(self.pre_readline)
1401 self.readline_startup_hook(self.pre_readline)
1402 else:
1402 else:
1403 prompt = self.outputcache.prompt1
1403 prompt = self.outputcache.prompt1
1404 try:
1404 try:
1405 line = self.raw_input(prompt,more)
1405 line = self.raw_input(prompt,more)
1406 if self.autoindent:
1406 if self.autoindent:
1407 self.readline_startup_hook(None)
1407 self.readline_startup_hook(None)
1408 except EOFError:
1408 except EOFError:
1409 if self.autoindent:
1409 if self.autoindent:
1410 self.readline_startup_hook(None)
1410 self.readline_startup_hook(None)
1411 self.write("\n")
1411 self.write("\n")
1412 self.exit()
1412 self.exit()
1413 else:
1413 else:
1414 more = self.push(line)
1414 more = self.push(line)
1415
1415
1416 if (self.SyntaxTB.last_syntax_error and
1416 if (self.SyntaxTB.last_syntax_error and
1417 self.rc.autoedit_syntax):
1417 self.rc.autoedit_syntax):
1418 self.edit_syntax_error()
1418 self.edit_syntax_error()
1419
1419
1420 except KeyboardInterrupt:
1420 except KeyboardInterrupt:
1421 self.write("\nKeyboardInterrupt\n")
1421 self.write("\nKeyboardInterrupt\n")
1422 self.resetbuffer()
1422 self.resetbuffer()
1423 more = 0
1423 more = 0
1424 # keep cache in sync with the prompt counter:
1424 # keep cache in sync with the prompt counter:
1425 self.outputcache.prompt_count -= 1
1425 self.outputcache.prompt_count -= 1
1426
1426
1427 if self.autoindent:
1427 if self.autoindent:
1428 self.indent_current_nsp = 0
1428 self.indent_current_nsp = 0
1429 self.indent_current = ' '* self.indent_current_nsp
1429 self.indent_current = ' '* self.indent_current_nsp
1430
1430
1431 except bdb.BdbQuit:
1431 except bdb.BdbQuit:
1432 warn("The Python debugger has exited with a BdbQuit exception.\n"
1432 warn("The Python debugger has exited with a BdbQuit exception.\n"
1433 "Because of how pdb handles the stack, it is impossible\n"
1433 "Because of how pdb handles the stack, it is impossible\n"
1434 "for IPython to properly format this particular exception.\n"
1434 "for IPython to properly format this particular exception.\n"
1435 "IPython will resume normal operation.")
1435 "IPython will resume normal operation.")
1436
1436
1437 # We are off again...
1437 # We are off again...
1438 __builtin__.__dict__['__IPYTHON__active'] -= 1
1438 __builtin__.__dict__['__IPYTHON__active'] -= 1
1439
1439
1440 def excepthook(self, type, value, tb):
1440 def excepthook(self, type, value, tb):
1441 """One more defense for GUI apps that call sys.excepthook.
1441 """One more defense for GUI apps that call sys.excepthook.
1442
1442
1443 GUI frameworks like wxPython trap exceptions and call
1443 GUI frameworks like wxPython trap exceptions and call
1444 sys.excepthook themselves. I guess this is a feature that
1444 sys.excepthook themselves. I guess this is a feature that
1445 enables them to keep running after exceptions that would
1445 enables them to keep running after exceptions that would
1446 otherwise kill their mainloop. This is a bother for IPython
1446 otherwise kill their mainloop. This is a bother for IPython
1447 which excepts to catch all of the program exceptions with a try:
1447 which excepts to catch all of the program exceptions with a try:
1448 except: statement.
1448 except: statement.
1449
1449
1450 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1450 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1451 any app directly invokes sys.excepthook, it will look to the user like
1451 any app directly invokes sys.excepthook, it will look to the user like
1452 IPython crashed. In order to work around this, we can disable the
1452 IPython crashed. In order to work around this, we can disable the
1453 CrashHandler and replace it with this excepthook instead, which prints a
1453 CrashHandler and replace it with this excepthook instead, which prints a
1454 regular traceback using our InteractiveTB. In this fashion, apps which
1454 regular traceback using our InteractiveTB. In this fashion, apps which
1455 call sys.excepthook will generate a regular-looking exception from
1455 call sys.excepthook will generate a regular-looking exception from
1456 IPython, and the CrashHandler will only be triggered by real IPython
1456 IPython, and the CrashHandler will only be triggered by real IPython
1457 crashes.
1457 crashes.
1458
1458
1459 This hook should be used sparingly, only in places which are not likely
1459 This hook should be used sparingly, only in places which are not likely
1460 to be true IPython errors.
1460 to be true IPython errors.
1461 """
1461 """
1462
1462
1463 self.InteractiveTB(type, value, tb, tb_offset=0)
1463 self.InteractiveTB(type, value, tb, tb_offset=0)
1464 if self.InteractiveTB.call_pdb and self.has_readline:
1464 if self.InteractiveTB.call_pdb and self.has_readline:
1465 self.readline.set_completer(self.Completer.complete)
1465 self.readline.set_completer(self.Completer.complete)
1466
1466
1467 def call_alias(self,alias,rest=''):
1467 def call_alias(self,alias,rest=''):
1468 """Call an alias given its name and the rest of the line.
1468 """Call an alias given its name and the rest of the line.
1469
1469
1470 This function MUST be given a proper alias, because it doesn't make
1470 This function MUST be given a proper alias, because it doesn't make
1471 any checks when looking up into the alias table. The caller is
1471 any checks when looking up into the alias table. The caller is
1472 responsible for invoking it only with a valid alias."""
1472 responsible for invoking it only with a valid alias."""
1473
1473
1474 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1474 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1475 nargs,cmd = self.alias_table[alias]
1475 nargs,cmd = self.alias_table[alias]
1476 # Expand the %l special to be the user's input line
1476 # Expand the %l special to be the user's input line
1477 if cmd.find('%l') >= 0:
1477 if cmd.find('%l') >= 0:
1478 cmd = cmd.replace('%l',rest)
1478 cmd = cmd.replace('%l',rest)
1479 rest = ''
1479 rest = ''
1480 if nargs==0:
1480 if nargs==0:
1481 # Simple, argument-less aliases
1481 # Simple, argument-less aliases
1482 cmd = '%s %s' % (cmd,rest)
1482 cmd = '%s %s' % (cmd,rest)
1483 else:
1483 else:
1484 # Handle aliases with positional arguments
1484 # Handle aliases with positional arguments
1485 args = rest.split(None,nargs)
1485 args = rest.split(None,nargs)
1486 if len(args)< nargs:
1486 if len(args)< nargs:
1487 error('Alias <%s> requires %s arguments, %s given.' %
1487 error('Alias <%s> requires %s arguments, %s given.' %
1488 (alias,nargs,len(args)))
1488 (alias,nargs,len(args)))
1489 return
1489 return
1490 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1490 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1491 # Now call the macro, evaluating in the user's namespace
1491 # Now call the macro, evaluating in the user's namespace
1492 try:
1492 try:
1493 self.system(cmd)
1493 self.system(cmd)
1494 except:
1494 except:
1495 self.showtraceback()
1495 self.showtraceback()
1496
1496
1497 def autoindent_update(self,line):
1497 def autoindent_update(self,line):
1498 """Keep track of the indent level."""
1498 """Keep track of the indent level."""
1499 if self.autoindent:
1499 if self.autoindent:
1500 if line:
1500 if line:
1501 ini_spaces = ini_spaces_re.match(line)
1501 ini_spaces = ini_spaces_re.match(line)
1502 if ini_spaces:
1502 if ini_spaces:
1503 nspaces = ini_spaces.end()
1503 nspaces = ini_spaces.end()
1504 else:
1504 else:
1505 nspaces = 0
1505 nspaces = 0
1506 self.indent_current_nsp = nspaces
1506 self.indent_current_nsp = nspaces
1507
1507
1508 if line[-1] == ':':
1508 if line[-1] == ':':
1509 self.indent_current_nsp += 4
1509 self.indent_current_nsp += 4
1510 elif dedent_re.match(line):
1510 elif dedent_re.match(line):
1511 self.indent_current_nsp -= 4
1511 self.indent_current_nsp -= 4
1512 else:
1512 else:
1513 self.indent_current_nsp = 0
1513 self.indent_current_nsp = 0
1514
1514
1515 # indent_current is the actual string to be inserted
1515 # indent_current is the actual string to be inserted
1516 # by the readline hooks for indentation
1516 # by the readline hooks for indentation
1517 self.indent_current = ' '* self.indent_current_nsp
1517 self.indent_current = ' '* self.indent_current_nsp
1518
1518
1519 def runlines(self,lines):
1519 def runlines(self,lines):
1520 """Run a string of one or more lines of source.
1520 """Run a string of one or more lines of source.
1521
1521
1522 This method is capable of running a string containing multiple source
1522 This method is capable of running a string containing multiple source
1523 lines, as if they had been entered at the IPython prompt. Since it
1523 lines, as if they had been entered at the IPython prompt. Since it
1524 exposes IPython's processing machinery, the given strings can contain
1524 exposes IPython's processing machinery, the given strings can contain
1525 magic calls (%magic), special shell access (!cmd), etc."""
1525 magic calls (%magic), special shell access (!cmd), etc."""
1526
1526
1527 # We must start with a clean buffer, in case this is run from an
1527 # We must start with a clean buffer, in case this is run from an
1528 # interactive IPython session (via a magic, for example).
1528 # interactive IPython session (via a magic, for example).
1529 self.resetbuffer()
1529 self.resetbuffer()
1530 lines = lines.split('\n')
1530 lines = lines.split('\n')
1531 more = 0
1531 more = 0
1532 for line in lines:
1532 for line in lines:
1533 # skip blank lines so we don't mess up the prompt counter, but do
1533 # skip blank lines so we don't mess up the prompt counter, but do
1534 # NOT skip even a blank line if we are in a code block (more is
1534 # NOT skip even a blank line if we are in a code block (more is
1535 # true)
1535 # true)
1536 if line or more:
1536 if line or more:
1537 more = self.push(self.prefilter(line,more))
1537 more = self.push(self.prefilter(line,more))
1538 # IPython's runsource returns None if there was an error
1538 # IPython's runsource returns None if there was an error
1539 # compiling the code. This allows us to stop processing right
1539 # compiling the code. This allows us to stop processing right
1540 # away, so the user gets the error message at the right place.
1540 # away, so the user gets the error message at the right place.
1541 if more is None:
1541 if more is None:
1542 break
1542 break
1543 # final newline in case the input didn't have it, so that the code
1543 # final newline in case the input didn't have it, so that the code
1544 # actually does get executed
1544 # actually does get executed
1545 if more:
1545 if more:
1546 self.push('\n')
1546 self.push('\n')
1547
1547
1548 def runsource(self, source, filename='<input>', symbol='single'):
1548 def runsource(self, source, filename='<input>', symbol='single'):
1549 """Compile and run some source in the interpreter.
1549 """Compile and run some source in the interpreter.
1550
1550
1551 Arguments are as for compile_command().
1551 Arguments are as for compile_command().
1552
1552
1553 One several things can happen:
1553 One several things can happen:
1554
1554
1555 1) The input is incorrect; compile_command() raised an
1555 1) The input is incorrect; compile_command() raised an
1556 exception (SyntaxError or OverflowError). A syntax traceback
1556 exception (SyntaxError or OverflowError). A syntax traceback
1557 will be printed by calling the showsyntaxerror() method.
1557 will be printed by calling the showsyntaxerror() method.
1558
1558
1559 2) The input is incomplete, and more input is required;
1559 2) The input is incomplete, and more input is required;
1560 compile_command() returned None. Nothing happens.
1560 compile_command() returned None. Nothing happens.
1561
1561
1562 3) The input is complete; compile_command() returned a code
1562 3) The input is complete; compile_command() returned a code
1563 object. The code is executed by calling self.runcode() (which
1563 object. The code is executed by calling self.runcode() (which
1564 also handles run-time exceptions, except for SystemExit).
1564 also handles run-time exceptions, except for SystemExit).
1565
1565
1566 The return value is:
1566 The return value is:
1567
1567
1568 - True in case 2
1568 - True in case 2
1569
1569
1570 - False in the other cases, unless an exception is raised, where
1570 - False in the other cases, unless an exception is raised, where
1571 None is returned instead. This can be used by external callers to
1571 None is returned instead. This can be used by external callers to
1572 know whether to continue feeding input or not.
1572 know whether to continue feeding input or not.
1573
1573
1574 The return value can be used to decide whether to use sys.ps1 or
1574 The return value can be used to decide whether to use sys.ps1 or
1575 sys.ps2 to prompt the next line."""
1575 sys.ps2 to prompt the next line."""
1576
1576
1577 try:
1577 try:
1578 code = self.compile(source,filename,symbol)
1578 code = self.compile(source,filename,symbol)
1579 except (OverflowError, SyntaxError, ValueError):
1579 except (OverflowError, SyntaxError, ValueError):
1580 # Case 1
1580 # Case 1
1581 self.showsyntaxerror(filename)
1581 self.showsyntaxerror(filename)
1582 return None
1582 return None
1583
1583
1584 if code is None:
1584 if code is None:
1585 # Case 2
1585 # Case 2
1586 return True
1586 return True
1587
1587
1588 # Case 3
1588 # Case 3
1589 # We store the code object so that threaded shells and
1589 # We store the code object so that threaded shells and
1590 # custom exception handlers can access all this info if needed.
1590 # custom exception handlers can access all this info if needed.
1591 # The source corresponding to this can be obtained from the
1591 # The source corresponding to this can be obtained from the
1592 # buffer attribute as '\n'.join(self.buffer).
1592 # buffer attribute as '\n'.join(self.buffer).
1593 self.code_to_run = code
1593 self.code_to_run = code
1594 # now actually execute the code object
1594 # now actually execute the code object
1595 if self.runcode(code) == 0:
1595 if self.runcode(code) == 0:
1596 return False
1596 return False
1597 else:
1597 else:
1598 return None
1598 return None
1599
1599
1600 def runcode(self,code_obj):
1600 def runcode(self,code_obj):
1601 """Execute a code object.
1601 """Execute a code object.
1602
1602
1603 When an exception occurs, self.showtraceback() is called to display a
1603 When an exception occurs, self.showtraceback() is called to display a
1604 traceback.
1604 traceback.
1605
1605
1606 Return value: a flag indicating whether the code to be run completed
1606 Return value: a flag indicating whether the code to be run completed
1607 successfully:
1607 successfully:
1608
1608
1609 - 0: successful execution.
1609 - 0: successful execution.
1610 - 1: an error occurred.
1610 - 1: an error occurred.
1611 """
1611 """
1612
1612
1613 # Set our own excepthook in case the user code tries to call it
1613 # Set our own excepthook in case the user code tries to call it
1614 # directly, so that the IPython crash handler doesn't get triggered
1614 # directly, so that the IPython crash handler doesn't get triggered
1615 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1615 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1616
1616
1617 # we save the original sys.excepthook in the instance, in case config
1617 # we save the original sys.excepthook in the instance, in case config
1618 # code (such as magics) needs access to it.
1618 # code (such as magics) needs access to it.
1619 self.sys_excepthook = old_excepthook
1619 self.sys_excepthook = old_excepthook
1620 outflag = 1 # happens in more places, so it's easier as default
1620 outflag = 1 # happens in more places, so it's easier as default
1621 try:
1621 try:
1622 try:
1622 try:
1623 # Embedded instances require separate global/local namespaces
1623 # Embedded instances require separate global/local namespaces
1624 # so they can see both the surrounding (local) namespace and
1624 # so they can see both the surrounding (local) namespace and
1625 # the module-level globals when called inside another function.
1625 # the module-level globals when called inside another function.
1626 if self.embedded:
1626 if self.embedded:
1627 exec code_obj in self.user_global_ns, self.user_ns
1627 exec code_obj in self.user_global_ns, self.user_ns
1628 # Normal (non-embedded) instances should only have a single
1628 # Normal (non-embedded) instances should only have a single
1629 # namespace for user code execution, otherwise functions won't
1629 # namespace for user code execution, otherwise functions won't
1630 # see interactive top-level globals.
1630 # see interactive top-level globals.
1631 else:
1631 else:
1632 exec code_obj in self.user_ns
1632 exec code_obj in self.user_ns
1633 finally:
1633 finally:
1634 # Reset our crash handler in place
1634 # Reset our crash handler in place
1635 sys.excepthook = old_excepthook
1635 sys.excepthook = old_excepthook
1636 except SystemExit:
1636 except SystemExit:
1637 self.resetbuffer()
1637 self.resetbuffer()
1638 self.showtraceback()
1638 self.showtraceback()
1639 warn("Type exit or quit to exit IPython "
1639 warn("Type exit or quit to exit IPython "
1640 "(%Exit or %Quit do so unconditionally).",level=1)
1640 "(%Exit or %Quit do so unconditionally).",level=1)
1641 except self.custom_exceptions:
1641 except self.custom_exceptions:
1642 etype,value,tb = sys.exc_info()
1642 etype,value,tb = sys.exc_info()
1643 self.CustomTB(etype,value,tb)
1643 self.CustomTB(etype,value,tb)
1644 except:
1644 except:
1645 self.showtraceback()
1645 self.showtraceback()
1646 else:
1646 else:
1647 outflag = 0
1647 outflag = 0
1648 if softspace(sys.stdout, 0):
1648 if softspace(sys.stdout, 0):
1649 print
1649 print
1650 # Flush out code object which has been run (and source)
1650 # Flush out code object which has been run (and source)
1651 self.code_to_run = None
1651 self.code_to_run = None
1652 return outflag
1652 return outflag
1653
1653
1654 def push(self, line):
1654 def push(self, line):
1655 """Push a line to the interpreter.
1655 """Push a line to the interpreter.
1656
1656
1657 The line should not have a trailing newline; it may have
1657 The line should not have a trailing newline; it may have
1658 internal newlines. The line is appended to a buffer and the
1658 internal newlines. The line is appended to a buffer and the
1659 interpreter's runsource() method is called with the
1659 interpreter's runsource() method is called with the
1660 concatenated contents of the buffer as source. If this
1660 concatenated contents of the buffer as source. If this
1661 indicates that the command was executed or invalid, the buffer
1661 indicates that the command was executed or invalid, the buffer
1662 is reset; otherwise, the command is incomplete, and the buffer
1662 is reset; otherwise, the command is incomplete, and the buffer
1663 is left as it was after the line was appended. The return
1663 is left as it was after the line was appended. The return
1664 value is 1 if more input is required, 0 if the line was dealt
1664 value is 1 if more input is required, 0 if the line was dealt
1665 with in some way (this is the same as runsource()).
1665 with in some way (this is the same as runsource()).
1666 """
1666 """
1667
1667
1668 # autoindent management should be done here, and not in the
1668 # autoindent management should be done here, and not in the
1669 # interactive loop, since that one is only seen by keyboard input. We
1669 # interactive loop, since that one is only seen by keyboard input. We
1670 # need this done correctly even for code run via runlines (which uses
1670 # need this done correctly even for code run via runlines (which uses
1671 # push).
1671 # push).
1672
1672
1673 #print 'push line: <%s>' % line # dbg
1673 #print 'push line: <%s>' % line # dbg
1674 self.autoindent_update(line)
1674 self.autoindent_update(line)
1675
1675
1676 self.buffer.append(line)
1676 self.buffer.append(line)
1677 more = self.runsource('\n'.join(self.buffer), self.filename)
1677 more = self.runsource('\n'.join(self.buffer), self.filename)
1678 if not more:
1678 if not more:
1679 self.resetbuffer()
1679 self.resetbuffer()
1680 return more
1680 return more
1681
1681
1682 def resetbuffer(self):
1682 def resetbuffer(self):
1683 """Reset the input buffer."""
1683 """Reset the input buffer."""
1684 self.buffer[:] = []
1684 self.buffer[:] = []
1685
1685
1686 def raw_input(self,prompt='',continue_prompt=False):
1686 def raw_input(self,prompt='',continue_prompt=False):
1687 """Write a prompt and read a line.
1687 """Write a prompt and read a line.
1688
1688
1689 The returned line does not include the trailing newline.
1689 The returned line does not include the trailing newline.
1690 When the user enters the EOF key sequence, EOFError is raised.
1690 When the user enters the EOF key sequence, EOFError is raised.
1691
1691
1692 Optional inputs:
1692 Optional inputs:
1693
1693
1694 - prompt(''): a string to be printed to prompt the user.
1694 - prompt(''): a string to be printed to prompt the user.
1695
1695
1696 - continue_prompt(False): whether this line is the first one or a
1696 - continue_prompt(False): whether this line is the first one or a
1697 continuation in a sequence of inputs.
1697 continuation in a sequence of inputs.
1698 """
1698 """
1699
1699
1700 line = raw_input_original(prompt)
1700 line = raw_input_original(prompt)
1701 # Try to be reasonably smart about not re-indenting pasted input more
1701 # Try to be reasonably smart about not re-indenting pasted input more
1702 # than necessary. We do this by trimming out the auto-indent initial
1702 # than necessary. We do this by trimming out the auto-indent initial
1703 # spaces, if the user's actual input started itself with whitespace.
1703 # spaces, if the user's actual input started itself with whitespace.
1704 if self.autoindent:
1704 if self.autoindent:
1705 line2 = line[self.indent_current_nsp:]
1705 line2 = line[self.indent_current_nsp:]
1706 if line2[0:1] in (' ','\t'):
1706 if line2[0:1] in (' ','\t'):
1707 line = line2
1707 line = line2
1708 return self.prefilter(line,continue_prompt)
1708 return self.prefilter(line,continue_prompt)
1709
1709
1710 def split_user_input(self,line):
1710 def split_user_input(self,line):
1711 """Split user input into pre-char, function part and rest."""
1711 """Split user input into pre-char, function part and rest."""
1712
1712
1713 lsplit = self.line_split.match(line)
1713 lsplit = self.line_split.match(line)
1714 if lsplit is None: # no regexp match returns None
1714 if lsplit is None: # no regexp match returns None
1715 try:
1715 try:
1716 iFun,theRest = line.split(None,1)
1716 iFun,theRest = line.split(None,1)
1717 except ValueError:
1717 except ValueError:
1718 iFun,theRest = line,''
1718 iFun,theRest = line,''
1719 pre = re.match('^(\s*)(.*)',line).groups()[0]
1719 pre = re.match('^(\s*)(.*)',line).groups()[0]
1720 else:
1720 else:
1721 pre,iFun,theRest = lsplit.groups()
1721 pre,iFun,theRest = lsplit.groups()
1722
1722
1723 #print 'line:<%s>' % line # dbg
1723 #print 'line:<%s>' % line # dbg
1724 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1724 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1725 return pre,iFun.strip(),theRest
1725 return pre,iFun.strip(),theRest
1726
1726
1727 def _prefilter(self, line, continue_prompt):
1727 def _prefilter(self, line, continue_prompt):
1728 """Calls different preprocessors, depending on the form of line."""
1728 """Calls different preprocessors, depending on the form of line."""
1729
1729
1730 # All handlers *must* return a value, even if it's blank ('').
1730 # All handlers *must* return a value, even if it's blank ('').
1731
1731
1732 # Lines are NOT logged here. Handlers should process the line as
1732 # Lines are NOT logged here. Handlers should process the line as
1733 # needed, update the cache AND log it (so that the input cache array
1733 # needed, update the cache AND log it (so that the input cache array
1734 # stays synced).
1734 # stays synced).
1735
1735
1736 # This function is _very_ delicate, and since it's also the one which
1736 # This function is _very_ delicate, and since it's also the one which
1737 # determines IPython's response to user input, it must be as efficient
1737 # determines IPython's response to user input, it must be as efficient
1738 # as possible. For this reason it has _many_ returns in it, trying
1738 # as possible. For this reason it has _many_ returns in it, trying
1739 # always to exit as quickly as it can figure out what it needs to do.
1739 # always to exit as quickly as it can figure out what it needs to do.
1740
1740
1741 # This function is the main responsible for maintaining IPython's
1741 # This function is the main responsible for maintaining IPython's
1742 # behavior respectful of Python's semantics. So be _very_ careful if
1742 # behavior respectful of Python's semantics. So be _very_ careful if
1743 # making changes to anything here.
1743 # making changes to anything here.
1744
1744
1745 #.....................................................................
1745 #.....................................................................
1746 # Code begins
1746 # Code begins
1747
1747
1748 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1748 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1749
1749
1750 # save the line away in case we crash, so the post-mortem handler can
1750 # save the line away in case we crash, so the post-mortem handler can
1751 # record it
1751 # record it
1752 self._last_input_line = line
1752 self._last_input_line = line
1753
1753
1754 #print '***line: <%s>' % line # dbg
1754 #print '***line: <%s>' % line # dbg
1755
1755
1756 # the input history needs to track even empty lines
1756 # the input history needs to track even empty lines
1757 if not line.strip():
1757 if not line.strip():
1758 if not continue_prompt:
1758 if not continue_prompt:
1759 self.outputcache.prompt_count -= 1
1759 self.outputcache.prompt_count -= 1
1760 return self.handle_normal(line,continue_prompt)
1760 return self.handle_normal(line,continue_prompt)
1761 #return self.handle_normal('',continue_prompt)
1761 #return self.handle_normal('',continue_prompt)
1762
1762
1763 # print '***cont',continue_prompt # dbg
1763 # print '***cont',continue_prompt # dbg
1764 # special handlers are only allowed for single line statements
1764 # special handlers are only allowed for single line statements
1765 if continue_prompt and not self.rc.multi_line_specials:
1765 if continue_prompt and not self.rc.multi_line_specials:
1766 return self.handle_normal(line,continue_prompt)
1766 return self.handle_normal(line,continue_prompt)
1767
1767
1768 # For the rest, we need the structure of the input
1768 # For the rest, we need the structure of the input
1769 pre,iFun,theRest = self.split_user_input(line)
1769 pre,iFun,theRest = self.split_user_input(line)
1770 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1770 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1771
1771
1772 # First check for explicit escapes in the last/first character
1772 # First check for explicit escapes in the last/first character
1773 handler = None
1773 handler = None
1774 if line[-1] == self.ESC_HELP:
1774 if line[-1] == self.ESC_HELP:
1775 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1775 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1776 if handler is None:
1776 if handler is None:
1777 # look at the first character of iFun, NOT of line, so we skip
1777 # look at the first character of iFun, NOT of line, so we skip
1778 # leading whitespace in multiline input
1778 # leading whitespace in multiline input
1779 handler = self.esc_handlers.get(iFun[0:1])
1779 handler = self.esc_handlers.get(iFun[0:1])
1780 if handler is not None:
1780 if handler is not None:
1781 return handler(line,continue_prompt,pre,iFun,theRest)
1781 return handler(line,continue_prompt,pre,iFun,theRest)
1782 # Emacs ipython-mode tags certain input lines
1782 # Emacs ipython-mode tags certain input lines
1783 if line.endswith('# PYTHON-MODE'):
1783 if line.endswith('# PYTHON-MODE'):
1784 return self.handle_emacs(line,continue_prompt)
1784 return self.handle_emacs(line,continue_prompt)
1785
1785
1786 # Next, check if we can automatically execute this thing
1786 # Next, check if we can automatically execute this thing
1787
1787
1788 # Allow ! in multi-line statements if multi_line_specials is on:
1788 # Allow ! in multi-line statements if multi_line_specials is on:
1789 if continue_prompt and self.rc.multi_line_specials and \
1789 if continue_prompt and self.rc.multi_line_specials and \
1790 iFun.startswith(self.ESC_SHELL):
1790 iFun.startswith(self.ESC_SHELL):
1791 return self.handle_shell_escape(line,continue_prompt,
1791 return self.handle_shell_escape(line,continue_prompt,
1792 pre=pre,iFun=iFun,
1792 pre=pre,iFun=iFun,
1793 theRest=theRest)
1793 theRest=theRest)
1794
1794
1795 # Let's try to find if the input line is a magic fn
1795 # Let's try to find if the input line is a magic fn
1796 oinfo = None
1796 oinfo = None
1797 if hasattr(self,'magic_'+iFun):
1797 if hasattr(self,'magic_'+iFun):
1798 # WARNING: _ofind uses getattr(), so it can consume generators and
1798 # WARNING: _ofind uses getattr(), so it can consume generators and
1799 # cause other side effects.
1799 # cause other side effects.
1800 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1800 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1801 if oinfo['ismagic']:
1801 if oinfo['ismagic']:
1802 # Be careful not to call magics when a variable assignment is
1802 # Be careful not to call magics when a variable assignment is
1803 # being made (ls='hi', for example)
1803 # being made (ls='hi', for example)
1804 if self.rc.automagic and \
1804 if self.rc.automagic and \
1805 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1805 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1806 (self.rc.multi_line_specials or not continue_prompt):
1806 (self.rc.multi_line_specials or not continue_prompt):
1807 return self.handle_magic(line,continue_prompt,
1807 return self.handle_magic(line,continue_prompt,
1808 pre,iFun,theRest)
1808 pre,iFun,theRest)
1809 else:
1809 else:
1810 return self.handle_normal(line,continue_prompt)
1810 return self.handle_normal(line,continue_prompt)
1811
1811
1812 # If the rest of the line begins with an (in)equality, assginment or
1812 # If the rest of the line begins with an (in)equality, assginment or
1813 # function call, we should not call _ofind but simply execute it.
1813 # function call, we should not call _ofind but simply execute it.
1814 # This avoids spurious geattr() accesses on objects upon assignment.
1814 # This avoids spurious geattr() accesses on objects upon assignment.
1815 #
1815 #
1816 # It also allows users to assign to either alias or magic names true
1816 # It also allows users to assign to either alias or magic names true
1817 # python variables (the magic/alias systems always take second seat to
1817 # python variables (the magic/alias systems always take second seat to
1818 # true python code).
1818 # true python code).
1819 if theRest and theRest[0] in '!=()':
1819 if theRest and theRest[0] in '!=()':
1820 return self.handle_normal(line,continue_prompt)
1820 return self.handle_normal(line,continue_prompt)
1821
1821
1822 if oinfo is None:
1822 if oinfo is None:
1823 # let's try to ensure that _oinfo is ONLY called when autocall is
1823 # let's try to ensure that _oinfo is ONLY called when autocall is
1824 # on. Since it has inevitable potential side effects, at least
1824 # on. Since it has inevitable potential side effects, at least
1825 # having autocall off should be a guarantee to the user that no
1825 # having autocall off should be a guarantee to the user that no
1826 # weird things will happen.
1826 # weird things will happen.
1827
1827
1828 if self.rc.autocall:
1828 if self.rc.autocall:
1829 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1829 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1830 else:
1830 else:
1831 # in this case, all that's left is either an alias or
1831 # in this case, all that's left is either an alias or
1832 # processing the line normally.
1832 # processing the line normally.
1833 if iFun in self.alias_table:
1833 if iFun in self.alias_table:
1834 return self.handle_alias(line,continue_prompt,
1834 return self.handle_alias(line,continue_prompt,
1835 pre,iFun,theRest)
1835 pre,iFun,theRest)
1836 else:
1836 else:
1837 return self.handle_normal(line,continue_prompt)
1837 return self.handle_normal(line,continue_prompt)
1838
1838
1839 if not oinfo['found']:
1839 if not oinfo['found']:
1840 return self.handle_normal(line,continue_prompt)
1840 return self.handle_normal(line,continue_prompt)
1841 else:
1841 else:
1842 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1842 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1843 if oinfo['isalias']:
1843 if oinfo['isalias']:
1844 return self.handle_alias(line,continue_prompt,
1844 return self.handle_alias(line,continue_prompt,
1845 pre,iFun,theRest)
1845 pre,iFun,theRest)
1846
1846
1847 if self.rc.autocall and \
1847 if self.rc.autocall and \
1848 not self.re_exclude_auto.match(theRest) and \
1848 not self.re_exclude_auto.match(theRest) and \
1849 self.re_fun_name.match(iFun) and \
1849 self.re_fun_name.match(iFun) and \
1850 callable(oinfo['obj']) :
1850 callable(oinfo['obj']) :
1851 #print 'going auto' # dbg
1851 #print 'going auto' # dbg
1852 return self.handle_auto(line,continue_prompt,
1852 return self.handle_auto(line,continue_prompt,
1853 pre,iFun,theRest,oinfo['obj'])
1853 pre,iFun,theRest,oinfo['obj'])
1854 else:
1854 else:
1855 #print 'was callable?', callable(oinfo['obj']) # dbg
1855 #print 'was callable?', callable(oinfo['obj']) # dbg
1856 return self.handle_normal(line,continue_prompt)
1856 return self.handle_normal(line,continue_prompt)
1857
1857
1858 # If we get here, we have a normal Python line. Log and return.
1858 # If we get here, we have a normal Python line. Log and return.
1859 return self.handle_normal(line,continue_prompt)
1859 return self.handle_normal(line,continue_prompt)
1860
1860
1861 def _prefilter_dumb(self, line, continue_prompt):
1861 def _prefilter_dumb(self, line, continue_prompt):
1862 """simple prefilter function, for debugging"""
1862 """simple prefilter function, for debugging"""
1863 return self.handle_normal(line,continue_prompt)
1863 return self.handle_normal(line,continue_prompt)
1864
1864
1865 # Set the default prefilter() function (this can be user-overridden)
1865 # Set the default prefilter() function (this can be user-overridden)
1866 prefilter = _prefilter
1866 prefilter = _prefilter
1867
1867
1868 def handle_normal(self,line,continue_prompt=None,
1868 def handle_normal(self,line,continue_prompt=None,
1869 pre=None,iFun=None,theRest=None):
1869 pre=None,iFun=None,theRest=None):
1870 """Handle normal input lines. Use as a template for handlers."""
1870 """Handle normal input lines. Use as a template for handlers."""
1871
1871
1872 # With autoindent on, we need some way to exit the input loop, and I
1872 # With autoindent on, we need some way to exit the input loop, and I
1873 # don't want to force the user to have to backspace all the way to
1873 # don't want to force the user to have to backspace all the way to
1874 # clear the line. The rule will be in this case, that either two
1874 # clear the line. The rule will be in this case, that either two
1875 # lines of pure whitespace in a row, or a line of pure whitespace but
1875 # lines of pure whitespace in a row, or a line of pure whitespace but
1876 # of a size different to the indent level, will exit the input loop.
1876 # of a size different to the indent level, will exit the input loop.
1877
1877
1878 if (continue_prompt and self.autoindent and isspace(line) and
1878 if (continue_prompt and self.autoindent and isspace(line) and
1879 (line != self.indent_current or isspace(self.buffer[-1]))):
1879 (line != self.indent_current or isspace(self.buffer[-1]))):
1880 line = ''
1880 line = ''
1881
1881
1882 self.log(line,continue_prompt)
1882 self.log(line,continue_prompt)
1883 return line
1883 return line
1884
1884
1885 def handle_alias(self,line,continue_prompt=None,
1885 def handle_alias(self,line,continue_prompt=None,
1886 pre=None,iFun=None,theRest=None):
1886 pre=None,iFun=None,theRest=None):
1887 """Handle alias input lines. """
1887 """Handle alias input lines. """
1888
1888
1889 # pre is needed, because it carries the leading whitespace. Otherwise
1889 # pre is needed, because it carries the leading whitespace. Otherwise
1890 # aliases won't work in indented sections.
1890 # aliases won't work in indented sections.
1891 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1891 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1892 self.log(line_out,continue_prompt)
1892 self.log(line_out,continue_prompt)
1893 return line_out
1893 return line_out
1894
1894
1895 def handle_shell_escape(self, line, continue_prompt=None,
1895 def handle_shell_escape(self, line, continue_prompt=None,
1896 pre=None,iFun=None,theRest=None):
1896 pre=None,iFun=None,theRest=None):
1897 """Execute the line in a shell, empty return value"""
1897 """Execute the line in a shell, empty return value"""
1898
1898
1899 #print 'line in :', `line` # dbg
1899 #print 'line in :', `line` # dbg
1900 # Example of a special handler. Others follow a similar pattern.
1900 # Example of a special handler. Others follow a similar pattern.
1901 if line.startswith('!!'):
1901 if line.lstrip().startswith('!!'):
1902 # rewrite iFun/theRest to properly hold the call to %sx and
1902 # rewrite iFun/theRest to properly hold the call to %sx and
1903 # the actual command to be executed, so handle_magic can work
1903 # the actual command to be executed, so handle_magic can work
1904 # correctly
1904 # correctly
1905 theRest = '%s %s' % (iFun[2:],theRest)
1905 theRest = '%s %s' % (iFun[2:],theRest)
1906 iFun = 'sx'
1906 iFun = 'sx'
1907 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1907 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1908 continue_prompt,pre,iFun,theRest)
1908 continue_prompt,pre,iFun,theRest)
1909 else:
1909 else:
1910 cmd=line[1:]
1910 cmd=line.lstrip()[1:]
1911 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1911 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1912 # update cache/log and return
1912 # update cache/log and return
1913 self.log(line_out,continue_prompt)
1913 self.log(line_out,continue_prompt)
1914 return line_out
1914 return line_out
1915
1915
1916 def handle_magic(self, line, continue_prompt=None,
1916 def handle_magic(self, line, continue_prompt=None,
1917 pre=None,iFun=None,theRest=None):
1917 pre=None,iFun=None,theRest=None):
1918 """Execute magic functions."""
1918 """Execute magic functions."""
1919
1919
1920
1920
1921 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1921 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1922 self.log(cmd,continue_prompt)
1922 self.log(cmd,continue_prompt)
1923 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1923 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1924 return cmd
1924 return cmd
1925
1925
1926 def handle_auto(self, line, continue_prompt=None,
1926 def handle_auto(self, line, continue_prompt=None,
1927 pre=None,iFun=None,theRest=None,obj=None):
1927 pre=None,iFun=None,theRest=None,obj=None):
1928 """Hande lines which can be auto-executed, quoting if requested."""
1928 """Hande lines which can be auto-executed, quoting if requested."""
1929
1929
1930 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1930 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1931
1931
1932 # This should only be active for single-line input!
1932 # This should only be active for single-line input!
1933 if continue_prompt:
1933 if continue_prompt:
1934 self.log(line,continue_prompt)
1934 self.log(line,continue_prompt)
1935 return line
1935 return line
1936
1936
1937 auto_rewrite = True
1937 auto_rewrite = True
1938 if pre == self.ESC_QUOTE:
1938 if pre == self.ESC_QUOTE:
1939 # Auto-quote splitting on whitespace
1939 # Auto-quote splitting on whitespace
1940 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1940 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1941 elif pre == self.ESC_QUOTE2:
1941 elif pre == self.ESC_QUOTE2:
1942 # Auto-quote whole string
1942 # Auto-quote whole string
1943 newcmd = '%s("%s")' % (iFun,theRest)
1943 newcmd = '%s("%s")' % (iFun,theRest)
1944 else:
1944 else:
1945 # Auto-paren.
1945 # Auto-paren.
1946 # We only apply it to argument-less calls if the autocall
1946 # We only apply it to argument-less calls if the autocall
1947 # parameter is set to 2. We only need to check that autocall is <
1947 # parameter is set to 2. We only need to check that autocall is <
1948 # 2, since this function isn't called unless it's at least 1.
1948 # 2, since this function isn't called unless it's at least 1.
1949 if not theRest and (self.rc.autocall < 2):
1949 if not theRest and (self.rc.autocall < 2):
1950 newcmd = '%s %s' % (iFun,theRest)
1950 newcmd = '%s %s' % (iFun,theRest)
1951 auto_rewrite = False
1951 auto_rewrite = False
1952 else:
1952 else:
1953 if theRest.startswith('['):
1953 if theRest.startswith('['):
1954 if hasattr(obj,'__getitem__'):
1954 if hasattr(obj,'__getitem__'):
1955 # Don't autocall in this case: item access for an object
1955 # Don't autocall in this case: item access for an object
1956 # which is BOTH callable and implements __getitem__.
1956 # which is BOTH callable and implements __getitem__.
1957 newcmd = '%s %s' % (iFun,theRest)
1957 newcmd = '%s %s' % (iFun,theRest)
1958 auto_rewrite = False
1958 auto_rewrite = False
1959 else:
1959 else:
1960 # if the object doesn't support [] access, go ahead and
1960 # if the object doesn't support [] access, go ahead and
1961 # autocall
1961 # autocall
1962 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1962 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1963 elif theRest.endswith(';'):
1963 elif theRest.endswith(';'):
1964 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1964 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1965 else:
1965 else:
1966 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1966 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1967
1967
1968 if auto_rewrite:
1968 if auto_rewrite:
1969 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1969 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1970 # log what is now valid Python, not the actual user input (without the
1970 # log what is now valid Python, not the actual user input (without the
1971 # final newline)
1971 # final newline)
1972 self.log(newcmd,continue_prompt)
1972 self.log(newcmd,continue_prompt)
1973 return newcmd
1973 return newcmd
1974
1974
1975 def handle_help(self, line, continue_prompt=None,
1975 def handle_help(self, line, continue_prompt=None,
1976 pre=None,iFun=None,theRest=None):
1976 pre=None,iFun=None,theRest=None):
1977 """Try to get some help for the object.
1977 """Try to get some help for the object.
1978
1978
1979 obj? or ?obj -> basic information.
1979 obj? or ?obj -> basic information.
1980 obj?? or ??obj -> more details.
1980 obj?? or ??obj -> more details.
1981 """
1981 """
1982
1982
1983 # We need to make sure that we don't process lines which would be
1983 # We need to make sure that we don't process lines which would be
1984 # otherwise valid python, such as "x=1 # what?"
1984 # otherwise valid python, such as "x=1 # what?"
1985 try:
1985 try:
1986 codeop.compile_command(line)
1986 codeop.compile_command(line)
1987 except SyntaxError:
1987 except SyntaxError:
1988 # We should only handle as help stuff which is NOT valid syntax
1988 # We should only handle as help stuff which is NOT valid syntax
1989 if line[0]==self.ESC_HELP:
1989 if line[0]==self.ESC_HELP:
1990 line = line[1:]
1990 line = line[1:]
1991 elif line[-1]==self.ESC_HELP:
1991 elif line[-1]==self.ESC_HELP:
1992 line = line[:-1]
1992 line = line[:-1]
1993 self.log('#?'+line)
1993 self.log('#?'+line)
1994 if line:
1994 if line:
1995 self.magic_pinfo(line)
1995 self.magic_pinfo(line)
1996 else:
1996 else:
1997 page(self.usage,screen_lines=self.rc.screen_length)
1997 page(self.usage,screen_lines=self.rc.screen_length)
1998 return '' # Empty string is needed here!
1998 return '' # Empty string is needed here!
1999 except:
1999 except:
2000 # Pass any other exceptions through to the normal handler
2000 # Pass any other exceptions through to the normal handler
2001 return self.handle_normal(line,continue_prompt)
2001 return self.handle_normal(line,continue_prompt)
2002 else:
2002 else:
2003 # If the code compiles ok, we should handle it normally
2003 # If the code compiles ok, we should handle it normally
2004 return self.handle_normal(line,continue_prompt)
2004 return self.handle_normal(line,continue_prompt)
2005
2005
2006 def handle_emacs(self,line,continue_prompt=None,
2006 def handle_emacs(self,line,continue_prompt=None,
2007 pre=None,iFun=None,theRest=None):
2007 pre=None,iFun=None,theRest=None):
2008 """Handle input lines marked by python-mode."""
2008 """Handle input lines marked by python-mode."""
2009
2009
2010 # Currently, nothing is done. Later more functionality can be added
2010 # Currently, nothing is done. Later more functionality can be added
2011 # here if needed.
2011 # here if needed.
2012
2012
2013 # The input cache shouldn't be updated
2013 # The input cache shouldn't be updated
2014
2014
2015 return line
2015 return line
2016
2016
2017 def mktempfile(self,data=None):
2017 def mktempfile(self,data=None):
2018 """Make a new tempfile and return its filename.
2018 """Make a new tempfile and return its filename.
2019
2019
2020 This makes a call to tempfile.mktemp, but it registers the created
2020 This makes a call to tempfile.mktemp, but it registers the created
2021 filename internally so ipython cleans it up at exit time.
2021 filename internally so ipython cleans it up at exit time.
2022
2022
2023 Optional inputs:
2023 Optional inputs:
2024
2024
2025 - data(None): if data is given, it gets written out to the temp file
2025 - data(None): if data is given, it gets written out to the temp file
2026 immediately, and the file is closed again."""
2026 immediately, and the file is closed again."""
2027
2027
2028 filename = tempfile.mktemp('.py','ipython_edit_')
2028 filename = tempfile.mktemp('.py','ipython_edit_')
2029 self.tempfiles.append(filename)
2029 self.tempfiles.append(filename)
2030
2030
2031 if data:
2031 if data:
2032 tmp_file = open(filename,'w')
2032 tmp_file = open(filename,'w')
2033 tmp_file.write(data)
2033 tmp_file.write(data)
2034 tmp_file.close()
2034 tmp_file.close()
2035 return filename
2035 return filename
2036
2036
2037 def write(self,data):
2037 def write(self,data):
2038 """Write a string to the default output"""
2038 """Write a string to the default output"""
2039 Term.cout.write(data)
2039 Term.cout.write(data)
2040
2040
2041 def write_err(self,data):
2041 def write_err(self,data):
2042 """Write a string to the default error output"""
2042 """Write a string to the default error output"""
2043 Term.cerr.write(data)
2043 Term.cerr.write(data)
2044
2044
2045 def exit(self):
2045 def exit(self):
2046 """Handle interactive exit.
2046 """Handle interactive exit.
2047
2047
2048 This method sets the exit_now attribute."""
2048 This method sets the exit_now attribute."""
2049
2049
2050 if self.rc.confirm_exit:
2050 if self.rc.confirm_exit:
2051 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2051 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2052 self.exit_now = True
2052 self.exit_now = True
2053 else:
2053 else:
2054 self.exit_now = True
2054 self.exit_now = True
2055 return self.exit_now
2055 return self.exit_now
2056
2056
2057 def safe_execfile(self,fname,*where,**kw):
2057 def safe_execfile(self,fname,*where,**kw):
2058 fname = os.path.expanduser(fname)
2058 fname = os.path.expanduser(fname)
2059
2059
2060 # find things also in current directory
2060 # find things also in current directory
2061 dname = os.path.dirname(fname)
2061 dname = os.path.dirname(fname)
2062 if not sys.path.count(dname):
2062 if not sys.path.count(dname):
2063 sys.path.append(dname)
2063 sys.path.append(dname)
2064
2064
2065 try:
2065 try:
2066 xfile = open(fname)
2066 xfile = open(fname)
2067 except:
2067 except:
2068 print >> Term.cerr, \
2068 print >> Term.cerr, \
2069 'Could not open file <%s> for safe execution.' % fname
2069 'Could not open file <%s> for safe execution.' % fname
2070 return None
2070 return None
2071
2071
2072 kw.setdefault('islog',0)
2072 kw.setdefault('islog',0)
2073 kw.setdefault('quiet',1)
2073 kw.setdefault('quiet',1)
2074 kw.setdefault('exit_ignore',0)
2074 kw.setdefault('exit_ignore',0)
2075 first = xfile.readline()
2075 first = xfile.readline()
2076 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2076 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2077 xfile.close()
2077 xfile.close()
2078 # line by line execution
2078 # line by line execution
2079 if first.startswith(loghead) or kw['islog']:
2079 if first.startswith(loghead) or kw['islog']:
2080 print 'Loading log file <%s> one line at a time...' % fname
2080 print 'Loading log file <%s> one line at a time...' % fname
2081 if kw['quiet']:
2081 if kw['quiet']:
2082 stdout_save = sys.stdout
2082 stdout_save = sys.stdout
2083 sys.stdout = StringIO.StringIO()
2083 sys.stdout = StringIO.StringIO()
2084 try:
2084 try:
2085 globs,locs = where[0:2]
2085 globs,locs = where[0:2]
2086 except:
2086 except:
2087 try:
2087 try:
2088 globs = locs = where[0]
2088 globs = locs = where[0]
2089 except:
2089 except:
2090 globs = locs = globals()
2090 globs = locs = globals()
2091 badblocks = []
2091 badblocks = []
2092
2092
2093 # we also need to identify indented blocks of code when replaying
2093 # we also need to identify indented blocks of code when replaying
2094 # logs and put them together before passing them to an exec
2094 # logs and put them together before passing them to an exec
2095 # statement. This takes a bit of regexp and look-ahead work in the
2095 # statement. This takes a bit of regexp and look-ahead work in the
2096 # file. It's easiest if we swallow the whole thing in memory
2096 # file. It's easiest if we swallow the whole thing in memory
2097 # first, and manually walk through the lines list moving the
2097 # first, and manually walk through the lines list moving the
2098 # counter ourselves.
2098 # counter ourselves.
2099 indent_re = re.compile('\s+\S')
2099 indent_re = re.compile('\s+\S')
2100 xfile = open(fname)
2100 xfile = open(fname)
2101 filelines = xfile.readlines()
2101 filelines = xfile.readlines()
2102 xfile.close()
2102 xfile.close()
2103 nlines = len(filelines)
2103 nlines = len(filelines)
2104 lnum = 0
2104 lnum = 0
2105 while lnum < nlines:
2105 while lnum < nlines:
2106 line = filelines[lnum]
2106 line = filelines[lnum]
2107 lnum += 1
2107 lnum += 1
2108 # don't re-insert logger status info into cache
2108 # don't re-insert logger status info into cache
2109 if line.startswith('#log#'):
2109 if line.startswith('#log#'):
2110 continue
2110 continue
2111 else:
2111 else:
2112 # build a block of code (maybe a single line) for execution
2112 # build a block of code (maybe a single line) for execution
2113 block = line
2113 block = line
2114 try:
2114 try:
2115 next = filelines[lnum] # lnum has already incremented
2115 next = filelines[lnum] # lnum has already incremented
2116 except:
2116 except:
2117 next = None
2117 next = None
2118 while next and indent_re.match(next):
2118 while next and indent_re.match(next):
2119 block += next
2119 block += next
2120 lnum += 1
2120 lnum += 1
2121 try:
2121 try:
2122 next = filelines[lnum]
2122 next = filelines[lnum]
2123 except:
2123 except:
2124 next = None
2124 next = None
2125 # now execute the block of one or more lines
2125 # now execute the block of one or more lines
2126 try:
2126 try:
2127 exec block in globs,locs
2127 exec block in globs,locs
2128 except SystemExit:
2128 except SystemExit:
2129 pass
2129 pass
2130 except:
2130 except:
2131 badblocks.append(block.rstrip())
2131 badblocks.append(block.rstrip())
2132 if kw['quiet']: # restore stdout
2132 if kw['quiet']: # restore stdout
2133 sys.stdout.close()
2133 sys.stdout.close()
2134 sys.stdout = stdout_save
2134 sys.stdout = stdout_save
2135 print 'Finished replaying log file <%s>' % fname
2135 print 'Finished replaying log file <%s>' % fname
2136 if badblocks:
2136 if badblocks:
2137 print >> sys.stderr, ('\nThe following lines/blocks in file '
2137 print >> sys.stderr, ('\nThe following lines/blocks in file '
2138 '<%s> reported errors:' % fname)
2138 '<%s> reported errors:' % fname)
2139
2139
2140 for badline in badblocks:
2140 for badline in badblocks:
2141 print >> sys.stderr, badline
2141 print >> sys.stderr, badline
2142 else: # regular file execution
2142 else: # regular file execution
2143 try:
2143 try:
2144 execfile(fname,*where)
2144 execfile(fname,*where)
2145 except SyntaxError:
2145 except SyntaxError:
2146 etype,evalue = sys.exc_info()[:2]
2146 etype,evalue = sys.exc_info()[:2]
2147 self.SyntaxTB(etype,evalue,[])
2147 self.SyntaxTB(etype,evalue,[])
2148 warn('Failure executing file: <%s>' % fname)
2148 warn('Failure executing file: <%s>' % fname)
2149 except SystemExit,status:
2149 except SystemExit,status:
2150 if not kw['exit_ignore']:
2150 if not kw['exit_ignore']:
2151 self.InteractiveTB()
2151 self.InteractiveTB()
2152 warn('Failure executing file: <%s>' % fname)
2152 warn('Failure executing file: <%s>' % fname)
2153 except:
2153 except:
2154 self.InteractiveTB()
2154 self.InteractiveTB()
2155 warn('Failure executing file: <%s>' % fname)
2155 warn('Failure executing file: <%s>' % fname)
2156
2156
2157 #************************* end of file <iplib.py> *****************************
2157 #************************* end of file <iplib.py> *****************************
@@ -1,4854 +1,4861 b''
1 2006-01-12 Ville Vainio <vivainio@gmail.com>
1 2006-01-12 Ville Vainio <vivainio@gmail.com>
2
2
3 * IPython/iplib.py.py (make_quoted_expr,handle_shell_escape):
3 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
4 Prettified and hardened string/backslash quoting with ipsystem(),
4 Prettified and hardened string/backslash quoting with ipsystem(),
5 ipalias() and ipmagic(). Now even \ characters are passed to
5 ipalias() and ipmagic(). Now even \ characters are passed to
6 %magics, !shell escapes and aliases exactly as they are in the
6 %magics, !shell escapes and aliases exactly as they are in the
7 ipython command line. Should improve backslash experience,
7 ipython command line. Should improve backslash experience,
8 particularly in Windows. %cd magic still doesn't support backslash
8 particularly in Windows (path delimiter for some commands that
9 path delimiters, though. Also deleted all pretense of supporting
9 won't understand '/'), but Unix benefits as well (regexps). %cd
10 multiline command strings in !system or %magic commands. Thanks to
10 magic still doesn't support backslash path delimiters, though. Also
11 Jerry McRae for suggestions.
11 deleted all pretense of supporting multiline command strings in
12 !system or %magic commands. Thanks to Jerry McRae for suggestions.
12
13
13 * doc/build_doc_instructions.txt added. Documentation on how to use
14 * doc/build_doc_instructions.txt added. Documentation on how to use
14 doc/update_manual.py, added yesterday. Both files contributed by
15 doc/update_manual.py, added yesterday. Both files contributed by
15 JΓΆrgen Stenarson <jorgen.stenarson@bostream.nu>. This slates
16 JΓΆrgen Stenarson <jorgen.stenarson@bostream.nu>. This slates
16 doc/*.sh for deprecation at a later date.
17 doc/*.sh for deprecation at a later date.
17
18
18 * Added ipython.py to root directory for zero-installation
19 * /ipython.py Added ipython.py to root directory for
19 (tar xzvf ipython.tgz; cd ipython; python ipython.py) and
20 zero-installation (tar xzvf ipython.tgz; cd ipython; python
20 development convenience.
21 ipython.py) and development convenience (no need to kee doing
22 "setup.py install" between changes).
23
24 * Made ! and !! shell escapes work (again) in multiline expressions:
25 if 1:
26 !ls
27 !!ls
21
28
22 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
29 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
23
30
24 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
31 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
25 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
32 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
26 module in case-insensitive installation. Was causing crashes
33 module in case-insensitive installation. Was causing crashes
27 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
34 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
28
35
29 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
36 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
30 <marienz-AT-gentoo.org>, closes
37 <marienz-AT-gentoo.org>, closes
31 http://www.scipy.net/roundup/ipython/issue51.
38 http://www.scipy.net/roundup/ipython/issue51.
32
39
33 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
40 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
34
41
35 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
42 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
36 problem of excessive CPU usage under *nix and keyboard lag under
43 problem of excessive CPU usage under *nix and keyboard lag under
37 win32.
44 win32.
38
45
39 2006-01-10 *** Released version 0.7.0
46 2006-01-10 *** Released version 0.7.0
40
47
41 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
48 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
42
49
43 * IPython/Release.py (revision): tag version number to 0.7.0,
50 * IPython/Release.py (revision): tag version number to 0.7.0,
44 ready for release.
51 ready for release.
45
52
46 * IPython/Magic.py (magic_edit): Add print statement to %edit so
53 * IPython/Magic.py (magic_edit): Add print statement to %edit so
47 it informs the user of the name of the temp. file used. This can
54 it informs the user of the name of the temp. file used. This can
48 help if you decide later to reuse that same file, so you know
55 help if you decide later to reuse that same file, so you know
49 where to copy the info from.
56 where to copy the info from.
50
57
51 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
58 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
52
59
53 * setup_bdist_egg.py: little script to build an egg. Added
60 * setup_bdist_egg.py: little script to build an egg. Added
54 support in the release tools as well.
61 support in the release tools as well.
55
62
56 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
63 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
57
64
58 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
65 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
59 version selection (new -wxversion command line and ipythonrc
66 version selection (new -wxversion command line and ipythonrc
60 parameter). Patch contributed by Arnd Baecker
67 parameter). Patch contributed by Arnd Baecker
61 <arnd.baecker-AT-web.de>.
68 <arnd.baecker-AT-web.de>.
62
69
63 * IPython/iplib.py (embed_mainloop): fix tab-completion in
70 * IPython/iplib.py (embed_mainloop): fix tab-completion in
64 embedded instances, for variables defined at the interactive
71 embedded instances, for variables defined at the interactive
65 prompt of the embedded ipython. Reported by Arnd.
72 prompt of the embedded ipython. Reported by Arnd.
66
73
67 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
74 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
68 it can be used as a (stateful) toggle, or with a direct parameter.
75 it can be used as a (stateful) toggle, or with a direct parameter.
69
76
70 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
77 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
71 could be triggered in certain cases and cause the traceback
78 could be triggered in certain cases and cause the traceback
72 printer not to work.
79 printer not to work.
73
80
74 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
81 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
75
82
76 * IPython/iplib.py (_should_recompile): Small fix, closes
83 * IPython/iplib.py (_should_recompile): Small fix, closes
77 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
84 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
78
85
79 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
86 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
80
87
81 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
88 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
82 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
89 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
83 Moad for help with tracking it down.
90 Moad for help with tracking it down.
84
91
85 * IPython/iplib.py (handle_auto): fix autocall handling for
92 * IPython/iplib.py (handle_auto): fix autocall handling for
86 objects which support BOTH __getitem__ and __call__ (so that f [x]
93 objects which support BOTH __getitem__ and __call__ (so that f [x]
87 is left alone, instead of becoming f([x]) automatically).
94 is left alone, instead of becoming f([x]) automatically).
88
95
89 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
96 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
90 Ville's patch.
97 Ville's patch.
91
98
92 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
99 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
93
100
94 * IPython/iplib.py (handle_auto): changed autocall semantics to
101 * IPython/iplib.py (handle_auto): changed autocall semantics to
95 include 'smart' mode, where the autocall transformation is NOT
102 include 'smart' mode, where the autocall transformation is NOT
96 applied if there are no arguments on the line. This allows you to
103 applied if there are no arguments on the line. This allows you to
97 just type 'foo' if foo is a callable to see its internal form,
104 just type 'foo' if foo is a callable to see its internal form,
98 instead of having it called with no arguments (typically a
105 instead of having it called with no arguments (typically a
99 mistake). The old 'full' autocall still exists: for that, you
106 mistake). The old 'full' autocall still exists: for that, you
100 need to set the 'autocall' parameter to 2 in your ipythonrc file.
107 need to set the 'autocall' parameter to 2 in your ipythonrc file.
101
108
102 * IPython/completer.py (Completer.attr_matches): add
109 * IPython/completer.py (Completer.attr_matches): add
103 tab-completion support for Enthoughts' traits. After a report by
110 tab-completion support for Enthoughts' traits. After a report by
104 Arnd and a patch by Prabhu.
111 Arnd and a patch by Prabhu.
105
112
106 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
113 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
107
114
108 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
115 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
109 Schmolck's patch to fix inspect.getinnerframes().
116 Schmolck's patch to fix inspect.getinnerframes().
110
117
111 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
118 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
112 for embedded instances, regarding handling of namespaces and items
119 for embedded instances, regarding handling of namespaces and items
113 added to the __builtin__ one. Multiple embedded instances and
120 added to the __builtin__ one. Multiple embedded instances and
114 recursive embeddings should work better now (though I'm not sure
121 recursive embeddings should work better now (though I'm not sure
115 I've got all the corner cases fixed, that code is a bit of a brain
122 I've got all the corner cases fixed, that code is a bit of a brain
116 twister).
123 twister).
117
124
118 * IPython/Magic.py (magic_edit): added support to edit in-memory
125 * IPython/Magic.py (magic_edit): added support to edit in-memory
119 macros (automatically creates the necessary temp files). %edit
126 macros (automatically creates the necessary temp files). %edit
120 also doesn't return the file contents anymore, it's just noise.
127 also doesn't return the file contents anymore, it's just noise.
121
128
122 * IPython/completer.py (Completer.attr_matches): revert change to
129 * IPython/completer.py (Completer.attr_matches): revert change to
123 complete only on attributes listed in __all__. I realized it
130 complete only on attributes listed in __all__. I realized it
124 cripples the tab-completion system as a tool for exploring the
131 cripples the tab-completion system as a tool for exploring the
125 internals of unknown libraries (it renders any non-__all__
132 internals of unknown libraries (it renders any non-__all__
126 attribute off-limits). I got bit by this when trying to see
133 attribute off-limits). I got bit by this when trying to see
127 something inside the dis module.
134 something inside the dis module.
128
135
129 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
136 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
130
137
131 * IPython/iplib.py (InteractiveShell.__init__): add .meta
138 * IPython/iplib.py (InteractiveShell.__init__): add .meta
132 namespace for users and extension writers to hold data in. This
139 namespace for users and extension writers to hold data in. This
133 follows the discussion in
140 follows the discussion in
134 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
141 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
135
142
136 * IPython/completer.py (IPCompleter.complete): small patch to help
143 * IPython/completer.py (IPCompleter.complete): small patch to help
137 tab-completion under Emacs, after a suggestion by John Barnard
144 tab-completion under Emacs, after a suggestion by John Barnard
138 <barnarj-AT-ccf.org>.
145 <barnarj-AT-ccf.org>.
139
146
140 * IPython/Magic.py (Magic.extract_input_slices): added support for
147 * IPython/Magic.py (Magic.extract_input_slices): added support for
141 the slice notation in magics to use N-M to represent numbers N...M
148 the slice notation in magics to use N-M to represent numbers N...M
142 (closed endpoints). This is used by %macro and %save.
149 (closed endpoints). This is used by %macro and %save.
143
150
144 * IPython/completer.py (Completer.attr_matches): for modules which
151 * IPython/completer.py (Completer.attr_matches): for modules which
145 define __all__, complete only on those. After a patch by Jeffrey
152 define __all__, complete only on those. After a patch by Jeffrey
146 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
153 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
147 speed up this routine.
154 speed up this routine.
148
155
149 * IPython/Logger.py (Logger.log): fix a history handling bug. I
156 * IPython/Logger.py (Logger.log): fix a history handling bug. I
150 don't know if this is the end of it, but the behavior now is
157 don't know if this is the end of it, but the behavior now is
151 certainly much more correct. Note that coupled with macros,
158 certainly much more correct. Note that coupled with macros,
152 slightly surprising (at first) behavior may occur: a macro will in
159 slightly surprising (at first) behavior may occur: a macro will in
153 general expand to multiple lines of input, so upon exiting, the
160 general expand to multiple lines of input, so upon exiting, the
154 in/out counters will both be bumped by the corresponding amount
161 in/out counters will both be bumped by the corresponding amount
155 (as if the macro's contents had been typed interactively). Typing
162 (as if the macro's contents had been typed interactively). Typing
156 %hist will reveal the intermediate (silently processed) lines.
163 %hist will reveal the intermediate (silently processed) lines.
157
164
158 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
165 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
159 pickle to fail (%run was overwriting __main__ and not restoring
166 pickle to fail (%run was overwriting __main__ and not restoring
160 it, but pickle relies on __main__ to operate).
167 it, but pickle relies on __main__ to operate).
161
168
162 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
169 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
163 using properties, but forgot to make the main InteractiveShell
170 using properties, but forgot to make the main InteractiveShell
164 class a new-style class. Properties fail silently, and
171 class a new-style class. Properties fail silently, and
165 misteriously, with old-style class (getters work, but
172 misteriously, with old-style class (getters work, but
166 setters don't do anything).
173 setters don't do anything).
167
174
168 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
175 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
169
176
170 * IPython/Magic.py (magic_history): fix history reporting bug (I
177 * IPython/Magic.py (magic_history): fix history reporting bug (I
171 know some nasties are still there, I just can't seem to find a
178 know some nasties are still there, I just can't seem to find a
172 reproducible test case to track them down; the input history is
179 reproducible test case to track them down; the input history is
173 falling out of sync...)
180 falling out of sync...)
174
181
175 * IPython/iplib.py (handle_shell_escape): fix bug where both
182 * IPython/iplib.py (handle_shell_escape): fix bug where both
176 aliases and system accesses where broken for indented code (such
183 aliases and system accesses where broken for indented code (such
177 as loops).
184 as loops).
178
185
179 * IPython/genutils.py (shell): fix small but critical bug for
186 * IPython/genutils.py (shell): fix small but critical bug for
180 win32 system access.
187 win32 system access.
181
188
182 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
189 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
183
190
184 * IPython/iplib.py (showtraceback): remove use of the
191 * IPython/iplib.py (showtraceback): remove use of the
185 sys.last_{type/value/traceback} structures, which are non
192 sys.last_{type/value/traceback} structures, which are non
186 thread-safe.
193 thread-safe.
187 (_prefilter): change control flow to ensure that we NEVER
194 (_prefilter): change control flow to ensure that we NEVER
188 introspect objects when autocall is off. This will guarantee that
195 introspect objects when autocall is off. This will guarantee that
189 having an input line of the form 'x.y', where access to attribute
196 having an input line of the form 'x.y', where access to attribute
190 'y' has side effects, doesn't trigger the side effect TWICE. It
197 'y' has side effects, doesn't trigger the side effect TWICE. It
191 is important to note that, with autocall on, these side effects
198 is important to note that, with autocall on, these side effects
192 can still happen.
199 can still happen.
193 (ipsystem): new builtin, to complete the ip{magic/alias/system}
200 (ipsystem): new builtin, to complete the ip{magic/alias/system}
194 trio. IPython offers these three kinds of special calls which are
201 trio. IPython offers these three kinds of special calls which are
195 not python code, and it's a good thing to have their call method
202 not python code, and it's a good thing to have their call method
196 be accessible as pure python functions (not just special syntax at
203 be accessible as pure python functions (not just special syntax at
197 the command line). It gives us a better internal implementation
204 the command line). It gives us a better internal implementation
198 structure, as well as exposing these for user scripting more
205 structure, as well as exposing these for user scripting more
199 cleanly.
206 cleanly.
200
207
201 * IPython/macro.py (Macro.__init__): moved macros to a standalone
208 * IPython/macro.py (Macro.__init__): moved macros to a standalone
202 file. Now that they'll be more likely to be used with the
209 file. Now that they'll be more likely to be used with the
203 persistance system (%store), I want to make sure their module path
210 persistance system (%store), I want to make sure their module path
204 doesn't change in the future, so that we don't break things for
211 doesn't change in the future, so that we don't break things for
205 users' persisted data.
212 users' persisted data.
206
213
207 * IPython/iplib.py (autoindent_update): move indentation
214 * IPython/iplib.py (autoindent_update): move indentation
208 management into the _text_ processing loop, not the keyboard
215 management into the _text_ processing loop, not the keyboard
209 interactive one. This is necessary to correctly process non-typed
216 interactive one. This is necessary to correctly process non-typed
210 multiline input (such as macros).
217 multiline input (such as macros).
211
218
212 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
219 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
213 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
220 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
214 which was producing problems in the resulting manual.
221 which was producing problems in the resulting manual.
215 (magic_whos): improve reporting of instances (show their class,
222 (magic_whos): improve reporting of instances (show their class,
216 instead of simply printing 'instance' which isn't terribly
223 instead of simply printing 'instance' which isn't terribly
217 informative).
224 informative).
218
225
219 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
226 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
220 (minor mods) to support network shares under win32.
227 (minor mods) to support network shares under win32.
221
228
222 * IPython/winconsole.py (get_console_size): add new winconsole
229 * IPython/winconsole.py (get_console_size): add new winconsole
223 module and fixes to page_dumb() to improve its behavior under
230 module and fixes to page_dumb() to improve its behavior under
224 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
231 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
225
232
226 * IPython/Magic.py (Macro): simplified Macro class to just
233 * IPython/Magic.py (Macro): simplified Macro class to just
227 subclass list. We've had only 2.2 compatibility for a very long
234 subclass list. We've had only 2.2 compatibility for a very long
228 time, yet I was still avoiding subclassing the builtin types. No
235 time, yet I was still avoiding subclassing the builtin types. No
229 more (I'm also starting to use properties, though I won't shift to
236 more (I'm also starting to use properties, though I won't shift to
230 2.3-specific features quite yet).
237 2.3-specific features quite yet).
231 (magic_store): added Ville's patch for lightweight variable
238 (magic_store): added Ville's patch for lightweight variable
232 persistence, after a request on the user list by Matt Wilkie
239 persistence, after a request on the user list by Matt Wilkie
233 <maphew-AT-gmail.com>. The new %store magic's docstring has full
240 <maphew-AT-gmail.com>. The new %store magic's docstring has full
234 details.
241 details.
235
242
236 * IPython/iplib.py (InteractiveShell.post_config_initialization):
243 * IPython/iplib.py (InteractiveShell.post_config_initialization):
237 changed the default logfile name from 'ipython.log' to
244 changed the default logfile name from 'ipython.log' to
238 'ipython_log.py'. These logs are real python files, and now that
245 'ipython_log.py'. These logs are real python files, and now that
239 we have much better multiline support, people are more likely to
246 we have much better multiline support, people are more likely to
240 want to use them as such. Might as well name them correctly.
247 want to use them as such. Might as well name them correctly.
241
248
242 * IPython/Magic.py: substantial cleanup. While we can't stop
249 * IPython/Magic.py: substantial cleanup. While we can't stop
243 using magics as mixins, due to the existing customizations 'out
250 using magics as mixins, due to the existing customizations 'out
244 there' which rely on the mixin naming conventions, at least I
251 there' which rely on the mixin naming conventions, at least I
245 cleaned out all cross-class name usage. So once we are OK with
252 cleaned out all cross-class name usage. So once we are OK with
246 breaking compatibility, the two systems can be separated.
253 breaking compatibility, the two systems can be separated.
247
254
248 * IPython/Logger.py: major cleanup. This one is NOT a mixin
255 * IPython/Logger.py: major cleanup. This one is NOT a mixin
249 anymore, and the class is a fair bit less hideous as well. New
256 anymore, and the class is a fair bit less hideous as well. New
250 features were also introduced: timestamping of input, and logging
257 features were also introduced: timestamping of input, and logging
251 of output results. These are user-visible with the -t and -o
258 of output results. These are user-visible with the -t and -o
252 options to %logstart. Closes
259 options to %logstart. Closes
253 http://www.scipy.net/roundup/ipython/issue11 and a request by
260 http://www.scipy.net/roundup/ipython/issue11 and a request by
254 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
261 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
255
262
256 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
263 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
257
264
258 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
265 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
259 better hadnle backslashes in paths. See the thread 'More Windows
266 better hadnle backslashes in paths. See the thread 'More Windows
260 questions part 2 - \/ characters revisited' on the iypthon user
267 questions part 2 - \/ characters revisited' on the iypthon user
261 list:
268 list:
262 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
269 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
263
270
264 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
271 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
265
272
266 (InteractiveShell.__init__): change threaded shells to not use the
273 (InteractiveShell.__init__): change threaded shells to not use the
267 ipython crash handler. This was causing more problems than not,
274 ipython crash handler. This was causing more problems than not,
268 as exceptions in the main thread (GUI code, typically) would
275 as exceptions in the main thread (GUI code, typically) would
269 always show up as a 'crash', when they really weren't.
276 always show up as a 'crash', when they really weren't.
270
277
271 The colors and exception mode commands (%colors/%xmode) have been
278 The colors and exception mode commands (%colors/%xmode) have been
272 synchronized to also take this into account, so users can get
279 synchronized to also take this into account, so users can get
273 verbose exceptions for their threaded code as well. I also added
280 verbose exceptions for their threaded code as well. I also added
274 support for activating pdb inside this exception handler as well,
281 support for activating pdb inside this exception handler as well,
275 so now GUI authors can use IPython's enhanced pdb at runtime.
282 so now GUI authors can use IPython's enhanced pdb at runtime.
276
283
277 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
284 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
278 true by default, and add it to the shipped ipythonrc file. Since
285 true by default, and add it to the shipped ipythonrc file. Since
279 this asks the user before proceeding, I think it's OK to make it
286 this asks the user before proceeding, I think it's OK to make it
280 true by default.
287 true by default.
281
288
282 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
289 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
283 of the previous special-casing of input in the eval loop. I think
290 of the previous special-casing of input in the eval loop. I think
284 this is cleaner, as they really are commands and shouldn't have
291 this is cleaner, as they really are commands and shouldn't have
285 a special role in the middle of the core code.
292 a special role in the middle of the core code.
286
293
287 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
294 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
288
295
289 * IPython/iplib.py (edit_syntax_error): added support for
296 * IPython/iplib.py (edit_syntax_error): added support for
290 automatically reopening the editor if the file had a syntax error
297 automatically reopening the editor if the file had a syntax error
291 in it. Thanks to scottt who provided the patch at:
298 in it. Thanks to scottt who provided the patch at:
292 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
299 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
293 version committed).
300 version committed).
294
301
295 * IPython/iplib.py (handle_normal): add suport for multi-line
302 * IPython/iplib.py (handle_normal): add suport for multi-line
296 input with emtpy lines. This fixes
303 input with emtpy lines. This fixes
297 http://www.scipy.net/roundup/ipython/issue43 and a similar
304 http://www.scipy.net/roundup/ipython/issue43 and a similar
298 discussion on the user list.
305 discussion on the user list.
299
306
300 WARNING: a behavior change is necessarily introduced to support
307 WARNING: a behavior change is necessarily introduced to support
301 blank lines: now a single blank line with whitespace does NOT
308 blank lines: now a single blank line with whitespace does NOT
302 break the input loop, which means that when autoindent is on, by
309 break the input loop, which means that when autoindent is on, by
303 default hitting return on the next (indented) line does NOT exit.
310 default hitting return on the next (indented) line does NOT exit.
304
311
305 Instead, to exit a multiline input you can either have:
312 Instead, to exit a multiline input you can either have:
306
313
307 - TWO whitespace lines (just hit return again), or
314 - TWO whitespace lines (just hit return again), or
308 - a single whitespace line of a different length than provided
315 - a single whitespace line of a different length than provided
309 by the autoindent (add or remove a space).
316 by the autoindent (add or remove a space).
310
317
311 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
318 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
312 module to better organize all readline-related functionality.
319 module to better organize all readline-related functionality.
313 I've deleted FlexCompleter and put all completion clases here.
320 I've deleted FlexCompleter and put all completion clases here.
314
321
315 * IPython/iplib.py (raw_input): improve indentation management.
322 * IPython/iplib.py (raw_input): improve indentation management.
316 It is now possible to paste indented code with autoindent on, and
323 It is now possible to paste indented code with autoindent on, and
317 the code is interpreted correctly (though it still looks bad on
324 the code is interpreted correctly (though it still looks bad on
318 screen, due to the line-oriented nature of ipython).
325 screen, due to the line-oriented nature of ipython).
319 (MagicCompleter.complete): change behavior so that a TAB key on an
326 (MagicCompleter.complete): change behavior so that a TAB key on an
320 otherwise empty line actually inserts a tab, instead of completing
327 otherwise empty line actually inserts a tab, instead of completing
321 on the entire global namespace. This makes it easier to use the
328 on the entire global namespace. This makes it easier to use the
322 TAB key for indentation. After a request by Hans Meine
329 TAB key for indentation. After a request by Hans Meine
323 <hans_meine-AT-gmx.net>
330 <hans_meine-AT-gmx.net>
324 (_prefilter): add support so that typing plain 'exit' or 'quit'
331 (_prefilter): add support so that typing plain 'exit' or 'quit'
325 does a sensible thing. Originally I tried to deviate as little as
332 does a sensible thing. Originally I tried to deviate as little as
326 possible from the default python behavior, but even that one may
333 possible from the default python behavior, but even that one may
327 change in this direction (thread on python-dev to that effect).
334 change in this direction (thread on python-dev to that effect).
328 Regardless, ipython should do the right thing even if CPython's
335 Regardless, ipython should do the right thing even if CPython's
329 '>>>' prompt doesn't.
336 '>>>' prompt doesn't.
330 (InteractiveShell): removed subclassing code.InteractiveConsole
337 (InteractiveShell): removed subclassing code.InteractiveConsole
331 class. By now we'd overridden just about all of its methods: I've
338 class. By now we'd overridden just about all of its methods: I've
332 copied the remaining two over, and now ipython is a standalone
339 copied the remaining two over, and now ipython is a standalone
333 class. This will provide a clearer picture for the chainsaw
340 class. This will provide a clearer picture for the chainsaw
334 branch refactoring.
341 branch refactoring.
335
342
336 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
343 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
337
344
338 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
345 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
339 failures for objects which break when dir() is called on them.
346 failures for objects which break when dir() is called on them.
340
347
341 * IPython/FlexCompleter.py (Completer.__init__): Added support for
348 * IPython/FlexCompleter.py (Completer.__init__): Added support for
342 distinct local and global namespaces in the completer API. This
349 distinct local and global namespaces in the completer API. This
343 change allows us top properly handle completion with distinct
350 change allows us top properly handle completion with distinct
344 scopes, including in embedded instances (this had never really
351 scopes, including in embedded instances (this had never really
345 worked correctly).
352 worked correctly).
346
353
347 Note: this introduces a change in the constructor for
354 Note: this introduces a change in the constructor for
348 MagicCompleter, as a new global_namespace parameter is now the
355 MagicCompleter, as a new global_namespace parameter is now the
349 second argument (the others were bumped one position).
356 second argument (the others were bumped one position).
350
357
351 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
358 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
352
359
353 * IPython/iplib.py (embed_mainloop): fix tab-completion in
360 * IPython/iplib.py (embed_mainloop): fix tab-completion in
354 embedded instances (which can be done now thanks to Vivian's
361 embedded instances (which can be done now thanks to Vivian's
355 frame-handling fixes for pdb).
362 frame-handling fixes for pdb).
356 (InteractiveShell.__init__): Fix namespace handling problem in
363 (InteractiveShell.__init__): Fix namespace handling problem in
357 embedded instances. We were overwriting __main__ unconditionally,
364 embedded instances. We were overwriting __main__ unconditionally,
358 and this should only be done for 'full' (non-embedded) IPython;
365 and this should only be done for 'full' (non-embedded) IPython;
359 embedded instances must respect the caller's __main__. Thanks to
366 embedded instances must respect the caller's __main__. Thanks to
360 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
367 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
361
368
362 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
369 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
363
370
364 * setup.py: added download_url to setup(). This registers the
371 * setup.py: added download_url to setup(). This registers the
365 download address at PyPI, which is not only useful to humans
372 download address at PyPI, which is not only useful to humans
366 browsing the site, but is also picked up by setuptools (the Eggs
373 browsing the site, but is also picked up by setuptools (the Eggs
367 machinery). Thanks to Ville and R. Kern for the info/discussion
374 machinery). Thanks to Ville and R. Kern for the info/discussion
368 on this.
375 on this.
369
376
370 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
377 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
371
378
372 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
379 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
373 This brings a lot of nice functionality to the pdb mode, which now
380 This brings a lot of nice functionality to the pdb mode, which now
374 has tab-completion, syntax highlighting, and better stack handling
381 has tab-completion, syntax highlighting, and better stack handling
375 than before. Many thanks to Vivian De Smedt
382 than before. Many thanks to Vivian De Smedt
376 <vivian-AT-vdesmedt.com> for the original patches.
383 <vivian-AT-vdesmedt.com> for the original patches.
377
384
378 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
385 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
379
386
380 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
387 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
381 sequence to consistently accept the banner argument. The
388 sequence to consistently accept the banner argument. The
382 inconsistency was tripping SAGE, thanks to Gary Zablackis
389 inconsistency was tripping SAGE, thanks to Gary Zablackis
383 <gzabl-AT-yahoo.com> for the report.
390 <gzabl-AT-yahoo.com> for the report.
384
391
385 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
392 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
386
393
387 * IPython/iplib.py (InteractiveShell.post_config_initialization):
394 * IPython/iplib.py (InteractiveShell.post_config_initialization):
388 Fix bug where a naked 'alias' call in the ipythonrc file would
395 Fix bug where a naked 'alias' call in the ipythonrc file would
389 cause a crash. Bug reported by Jorgen Stenarson.
396 cause a crash. Bug reported by Jorgen Stenarson.
390
397
391 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
398 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
392
399
393 * IPython/ipmaker.py (make_IPython): cleanups which should improve
400 * IPython/ipmaker.py (make_IPython): cleanups which should improve
394 startup time.
401 startup time.
395
402
396 * IPython/iplib.py (runcode): my globals 'fix' for embedded
403 * IPython/iplib.py (runcode): my globals 'fix' for embedded
397 instances had introduced a bug with globals in normal code. Now
404 instances had introduced a bug with globals in normal code. Now
398 it's working in all cases.
405 it's working in all cases.
399
406
400 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
407 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
401 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
408 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
402 has been introduced to set the default case sensitivity of the
409 has been introduced to set the default case sensitivity of the
403 searches. Users can still select either mode at runtime on a
410 searches. Users can still select either mode at runtime on a
404 per-search basis.
411 per-search basis.
405
412
406 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
413 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
407
414
408 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
415 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
409 attributes in wildcard searches for subclasses. Modified version
416 attributes in wildcard searches for subclasses. Modified version
410 of a patch by Jorgen.
417 of a patch by Jorgen.
411
418
412 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
419 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
413
420
414 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
421 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
415 embedded instances. I added a user_global_ns attribute to the
422 embedded instances. I added a user_global_ns attribute to the
416 InteractiveShell class to handle this.
423 InteractiveShell class to handle this.
417
424
418 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
425 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
419
426
420 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
427 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
421 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
428 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
422 (reported under win32, but may happen also in other platforms).
429 (reported under win32, but may happen also in other platforms).
423 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
430 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
424
431
425 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
432 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
426
433
427 * IPython/Magic.py (magic_psearch): new support for wildcard
434 * IPython/Magic.py (magic_psearch): new support for wildcard
428 patterns. Now, typing ?a*b will list all names which begin with a
435 patterns. Now, typing ?a*b will list all names which begin with a
429 and end in b, for example. The %psearch magic has full
436 and end in b, for example. The %psearch magic has full
430 docstrings. Many thanks to JΓΆrgen Stenarson
437 docstrings. Many thanks to JΓΆrgen Stenarson
431 <jorgen.stenarson-AT-bostream.nu>, author of the patches
438 <jorgen.stenarson-AT-bostream.nu>, author of the patches
432 implementing this functionality.
439 implementing this functionality.
433
440
434 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
441 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
435
442
436 * Manual: fixed long-standing annoyance of double-dashes (as in
443 * Manual: fixed long-standing annoyance of double-dashes (as in
437 --prefix=~, for example) being stripped in the HTML version. This
444 --prefix=~, for example) being stripped in the HTML version. This
438 is a latex2html bug, but a workaround was provided. Many thanks
445 is a latex2html bug, but a workaround was provided. Many thanks
439 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
446 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
440 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
447 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
441 rolling. This seemingly small issue had tripped a number of users
448 rolling. This seemingly small issue had tripped a number of users
442 when first installing, so I'm glad to see it gone.
449 when first installing, so I'm glad to see it gone.
443
450
444 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
451 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
445
452
446 * IPython/Extensions/numeric_formats.py: fix missing import,
453 * IPython/Extensions/numeric_formats.py: fix missing import,
447 reported by Stephen Walton.
454 reported by Stephen Walton.
448
455
449 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
456 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
450
457
451 * IPython/demo.py: finish demo module, fully documented now.
458 * IPython/demo.py: finish demo module, fully documented now.
452
459
453 * IPython/genutils.py (file_read): simple little utility to read a
460 * IPython/genutils.py (file_read): simple little utility to read a
454 file and ensure it's closed afterwards.
461 file and ensure it's closed afterwards.
455
462
456 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
463 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
457
464
458 * IPython/demo.py (Demo.__init__): added support for individually
465 * IPython/demo.py (Demo.__init__): added support for individually
459 tagging blocks for automatic execution.
466 tagging blocks for automatic execution.
460
467
461 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
468 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
462 syntax-highlighted python sources, requested by John.
469 syntax-highlighted python sources, requested by John.
463
470
464 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
471 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
465
472
466 * IPython/demo.py (Demo.again): fix bug where again() blocks after
473 * IPython/demo.py (Demo.again): fix bug where again() blocks after
467 finishing.
474 finishing.
468
475
469 * IPython/genutils.py (shlex_split): moved from Magic to here,
476 * IPython/genutils.py (shlex_split): moved from Magic to here,
470 where all 2.2 compatibility stuff lives. I needed it for demo.py.
477 where all 2.2 compatibility stuff lives. I needed it for demo.py.
471
478
472 * IPython/demo.py (Demo.__init__): added support for silent
479 * IPython/demo.py (Demo.__init__): added support for silent
473 blocks, improved marks as regexps, docstrings written.
480 blocks, improved marks as regexps, docstrings written.
474 (Demo.__init__): better docstring, added support for sys.argv.
481 (Demo.__init__): better docstring, added support for sys.argv.
475
482
476 * IPython/genutils.py (marquee): little utility used by the demo
483 * IPython/genutils.py (marquee): little utility used by the demo
477 code, handy in general.
484 code, handy in general.
478
485
479 * IPython/demo.py (Demo.__init__): new class for interactive
486 * IPython/demo.py (Demo.__init__): new class for interactive
480 demos. Not documented yet, I just wrote it in a hurry for
487 demos. Not documented yet, I just wrote it in a hurry for
481 scipy'05. Will docstring later.
488 scipy'05. Will docstring later.
482
489
483 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
490 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
484
491
485 * IPython/Shell.py (sigint_handler): Drastic simplification which
492 * IPython/Shell.py (sigint_handler): Drastic simplification which
486 also seems to make Ctrl-C work correctly across threads! This is
493 also seems to make Ctrl-C work correctly across threads! This is
487 so simple, that I can't beleive I'd missed it before. Needs more
494 so simple, that I can't beleive I'd missed it before. Needs more
488 testing, though.
495 testing, though.
489 (KBINT): Never mind, revert changes. I'm sure I'd tried something
496 (KBINT): Never mind, revert changes. I'm sure I'd tried something
490 like this before...
497 like this before...
491
498
492 * IPython/genutils.py (get_home_dir): add protection against
499 * IPython/genutils.py (get_home_dir): add protection against
493 non-dirs in win32 registry.
500 non-dirs in win32 registry.
494
501
495 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
502 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
496 bug where dict was mutated while iterating (pysh crash).
503 bug where dict was mutated while iterating (pysh crash).
497
504
498 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
505 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
499
506
500 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
507 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
501 spurious newlines added by this routine. After a report by
508 spurious newlines added by this routine. After a report by
502 F. Mantegazza.
509 F. Mantegazza.
503
510
504 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
511 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
505
512
506 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
513 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
507 calls. These were a leftover from the GTK 1.x days, and can cause
514 calls. These were a leftover from the GTK 1.x days, and can cause
508 problems in certain cases (after a report by John Hunter).
515 problems in certain cases (after a report by John Hunter).
509
516
510 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
517 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
511 os.getcwd() fails at init time. Thanks to patch from David Remahl
518 os.getcwd() fails at init time. Thanks to patch from David Remahl
512 <chmod007-AT-mac.com>.
519 <chmod007-AT-mac.com>.
513 (InteractiveShell.__init__): prevent certain special magics from
520 (InteractiveShell.__init__): prevent certain special magics from
514 being shadowed by aliases. Closes
521 being shadowed by aliases. Closes
515 http://www.scipy.net/roundup/ipython/issue41.
522 http://www.scipy.net/roundup/ipython/issue41.
516
523
517 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
524 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
518
525
519 * IPython/iplib.py (InteractiveShell.complete): Added new
526 * IPython/iplib.py (InteractiveShell.complete): Added new
520 top-level completion method to expose the completion mechanism
527 top-level completion method to expose the completion mechanism
521 beyond readline-based environments.
528 beyond readline-based environments.
522
529
523 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
530 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
524
531
525 * tools/ipsvnc (svnversion): fix svnversion capture.
532 * tools/ipsvnc (svnversion): fix svnversion capture.
526
533
527 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
534 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
528 attribute to self, which was missing. Before, it was set by a
535 attribute to self, which was missing. Before, it was set by a
529 routine which in certain cases wasn't being called, so the
536 routine which in certain cases wasn't being called, so the
530 instance could end up missing the attribute. This caused a crash.
537 instance could end up missing the attribute. This caused a crash.
531 Closes http://www.scipy.net/roundup/ipython/issue40.
538 Closes http://www.scipy.net/roundup/ipython/issue40.
532
539
533 2005-08-16 Fernando Perez <fperez@colorado.edu>
540 2005-08-16 Fernando Perez <fperez@colorado.edu>
534
541
535 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
542 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
536 contains non-string attribute. Closes
543 contains non-string attribute. Closes
537 http://www.scipy.net/roundup/ipython/issue38.
544 http://www.scipy.net/roundup/ipython/issue38.
538
545
539 2005-08-14 Fernando Perez <fperez@colorado.edu>
546 2005-08-14 Fernando Perez <fperez@colorado.edu>
540
547
541 * tools/ipsvnc: Minor improvements, to add changeset info.
548 * tools/ipsvnc: Minor improvements, to add changeset info.
542
549
543 2005-08-12 Fernando Perez <fperez@colorado.edu>
550 2005-08-12 Fernando Perez <fperez@colorado.edu>
544
551
545 * IPython/iplib.py (runsource): remove self.code_to_run_src
552 * IPython/iplib.py (runsource): remove self.code_to_run_src
546 attribute. I realized this is nothing more than
553 attribute. I realized this is nothing more than
547 '\n'.join(self.buffer), and having the same data in two different
554 '\n'.join(self.buffer), and having the same data in two different
548 places is just asking for synchronization bugs. This may impact
555 places is just asking for synchronization bugs. This may impact
549 people who have custom exception handlers, so I need to warn
556 people who have custom exception handlers, so I need to warn
550 ipython-dev about it (F. Mantegazza may use them).
557 ipython-dev about it (F. Mantegazza may use them).
551
558
552 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
559 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
553
560
554 * IPython/genutils.py: fix 2.2 compatibility (generators)
561 * IPython/genutils.py: fix 2.2 compatibility (generators)
555
562
556 2005-07-18 Fernando Perez <fperez@colorado.edu>
563 2005-07-18 Fernando Perez <fperez@colorado.edu>
557
564
558 * IPython/genutils.py (get_home_dir): fix to help users with
565 * IPython/genutils.py (get_home_dir): fix to help users with
559 invalid $HOME under win32.
566 invalid $HOME under win32.
560
567
561 2005-07-17 Fernando Perez <fperez@colorado.edu>
568 2005-07-17 Fernando Perez <fperez@colorado.edu>
562
569
563 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
570 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
564 some old hacks and clean up a bit other routines; code should be
571 some old hacks and clean up a bit other routines; code should be
565 simpler and a bit faster.
572 simpler and a bit faster.
566
573
567 * IPython/iplib.py (interact): removed some last-resort attempts
574 * IPython/iplib.py (interact): removed some last-resort attempts
568 to survive broken stdout/stderr. That code was only making it
575 to survive broken stdout/stderr. That code was only making it
569 harder to abstract out the i/o (necessary for gui integration),
576 harder to abstract out the i/o (necessary for gui integration),
570 and the crashes it could prevent were extremely rare in practice
577 and the crashes it could prevent were extremely rare in practice
571 (besides being fully user-induced in a pretty violent manner).
578 (besides being fully user-induced in a pretty violent manner).
572
579
573 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
580 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
574 Nothing major yet, but the code is simpler to read; this should
581 Nothing major yet, but the code is simpler to read; this should
575 make it easier to do more serious modifications in the future.
582 make it easier to do more serious modifications in the future.
576
583
577 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
584 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
578 which broke in .15 (thanks to a report by Ville).
585 which broke in .15 (thanks to a report by Ville).
579
586
580 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
587 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
581 be quite correct, I know next to nothing about unicode). This
588 be quite correct, I know next to nothing about unicode). This
582 will allow unicode strings to be used in prompts, amongst other
589 will allow unicode strings to be used in prompts, amongst other
583 cases. It also will prevent ipython from crashing when unicode
590 cases. It also will prevent ipython from crashing when unicode
584 shows up unexpectedly in many places. If ascii encoding fails, we
591 shows up unexpectedly in many places. If ascii encoding fails, we
585 assume utf_8. Currently the encoding is not a user-visible
592 assume utf_8. Currently the encoding is not a user-visible
586 setting, though it could be made so if there is demand for it.
593 setting, though it could be made so if there is demand for it.
587
594
588 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
595 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
589
596
590 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
597 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
591
598
592 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
599 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
593
600
594 * IPython/genutils.py: Add 2.2 compatibility here, so all other
601 * IPython/genutils.py: Add 2.2 compatibility here, so all other
595 code can work transparently for 2.2/2.3.
602 code can work transparently for 2.2/2.3.
596
603
597 2005-07-16 Fernando Perez <fperez@colorado.edu>
604 2005-07-16 Fernando Perez <fperez@colorado.edu>
598
605
599 * IPython/ultraTB.py (ExceptionColors): Make a global variable
606 * IPython/ultraTB.py (ExceptionColors): Make a global variable
600 out of the color scheme table used for coloring exception
607 out of the color scheme table used for coloring exception
601 tracebacks. This allows user code to add new schemes at runtime.
608 tracebacks. This allows user code to add new schemes at runtime.
602 This is a minimally modified version of the patch at
609 This is a minimally modified version of the patch at
603 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
610 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
604 for the contribution.
611 for the contribution.
605
612
606 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
613 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
607 slightly modified version of the patch in
614 slightly modified version of the patch in
608 http://www.scipy.net/roundup/ipython/issue34, which also allows me
615 http://www.scipy.net/roundup/ipython/issue34, which also allows me
609 to remove the previous try/except solution (which was costlier).
616 to remove the previous try/except solution (which was costlier).
610 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
617 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
611
618
612 2005-06-08 Fernando Perez <fperez@colorado.edu>
619 2005-06-08 Fernando Perez <fperez@colorado.edu>
613
620
614 * IPython/iplib.py (write/write_err): Add methods to abstract all
621 * IPython/iplib.py (write/write_err): Add methods to abstract all
615 I/O a bit more.
622 I/O a bit more.
616
623
617 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
624 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
618 warning, reported by Aric Hagberg, fix by JD Hunter.
625 warning, reported by Aric Hagberg, fix by JD Hunter.
619
626
620 2005-06-02 *** Released version 0.6.15
627 2005-06-02 *** Released version 0.6.15
621
628
622 2005-06-01 Fernando Perez <fperez@colorado.edu>
629 2005-06-01 Fernando Perez <fperez@colorado.edu>
623
630
624 * IPython/iplib.py (MagicCompleter.file_matches): Fix
631 * IPython/iplib.py (MagicCompleter.file_matches): Fix
625 tab-completion of filenames within open-quoted strings. Note that
632 tab-completion of filenames within open-quoted strings. Note that
626 this requires that in ~/.ipython/ipythonrc, users change the
633 this requires that in ~/.ipython/ipythonrc, users change the
627 readline delimiters configuration to read:
634 readline delimiters configuration to read:
628
635
629 readline_remove_delims -/~
636 readline_remove_delims -/~
630
637
631
638
632 2005-05-31 *** Released version 0.6.14
639 2005-05-31 *** Released version 0.6.14
633
640
634 2005-05-29 Fernando Perez <fperez@colorado.edu>
641 2005-05-29 Fernando Perez <fperez@colorado.edu>
635
642
636 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
643 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
637 with files not on the filesystem. Reported by Eliyahu Sandler
644 with files not on the filesystem. Reported by Eliyahu Sandler
638 <eli@gondolin.net>
645 <eli@gondolin.net>
639
646
640 2005-05-22 Fernando Perez <fperez@colorado.edu>
647 2005-05-22 Fernando Perez <fperez@colorado.edu>
641
648
642 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
649 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
643 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
650 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
644
651
645 2005-05-19 Fernando Perez <fperez@colorado.edu>
652 2005-05-19 Fernando Perez <fperez@colorado.edu>
646
653
647 * IPython/iplib.py (safe_execfile): close a file which could be
654 * IPython/iplib.py (safe_execfile): close a file which could be
648 left open (causing problems in win32, which locks open files).
655 left open (causing problems in win32, which locks open files).
649 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
656 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
650
657
651 2005-05-18 Fernando Perez <fperez@colorado.edu>
658 2005-05-18 Fernando Perez <fperez@colorado.edu>
652
659
653 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
660 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
654 keyword arguments correctly to safe_execfile().
661 keyword arguments correctly to safe_execfile().
655
662
656 2005-05-13 Fernando Perez <fperez@colorado.edu>
663 2005-05-13 Fernando Perez <fperez@colorado.edu>
657
664
658 * ipython.1: Added info about Qt to manpage, and threads warning
665 * ipython.1: Added info about Qt to manpage, and threads warning
659 to usage page (invoked with --help).
666 to usage page (invoked with --help).
660
667
661 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
668 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
662 new matcher (it goes at the end of the priority list) to do
669 new matcher (it goes at the end of the priority list) to do
663 tab-completion on named function arguments. Submitted by George
670 tab-completion on named function arguments. Submitted by George
664 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
671 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
665 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
672 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
666 for more details.
673 for more details.
667
674
668 * IPython/Magic.py (magic_run): Added new -e flag to ignore
675 * IPython/Magic.py (magic_run): Added new -e flag to ignore
669 SystemExit exceptions in the script being run. Thanks to a report
676 SystemExit exceptions in the script being run. Thanks to a report
670 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
677 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
671 producing very annoying behavior when running unit tests.
678 producing very annoying behavior when running unit tests.
672
679
673 2005-05-12 Fernando Perez <fperez@colorado.edu>
680 2005-05-12 Fernando Perez <fperez@colorado.edu>
674
681
675 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
682 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
676 which I'd broken (again) due to a changed regexp. In the process,
683 which I'd broken (again) due to a changed regexp. In the process,
677 added ';' as an escape to auto-quote the whole line without
684 added ';' as an escape to auto-quote the whole line without
678 splitting its arguments. Thanks to a report by Jerry McRae
685 splitting its arguments. Thanks to a report by Jerry McRae
679 <qrs0xyc02-AT-sneakemail.com>.
686 <qrs0xyc02-AT-sneakemail.com>.
680
687
681 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
688 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
682 possible crashes caused by a TokenError. Reported by Ed Schofield
689 possible crashes caused by a TokenError. Reported by Ed Schofield
683 <schofield-AT-ftw.at>.
690 <schofield-AT-ftw.at>.
684
691
685 2005-05-06 Fernando Perez <fperez@colorado.edu>
692 2005-05-06 Fernando Perez <fperez@colorado.edu>
686
693
687 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
694 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
688
695
689 2005-04-29 Fernando Perez <fperez@colorado.edu>
696 2005-04-29 Fernando Perez <fperez@colorado.edu>
690
697
691 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
698 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
692 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
699 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
693 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
700 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
694 which provides support for Qt interactive usage (similar to the
701 which provides support for Qt interactive usage (similar to the
695 existing one for WX and GTK). This had been often requested.
702 existing one for WX and GTK). This had been often requested.
696
703
697 2005-04-14 *** Released version 0.6.13
704 2005-04-14 *** Released version 0.6.13
698
705
699 2005-04-08 Fernando Perez <fperez@colorado.edu>
706 2005-04-08 Fernando Perez <fperez@colorado.edu>
700
707
701 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
708 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
702 from _ofind, which gets called on almost every input line. Now,
709 from _ofind, which gets called on almost every input line. Now,
703 we only try to get docstrings if they are actually going to be
710 we only try to get docstrings if they are actually going to be
704 used (the overhead of fetching unnecessary docstrings can be
711 used (the overhead of fetching unnecessary docstrings can be
705 noticeable for certain objects, such as Pyro proxies).
712 noticeable for certain objects, such as Pyro proxies).
706
713
707 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
714 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
708 for completers. For some reason I had been passing them the state
715 for completers. For some reason I had been passing them the state
709 variable, which completers never actually need, and was in
716 variable, which completers never actually need, and was in
710 conflict with the rlcompleter API. Custom completers ONLY need to
717 conflict with the rlcompleter API. Custom completers ONLY need to
711 take the text parameter.
718 take the text parameter.
712
719
713 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
720 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
714 work correctly in pysh. I've also moved all the logic which used
721 work correctly in pysh. I've also moved all the logic which used
715 to be in pysh.py here, which will prevent problems with future
722 to be in pysh.py here, which will prevent problems with future
716 upgrades. However, this time I must warn users to update their
723 upgrades. However, this time I must warn users to update their
717 pysh profile to include the line
724 pysh profile to include the line
718
725
719 import_all IPython.Extensions.InterpreterExec
726 import_all IPython.Extensions.InterpreterExec
720
727
721 because otherwise things won't work for them. They MUST also
728 because otherwise things won't work for them. They MUST also
722 delete pysh.py and the line
729 delete pysh.py and the line
723
730
724 execfile pysh.py
731 execfile pysh.py
725
732
726 from their ipythonrc-pysh.
733 from their ipythonrc-pysh.
727
734
728 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
735 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
729 robust in the face of objects whose dir() returns non-strings
736 robust in the face of objects whose dir() returns non-strings
730 (which it shouldn't, but some broken libs like ITK do). Thanks to
737 (which it shouldn't, but some broken libs like ITK do). Thanks to
731 a patch by John Hunter (implemented differently, though). Also
738 a patch by John Hunter (implemented differently, though). Also
732 minor improvements by using .extend instead of + on lists.
739 minor improvements by using .extend instead of + on lists.
733
740
734 * pysh.py:
741 * pysh.py:
735
742
736 2005-04-06 Fernando Perez <fperez@colorado.edu>
743 2005-04-06 Fernando Perez <fperez@colorado.edu>
737
744
738 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
745 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
739 by default, so that all users benefit from it. Those who don't
746 by default, so that all users benefit from it. Those who don't
740 want it can still turn it off.
747 want it can still turn it off.
741
748
742 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
749 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
743 config file, I'd forgotten about this, so users were getting it
750 config file, I'd forgotten about this, so users were getting it
744 off by default.
751 off by default.
745
752
746 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
753 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
747 consistency. Now magics can be called in multiline statements,
754 consistency. Now magics can be called in multiline statements,
748 and python variables can be expanded in magic calls via $var.
755 and python variables can be expanded in magic calls via $var.
749 This makes the magic system behave just like aliases or !system
756 This makes the magic system behave just like aliases or !system
750 calls.
757 calls.
751
758
752 2005-03-28 Fernando Perez <fperez@colorado.edu>
759 2005-03-28 Fernando Perez <fperez@colorado.edu>
753
760
754 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
761 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
755 expensive string additions for building command. Add support for
762 expensive string additions for building command. Add support for
756 trailing ';' when autocall is used.
763 trailing ';' when autocall is used.
757
764
758 2005-03-26 Fernando Perez <fperez@colorado.edu>
765 2005-03-26 Fernando Perez <fperez@colorado.edu>
759
766
760 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
767 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
761 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
768 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
762 ipython.el robust against prompts with any number of spaces
769 ipython.el robust against prompts with any number of spaces
763 (including 0) after the ':' character.
770 (including 0) after the ':' character.
764
771
765 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
772 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
766 continuation prompt, which misled users to think the line was
773 continuation prompt, which misled users to think the line was
767 already indented. Closes debian Bug#300847, reported to me by
774 already indented. Closes debian Bug#300847, reported to me by
768 Norbert Tretkowski <tretkowski-AT-inittab.de>.
775 Norbert Tretkowski <tretkowski-AT-inittab.de>.
769
776
770 2005-03-23 Fernando Perez <fperez@colorado.edu>
777 2005-03-23 Fernando Perez <fperez@colorado.edu>
771
778
772 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
779 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
773 properly aligned if they have embedded newlines.
780 properly aligned if they have embedded newlines.
774
781
775 * IPython/iplib.py (runlines): Add a public method to expose
782 * IPython/iplib.py (runlines): Add a public method to expose
776 IPython's code execution machinery, so that users can run strings
783 IPython's code execution machinery, so that users can run strings
777 as if they had been typed at the prompt interactively.
784 as if they had been typed at the prompt interactively.
778 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
785 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
779 methods which can call the system shell, but with python variable
786 methods which can call the system shell, but with python variable
780 expansion. The three such methods are: __IPYTHON__.system,
787 expansion. The three such methods are: __IPYTHON__.system,
781 .getoutput and .getoutputerror. These need to be documented in a
788 .getoutput and .getoutputerror. These need to be documented in a
782 'public API' section (to be written) of the manual.
789 'public API' section (to be written) of the manual.
783
790
784 2005-03-20 Fernando Perez <fperez@colorado.edu>
791 2005-03-20 Fernando Perez <fperez@colorado.edu>
785
792
786 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
793 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
787 for custom exception handling. This is quite powerful, and it
794 for custom exception handling. This is quite powerful, and it
788 allows for user-installable exception handlers which can trap
795 allows for user-installable exception handlers which can trap
789 custom exceptions at runtime and treat them separately from
796 custom exceptions at runtime and treat them separately from
790 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
797 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
791 Mantegazza <mantegazza-AT-ill.fr>.
798 Mantegazza <mantegazza-AT-ill.fr>.
792 (InteractiveShell.set_custom_completer): public API function to
799 (InteractiveShell.set_custom_completer): public API function to
793 add new completers at runtime.
800 add new completers at runtime.
794
801
795 2005-03-19 Fernando Perez <fperez@colorado.edu>
802 2005-03-19 Fernando Perez <fperez@colorado.edu>
796
803
797 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
804 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
798 allow objects which provide their docstrings via non-standard
805 allow objects which provide their docstrings via non-standard
799 mechanisms (like Pyro proxies) to still be inspected by ipython's
806 mechanisms (like Pyro proxies) to still be inspected by ipython's
800 ? system.
807 ? system.
801
808
802 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
809 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
803 automatic capture system. I tried quite hard to make it work
810 automatic capture system. I tried quite hard to make it work
804 reliably, and simply failed. I tried many combinations with the
811 reliably, and simply failed. I tried many combinations with the
805 subprocess module, but eventually nothing worked in all needed
812 subprocess module, but eventually nothing worked in all needed
806 cases (not blocking stdin for the child, duplicating stdout
813 cases (not blocking stdin for the child, duplicating stdout
807 without blocking, etc). The new %sc/%sx still do capture to these
814 without blocking, etc). The new %sc/%sx still do capture to these
808 magical list/string objects which make shell use much more
815 magical list/string objects which make shell use much more
809 conveninent, so not all is lost.
816 conveninent, so not all is lost.
810
817
811 XXX - FIX MANUAL for the change above!
818 XXX - FIX MANUAL for the change above!
812
819
813 (runsource): I copied code.py's runsource() into ipython to modify
820 (runsource): I copied code.py's runsource() into ipython to modify
814 it a bit. Now the code object and source to be executed are
821 it a bit. Now the code object and source to be executed are
815 stored in ipython. This makes this info accessible to third-party
822 stored in ipython. This makes this info accessible to third-party
816 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
823 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
817 Mantegazza <mantegazza-AT-ill.fr>.
824 Mantegazza <mantegazza-AT-ill.fr>.
818
825
819 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
826 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
820 history-search via readline (like C-p/C-n). I'd wanted this for a
827 history-search via readline (like C-p/C-n). I'd wanted this for a
821 long time, but only recently found out how to do it. For users
828 long time, but only recently found out how to do it. For users
822 who already have their ipythonrc files made and want this, just
829 who already have their ipythonrc files made and want this, just
823 add:
830 add:
824
831
825 readline_parse_and_bind "\e[A": history-search-backward
832 readline_parse_and_bind "\e[A": history-search-backward
826 readline_parse_and_bind "\e[B": history-search-forward
833 readline_parse_and_bind "\e[B": history-search-forward
827
834
828 2005-03-18 Fernando Perez <fperez@colorado.edu>
835 2005-03-18 Fernando Perez <fperez@colorado.edu>
829
836
830 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
837 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
831 LSString and SList classes which allow transparent conversions
838 LSString and SList classes which allow transparent conversions
832 between list mode and whitespace-separated string.
839 between list mode and whitespace-separated string.
833 (magic_r): Fix recursion problem in %r.
840 (magic_r): Fix recursion problem in %r.
834
841
835 * IPython/genutils.py (LSString): New class to be used for
842 * IPython/genutils.py (LSString): New class to be used for
836 automatic storage of the results of all alias/system calls in _o
843 automatic storage of the results of all alias/system calls in _o
837 and _e (stdout/err). These provide a .l/.list attribute which
844 and _e (stdout/err). These provide a .l/.list attribute which
838 does automatic splitting on newlines. This means that for most
845 does automatic splitting on newlines. This means that for most
839 uses, you'll never need to do capturing of output with %sc/%sx
846 uses, you'll never need to do capturing of output with %sc/%sx
840 anymore, since ipython keeps this always done for you. Note that
847 anymore, since ipython keeps this always done for you. Note that
841 only the LAST results are stored, the _o/e variables are
848 only the LAST results are stored, the _o/e variables are
842 overwritten on each call. If you need to save their contents
849 overwritten on each call. If you need to save their contents
843 further, simply bind them to any other name.
850 further, simply bind them to any other name.
844
851
845 2005-03-17 Fernando Perez <fperez@colorado.edu>
852 2005-03-17 Fernando Perez <fperez@colorado.edu>
846
853
847 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
854 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
848 prompt namespace handling.
855 prompt namespace handling.
849
856
850 2005-03-16 Fernando Perez <fperez@colorado.edu>
857 2005-03-16 Fernando Perez <fperez@colorado.edu>
851
858
852 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
859 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
853 classic prompts to be '>>> ' (final space was missing, and it
860 classic prompts to be '>>> ' (final space was missing, and it
854 trips the emacs python mode).
861 trips the emacs python mode).
855 (BasePrompt.__str__): Added safe support for dynamic prompt
862 (BasePrompt.__str__): Added safe support for dynamic prompt
856 strings. Now you can set your prompt string to be '$x', and the
863 strings. Now you can set your prompt string to be '$x', and the
857 value of x will be printed from your interactive namespace. The
864 value of x will be printed from your interactive namespace. The
858 interpolation syntax includes the full Itpl support, so
865 interpolation syntax includes the full Itpl support, so
859 ${foo()+x+bar()} is a valid prompt string now, and the function
866 ${foo()+x+bar()} is a valid prompt string now, and the function
860 calls will be made at runtime.
867 calls will be made at runtime.
861
868
862 2005-03-15 Fernando Perez <fperez@colorado.edu>
869 2005-03-15 Fernando Perez <fperez@colorado.edu>
863
870
864 * IPython/Magic.py (magic_history): renamed %hist to %history, to
871 * IPython/Magic.py (magic_history): renamed %hist to %history, to
865 avoid name clashes in pylab. %hist still works, it just forwards
872 avoid name clashes in pylab. %hist still works, it just forwards
866 the call to %history.
873 the call to %history.
867
874
868 2005-03-02 *** Released version 0.6.12
875 2005-03-02 *** Released version 0.6.12
869
876
870 2005-03-02 Fernando Perez <fperez@colorado.edu>
877 2005-03-02 Fernando Perez <fperez@colorado.edu>
871
878
872 * IPython/iplib.py (handle_magic): log magic calls properly as
879 * IPython/iplib.py (handle_magic): log magic calls properly as
873 ipmagic() function calls.
880 ipmagic() function calls.
874
881
875 * IPython/Magic.py (magic_time): Improved %time to support
882 * IPython/Magic.py (magic_time): Improved %time to support
876 statements and provide wall-clock as well as CPU time.
883 statements and provide wall-clock as well as CPU time.
877
884
878 2005-02-27 Fernando Perez <fperez@colorado.edu>
885 2005-02-27 Fernando Perez <fperez@colorado.edu>
879
886
880 * IPython/hooks.py: New hooks module, to expose user-modifiable
887 * IPython/hooks.py: New hooks module, to expose user-modifiable
881 IPython functionality in a clean manner. For now only the editor
888 IPython functionality in a clean manner. For now only the editor
882 hook is actually written, and other thigns which I intend to turn
889 hook is actually written, and other thigns which I intend to turn
883 into proper hooks aren't yet there. The display and prefilter
890 into proper hooks aren't yet there. The display and prefilter
884 stuff, for example, should be hooks. But at least now the
891 stuff, for example, should be hooks. But at least now the
885 framework is in place, and the rest can be moved here with more
892 framework is in place, and the rest can be moved here with more
886 time later. IPython had had a .hooks variable for a long time for
893 time later. IPython had had a .hooks variable for a long time for
887 this purpose, but I'd never actually used it for anything.
894 this purpose, but I'd never actually used it for anything.
888
895
889 2005-02-26 Fernando Perez <fperez@colorado.edu>
896 2005-02-26 Fernando Perez <fperez@colorado.edu>
890
897
891 * IPython/ipmaker.py (make_IPython): make the default ipython
898 * IPython/ipmaker.py (make_IPython): make the default ipython
892 directory be called _ipython under win32, to follow more the
899 directory be called _ipython under win32, to follow more the
893 naming peculiarities of that platform (where buggy software like
900 naming peculiarities of that platform (where buggy software like
894 Visual Sourcesafe breaks with .named directories). Reported by
901 Visual Sourcesafe breaks with .named directories). Reported by
895 Ville Vainio.
902 Ville Vainio.
896
903
897 2005-02-23 Fernando Perez <fperez@colorado.edu>
904 2005-02-23 Fernando Perez <fperez@colorado.edu>
898
905
899 * IPython/iplib.py (InteractiveShell.__init__): removed a few
906 * IPython/iplib.py (InteractiveShell.__init__): removed a few
900 auto_aliases for win32 which were causing problems. Users can
907 auto_aliases for win32 which were causing problems. Users can
901 define the ones they personally like.
908 define the ones they personally like.
902
909
903 2005-02-21 Fernando Perez <fperez@colorado.edu>
910 2005-02-21 Fernando Perez <fperez@colorado.edu>
904
911
905 * IPython/Magic.py (magic_time): new magic to time execution of
912 * IPython/Magic.py (magic_time): new magic to time execution of
906 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
913 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
907
914
908 2005-02-19 Fernando Perez <fperez@colorado.edu>
915 2005-02-19 Fernando Perez <fperez@colorado.edu>
909
916
910 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
917 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
911 into keys (for prompts, for example).
918 into keys (for prompts, for example).
912
919
913 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
920 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
914 prompts in case users want them. This introduces a small behavior
921 prompts in case users want them. This introduces a small behavior
915 change: ipython does not automatically add a space to all prompts
922 change: ipython does not automatically add a space to all prompts
916 anymore. To get the old prompts with a space, users should add it
923 anymore. To get the old prompts with a space, users should add it
917 manually to their ipythonrc file, so for example prompt_in1 should
924 manually to their ipythonrc file, so for example prompt_in1 should
918 now read 'In [\#]: ' instead of 'In [\#]:'.
925 now read 'In [\#]: ' instead of 'In [\#]:'.
919 (BasePrompt.__init__): New option prompts_pad_left (only in rc
926 (BasePrompt.__init__): New option prompts_pad_left (only in rc
920 file) to control left-padding of secondary prompts.
927 file) to control left-padding of secondary prompts.
921
928
922 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
929 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
923 the profiler can't be imported. Fix for Debian, which removed
930 the profiler can't be imported. Fix for Debian, which removed
924 profile.py because of License issues. I applied a slightly
931 profile.py because of License issues. I applied a slightly
925 modified version of the original Debian patch at
932 modified version of the original Debian patch at
926 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
933 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
927
934
928 2005-02-17 Fernando Perez <fperez@colorado.edu>
935 2005-02-17 Fernando Perez <fperez@colorado.edu>
929
936
930 * IPython/genutils.py (native_line_ends): Fix bug which would
937 * IPython/genutils.py (native_line_ends): Fix bug which would
931 cause improper line-ends under win32 b/c I was not opening files
938 cause improper line-ends under win32 b/c I was not opening files
932 in binary mode. Bug report and fix thanks to Ville.
939 in binary mode. Bug report and fix thanks to Ville.
933
940
934 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
941 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
935 trying to catch spurious foo[1] autocalls. My fix actually broke
942 trying to catch spurious foo[1] autocalls. My fix actually broke
936 ',/' autoquote/call with explicit escape (bad regexp).
943 ',/' autoquote/call with explicit escape (bad regexp).
937
944
938 2005-02-15 *** Released version 0.6.11
945 2005-02-15 *** Released version 0.6.11
939
946
940 2005-02-14 Fernando Perez <fperez@colorado.edu>
947 2005-02-14 Fernando Perez <fperez@colorado.edu>
941
948
942 * IPython/background_jobs.py: New background job management
949 * IPython/background_jobs.py: New background job management
943 subsystem. This is implemented via a new set of classes, and
950 subsystem. This is implemented via a new set of classes, and
944 IPython now provides a builtin 'jobs' object for background job
951 IPython now provides a builtin 'jobs' object for background job
945 execution. A convenience %bg magic serves as a lightweight
952 execution. A convenience %bg magic serves as a lightweight
946 frontend for starting the more common type of calls. This was
953 frontend for starting the more common type of calls. This was
947 inspired by discussions with B. Granger and the BackgroundCommand
954 inspired by discussions with B. Granger and the BackgroundCommand
948 class described in the book Python Scripting for Computational
955 class described in the book Python Scripting for Computational
949 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
956 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
950 (although ultimately no code from this text was used, as IPython's
957 (although ultimately no code from this text was used, as IPython's
951 system is a separate implementation).
958 system is a separate implementation).
952
959
953 * IPython/iplib.py (MagicCompleter.python_matches): add new option
960 * IPython/iplib.py (MagicCompleter.python_matches): add new option
954 to control the completion of single/double underscore names
961 to control the completion of single/double underscore names
955 separately. As documented in the example ipytonrc file, the
962 separately. As documented in the example ipytonrc file, the
956 readline_omit__names variable can now be set to 2, to omit even
963 readline_omit__names variable can now be set to 2, to omit even
957 single underscore names. Thanks to a patch by Brian Wong
964 single underscore names. Thanks to a patch by Brian Wong
958 <BrianWong-AT-AirgoNetworks.Com>.
965 <BrianWong-AT-AirgoNetworks.Com>.
959 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
966 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
960 be autocalled as foo([1]) if foo were callable. A problem for
967 be autocalled as foo([1]) if foo were callable. A problem for
961 things which are both callable and implement __getitem__.
968 things which are both callable and implement __getitem__.
962 (init_readline): Fix autoindentation for win32. Thanks to a patch
969 (init_readline): Fix autoindentation for win32. Thanks to a patch
963 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
970 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
964
971
965 2005-02-12 Fernando Perez <fperez@colorado.edu>
972 2005-02-12 Fernando Perez <fperez@colorado.edu>
966
973
967 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
974 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
968 which I had written long ago to sort out user error messages which
975 which I had written long ago to sort out user error messages which
969 may occur during startup. This seemed like a good idea initially,
976 may occur during startup. This seemed like a good idea initially,
970 but it has proven a disaster in retrospect. I don't want to
977 but it has proven a disaster in retrospect. I don't want to
971 change much code for now, so my fix is to set the internal 'debug'
978 change much code for now, so my fix is to set the internal 'debug'
972 flag to true everywhere, whose only job was precisely to control
979 flag to true everywhere, whose only job was precisely to control
973 this subsystem. This closes issue 28 (as well as avoiding all
980 this subsystem. This closes issue 28 (as well as avoiding all
974 sorts of strange hangups which occur from time to time).
981 sorts of strange hangups which occur from time to time).
975
982
976 2005-02-07 Fernando Perez <fperez@colorado.edu>
983 2005-02-07 Fernando Perez <fperez@colorado.edu>
977
984
978 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
985 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
979 previous call produced a syntax error.
986 previous call produced a syntax error.
980
987
981 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
988 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
982 classes without constructor.
989 classes without constructor.
983
990
984 2005-02-06 Fernando Perez <fperez@colorado.edu>
991 2005-02-06 Fernando Perez <fperez@colorado.edu>
985
992
986 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
993 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
987 completions with the results of each matcher, so we return results
994 completions with the results of each matcher, so we return results
988 to the user from all namespaces. This breaks with ipython
995 to the user from all namespaces. This breaks with ipython
989 tradition, but I think it's a nicer behavior. Now you get all
996 tradition, but I think it's a nicer behavior. Now you get all
990 possible completions listed, from all possible namespaces (python,
997 possible completions listed, from all possible namespaces (python,
991 filesystem, magics...) After a request by John Hunter
998 filesystem, magics...) After a request by John Hunter
992 <jdhunter-AT-nitace.bsd.uchicago.edu>.
999 <jdhunter-AT-nitace.bsd.uchicago.edu>.
993
1000
994 2005-02-05 Fernando Perez <fperez@colorado.edu>
1001 2005-02-05 Fernando Perez <fperez@colorado.edu>
995
1002
996 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1003 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
997 the call had quote characters in it (the quotes were stripped).
1004 the call had quote characters in it (the quotes were stripped).
998
1005
999 2005-01-31 Fernando Perez <fperez@colorado.edu>
1006 2005-01-31 Fernando Perez <fperez@colorado.edu>
1000
1007
1001 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1008 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1002 Itpl.itpl() to make the code more robust against psyco
1009 Itpl.itpl() to make the code more robust against psyco
1003 optimizations.
1010 optimizations.
1004
1011
1005 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1012 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1006 of causing an exception. Quicker, cleaner.
1013 of causing an exception. Quicker, cleaner.
1007
1014
1008 2005-01-28 Fernando Perez <fperez@colorado.edu>
1015 2005-01-28 Fernando Perez <fperez@colorado.edu>
1009
1016
1010 * scripts/ipython_win_post_install.py (install): hardcode
1017 * scripts/ipython_win_post_install.py (install): hardcode
1011 sys.prefix+'python.exe' as the executable path. It turns out that
1018 sys.prefix+'python.exe' as the executable path. It turns out that
1012 during the post-installation run, sys.executable resolves to the
1019 during the post-installation run, sys.executable resolves to the
1013 name of the binary installer! I should report this as a distutils
1020 name of the binary installer! I should report this as a distutils
1014 bug, I think. I updated the .10 release with this tiny fix, to
1021 bug, I think. I updated the .10 release with this tiny fix, to
1015 avoid annoying the lists further.
1022 avoid annoying the lists further.
1016
1023
1017 2005-01-27 *** Released version 0.6.10
1024 2005-01-27 *** Released version 0.6.10
1018
1025
1019 2005-01-27 Fernando Perez <fperez@colorado.edu>
1026 2005-01-27 Fernando Perez <fperez@colorado.edu>
1020
1027
1021 * IPython/numutils.py (norm): Added 'inf' as optional name for
1028 * IPython/numutils.py (norm): Added 'inf' as optional name for
1022 L-infinity norm, included references to mathworld.com for vector
1029 L-infinity norm, included references to mathworld.com for vector
1023 norm definitions.
1030 norm definitions.
1024 (amin/amax): added amin/amax for array min/max. Similar to what
1031 (amin/amax): added amin/amax for array min/max. Similar to what
1025 pylab ships with after the recent reorganization of names.
1032 pylab ships with after the recent reorganization of names.
1026 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1033 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1027
1034
1028 * ipython.el: committed Alex's recent fixes and improvements.
1035 * ipython.el: committed Alex's recent fixes and improvements.
1029 Tested with python-mode from CVS, and it looks excellent. Since
1036 Tested with python-mode from CVS, and it looks excellent. Since
1030 python-mode hasn't released anything in a while, I'm temporarily
1037 python-mode hasn't released anything in a while, I'm temporarily
1031 putting a copy of today's CVS (v 4.70) of python-mode in:
1038 putting a copy of today's CVS (v 4.70) of python-mode in:
1032 http://ipython.scipy.org/tmp/python-mode.el
1039 http://ipython.scipy.org/tmp/python-mode.el
1033
1040
1034 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1041 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1035 sys.executable for the executable name, instead of assuming it's
1042 sys.executable for the executable name, instead of assuming it's
1036 called 'python.exe' (the post-installer would have produced broken
1043 called 'python.exe' (the post-installer would have produced broken
1037 setups on systems with a differently named python binary).
1044 setups on systems with a differently named python binary).
1038
1045
1039 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1046 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1040 references to os.linesep, to make the code more
1047 references to os.linesep, to make the code more
1041 platform-independent. This is also part of the win32 coloring
1048 platform-independent. This is also part of the win32 coloring
1042 fixes.
1049 fixes.
1043
1050
1044 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1051 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1045 lines, which actually cause coloring bugs because the length of
1052 lines, which actually cause coloring bugs because the length of
1046 the line is very difficult to correctly compute with embedded
1053 the line is very difficult to correctly compute with embedded
1047 escapes. This was the source of all the coloring problems under
1054 escapes. This was the source of all the coloring problems under
1048 Win32. I think that _finally_, Win32 users have a properly
1055 Win32. I think that _finally_, Win32 users have a properly
1049 working ipython in all respects. This would never have happened
1056 working ipython in all respects. This would never have happened
1050 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1057 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1051
1058
1052 2005-01-26 *** Released version 0.6.9
1059 2005-01-26 *** Released version 0.6.9
1053
1060
1054 2005-01-25 Fernando Perez <fperez@colorado.edu>
1061 2005-01-25 Fernando Perez <fperez@colorado.edu>
1055
1062
1056 * setup.py: finally, we have a true Windows installer, thanks to
1063 * setup.py: finally, we have a true Windows installer, thanks to
1057 the excellent work of Viktor Ransmayr
1064 the excellent work of Viktor Ransmayr
1058 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1065 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1059 Windows users. The setup routine is quite a bit cleaner thanks to
1066 Windows users. The setup routine is quite a bit cleaner thanks to
1060 this, and the post-install script uses the proper functions to
1067 this, and the post-install script uses the proper functions to
1061 allow a clean de-installation using the standard Windows Control
1068 allow a clean de-installation using the standard Windows Control
1062 Panel.
1069 Panel.
1063
1070
1064 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1071 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1065 environment variable under all OSes (including win32) if
1072 environment variable under all OSes (including win32) if
1066 available. This will give consistency to win32 users who have set
1073 available. This will give consistency to win32 users who have set
1067 this variable for any reason. If os.environ['HOME'] fails, the
1074 this variable for any reason. If os.environ['HOME'] fails, the
1068 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1075 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1069
1076
1070 2005-01-24 Fernando Perez <fperez@colorado.edu>
1077 2005-01-24 Fernando Perez <fperez@colorado.edu>
1071
1078
1072 * IPython/numutils.py (empty_like): add empty_like(), similar to
1079 * IPython/numutils.py (empty_like): add empty_like(), similar to
1073 zeros_like() but taking advantage of the new empty() Numeric routine.
1080 zeros_like() but taking advantage of the new empty() Numeric routine.
1074
1081
1075 2005-01-23 *** Released version 0.6.8
1082 2005-01-23 *** Released version 0.6.8
1076
1083
1077 2005-01-22 Fernando Perez <fperez@colorado.edu>
1084 2005-01-22 Fernando Perez <fperez@colorado.edu>
1078
1085
1079 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1086 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1080 automatic show() calls. After discussing things with JDH, it
1087 automatic show() calls. After discussing things with JDH, it
1081 turns out there are too many corner cases where this can go wrong.
1088 turns out there are too many corner cases where this can go wrong.
1082 It's best not to try to be 'too smart', and simply have ipython
1089 It's best not to try to be 'too smart', and simply have ipython
1083 reproduce as much as possible the default behavior of a normal
1090 reproduce as much as possible the default behavior of a normal
1084 python shell.
1091 python shell.
1085
1092
1086 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1093 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1087 line-splitting regexp and _prefilter() to avoid calling getattr()
1094 line-splitting regexp and _prefilter() to avoid calling getattr()
1088 on assignments. This closes
1095 on assignments. This closes
1089 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1096 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1090 readline uses getattr(), so a simple <TAB> keypress is still
1097 readline uses getattr(), so a simple <TAB> keypress is still
1091 enough to trigger getattr() calls on an object.
1098 enough to trigger getattr() calls on an object.
1092
1099
1093 2005-01-21 Fernando Perez <fperez@colorado.edu>
1100 2005-01-21 Fernando Perez <fperez@colorado.edu>
1094
1101
1095 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1102 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1096 docstring under pylab so it doesn't mask the original.
1103 docstring under pylab so it doesn't mask the original.
1097
1104
1098 2005-01-21 *** Released version 0.6.7
1105 2005-01-21 *** Released version 0.6.7
1099
1106
1100 2005-01-21 Fernando Perez <fperez@colorado.edu>
1107 2005-01-21 Fernando Perez <fperez@colorado.edu>
1101
1108
1102 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1109 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1103 signal handling for win32 users in multithreaded mode.
1110 signal handling for win32 users in multithreaded mode.
1104
1111
1105 2005-01-17 Fernando Perez <fperez@colorado.edu>
1112 2005-01-17 Fernando Perez <fperez@colorado.edu>
1106
1113
1107 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1114 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1108 instances with no __init__. After a crash report by Norbert Nemec
1115 instances with no __init__. After a crash report by Norbert Nemec
1109 <Norbert-AT-nemec-online.de>.
1116 <Norbert-AT-nemec-online.de>.
1110
1117
1111 2005-01-14 Fernando Perez <fperez@colorado.edu>
1118 2005-01-14 Fernando Perez <fperez@colorado.edu>
1112
1119
1113 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1120 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1114 names for verbose exceptions, when multiple dotted names and the
1121 names for verbose exceptions, when multiple dotted names and the
1115 'parent' object were present on the same line.
1122 'parent' object were present on the same line.
1116
1123
1117 2005-01-11 Fernando Perez <fperez@colorado.edu>
1124 2005-01-11 Fernando Perez <fperez@colorado.edu>
1118
1125
1119 * IPython/genutils.py (flag_calls): new utility to trap and flag
1126 * IPython/genutils.py (flag_calls): new utility to trap and flag
1120 calls in functions. I need it to clean up matplotlib support.
1127 calls in functions. I need it to clean up matplotlib support.
1121 Also removed some deprecated code in genutils.
1128 Also removed some deprecated code in genutils.
1122
1129
1123 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1130 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1124 that matplotlib scripts called with %run, which don't call show()
1131 that matplotlib scripts called with %run, which don't call show()
1125 themselves, still have their plotting windows open.
1132 themselves, still have their plotting windows open.
1126
1133
1127 2005-01-05 Fernando Perez <fperez@colorado.edu>
1134 2005-01-05 Fernando Perez <fperez@colorado.edu>
1128
1135
1129 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1136 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1130 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1137 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1131
1138
1132 2004-12-19 Fernando Perez <fperez@colorado.edu>
1139 2004-12-19 Fernando Perez <fperez@colorado.edu>
1133
1140
1134 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1141 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1135 parent_runcode, which was an eyesore. The same result can be
1142 parent_runcode, which was an eyesore. The same result can be
1136 obtained with Python's regular superclass mechanisms.
1143 obtained with Python's regular superclass mechanisms.
1137
1144
1138 2004-12-17 Fernando Perez <fperez@colorado.edu>
1145 2004-12-17 Fernando Perez <fperez@colorado.edu>
1139
1146
1140 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1147 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1141 reported by Prabhu.
1148 reported by Prabhu.
1142 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1149 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1143 sys.stderr) instead of explicitly calling sys.stderr. This helps
1150 sys.stderr) instead of explicitly calling sys.stderr. This helps
1144 maintain our I/O abstractions clean, for future GUI embeddings.
1151 maintain our I/O abstractions clean, for future GUI embeddings.
1145
1152
1146 * IPython/genutils.py (info): added new utility for sys.stderr
1153 * IPython/genutils.py (info): added new utility for sys.stderr
1147 unified info message handling (thin wrapper around warn()).
1154 unified info message handling (thin wrapper around warn()).
1148
1155
1149 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1156 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1150 composite (dotted) names on verbose exceptions.
1157 composite (dotted) names on verbose exceptions.
1151 (VerboseTB.nullrepr): harden against another kind of errors which
1158 (VerboseTB.nullrepr): harden against another kind of errors which
1152 Python's inspect module can trigger, and which were crashing
1159 Python's inspect module can trigger, and which were crashing
1153 IPython. Thanks to a report by Marco Lombardi
1160 IPython. Thanks to a report by Marco Lombardi
1154 <mlombard-AT-ma010192.hq.eso.org>.
1161 <mlombard-AT-ma010192.hq.eso.org>.
1155
1162
1156 2004-12-13 *** Released version 0.6.6
1163 2004-12-13 *** Released version 0.6.6
1157
1164
1158 2004-12-12 Fernando Perez <fperez@colorado.edu>
1165 2004-12-12 Fernando Perez <fperez@colorado.edu>
1159
1166
1160 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1167 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1161 generated by pygtk upon initialization if it was built without
1168 generated by pygtk upon initialization if it was built without
1162 threads (for matplotlib users). After a crash reported by
1169 threads (for matplotlib users). After a crash reported by
1163 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1170 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1164
1171
1165 * IPython/ipmaker.py (make_IPython): fix small bug in the
1172 * IPython/ipmaker.py (make_IPython): fix small bug in the
1166 import_some parameter for multiple imports.
1173 import_some parameter for multiple imports.
1167
1174
1168 * IPython/iplib.py (ipmagic): simplified the interface of
1175 * IPython/iplib.py (ipmagic): simplified the interface of
1169 ipmagic() to take a single string argument, just as it would be
1176 ipmagic() to take a single string argument, just as it would be
1170 typed at the IPython cmd line.
1177 typed at the IPython cmd line.
1171 (ipalias): Added new ipalias() with an interface identical to
1178 (ipalias): Added new ipalias() with an interface identical to
1172 ipmagic(). This completes exposing a pure python interface to the
1179 ipmagic(). This completes exposing a pure python interface to the
1173 alias and magic system, which can be used in loops or more complex
1180 alias and magic system, which can be used in loops or more complex
1174 code where IPython's automatic line mangling is not active.
1181 code where IPython's automatic line mangling is not active.
1175
1182
1176 * IPython/genutils.py (timing): changed interface of timing to
1183 * IPython/genutils.py (timing): changed interface of timing to
1177 simply run code once, which is the most common case. timings()
1184 simply run code once, which is the most common case. timings()
1178 remains unchanged, for the cases where you want multiple runs.
1185 remains unchanged, for the cases where you want multiple runs.
1179
1186
1180 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1187 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1181 bug where Python2.2 crashes with exec'ing code which does not end
1188 bug where Python2.2 crashes with exec'ing code which does not end
1182 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1189 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1183 before.
1190 before.
1184
1191
1185 2004-12-10 Fernando Perez <fperez@colorado.edu>
1192 2004-12-10 Fernando Perez <fperez@colorado.edu>
1186
1193
1187 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1194 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1188 -t to -T, to accomodate the new -t flag in %run (the %run and
1195 -t to -T, to accomodate the new -t flag in %run (the %run and
1189 %prun options are kind of intermixed, and it's not easy to change
1196 %prun options are kind of intermixed, and it's not easy to change
1190 this with the limitations of python's getopt).
1197 this with the limitations of python's getopt).
1191
1198
1192 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1199 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1193 the execution of scripts. It's not as fine-tuned as timeit.py,
1200 the execution of scripts. It's not as fine-tuned as timeit.py,
1194 but it works from inside ipython (and under 2.2, which lacks
1201 but it works from inside ipython (and under 2.2, which lacks
1195 timeit.py). Optionally a number of runs > 1 can be given for
1202 timeit.py). Optionally a number of runs > 1 can be given for
1196 timing very short-running code.
1203 timing very short-running code.
1197
1204
1198 * IPython/genutils.py (uniq_stable): new routine which returns a
1205 * IPython/genutils.py (uniq_stable): new routine which returns a
1199 list of unique elements in any iterable, but in stable order of
1206 list of unique elements in any iterable, but in stable order of
1200 appearance. I needed this for the ultraTB fixes, and it's a handy
1207 appearance. I needed this for the ultraTB fixes, and it's a handy
1201 utility.
1208 utility.
1202
1209
1203 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1210 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1204 dotted names in Verbose exceptions. This had been broken since
1211 dotted names in Verbose exceptions. This had been broken since
1205 the very start, now x.y will properly be printed in a Verbose
1212 the very start, now x.y will properly be printed in a Verbose
1206 traceback, instead of x being shown and y appearing always as an
1213 traceback, instead of x being shown and y appearing always as an
1207 'undefined global'. Getting this to work was a bit tricky,
1214 'undefined global'. Getting this to work was a bit tricky,
1208 because by default python tokenizers are stateless. Saved by
1215 because by default python tokenizers are stateless. Saved by
1209 python's ability to easily add a bit of state to an arbitrary
1216 python's ability to easily add a bit of state to an arbitrary
1210 function (without needing to build a full-blown callable object).
1217 function (without needing to build a full-blown callable object).
1211
1218
1212 Also big cleanup of this code, which had horrendous runtime
1219 Also big cleanup of this code, which had horrendous runtime
1213 lookups of zillions of attributes for colorization. Moved all
1220 lookups of zillions of attributes for colorization. Moved all
1214 this code into a few templates, which make it cleaner and quicker.
1221 this code into a few templates, which make it cleaner and quicker.
1215
1222
1216 Printout quality was also improved for Verbose exceptions: one
1223 Printout quality was also improved for Verbose exceptions: one
1217 variable per line, and memory addresses are printed (this can be
1224 variable per line, and memory addresses are printed (this can be
1218 quite handy in nasty debugging situations, which is what Verbose
1225 quite handy in nasty debugging situations, which is what Verbose
1219 is for).
1226 is for).
1220
1227
1221 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1228 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1222 the command line as scripts to be loaded by embedded instances.
1229 the command line as scripts to be loaded by embedded instances.
1223 Doing so has the potential for an infinite recursion if there are
1230 Doing so has the potential for an infinite recursion if there are
1224 exceptions thrown in the process. This fixes a strange crash
1231 exceptions thrown in the process. This fixes a strange crash
1225 reported by Philippe MULLER <muller-AT-irit.fr>.
1232 reported by Philippe MULLER <muller-AT-irit.fr>.
1226
1233
1227 2004-12-09 Fernando Perez <fperez@colorado.edu>
1234 2004-12-09 Fernando Perez <fperez@colorado.edu>
1228
1235
1229 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1236 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1230 to reflect new names in matplotlib, which now expose the
1237 to reflect new names in matplotlib, which now expose the
1231 matlab-compatible interface via a pylab module instead of the
1238 matlab-compatible interface via a pylab module instead of the
1232 'matlab' name. The new code is backwards compatible, so users of
1239 'matlab' name. The new code is backwards compatible, so users of
1233 all matplotlib versions are OK. Patch by J. Hunter.
1240 all matplotlib versions are OK. Patch by J. Hunter.
1234
1241
1235 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1242 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1236 of __init__ docstrings for instances (class docstrings are already
1243 of __init__ docstrings for instances (class docstrings are already
1237 automatically printed). Instances with customized docstrings
1244 automatically printed). Instances with customized docstrings
1238 (indep. of the class) are also recognized and all 3 separate
1245 (indep. of the class) are also recognized and all 3 separate
1239 docstrings are printed (instance, class, constructor). After some
1246 docstrings are printed (instance, class, constructor). After some
1240 comments/suggestions by J. Hunter.
1247 comments/suggestions by J. Hunter.
1241
1248
1242 2004-12-05 Fernando Perez <fperez@colorado.edu>
1249 2004-12-05 Fernando Perez <fperez@colorado.edu>
1243
1250
1244 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1251 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1245 warnings when tab-completion fails and triggers an exception.
1252 warnings when tab-completion fails and triggers an exception.
1246
1253
1247 2004-12-03 Fernando Perez <fperez@colorado.edu>
1254 2004-12-03 Fernando Perez <fperez@colorado.edu>
1248
1255
1249 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1256 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1250 be triggered when using 'run -p'. An incorrect option flag was
1257 be triggered when using 'run -p'. An incorrect option flag was
1251 being set ('d' instead of 'D').
1258 being set ('d' instead of 'D').
1252 (manpage): fix missing escaped \- sign.
1259 (manpage): fix missing escaped \- sign.
1253
1260
1254 2004-11-30 *** Released version 0.6.5
1261 2004-11-30 *** Released version 0.6.5
1255
1262
1256 2004-11-30 Fernando Perez <fperez@colorado.edu>
1263 2004-11-30 Fernando Perez <fperez@colorado.edu>
1257
1264
1258 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1265 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1259 setting with -d option.
1266 setting with -d option.
1260
1267
1261 * setup.py (docfiles): Fix problem where the doc glob I was using
1268 * setup.py (docfiles): Fix problem where the doc glob I was using
1262 was COMPLETELY BROKEN. It was giving the right files by pure
1269 was COMPLETELY BROKEN. It was giving the right files by pure
1263 accident, but failed once I tried to include ipython.el. Note:
1270 accident, but failed once I tried to include ipython.el. Note:
1264 glob() does NOT allow you to do exclusion on multiple endings!
1271 glob() does NOT allow you to do exclusion on multiple endings!
1265
1272
1266 2004-11-29 Fernando Perez <fperez@colorado.edu>
1273 2004-11-29 Fernando Perez <fperez@colorado.edu>
1267
1274
1268 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1275 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1269 the manpage as the source. Better formatting & consistency.
1276 the manpage as the source. Better formatting & consistency.
1270
1277
1271 * IPython/Magic.py (magic_run): Added new -d option, to run
1278 * IPython/Magic.py (magic_run): Added new -d option, to run
1272 scripts under the control of the python pdb debugger. Note that
1279 scripts under the control of the python pdb debugger. Note that
1273 this required changing the %prun option -d to -D, to avoid a clash
1280 this required changing the %prun option -d to -D, to avoid a clash
1274 (since %run must pass options to %prun, and getopt is too dumb to
1281 (since %run must pass options to %prun, and getopt is too dumb to
1275 handle options with string values with embedded spaces). Thanks
1282 handle options with string values with embedded spaces). Thanks
1276 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1283 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1277 (magic_who_ls): added type matching to %who and %whos, so that one
1284 (magic_who_ls): added type matching to %who and %whos, so that one
1278 can filter their output to only include variables of certain
1285 can filter their output to only include variables of certain
1279 types. Another suggestion by Matthew.
1286 types. Another suggestion by Matthew.
1280 (magic_whos): Added memory summaries in kb and Mb for arrays.
1287 (magic_whos): Added memory summaries in kb and Mb for arrays.
1281 (magic_who): Improve formatting (break lines every 9 vars).
1288 (magic_who): Improve formatting (break lines every 9 vars).
1282
1289
1283 2004-11-28 Fernando Perez <fperez@colorado.edu>
1290 2004-11-28 Fernando Perez <fperez@colorado.edu>
1284
1291
1285 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1292 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1286 cache when empty lines were present.
1293 cache when empty lines were present.
1287
1294
1288 2004-11-24 Fernando Perez <fperez@colorado.edu>
1295 2004-11-24 Fernando Perez <fperez@colorado.edu>
1289
1296
1290 * IPython/usage.py (__doc__): document the re-activated threading
1297 * IPython/usage.py (__doc__): document the re-activated threading
1291 options for WX and GTK.
1298 options for WX and GTK.
1292
1299
1293 2004-11-23 Fernando Perez <fperez@colorado.edu>
1300 2004-11-23 Fernando Perez <fperez@colorado.edu>
1294
1301
1295 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1302 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1296 the -wthread and -gthread options, along with a new -tk one to try
1303 the -wthread and -gthread options, along with a new -tk one to try
1297 and coordinate Tk threading with wx/gtk. The tk support is very
1304 and coordinate Tk threading with wx/gtk. The tk support is very
1298 platform dependent, since it seems to require Tcl and Tk to be
1305 platform dependent, since it seems to require Tcl and Tk to be
1299 built with threads (Fedora1/2 appears NOT to have it, but in
1306 built with threads (Fedora1/2 appears NOT to have it, but in
1300 Prabhu's Debian boxes it works OK). But even with some Tk
1307 Prabhu's Debian boxes it works OK). But even with some Tk
1301 limitations, this is a great improvement.
1308 limitations, this is a great improvement.
1302
1309
1303 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1310 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1304 info in user prompts. Patch by Prabhu.
1311 info in user prompts. Patch by Prabhu.
1305
1312
1306 2004-11-18 Fernando Perez <fperez@colorado.edu>
1313 2004-11-18 Fernando Perez <fperez@colorado.edu>
1307
1314
1308 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1315 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1309 EOFErrors and bail, to avoid infinite loops if a non-terminating
1316 EOFErrors and bail, to avoid infinite loops if a non-terminating
1310 file is fed into ipython. Patch submitted in issue 19 by user,
1317 file is fed into ipython. Patch submitted in issue 19 by user,
1311 many thanks.
1318 many thanks.
1312
1319
1313 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1320 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1314 autoquote/parens in continuation prompts, which can cause lots of
1321 autoquote/parens in continuation prompts, which can cause lots of
1315 problems. Closes roundup issue 20.
1322 problems. Closes roundup issue 20.
1316
1323
1317 2004-11-17 Fernando Perez <fperez@colorado.edu>
1324 2004-11-17 Fernando Perez <fperez@colorado.edu>
1318
1325
1319 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1326 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1320 reported as debian bug #280505. I'm not sure my local changelog
1327 reported as debian bug #280505. I'm not sure my local changelog
1321 entry has the proper debian format (Jack?).
1328 entry has the proper debian format (Jack?).
1322
1329
1323 2004-11-08 *** Released version 0.6.4
1330 2004-11-08 *** Released version 0.6.4
1324
1331
1325 2004-11-08 Fernando Perez <fperez@colorado.edu>
1332 2004-11-08 Fernando Perez <fperez@colorado.edu>
1326
1333
1327 * IPython/iplib.py (init_readline): Fix exit message for Windows
1334 * IPython/iplib.py (init_readline): Fix exit message for Windows
1328 when readline is active. Thanks to a report by Eric Jones
1335 when readline is active. Thanks to a report by Eric Jones
1329 <eric-AT-enthought.com>.
1336 <eric-AT-enthought.com>.
1330
1337
1331 2004-11-07 Fernando Perez <fperez@colorado.edu>
1338 2004-11-07 Fernando Perez <fperez@colorado.edu>
1332
1339
1333 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1340 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1334 sometimes seen by win2k/cygwin users.
1341 sometimes seen by win2k/cygwin users.
1335
1342
1336 2004-11-06 Fernando Perez <fperez@colorado.edu>
1343 2004-11-06 Fernando Perez <fperez@colorado.edu>
1337
1344
1338 * IPython/iplib.py (interact): Change the handling of %Exit from
1345 * IPython/iplib.py (interact): Change the handling of %Exit from
1339 trying to propagate a SystemExit to an internal ipython flag.
1346 trying to propagate a SystemExit to an internal ipython flag.
1340 This is less elegant than using Python's exception mechanism, but
1347 This is less elegant than using Python's exception mechanism, but
1341 I can't get that to work reliably with threads, so under -pylab
1348 I can't get that to work reliably with threads, so under -pylab
1342 %Exit was hanging IPython. Cross-thread exception handling is
1349 %Exit was hanging IPython. Cross-thread exception handling is
1343 really a bitch. Thaks to a bug report by Stephen Walton
1350 really a bitch. Thaks to a bug report by Stephen Walton
1344 <stephen.walton-AT-csun.edu>.
1351 <stephen.walton-AT-csun.edu>.
1345
1352
1346 2004-11-04 Fernando Perez <fperez@colorado.edu>
1353 2004-11-04 Fernando Perez <fperez@colorado.edu>
1347
1354
1348 * IPython/iplib.py (raw_input_original): store a pointer to the
1355 * IPython/iplib.py (raw_input_original): store a pointer to the
1349 true raw_input to harden against code which can modify it
1356 true raw_input to harden against code which can modify it
1350 (wx.py.PyShell does this and would otherwise crash ipython).
1357 (wx.py.PyShell does this and would otherwise crash ipython).
1351 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1358 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1352
1359
1353 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1360 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1354 Ctrl-C problem, which does not mess up the input line.
1361 Ctrl-C problem, which does not mess up the input line.
1355
1362
1356 2004-11-03 Fernando Perez <fperez@colorado.edu>
1363 2004-11-03 Fernando Perez <fperez@colorado.edu>
1357
1364
1358 * IPython/Release.py: Changed licensing to BSD, in all files.
1365 * IPython/Release.py: Changed licensing to BSD, in all files.
1359 (name): lowercase name for tarball/RPM release.
1366 (name): lowercase name for tarball/RPM release.
1360
1367
1361 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1368 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1362 use throughout ipython.
1369 use throughout ipython.
1363
1370
1364 * IPython/Magic.py (Magic._ofind): Switch to using the new
1371 * IPython/Magic.py (Magic._ofind): Switch to using the new
1365 OInspect.getdoc() function.
1372 OInspect.getdoc() function.
1366
1373
1367 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1374 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1368 of the line currently being canceled via Ctrl-C. It's extremely
1375 of the line currently being canceled via Ctrl-C. It's extremely
1369 ugly, but I don't know how to do it better (the problem is one of
1376 ugly, but I don't know how to do it better (the problem is one of
1370 handling cross-thread exceptions).
1377 handling cross-thread exceptions).
1371
1378
1372 2004-10-28 Fernando Perez <fperez@colorado.edu>
1379 2004-10-28 Fernando Perez <fperez@colorado.edu>
1373
1380
1374 * IPython/Shell.py (signal_handler): add signal handlers to trap
1381 * IPython/Shell.py (signal_handler): add signal handlers to trap
1375 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1382 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1376 report by Francesc Alted.
1383 report by Francesc Alted.
1377
1384
1378 2004-10-21 Fernando Perez <fperez@colorado.edu>
1385 2004-10-21 Fernando Perez <fperez@colorado.edu>
1379
1386
1380 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1387 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1381 to % for pysh syntax extensions.
1388 to % for pysh syntax extensions.
1382
1389
1383 2004-10-09 Fernando Perez <fperez@colorado.edu>
1390 2004-10-09 Fernando Perez <fperez@colorado.edu>
1384
1391
1385 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1392 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1386 arrays to print a more useful summary, without calling str(arr).
1393 arrays to print a more useful summary, without calling str(arr).
1387 This avoids the problem of extremely lengthy computations which
1394 This avoids the problem of extremely lengthy computations which
1388 occur if arr is large, and appear to the user as a system lockup
1395 occur if arr is large, and appear to the user as a system lockup
1389 with 100% cpu activity. After a suggestion by Kristian Sandberg
1396 with 100% cpu activity. After a suggestion by Kristian Sandberg
1390 <Kristian.Sandberg@colorado.edu>.
1397 <Kristian.Sandberg@colorado.edu>.
1391 (Magic.__init__): fix bug in global magic escapes not being
1398 (Magic.__init__): fix bug in global magic escapes not being
1392 correctly set.
1399 correctly set.
1393
1400
1394 2004-10-08 Fernando Perez <fperez@colorado.edu>
1401 2004-10-08 Fernando Perez <fperez@colorado.edu>
1395
1402
1396 * IPython/Magic.py (__license__): change to absolute imports of
1403 * IPython/Magic.py (__license__): change to absolute imports of
1397 ipython's own internal packages, to start adapting to the absolute
1404 ipython's own internal packages, to start adapting to the absolute
1398 import requirement of PEP-328.
1405 import requirement of PEP-328.
1399
1406
1400 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1407 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1401 files, and standardize author/license marks through the Release
1408 files, and standardize author/license marks through the Release
1402 module instead of having per/file stuff (except for files with
1409 module instead of having per/file stuff (except for files with
1403 particular licenses, like the MIT/PSF-licensed codes).
1410 particular licenses, like the MIT/PSF-licensed codes).
1404
1411
1405 * IPython/Debugger.py: remove dead code for python 2.1
1412 * IPython/Debugger.py: remove dead code for python 2.1
1406
1413
1407 2004-10-04 Fernando Perez <fperez@colorado.edu>
1414 2004-10-04 Fernando Perez <fperez@colorado.edu>
1408
1415
1409 * IPython/iplib.py (ipmagic): New function for accessing magics
1416 * IPython/iplib.py (ipmagic): New function for accessing magics
1410 via a normal python function call.
1417 via a normal python function call.
1411
1418
1412 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1419 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1413 from '@' to '%', to accomodate the new @decorator syntax of python
1420 from '@' to '%', to accomodate the new @decorator syntax of python
1414 2.4.
1421 2.4.
1415
1422
1416 2004-09-29 Fernando Perez <fperez@colorado.edu>
1423 2004-09-29 Fernando Perez <fperez@colorado.edu>
1417
1424
1418 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1425 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1419 matplotlib.use to prevent running scripts which try to switch
1426 matplotlib.use to prevent running scripts which try to switch
1420 interactive backends from within ipython. This will just crash
1427 interactive backends from within ipython. This will just crash
1421 the python interpreter, so we can't allow it (but a detailed error
1428 the python interpreter, so we can't allow it (but a detailed error
1422 is given to the user).
1429 is given to the user).
1423
1430
1424 2004-09-28 Fernando Perez <fperez@colorado.edu>
1431 2004-09-28 Fernando Perez <fperez@colorado.edu>
1425
1432
1426 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1433 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1427 matplotlib-related fixes so that using @run with non-matplotlib
1434 matplotlib-related fixes so that using @run with non-matplotlib
1428 scripts doesn't pop up spurious plot windows. This requires
1435 scripts doesn't pop up spurious plot windows. This requires
1429 matplotlib >= 0.63, where I had to make some changes as well.
1436 matplotlib >= 0.63, where I had to make some changes as well.
1430
1437
1431 * IPython/ipmaker.py (make_IPython): update version requirement to
1438 * IPython/ipmaker.py (make_IPython): update version requirement to
1432 python 2.2.
1439 python 2.2.
1433
1440
1434 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1441 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1435 banner arg for embedded customization.
1442 banner arg for embedded customization.
1436
1443
1437 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1444 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1438 explicit uses of __IP as the IPython's instance name. Now things
1445 explicit uses of __IP as the IPython's instance name. Now things
1439 are properly handled via the shell.name value. The actual code
1446 are properly handled via the shell.name value. The actual code
1440 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1447 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1441 is much better than before. I'll clean things completely when the
1448 is much better than before. I'll clean things completely when the
1442 magic stuff gets a real overhaul.
1449 magic stuff gets a real overhaul.
1443
1450
1444 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1451 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1445 minor changes to debian dir.
1452 minor changes to debian dir.
1446
1453
1447 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1454 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1448 pointer to the shell itself in the interactive namespace even when
1455 pointer to the shell itself in the interactive namespace even when
1449 a user-supplied dict is provided. This is needed for embedding
1456 a user-supplied dict is provided. This is needed for embedding
1450 purposes (found by tests with Michel Sanner).
1457 purposes (found by tests with Michel Sanner).
1451
1458
1452 2004-09-27 Fernando Perez <fperez@colorado.edu>
1459 2004-09-27 Fernando Perez <fperez@colorado.edu>
1453
1460
1454 * IPython/UserConfig/ipythonrc: remove []{} from
1461 * IPython/UserConfig/ipythonrc: remove []{} from
1455 readline_remove_delims, so that things like [modname.<TAB> do
1462 readline_remove_delims, so that things like [modname.<TAB> do
1456 proper completion. This disables [].TAB, but that's a less common
1463 proper completion. This disables [].TAB, but that's a less common
1457 case than module names in list comprehensions, for example.
1464 case than module names in list comprehensions, for example.
1458 Thanks to a report by Andrea Riciputi.
1465 Thanks to a report by Andrea Riciputi.
1459
1466
1460 2004-09-09 Fernando Perez <fperez@colorado.edu>
1467 2004-09-09 Fernando Perez <fperez@colorado.edu>
1461
1468
1462 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1469 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1463 blocking problems in win32 and osx. Fix by John.
1470 blocking problems in win32 and osx. Fix by John.
1464
1471
1465 2004-09-08 Fernando Perez <fperez@colorado.edu>
1472 2004-09-08 Fernando Perez <fperez@colorado.edu>
1466
1473
1467 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1474 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1468 for Win32 and OSX. Fix by John Hunter.
1475 for Win32 and OSX. Fix by John Hunter.
1469
1476
1470 2004-08-30 *** Released version 0.6.3
1477 2004-08-30 *** Released version 0.6.3
1471
1478
1472 2004-08-30 Fernando Perez <fperez@colorado.edu>
1479 2004-08-30 Fernando Perez <fperez@colorado.edu>
1473
1480
1474 * setup.py (isfile): Add manpages to list of dependent files to be
1481 * setup.py (isfile): Add manpages to list of dependent files to be
1475 updated.
1482 updated.
1476
1483
1477 2004-08-27 Fernando Perez <fperez@colorado.edu>
1484 2004-08-27 Fernando Perez <fperez@colorado.edu>
1478
1485
1479 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1486 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1480 for now. They don't really work with standalone WX/GTK code
1487 for now. They don't really work with standalone WX/GTK code
1481 (though matplotlib IS working fine with both of those backends).
1488 (though matplotlib IS working fine with both of those backends).
1482 This will neeed much more testing. I disabled most things with
1489 This will neeed much more testing. I disabled most things with
1483 comments, so turning it back on later should be pretty easy.
1490 comments, so turning it back on later should be pretty easy.
1484
1491
1485 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1492 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1486 autocalling of expressions like r'foo', by modifying the line
1493 autocalling of expressions like r'foo', by modifying the line
1487 split regexp. Closes
1494 split regexp. Closes
1488 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1495 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1489 Riley <ipythonbugs-AT-sabi.net>.
1496 Riley <ipythonbugs-AT-sabi.net>.
1490 (InteractiveShell.mainloop): honor --nobanner with banner
1497 (InteractiveShell.mainloop): honor --nobanner with banner
1491 extensions.
1498 extensions.
1492
1499
1493 * IPython/Shell.py: Significant refactoring of all classes, so
1500 * IPython/Shell.py: Significant refactoring of all classes, so
1494 that we can really support ALL matplotlib backends and threading
1501 that we can really support ALL matplotlib backends and threading
1495 models (John spotted a bug with Tk which required this). Now we
1502 models (John spotted a bug with Tk which required this). Now we
1496 should support single-threaded, WX-threads and GTK-threads, both
1503 should support single-threaded, WX-threads and GTK-threads, both
1497 for generic code and for matplotlib.
1504 for generic code and for matplotlib.
1498
1505
1499 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1506 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1500 -pylab, to simplify things for users. Will also remove the pylab
1507 -pylab, to simplify things for users. Will also remove the pylab
1501 profile, since now all of matplotlib configuration is directly
1508 profile, since now all of matplotlib configuration is directly
1502 handled here. This also reduces startup time.
1509 handled here. This also reduces startup time.
1503
1510
1504 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1511 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1505 shell wasn't being correctly called. Also in IPShellWX.
1512 shell wasn't being correctly called. Also in IPShellWX.
1506
1513
1507 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1514 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1508 fine-tune banner.
1515 fine-tune banner.
1509
1516
1510 * IPython/numutils.py (spike): Deprecate these spike functions,
1517 * IPython/numutils.py (spike): Deprecate these spike functions,
1511 delete (long deprecated) gnuplot_exec handler.
1518 delete (long deprecated) gnuplot_exec handler.
1512
1519
1513 2004-08-26 Fernando Perez <fperez@colorado.edu>
1520 2004-08-26 Fernando Perez <fperez@colorado.edu>
1514
1521
1515 * ipython.1: Update for threading options, plus some others which
1522 * ipython.1: Update for threading options, plus some others which
1516 were missing.
1523 were missing.
1517
1524
1518 * IPython/ipmaker.py (__call__): Added -wthread option for
1525 * IPython/ipmaker.py (__call__): Added -wthread option for
1519 wxpython thread handling. Make sure threading options are only
1526 wxpython thread handling. Make sure threading options are only
1520 valid at the command line.
1527 valid at the command line.
1521
1528
1522 * scripts/ipython: moved shell selection into a factory function
1529 * scripts/ipython: moved shell selection into a factory function
1523 in Shell.py, to keep the starter script to a minimum.
1530 in Shell.py, to keep the starter script to a minimum.
1524
1531
1525 2004-08-25 Fernando Perez <fperez@colorado.edu>
1532 2004-08-25 Fernando Perez <fperez@colorado.edu>
1526
1533
1527 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1534 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1528 John. Along with some recent changes he made to matplotlib, the
1535 John. Along with some recent changes he made to matplotlib, the
1529 next versions of both systems should work very well together.
1536 next versions of both systems should work very well together.
1530
1537
1531 2004-08-24 Fernando Perez <fperez@colorado.edu>
1538 2004-08-24 Fernando Perez <fperez@colorado.edu>
1532
1539
1533 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1540 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1534 tried to switch the profiling to using hotshot, but I'm getting
1541 tried to switch the profiling to using hotshot, but I'm getting
1535 strange errors from prof.runctx() there. I may be misreading the
1542 strange errors from prof.runctx() there. I may be misreading the
1536 docs, but it looks weird. For now the profiling code will
1543 docs, but it looks weird. For now the profiling code will
1537 continue to use the standard profiler.
1544 continue to use the standard profiler.
1538
1545
1539 2004-08-23 Fernando Perez <fperez@colorado.edu>
1546 2004-08-23 Fernando Perez <fperez@colorado.edu>
1540
1547
1541 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1548 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1542 threaded shell, by John Hunter. It's not quite ready yet, but
1549 threaded shell, by John Hunter. It's not quite ready yet, but
1543 close.
1550 close.
1544
1551
1545 2004-08-22 Fernando Perez <fperez@colorado.edu>
1552 2004-08-22 Fernando Perez <fperez@colorado.edu>
1546
1553
1547 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1554 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1548 in Magic and ultraTB.
1555 in Magic and ultraTB.
1549
1556
1550 * ipython.1: document threading options in manpage.
1557 * ipython.1: document threading options in manpage.
1551
1558
1552 * scripts/ipython: Changed name of -thread option to -gthread,
1559 * scripts/ipython: Changed name of -thread option to -gthread,
1553 since this is GTK specific. I want to leave the door open for a
1560 since this is GTK specific. I want to leave the door open for a
1554 -wthread option for WX, which will most likely be necessary. This
1561 -wthread option for WX, which will most likely be necessary. This
1555 change affects usage and ipmaker as well.
1562 change affects usage and ipmaker as well.
1556
1563
1557 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1564 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1558 handle the matplotlib shell issues. Code by John Hunter
1565 handle the matplotlib shell issues. Code by John Hunter
1559 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1566 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1560 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1567 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1561 broken (and disabled for end users) for now, but it puts the
1568 broken (and disabled for end users) for now, but it puts the
1562 infrastructure in place.
1569 infrastructure in place.
1563
1570
1564 2004-08-21 Fernando Perez <fperez@colorado.edu>
1571 2004-08-21 Fernando Perez <fperez@colorado.edu>
1565
1572
1566 * ipythonrc-pylab: Add matplotlib support.
1573 * ipythonrc-pylab: Add matplotlib support.
1567
1574
1568 * matplotlib_config.py: new files for matplotlib support, part of
1575 * matplotlib_config.py: new files for matplotlib support, part of
1569 the pylab profile.
1576 the pylab profile.
1570
1577
1571 * IPython/usage.py (__doc__): documented the threading options.
1578 * IPython/usage.py (__doc__): documented the threading options.
1572
1579
1573 2004-08-20 Fernando Perez <fperez@colorado.edu>
1580 2004-08-20 Fernando Perez <fperez@colorado.edu>
1574
1581
1575 * ipython: Modified the main calling routine to handle the -thread
1582 * ipython: Modified the main calling routine to handle the -thread
1576 and -mpthread options. This needs to be done as a top-level hack,
1583 and -mpthread options. This needs to be done as a top-level hack,
1577 because it determines which class to instantiate for IPython
1584 because it determines which class to instantiate for IPython
1578 itself.
1585 itself.
1579
1586
1580 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1587 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1581 classes to support multithreaded GTK operation without blocking,
1588 classes to support multithreaded GTK operation without blocking,
1582 and matplotlib with all backends. This is a lot of still very
1589 and matplotlib with all backends. This is a lot of still very
1583 experimental code, and threads are tricky. So it may still have a
1590 experimental code, and threads are tricky. So it may still have a
1584 few rough edges... This code owes a lot to
1591 few rough edges... This code owes a lot to
1585 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1592 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1586 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1593 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1587 to John Hunter for all the matplotlib work.
1594 to John Hunter for all the matplotlib work.
1588
1595
1589 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1596 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1590 options for gtk thread and matplotlib support.
1597 options for gtk thread and matplotlib support.
1591
1598
1592 2004-08-16 Fernando Perez <fperez@colorado.edu>
1599 2004-08-16 Fernando Perez <fperez@colorado.edu>
1593
1600
1594 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1601 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1595 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1602 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1596 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1603 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1597
1604
1598 2004-08-11 Fernando Perez <fperez@colorado.edu>
1605 2004-08-11 Fernando Perez <fperez@colorado.edu>
1599
1606
1600 * setup.py (isfile): Fix build so documentation gets updated for
1607 * setup.py (isfile): Fix build so documentation gets updated for
1601 rpms (it was only done for .tgz builds).
1608 rpms (it was only done for .tgz builds).
1602
1609
1603 2004-08-10 Fernando Perez <fperez@colorado.edu>
1610 2004-08-10 Fernando Perez <fperez@colorado.edu>
1604
1611
1605 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1612 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1606
1613
1607 * iplib.py : Silence syntax error exceptions in tab-completion.
1614 * iplib.py : Silence syntax error exceptions in tab-completion.
1608
1615
1609 2004-08-05 Fernando Perez <fperez@colorado.edu>
1616 2004-08-05 Fernando Perez <fperez@colorado.edu>
1610
1617
1611 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1618 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1612 'color off' mark for continuation prompts. This was causing long
1619 'color off' mark for continuation prompts. This was causing long
1613 continuation lines to mis-wrap.
1620 continuation lines to mis-wrap.
1614
1621
1615 2004-08-01 Fernando Perez <fperez@colorado.edu>
1622 2004-08-01 Fernando Perez <fperez@colorado.edu>
1616
1623
1617 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1624 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1618 for building ipython to be a parameter. All this is necessary
1625 for building ipython to be a parameter. All this is necessary
1619 right now to have a multithreaded version, but this insane
1626 right now to have a multithreaded version, but this insane
1620 non-design will be cleaned up soon. For now, it's a hack that
1627 non-design will be cleaned up soon. For now, it's a hack that
1621 works.
1628 works.
1622
1629
1623 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1630 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1624 args in various places. No bugs so far, but it's a dangerous
1631 args in various places. No bugs so far, but it's a dangerous
1625 practice.
1632 practice.
1626
1633
1627 2004-07-31 Fernando Perez <fperez@colorado.edu>
1634 2004-07-31 Fernando Perez <fperez@colorado.edu>
1628
1635
1629 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1636 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1630 fix completion of files with dots in their names under most
1637 fix completion of files with dots in their names under most
1631 profiles (pysh was OK because the completion order is different).
1638 profiles (pysh was OK because the completion order is different).
1632
1639
1633 2004-07-27 Fernando Perez <fperez@colorado.edu>
1640 2004-07-27 Fernando Perez <fperez@colorado.edu>
1634
1641
1635 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1642 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1636 keywords manually, b/c the one in keyword.py was removed in python
1643 keywords manually, b/c the one in keyword.py was removed in python
1637 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1644 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1638 This is NOT a bug under python 2.3 and earlier.
1645 This is NOT a bug under python 2.3 and earlier.
1639
1646
1640 2004-07-26 Fernando Perez <fperez@colorado.edu>
1647 2004-07-26 Fernando Perez <fperez@colorado.edu>
1641
1648
1642 * IPython/ultraTB.py (VerboseTB.text): Add another
1649 * IPython/ultraTB.py (VerboseTB.text): Add another
1643 linecache.checkcache() call to try to prevent inspect.py from
1650 linecache.checkcache() call to try to prevent inspect.py from
1644 crashing under python 2.3. I think this fixes
1651 crashing under python 2.3. I think this fixes
1645 http://www.scipy.net/roundup/ipython/issue17.
1652 http://www.scipy.net/roundup/ipython/issue17.
1646
1653
1647 2004-07-26 *** Released version 0.6.2
1654 2004-07-26 *** Released version 0.6.2
1648
1655
1649 2004-07-26 Fernando Perez <fperez@colorado.edu>
1656 2004-07-26 Fernando Perez <fperez@colorado.edu>
1650
1657
1651 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1658 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1652 fail for any number.
1659 fail for any number.
1653 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1660 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1654 empty bookmarks.
1661 empty bookmarks.
1655
1662
1656 2004-07-26 *** Released version 0.6.1
1663 2004-07-26 *** Released version 0.6.1
1657
1664
1658 2004-07-26 Fernando Perez <fperez@colorado.edu>
1665 2004-07-26 Fernando Perez <fperez@colorado.edu>
1659
1666
1660 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1667 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1661
1668
1662 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1669 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1663 escaping '()[]{}' in filenames.
1670 escaping '()[]{}' in filenames.
1664
1671
1665 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1672 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1666 Python 2.2 users who lack a proper shlex.split.
1673 Python 2.2 users who lack a proper shlex.split.
1667
1674
1668 2004-07-19 Fernando Perez <fperez@colorado.edu>
1675 2004-07-19 Fernando Perez <fperez@colorado.edu>
1669
1676
1670 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1677 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1671 for reading readline's init file. I follow the normal chain:
1678 for reading readline's init file. I follow the normal chain:
1672 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1679 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1673 report by Mike Heeter. This closes
1680 report by Mike Heeter. This closes
1674 http://www.scipy.net/roundup/ipython/issue16.
1681 http://www.scipy.net/roundup/ipython/issue16.
1675
1682
1676 2004-07-18 Fernando Perez <fperez@colorado.edu>
1683 2004-07-18 Fernando Perez <fperez@colorado.edu>
1677
1684
1678 * IPython/iplib.py (__init__): Add better handling of '\' under
1685 * IPython/iplib.py (__init__): Add better handling of '\' under
1679 Win32 for filenames. After a patch by Ville.
1686 Win32 for filenames. After a patch by Ville.
1680
1687
1681 2004-07-17 Fernando Perez <fperez@colorado.edu>
1688 2004-07-17 Fernando Perez <fperez@colorado.edu>
1682
1689
1683 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1690 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1684 autocalling would be triggered for 'foo is bar' if foo is
1691 autocalling would be triggered for 'foo is bar' if foo is
1685 callable. I also cleaned up the autocall detection code to use a
1692 callable. I also cleaned up the autocall detection code to use a
1686 regexp, which is faster. Bug reported by Alexander Schmolck.
1693 regexp, which is faster. Bug reported by Alexander Schmolck.
1687
1694
1688 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1695 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1689 '?' in them would confuse the help system. Reported by Alex
1696 '?' in them would confuse the help system. Reported by Alex
1690 Schmolck.
1697 Schmolck.
1691
1698
1692 2004-07-16 Fernando Perez <fperez@colorado.edu>
1699 2004-07-16 Fernando Perez <fperez@colorado.edu>
1693
1700
1694 * IPython/GnuplotInteractive.py (__all__): added plot2.
1701 * IPython/GnuplotInteractive.py (__all__): added plot2.
1695
1702
1696 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1703 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1697 plotting dictionaries, lists or tuples of 1d arrays.
1704 plotting dictionaries, lists or tuples of 1d arrays.
1698
1705
1699 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1706 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1700 optimizations.
1707 optimizations.
1701
1708
1702 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1709 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1703 the information which was there from Janko's original IPP code:
1710 the information which was there from Janko's original IPP code:
1704
1711
1705 03.05.99 20:53 porto.ifm.uni-kiel.de
1712 03.05.99 20:53 porto.ifm.uni-kiel.de
1706 --Started changelog.
1713 --Started changelog.
1707 --make clear do what it say it does
1714 --make clear do what it say it does
1708 --added pretty output of lines from inputcache
1715 --added pretty output of lines from inputcache
1709 --Made Logger a mixin class, simplifies handling of switches
1716 --Made Logger a mixin class, simplifies handling of switches
1710 --Added own completer class. .string<TAB> expands to last history
1717 --Added own completer class. .string<TAB> expands to last history
1711 line which starts with string. The new expansion is also present
1718 line which starts with string. The new expansion is also present
1712 with Ctrl-r from the readline library. But this shows, who this
1719 with Ctrl-r from the readline library. But this shows, who this
1713 can be done for other cases.
1720 can be done for other cases.
1714 --Added convention that all shell functions should accept a
1721 --Added convention that all shell functions should accept a
1715 parameter_string This opens the door for different behaviour for
1722 parameter_string This opens the door for different behaviour for
1716 each function. @cd is a good example of this.
1723 each function. @cd is a good example of this.
1717
1724
1718 04.05.99 12:12 porto.ifm.uni-kiel.de
1725 04.05.99 12:12 porto.ifm.uni-kiel.de
1719 --added logfile rotation
1726 --added logfile rotation
1720 --added new mainloop method which freezes first the namespace
1727 --added new mainloop method which freezes first the namespace
1721
1728
1722 07.05.99 21:24 porto.ifm.uni-kiel.de
1729 07.05.99 21:24 porto.ifm.uni-kiel.de
1723 --added the docreader classes. Now there is a help system.
1730 --added the docreader classes. Now there is a help system.
1724 -This is only a first try. Currently it's not easy to put new
1731 -This is only a first try. Currently it's not easy to put new
1725 stuff in the indices. But this is the way to go. Info would be
1732 stuff in the indices. But this is the way to go. Info would be
1726 better, but HTML is every where and not everybody has an info
1733 better, but HTML is every where and not everybody has an info
1727 system installed and it's not so easy to change html-docs to info.
1734 system installed and it's not so easy to change html-docs to info.
1728 --added global logfile option
1735 --added global logfile option
1729 --there is now a hook for object inspection method pinfo needs to
1736 --there is now a hook for object inspection method pinfo needs to
1730 be provided for this. Can be reached by two '??'.
1737 be provided for this. Can be reached by two '??'.
1731
1738
1732 08.05.99 20:51 porto.ifm.uni-kiel.de
1739 08.05.99 20:51 porto.ifm.uni-kiel.de
1733 --added a README
1740 --added a README
1734 --bug in rc file. Something has changed so functions in the rc
1741 --bug in rc file. Something has changed so functions in the rc
1735 file need to reference the shell and not self. Not clear if it's a
1742 file need to reference the shell and not self. Not clear if it's a
1736 bug or feature.
1743 bug or feature.
1737 --changed rc file for new behavior
1744 --changed rc file for new behavior
1738
1745
1739 2004-07-15 Fernando Perez <fperez@colorado.edu>
1746 2004-07-15 Fernando Perez <fperez@colorado.edu>
1740
1747
1741 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1748 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1742 cache was falling out of sync in bizarre manners when multi-line
1749 cache was falling out of sync in bizarre manners when multi-line
1743 input was present. Minor optimizations and cleanup.
1750 input was present. Minor optimizations and cleanup.
1744
1751
1745 (Logger): Remove old Changelog info for cleanup. This is the
1752 (Logger): Remove old Changelog info for cleanup. This is the
1746 information which was there from Janko's original code:
1753 information which was there from Janko's original code:
1747
1754
1748 Changes to Logger: - made the default log filename a parameter
1755 Changes to Logger: - made the default log filename a parameter
1749
1756
1750 - put a check for lines beginning with !@? in log(). Needed
1757 - put a check for lines beginning with !@? in log(). Needed
1751 (even if the handlers properly log their lines) for mid-session
1758 (even if the handlers properly log their lines) for mid-session
1752 logging activation to work properly. Without this, lines logged
1759 logging activation to work properly. Without this, lines logged
1753 in mid session, which get read from the cache, would end up
1760 in mid session, which get read from the cache, would end up
1754 'bare' (with !@? in the open) in the log. Now they are caught
1761 'bare' (with !@? in the open) in the log. Now they are caught
1755 and prepended with a #.
1762 and prepended with a #.
1756
1763
1757 * IPython/iplib.py (InteractiveShell.init_readline): added check
1764 * IPython/iplib.py (InteractiveShell.init_readline): added check
1758 in case MagicCompleter fails to be defined, so we don't crash.
1765 in case MagicCompleter fails to be defined, so we don't crash.
1759
1766
1760 2004-07-13 Fernando Perez <fperez@colorado.edu>
1767 2004-07-13 Fernando Perez <fperez@colorado.edu>
1761
1768
1762 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1769 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1763 of EPS if the requested filename ends in '.eps'.
1770 of EPS if the requested filename ends in '.eps'.
1764
1771
1765 2004-07-04 Fernando Perez <fperez@colorado.edu>
1772 2004-07-04 Fernando Perez <fperez@colorado.edu>
1766
1773
1767 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1774 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1768 escaping of quotes when calling the shell.
1775 escaping of quotes when calling the shell.
1769
1776
1770 2004-07-02 Fernando Perez <fperez@colorado.edu>
1777 2004-07-02 Fernando Perez <fperez@colorado.edu>
1771
1778
1772 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1779 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1773 gettext not working because we were clobbering '_'. Fixes
1780 gettext not working because we were clobbering '_'. Fixes
1774 http://www.scipy.net/roundup/ipython/issue6.
1781 http://www.scipy.net/roundup/ipython/issue6.
1775
1782
1776 2004-07-01 Fernando Perez <fperez@colorado.edu>
1783 2004-07-01 Fernando Perez <fperez@colorado.edu>
1777
1784
1778 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1785 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1779 into @cd. Patch by Ville.
1786 into @cd. Patch by Ville.
1780
1787
1781 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1788 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1782 new function to store things after ipmaker runs. Patch by Ville.
1789 new function to store things after ipmaker runs. Patch by Ville.
1783 Eventually this will go away once ipmaker is removed and the class
1790 Eventually this will go away once ipmaker is removed and the class
1784 gets cleaned up, but for now it's ok. Key functionality here is
1791 gets cleaned up, but for now it's ok. Key functionality here is
1785 the addition of the persistent storage mechanism, a dict for
1792 the addition of the persistent storage mechanism, a dict for
1786 keeping data across sessions (for now just bookmarks, but more can
1793 keeping data across sessions (for now just bookmarks, but more can
1787 be implemented later).
1794 be implemented later).
1788
1795
1789 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1796 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1790 persistent across sections. Patch by Ville, I modified it
1797 persistent across sections. Patch by Ville, I modified it
1791 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1798 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1792 added a '-l' option to list all bookmarks.
1799 added a '-l' option to list all bookmarks.
1793
1800
1794 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1801 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1795 center for cleanup. Registered with atexit.register(). I moved
1802 center for cleanup. Registered with atexit.register(). I moved
1796 here the old exit_cleanup(). After a patch by Ville.
1803 here the old exit_cleanup(). After a patch by Ville.
1797
1804
1798 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1805 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1799 characters in the hacked shlex_split for python 2.2.
1806 characters in the hacked shlex_split for python 2.2.
1800
1807
1801 * IPython/iplib.py (file_matches): more fixes to filenames with
1808 * IPython/iplib.py (file_matches): more fixes to filenames with
1802 whitespace in them. It's not perfect, but limitations in python's
1809 whitespace in them. It's not perfect, but limitations in python's
1803 readline make it impossible to go further.
1810 readline make it impossible to go further.
1804
1811
1805 2004-06-29 Fernando Perez <fperez@colorado.edu>
1812 2004-06-29 Fernando Perez <fperez@colorado.edu>
1806
1813
1807 * IPython/iplib.py (file_matches): escape whitespace correctly in
1814 * IPython/iplib.py (file_matches): escape whitespace correctly in
1808 filename completions. Bug reported by Ville.
1815 filename completions. Bug reported by Ville.
1809
1816
1810 2004-06-28 Fernando Perez <fperez@colorado.edu>
1817 2004-06-28 Fernando Perez <fperez@colorado.edu>
1811
1818
1812 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1819 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1813 the history file will be called 'history-PROFNAME' (or just
1820 the history file will be called 'history-PROFNAME' (or just
1814 'history' if no profile is loaded). I was getting annoyed at
1821 'history' if no profile is loaded). I was getting annoyed at
1815 getting my Numerical work history clobbered by pysh sessions.
1822 getting my Numerical work history clobbered by pysh sessions.
1816
1823
1817 * IPython/iplib.py (InteractiveShell.__init__): Internal
1824 * IPython/iplib.py (InteractiveShell.__init__): Internal
1818 getoutputerror() function so that we can honor the system_verbose
1825 getoutputerror() function so that we can honor the system_verbose
1819 flag for _all_ system calls. I also added escaping of #
1826 flag for _all_ system calls. I also added escaping of #
1820 characters here to avoid confusing Itpl.
1827 characters here to avoid confusing Itpl.
1821
1828
1822 * IPython/Magic.py (shlex_split): removed call to shell in
1829 * IPython/Magic.py (shlex_split): removed call to shell in
1823 parse_options and replaced it with shlex.split(). The annoying
1830 parse_options and replaced it with shlex.split(). The annoying
1824 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1831 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1825 to backport it from 2.3, with several frail hacks (the shlex
1832 to backport it from 2.3, with several frail hacks (the shlex
1826 module is rather limited in 2.2). Thanks to a suggestion by Ville
1833 module is rather limited in 2.2). Thanks to a suggestion by Ville
1827 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1834 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1828 problem.
1835 problem.
1829
1836
1830 (Magic.magic_system_verbose): new toggle to print the actual
1837 (Magic.magic_system_verbose): new toggle to print the actual
1831 system calls made by ipython. Mainly for debugging purposes.
1838 system calls made by ipython. Mainly for debugging purposes.
1832
1839
1833 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1840 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1834 doesn't support persistence. Reported (and fix suggested) by
1841 doesn't support persistence. Reported (and fix suggested) by
1835 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1842 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1836
1843
1837 2004-06-26 Fernando Perez <fperez@colorado.edu>
1844 2004-06-26 Fernando Perez <fperez@colorado.edu>
1838
1845
1839 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1846 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1840 continue prompts.
1847 continue prompts.
1841
1848
1842 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1849 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1843 function (basically a big docstring) and a few more things here to
1850 function (basically a big docstring) and a few more things here to
1844 speedup startup. pysh.py is now very lightweight. We want because
1851 speedup startup. pysh.py is now very lightweight. We want because
1845 it gets execfile'd, while InterpreterExec gets imported, so
1852 it gets execfile'd, while InterpreterExec gets imported, so
1846 byte-compilation saves time.
1853 byte-compilation saves time.
1847
1854
1848 2004-06-25 Fernando Perez <fperez@colorado.edu>
1855 2004-06-25 Fernando Perez <fperez@colorado.edu>
1849
1856
1850 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1857 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1851 -NUM', which was recently broken.
1858 -NUM', which was recently broken.
1852
1859
1853 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1860 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1854 in multi-line input (but not !!, which doesn't make sense there).
1861 in multi-line input (but not !!, which doesn't make sense there).
1855
1862
1856 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1863 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1857 It's just too useful, and people can turn it off in the less
1864 It's just too useful, and people can turn it off in the less
1858 common cases where it's a problem.
1865 common cases where it's a problem.
1859
1866
1860 2004-06-24 Fernando Perez <fperez@colorado.edu>
1867 2004-06-24 Fernando Perez <fperez@colorado.edu>
1861
1868
1862 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1869 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1863 special syntaxes (like alias calling) is now allied in multi-line
1870 special syntaxes (like alias calling) is now allied in multi-line
1864 input. This is still _very_ experimental, but it's necessary for
1871 input. This is still _very_ experimental, but it's necessary for
1865 efficient shell usage combining python looping syntax with system
1872 efficient shell usage combining python looping syntax with system
1866 calls. For now it's restricted to aliases, I don't think it
1873 calls. For now it's restricted to aliases, I don't think it
1867 really even makes sense to have this for magics.
1874 really even makes sense to have this for magics.
1868
1875
1869 2004-06-23 Fernando Perez <fperez@colorado.edu>
1876 2004-06-23 Fernando Perez <fperez@colorado.edu>
1870
1877
1871 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1878 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1872 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1879 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1873
1880
1874 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1881 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1875 extensions under Windows (after code sent by Gary Bishop). The
1882 extensions under Windows (after code sent by Gary Bishop). The
1876 extensions considered 'executable' are stored in IPython's rc
1883 extensions considered 'executable' are stored in IPython's rc
1877 structure as win_exec_ext.
1884 structure as win_exec_ext.
1878
1885
1879 * IPython/genutils.py (shell): new function, like system() but
1886 * IPython/genutils.py (shell): new function, like system() but
1880 without return value. Very useful for interactive shell work.
1887 without return value. Very useful for interactive shell work.
1881
1888
1882 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1889 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1883 delete aliases.
1890 delete aliases.
1884
1891
1885 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1892 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1886 sure that the alias table doesn't contain python keywords.
1893 sure that the alias table doesn't contain python keywords.
1887
1894
1888 2004-06-21 Fernando Perez <fperez@colorado.edu>
1895 2004-06-21 Fernando Perez <fperez@colorado.edu>
1889
1896
1890 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1897 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1891 non-existent items are found in $PATH. Reported by Thorsten.
1898 non-existent items are found in $PATH. Reported by Thorsten.
1892
1899
1893 2004-06-20 Fernando Perez <fperez@colorado.edu>
1900 2004-06-20 Fernando Perez <fperez@colorado.edu>
1894
1901
1895 * IPython/iplib.py (complete): modified the completer so that the
1902 * IPython/iplib.py (complete): modified the completer so that the
1896 order of priorities can be easily changed at runtime.
1903 order of priorities can be easily changed at runtime.
1897
1904
1898 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1905 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1899 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1906 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1900
1907
1901 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1908 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1902 expand Python variables prepended with $ in all system calls. The
1909 expand Python variables prepended with $ in all system calls. The
1903 same was done to InteractiveShell.handle_shell_escape. Now all
1910 same was done to InteractiveShell.handle_shell_escape. Now all
1904 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1911 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1905 expansion of python variables and expressions according to the
1912 expansion of python variables and expressions according to the
1906 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1913 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1907
1914
1908 Though PEP-215 has been rejected, a similar (but simpler) one
1915 Though PEP-215 has been rejected, a similar (but simpler) one
1909 seems like it will go into Python 2.4, PEP-292 -
1916 seems like it will go into Python 2.4, PEP-292 -
1910 http://www.python.org/peps/pep-0292.html.
1917 http://www.python.org/peps/pep-0292.html.
1911
1918
1912 I'll keep the full syntax of PEP-215, since IPython has since the
1919 I'll keep the full syntax of PEP-215, since IPython has since the
1913 start used Ka-Ping Yee's reference implementation discussed there
1920 start used Ka-Ping Yee's reference implementation discussed there
1914 (Itpl), and I actually like the powerful semantics it offers.
1921 (Itpl), and I actually like the powerful semantics it offers.
1915
1922
1916 In order to access normal shell variables, the $ has to be escaped
1923 In order to access normal shell variables, the $ has to be escaped
1917 via an extra $. For example:
1924 via an extra $. For example:
1918
1925
1919 In [7]: PATH='a python variable'
1926 In [7]: PATH='a python variable'
1920
1927
1921 In [8]: !echo $PATH
1928 In [8]: !echo $PATH
1922 a python variable
1929 a python variable
1923
1930
1924 In [9]: !echo $$PATH
1931 In [9]: !echo $$PATH
1925 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1932 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1926
1933
1927 (Magic.parse_options): escape $ so the shell doesn't evaluate
1934 (Magic.parse_options): escape $ so the shell doesn't evaluate
1928 things prematurely.
1935 things prematurely.
1929
1936
1930 * IPython/iplib.py (InteractiveShell.call_alias): added the
1937 * IPython/iplib.py (InteractiveShell.call_alias): added the
1931 ability for aliases to expand python variables via $.
1938 ability for aliases to expand python variables via $.
1932
1939
1933 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1940 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1934 system, now there's a @rehash/@rehashx pair of magics. These work
1941 system, now there's a @rehash/@rehashx pair of magics. These work
1935 like the csh rehash command, and can be invoked at any time. They
1942 like the csh rehash command, and can be invoked at any time. They
1936 build a table of aliases to everything in the user's $PATH
1943 build a table of aliases to everything in the user's $PATH
1937 (@rehash uses everything, @rehashx is slower but only adds
1944 (@rehash uses everything, @rehashx is slower but only adds
1938 executable files). With this, the pysh.py-based shell profile can
1945 executable files). With this, the pysh.py-based shell profile can
1939 now simply call rehash upon startup, and full access to all
1946 now simply call rehash upon startup, and full access to all
1940 programs in the user's path is obtained.
1947 programs in the user's path is obtained.
1941
1948
1942 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1949 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1943 functionality is now fully in place. I removed the old dynamic
1950 functionality is now fully in place. I removed the old dynamic
1944 code generation based approach, in favor of a much lighter one
1951 code generation based approach, in favor of a much lighter one
1945 based on a simple dict. The advantage is that this allows me to
1952 based on a simple dict. The advantage is that this allows me to
1946 now have thousands of aliases with negligible cost (unthinkable
1953 now have thousands of aliases with negligible cost (unthinkable
1947 with the old system).
1954 with the old system).
1948
1955
1949 2004-06-19 Fernando Perez <fperez@colorado.edu>
1956 2004-06-19 Fernando Perez <fperez@colorado.edu>
1950
1957
1951 * IPython/iplib.py (__init__): extended MagicCompleter class to
1958 * IPython/iplib.py (__init__): extended MagicCompleter class to
1952 also complete (last in priority) on user aliases.
1959 also complete (last in priority) on user aliases.
1953
1960
1954 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1961 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1955 call to eval.
1962 call to eval.
1956 (ItplNS.__init__): Added a new class which functions like Itpl,
1963 (ItplNS.__init__): Added a new class which functions like Itpl,
1957 but allows configuring the namespace for the evaluation to occur
1964 but allows configuring the namespace for the evaluation to occur
1958 in.
1965 in.
1959
1966
1960 2004-06-18 Fernando Perez <fperez@colorado.edu>
1967 2004-06-18 Fernando Perez <fperez@colorado.edu>
1961
1968
1962 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1969 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1963 better message when 'exit' or 'quit' are typed (a common newbie
1970 better message when 'exit' or 'quit' are typed (a common newbie
1964 confusion).
1971 confusion).
1965
1972
1966 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1973 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1967 check for Windows users.
1974 check for Windows users.
1968
1975
1969 * IPython/iplib.py (InteractiveShell.user_setup): removed
1976 * IPython/iplib.py (InteractiveShell.user_setup): removed
1970 disabling of colors for Windows. I'll test at runtime and issue a
1977 disabling of colors for Windows. I'll test at runtime and issue a
1971 warning if Gary's readline isn't found, as to nudge users to
1978 warning if Gary's readline isn't found, as to nudge users to
1972 download it.
1979 download it.
1973
1980
1974 2004-06-16 Fernando Perez <fperez@colorado.edu>
1981 2004-06-16 Fernando Perez <fperez@colorado.edu>
1975
1982
1976 * IPython/genutils.py (Stream.__init__): changed to print errors
1983 * IPython/genutils.py (Stream.__init__): changed to print errors
1977 to sys.stderr. I had a circular dependency here. Now it's
1984 to sys.stderr. I had a circular dependency here. Now it's
1978 possible to run ipython as IDLE's shell (consider this pre-alpha,
1985 possible to run ipython as IDLE's shell (consider this pre-alpha,
1979 since true stdout things end up in the starting terminal instead
1986 since true stdout things end up in the starting terminal instead
1980 of IDLE's out).
1987 of IDLE's out).
1981
1988
1982 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1989 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1983 users who haven't # updated their prompt_in2 definitions. Remove
1990 users who haven't # updated their prompt_in2 definitions. Remove
1984 eventually.
1991 eventually.
1985 (multiple_replace): added credit to original ASPN recipe.
1992 (multiple_replace): added credit to original ASPN recipe.
1986
1993
1987 2004-06-15 Fernando Perez <fperez@colorado.edu>
1994 2004-06-15 Fernando Perez <fperez@colorado.edu>
1988
1995
1989 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1996 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1990 list of auto-defined aliases.
1997 list of auto-defined aliases.
1991
1998
1992 2004-06-13 Fernando Perez <fperez@colorado.edu>
1999 2004-06-13 Fernando Perez <fperez@colorado.edu>
1993
2000
1994 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2001 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1995 install was really requested (so setup.py can be used for other
2002 install was really requested (so setup.py can be used for other
1996 things under Windows).
2003 things under Windows).
1997
2004
1998 2004-06-10 Fernando Perez <fperez@colorado.edu>
2005 2004-06-10 Fernando Perez <fperez@colorado.edu>
1999
2006
2000 * IPython/Logger.py (Logger.create_log): Manually remove any old
2007 * IPython/Logger.py (Logger.create_log): Manually remove any old
2001 backup, since os.remove may fail under Windows. Fixes bug
2008 backup, since os.remove may fail under Windows. Fixes bug
2002 reported by Thorsten.
2009 reported by Thorsten.
2003
2010
2004 2004-06-09 Fernando Perez <fperez@colorado.edu>
2011 2004-06-09 Fernando Perez <fperez@colorado.edu>
2005
2012
2006 * examples/example-embed.py: fixed all references to %n (replaced
2013 * examples/example-embed.py: fixed all references to %n (replaced
2007 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2014 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2008 for all examples and the manual as well.
2015 for all examples and the manual as well.
2009
2016
2010 2004-06-08 Fernando Perez <fperez@colorado.edu>
2017 2004-06-08 Fernando Perez <fperez@colorado.edu>
2011
2018
2012 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2019 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2013 alignment and color management. All 3 prompt subsystems now
2020 alignment and color management. All 3 prompt subsystems now
2014 inherit from BasePrompt.
2021 inherit from BasePrompt.
2015
2022
2016 * tools/release: updates for windows installer build and tag rpms
2023 * tools/release: updates for windows installer build and tag rpms
2017 with python version (since paths are fixed).
2024 with python version (since paths are fixed).
2018
2025
2019 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2026 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2020 which will become eventually obsolete. Also fixed the default
2027 which will become eventually obsolete. Also fixed the default
2021 prompt_in2 to use \D, so at least new users start with the correct
2028 prompt_in2 to use \D, so at least new users start with the correct
2022 defaults.
2029 defaults.
2023 WARNING: Users with existing ipythonrc files will need to apply
2030 WARNING: Users with existing ipythonrc files will need to apply
2024 this fix manually!
2031 this fix manually!
2025
2032
2026 * setup.py: make windows installer (.exe). This is finally the
2033 * setup.py: make windows installer (.exe). This is finally the
2027 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2034 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2028 which I hadn't included because it required Python 2.3 (or recent
2035 which I hadn't included because it required Python 2.3 (or recent
2029 distutils).
2036 distutils).
2030
2037
2031 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2038 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2032 usage of new '\D' escape.
2039 usage of new '\D' escape.
2033
2040
2034 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2041 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2035 lacks os.getuid())
2042 lacks os.getuid())
2036 (CachedOutput.set_colors): Added the ability to turn coloring
2043 (CachedOutput.set_colors): Added the ability to turn coloring
2037 on/off with @colors even for manually defined prompt colors. It
2044 on/off with @colors even for manually defined prompt colors. It
2038 uses a nasty global, but it works safely and via the generic color
2045 uses a nasty global, but it works safely and via the generic color
2039 handling mechanism.
2046 handling mechanism.
2040 (Prompt2.__init__): Introduced new escape '\D' for continuation
2047 (Prompt2.__init__): Introduced new escape '\D' for continuation
2041 prompts. It represents the counter ('\#') as dots.
2048 prompts. It represents the counter ('\#') as dots.
2042 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2049 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2043 need to update their ipythonrc files and replace '%n' with '\D' in
2050 need to update their ipythonrc files and replace '%n' with '\D' in
2044 their prompt_in2 settings everywhere. Sorry, but there's
2051 their prompt_in2 settings everywhere. Sorry, but there's
2045 otherwise no clean way to get all prompts to properly align. The
2052 otherwise no clean way to get all prompts to properly align. The
2046 ipythonrc shipped with IPython has been updated.
2053 ipythonrc shipped with IPython has been updated.
2047
2054
2048 2004-06-07 Fernando Perez <fperez@colorado.edu>
2055 2004-06-07 Fernando Perez <fperez@colorado.edu>
2049
2056
2050 * setup.py (isfile): Pass local_icons option to latex2html, so the
2057 * setup.py (isfile): Pass local_icons option to latex2html, so the
2051 resulting HTML file is self-contained. Thanks to
2058 resulting HTML file is self-contained. Thanks to
2052 dryice-AT-liu.com.cn for the tip.
2059 dryice-AT-liu.com.cn for the tip.
2053
2060
2054 * pysh.py: I created a new profile 'shell', which implements a
2061 * pysh.py: I created a new profile 'shell', which implements a
2055 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2062 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2056 system shell, nor will it become one anytime soon. It's mainly
2063 system shell, nor will it become one anytime soon. It's mainly
2057 meant to illustrate the use of the new flexible bash-like prompts.
2064 meant to illustrate the use of the new flexible bash-like prompts.
2058 I guess it could be used by hardy souls for true shell management,
2065 I guess it could be used by hardy souls for true shell management,
2059 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2066 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2060 profile. This uses the InterpreterExec extension provided by
2067 profile. This uses the InterpreterExec extension provided by
2061 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2068 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2062
2069
2063 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2070 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2064 auto-align itself with the length of the previous input prompt
2071 auto-align itself with the length of the previous input prompt
2065 (taking into account the invisible color escapes).
2072 (taking into account the invisible color escapes).
2066 (CachedOutput.__init__): Large restructuring of this class. Now
2073 (CachedOutput.__init__): Large restructuring of this class. Now
2067 all three prompts (primary1, primary2, output) are proper objects,
2074 all three prompts (primary1, primary2, output) are proper objects,
2068 managed by the 'parent' CachedOutput class. The code is still a
2075 managed by the 'parent' CachedOutput class. The code is still a
2069 bit hackish (all prompts share state via a pointer to the cache),
2076 bit hackish (all prompts share state via a pointer to the cache),
2070 but it's overall far cleaner than before.
2077 but it's overall far cleaner than before.
2071
2078
2072 * IPython/genutils.py (getoutputerror): modified to add verbose,
2079 * IPython/genutils.py (getoutputerror): modified to add verbose,
2073 debug and header options. This makes the interface of all getout*
2080 debug and header options. This makes the interface of all getout*
2074 functions uniform.
2081 functions uniform.
2075 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2082 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2076
2083
2077 * IPython/Magic.py (Magic.default_option): added a function to
2084 * IPython/Magic.py (Magic.default_option): added a function to
2078 allow registering default options for any magic command. This
2085 allow registering default options for any magic command. This
2079 makes it easy to have profiles which customize the magics globally
2086 makes it easy to have profiles which customize the magics globally
2080 for a certain use. The values set through this function are
2087 for a certain use. The values set through this function are
2081 picked up by the parse_options() method, which all magics should
2088 picked up by the parse_options() method, which all magics should
2082 use to parse their options.
2089 use to parse their options.
2083
2090
2084 * IPython/genutils.py (warn): modified the warnings framework to
2091 * IPython/genutils.py (warn): modified the warnings framework to
2085 use the Term I/O class. I'm trying to slowly unify all of
2092 use the Term I/O class. I'm trying to slowly unify all of
2086 IPython's I/O operations to pass through Term.
2093 IPython's I/O operations to pass through Term.
2087
2094
2088 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2095 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2089 the secondary prompt to correctly match the length of the primary
2096 the secondary prompt to correctly match the length of the primary
2090 one for any prompt. Now multi-line code will properly line up
2097 one for any prompt. Now multi-line code will properly line up
2091 even for path dependent prompts, such as the new ones available
2098 even for path dependent prompts, such as the new ones available
2092 via the prompt_specials.
2099 via the prompt_specials.
2093
2100
2094 2004-06-06 Fernando Perez <fperez@colorado.edu>
2101 2004-06-06 Fernando Perez <fperez@colorado.edu>
2095
2102
2096 * IPython/Prompts.py (prompt_specials): Added the ability to have
2103 * IPython/Prompts.py (prompt_specials): Added the ability to have
2097 bash-like special sequences in the prompts, which get
2104 bash-like special sequences in the prompts, which get
2098 automatically expanded. Things like hostname, current working
2105 automatically expanded. Things like hostname, current working
2099 directory and username are implemented already, but it's easy to
2106 directory and username are implemented already, but it's easy to
2100 add more in the future. Thanks to a patch by W.J. van der Laan
2107 add more in the future. Thanks to a patch by W.J. van der Laan
2101 <gnufnork-AT-hetdigitalegat.nl>
2108 <gnufnork-AT-hetdigitalegat.nl>
2102 (prompt_specials): Added color support for prompt strings, so
2109 (prompt_specials): Added color support for prompt strings, so
2103 users can define arbitrary color setups for their prompts.
2110 users can define arbitrary color setups for their prompts.
2104
2111
2105 2004-06-05 Fernando Perez <fperez@colorado.edu>
2112 2004-06-05 Fernando Perez <fperez@colorado.edu>
2106
2113
2107 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2114 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2108 code to load Gary Bishop's readline and configure it
2115 code to load Gary Bishop's readline and configure it
2109 automatically. Thanks to Gary for help on this.
2116 automatically. Thanks to Gary for help on this.
2110
2117
2111 2004-06-01 Fernando Perez <fperez@colorado.edu>
2118 2004-06-01 Fernando Perez <fperez@colorado.edu>
2112
2119
2113 * IPython/Logger.py (Logger.create_log): fix bug for logging
2120 * IPython/Logger.py (Logger.create_log): fix bug for logging
2114 with no filename (previous fix was incomplete).
2121 with no filename (previous fix was incomplete).
2115
2122
2116 2004-05-25 Fernando Perez <fperez@colorado.edu>
2123 2004-05-25 Fernando Perez <fperez@colorado.edu>
2117
2124
2118 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2125 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2119 parens would get passed to the shell.
2126 parens would get passed to the shell.
2120
2127
2121 2004-05-20 Fernando Perez <fperez@colorado.edu>
2128 2004-05-20 Fernando Perez <fperez@colorado.edu>
2122
2129
2123 * IPython/Magic.py (Magic.magic_prun): changed default profile
2130 * IPython/Magic.py (Magic.magic_prun): changed default profile
2124 sort order to 'time' (the more common profiling need).
2131 sort order to 'time' (the more common profiling need).
2125
2132
2126 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2133 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2127 so that source code shown is guaranteed in sync with the file on
2134 so that source code shown is guaranteed in sync with the file on
2128 disk (also changed in psource). Similar fix to the one for
2135 disk (also changed in psource). Similar fix to the one for
2129 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2136 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2130 <yann.ledu-AT-noos.fr>.
2137 <yann.ledu-AT-noos.fr>.
2131
2138
2132 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2139 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2133 with a single option would not be correctly parsed. Closes
2140 with a single option would not be correctly parsed. Closes
2134 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2141 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2135 introduced in 0.6.0 (on 2004-05-06).
2142 introduced in 0.6.0 (on 2004-05-06).
2136
2143
2137 2004-05-13 *** Released version 0.6.0
2144 2004-05-13 *** Released version 0.6.0
2138
2145
2139 2004-05-13 Fernando Perez <fperez@colorado.edu>
2146 2004-05-13 Fernando Perez <fperez@colorado.edu>
2140
2147
2141 * debian/: Added debian/ directory to CVS, so that debian support
2148 * debian/: Added debian/ directory to CVS, so that debian support
2142 is publicly accessible. The debian package is maintained by Jack
2149 is publicly accessible. The debian package is maintained by Jack
2143 Moffit <jack-AT-xiph.org>.
2150 Moffit <jack-AT-xiph.org>.
2144
2151
2145 * Documentation: included the notes about an ipython-based system
2152 * Documentation: included the notes about an ipython-based system
2146 shell (the hypothetical 'pysh') into the new_design.pdf document,
2153 shell (the hypothetical 'pysh') into the new_design.pdf document,
2147 so that these ideas get distributed to users along with the
2154 so that these ideas get distributed to users along with the
2148 official documentation.
2155 official documentation.
2149
2156
2150 2004-05-10 Fernando Perez <fperez@colorado.edu>
2157 2004-05-10 Fernando Perez <fperez@colorado.edu>
2151
2158
2152 * IPython/Logger.py (Logger.create_log): fix recently introduced
2159 * IPython/Logger.py (Logger.create_log): fix recently introduced
2153 bug (misindented line) where logstart would fail when not given an
2160 bug (misindented line) where logstart would fail when not given an
2154 explicit filename.
2161 explicit filename.
2155
2162
2156 2004-05-09 Fernando Perez <fperez@colorado.edu>
2163 2004-05-09 Fernando Perez <fperez@colorado.edu>
2157
2164
2158 * IPython/Magic.py (Magic.parse_options): skip system call when
2165 * IPython/Magic.py (Magic.parse_options): skip system call when
2159 there are no options to look for. Faster, cleaner for the common
2166 there are no options to look for. Faster, cleaner for the common
2160 case.
2167 case.
2161
2168
2162 * Documentation: many updates to the manual: describing Windows
2169 * Documentation: many updates to the manual: describing Windows
2163 support better, Gnuplot updates, credits, misc small stuff. Also
2170 support better, Gnuplot updates, credits, misc small stuff. Also
2164 updated the new_design doc a bit.
2171 updated the new_design doc a bit.
2165
2172
2166 2004-05-06 *** Released version 0.6.0.rc1
2173 2004-05-06 *** Released version 0.6.0.rc1
2167
2174
2168 2004-05-06 Fernando Perez <fperez@colorado.edu>
2175 2004-05-06 Fernando Perez <fperez@colorado.edu>
2169
2176
2170 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2177 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2171 operations to use the vastly more efficient list/''.join() method.
2178 operations to use the vastly more efficient list/''.join() method.
2172 (FormattedTB.text): Fix
2179 (FormattedTB.text): Fix
2173 http://www.scipy.net/roundup/ipython/issue12 - exception source
2180 http://www.scipy.net/roundup/ipython/issue12 - exception source
2174 extract not updated after reload. Thanks to Mike Salib
2181 extract not updated after reload. Thanks to Mike Salib
2175 <msalib-AT-mit.edu> for pinning the source of the problem.
2182 <msalib-AT-mit.edu> for pinning the source of the problem.
2176 Fortunately, the solution works inside ipython and doesn't require
2183 Fortunately, the solution works inside ipython and doesn't require
2177 any changes to python proper.
2184 any changes to python proper.
2178
2185
2179 * IPython/Magic.py (Magic.parse_options): Improved to process the
2186 * IPython/Magic.py (Magic.parse_options): Improved to process the
2180 argument list as a true shell would (by actually using the
2187 argument list as a true shell would (by actually using the
2181 underlying system shell). This way, all @magics automatically get
2188 underlying system shell). This way, all @magics automatically get
2182 shell expansion for variables. Thanks to a comment by Alex
2189 shell expansion for variables. Thanks to a comment by Alex
2183 Schmolck.
2190 Schmolck.
2184
2191
2185 2004-04-04 Fernando Perez <fperez@colorado.edu>
2192 2004-04-04 Fernando Perez <fperez@colorado.edu>
2186
2193
2187 * IPython/iplib.py (InteractiveShell.interact): Added a special
2194 * IPython/iplib.py (InteractiveShell.interact): Added a special
2188 trap for a debugger quit exception, which is basically impossible
2195 trap for a debugger quit exception, which is basically impossible
2189 to handle by normal mechanisms, given what pdb does to the stack.
2196 to handle by normal mechanisms, given what pdb does to the stack.
2190 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2197 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2191
2198
2192 2004-04-03 Fernando Perez <fperez@colorado.edu>
2199 2004-04-03 Fernando Perez <fperez@colorado.edu>
2193
2200
2194 * IPython/genutils.py (Term): Standardized the names of the Term
2201 * IPython/genutils.py (Term): Standardized the names of the Term
2195 class streams to cin/cout/cerr, following C++ naming conventions
2202 class streams to cin/cout/cerr, following C++ naming conventions
2196 (I can't use in/out/err because 'in' is not a valid attribute
2203 (I can't use in/out/err because 'in' is not a valid attribute
2197 name).
2204 name).
2198
2205
2199 * IPython/iplib.py (InteractiveShell.interact): don't increment
2206 * IPython/iplib.py (InteractiveShell.interact): don't increment
2200 the prompt if there's no user input. By Daniel 'Dang' Griffith
2207 the prompt if there's no user input. By Daniel 'Dang' Griffith
2201 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2208 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2202 Francois Pinard.
2209 Francois Pinard.
2203
2210
2204 2004-04-02 Fernando Perez <fperez@colorado.edu>
2211 2004-04-02 Fernando Perez <fperez@colorado.edu>
2205
2212
2206 * IPython/genutils.py (Stream.__init__): Modified to survive at
2213 * IPython/genutils.py (Stream.__init__): Modified to survive at
2207 least importing in contexts where stdin/out/err aren't true file
2214 least importing in contexts where stdin/out/err aren't true file
2208 objects, such as PyCrust (they lack fileno() and mode). However,
2215 objects, such as PyCrust (they lack fileno() and mode). However,
2209 the recovery facilities which rely on these things existing will
2216 the recovery facilities which rely on these things existing will
2210 not work.
2217 not work.
2211
2218
2212 2004-04-01 Fernando Perez <fperez@colorado.edu>
2219 2004-04-01 Fernando Perez <fperez@colorado.edu>
2213
2220
2214 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2221 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2215 use the new getoutputerror() function, so it properly
2222 use the new getoutputerror() function, so it properly
2216 distinguishes stdout/err.
2223 distinguishes stdout/err.
2217
2224
2218 * IPython/genutils.py (getoutputerror): added a function to
2225 * IPython/genutils.py (getoutputerror): added a function to
2219 capture separately the standard output and error of a command.
2226 capture separately the standard output and error of a command.
2220 After a comment from dang on the mailing lists. This code is
2227 After a comment from dang on the mailing lists. This code is
2221 basically a modified version of commands.getstatusoutput(), from
2228 basically a modified version of commands.getstatusoutput(), from
2222 the standard library.
2229 the standard library.
2223
2230
2224 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2231 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2225 '!!' as a special syntax (shorthand) to access @sx.
2232 '!!' as a special syntax (shorthand) to access @sx.
2226
2233
2227 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2234 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2228 command and return its output as a list split on '\n'.
2235 command and return its output as a list split on '\n'.
2229
2236
2230 2004-03-31 Fernando Perez <fperez@colorado.edu>
2237 2004-03-31 Fernando Perez <fperez@colorado.edu>
2231
2238
2232 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2239 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2233 method to dictionaries used as FakeModule instances if they lack
2240 method to dictionaries used as FakeModule instances if they lack
2234 it. At least pydoc in python2.3 breaks for runtime-defined
2241 it. At least pydoc in python2.3 breaks for runtime-defined
2235 functions without this hack. At some point I need to _really_
2242 functions without this hack. At some point I need to _really_
2236 understand what FakeModule is doing, because it's a gross hack.
2243 understand what FakeModule is doing, because it's a gross hack.
2237 But it solves Arnd's problem for now...
2244 But it solves Arnd's problem for now...
2238
2245
2239 2004-02-27 Fernando Perez <fperez@colorado.edu>
2246 2004-02-27 Fernando Perez <fperez@colorado.edu>
2240
2247
2241 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2248 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2242 mode would behave erratically. Also increased the number of
2249 mode would behave erratically. Also increased the number of
2243 possible logs in rotate mod to 999. Thanks to Rod Holland
2250 possible logs in rotate mod to 999. Thanks to Rod Holland
2244 <rhh@StructureLABS.com> for the report and fixes.
2251 <rhh@StructureLABS.com> for the report and fixes.
2245
2252
2246 2004-02-26 Fernando Perez <fperez@colorado.edu>
2253 2004-02-26 Fernando Perez <fperez@colorado.edu>
2247
2254
2248 * IPython/genutils.py (page): Check that the curses module really
2255 * IPython/genutils.py (page): Check that the curses module really
2249 has the initscr attribute before trying to use it. For some
2256 has the initscr attribute before trying to use it. For some
2250 reason, the Solaris curses module is missing this. I think this
2257 reason, the Solaris curses module is missing this. I think this
2251 should be considered a Solaris python bug, but I'm not sure.
2258 should be considered a Solaris python bug, but I'm not sure.
2252
2259
2253 2004-01-17 Fernando Perez <fperez@colorado.edu>
2260 2004-01-17 Fernando Perez <fperez@colorado.edu>
2254
2261
2255 * IPython/genutils.py (Stream.__init__): Changes to try to make
2262 * IPython/genutils.py (Stream.__init__): Changes to try to make
2256 ipython robust against stdin/out/err being closed by the user.
2263 ipython robust against stdin/out/err being closed by the user.
2257 This is 'user error' (and blocks a normal python session, at least
2264 This is 'user error' (and blocks a normal python session, at least
2258 the stdout case). However, Ipython should be able to survive such
2265 the stdout case). However, Ipython should be able to survive such
2259 instances of abuse as gracefully as possible. To simplify the
2266 instances of abuse as gracefully as possible. To simplify the
2260 coding and maintain compatibility with Gary Bishop's Term
2267 coding and maintain compatibility with Gary Bishop's Term
2261 contributions, I've made use of classmethods for this. I think
2268 contributions, I've made use of classmethods for this. I think
2262 this introduces a dependency on python 2.2.
2269 this introduces a dependency on python 2.2.
2263
2270
2264 2004-01-13 Fernando Perez <fperez@colorado.edu>
2271 2004-01-13 Fernando Perez <fperez@colorado.edu>
2265
2272
2266 * IPython/numutils.py (exp_safe): simplified the code a bit and
2273 * IPython/numutils.py (exp_safe): simplified the code a bit and
2267 removed the need for importing the kinds module altogether.
2274 removed the need for importing the kinds module altogether.
2268
2275
2269 2004-01-06 Fernando Perez <fperez@colorado.edu>
2276 2004-01-06 Fernando Perez <fperez@colorado.edu>
2270
2277
2271 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2278 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2272 a magic function instead, after some community feedback. No
2279 a magic function instead, after some community feedback. No
2273 special syntax will exist for it, but its name is deliberately
2280 special syntax will exist for it, but its name is deliberately
2274 very short.
2281 very short.
2275
2282
2276 2003-12-20 Fernando Perez <fperez@colorado.edu>
2283 2003-12-20 Fernando Perez <fperez@colorado.edu>
2277
2284
2278 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2285 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2279 new functionality, to automagically assign the result of a shell
2286 new functionality, to automagically assign the result of a shell
2280 command to a variable. I'll solicit some community feedback on
2287 command to a variable. I'll solicit some community feedback on
2281 this before making it permanent.
2288 this before making it permanent.
2282
2289
2283 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2290 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2284 requested about callables for which inspect couldn't obtain a
2291 requested about callables for which inspect couldn't obtain a
2285 proper argspec. Thanks to a crash report sent by Etienne
2292 proper argspec. Thanks to a crash report sent by Etienne
2286 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2293 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2287
2294
2288 2003-12-09 Fernando Perez <fperez@colorado.edu>
2295 2003-12-09 Fernando Perez <fperez@colorado.edu>
2289
2296
2290 * IPython/genutils.py (page): patch for the pager to work across
2297 * IPython/genutils.py (page): patch for the pager to work across
2291 various versions of Windows. By Gary Bishop.
2298 various versions of Windows. By Gary Bishop.
2292
2299
2293 2003-12-04 Fernando Perez <fperez@colorado.edu>
2300 2003-12-04 Fernando Perez <fperez@colorado.edu>
2294
2301
2295 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2302 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2296 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2303 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2297 While I tested this and it looks ok, there may still be corner
2304 While I tested this and it looks ok, there may still be corner
2298 cases I've missed.
2305 cases I've missed.
2299
2306
2300 2003-12-01 Fernando Perez <fperez@colorado.edu>
2307 2003-12-01 Fernando Perez <fperez@colorado.edu>
2301
2308
2302 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2309 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2303 where a line like 'p,q=1,2' would fail because the automagic
2310 where a line like 'p,q=1,2' would fail because the automagic
2304 system would be triggered for @p.
2311 system would be triggered for @p.
2305
2312
2306 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2313 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2307 cleanups, code unmodified.
2314 cleanups, code unmodified.
2308
2315
2309 * IPython/genutils.py (Term): added a class for IPython to handle
2316 * IPython/genutils.py (Term): added a class for IPython to handle
2310 output. In most cases it will just be a proxy for stdout/err, but
2317 output. In most cases it will just be a proxy for stdout/err, but
2311 having this allows modifications to be made for some platforms,
2318 having this allows modifications to be made for some platforms,
2312 such as handling color escapes under Windows. All of this code
2319 such as handling color escapes under Windows. All of this code
2313 was contributed by Gary Bishop, with minor modifications by me.
2320 was contributed by Gary Bishop, with minor modifications by me.
2314 The actual changes affect many files.
2321 The actual changes affect many files.
2315
2322
2316 2003-11-30 Fernando Perez <fperez@colorado.edu>
2323 2003-11-30 Fernando Perez <fperez@colorado.edu>
2317
2324
2318 * IPython/iplib.py (file_matches): new completion code, courtesy
2325 * IPython/iplib.py (file_matches): new completion code, courtesy
2319 of Jeff Collins. This enables filename completion again under
2326 of Jeff Collins. This enables filename completion again under
2320 python 2.3, which disabled it at the C level.
2327 python 2.3, which disabled it at the C level.
2321
2328
2322 2003-11-11 Fernando Perez <fperez@colorado.edu>
2329 2003-11-11 Fernando Perez <fperez@colorado.edu>
2323
2330
2324 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2331 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2325 for Numeric.array(map(...)), but often convenient.
2332 for Numeric.array(map(...)), but often convenient.
2326
2333
2327 2003-11-05 Fernando Perez <fperez@colorado.edu>
2334 2003-11-05 Fernando Perez <fperez@colorado.edu>
2328
2335
2329 * IPython/numutils.py (frange): Changed a call from int() to
2336 * IPython/numutils.py (frange): Changed a call from int() to
2330 int(round()) to prevent a problem reported with arange() in the
2337 int(round()) to prevent a problem reported with arange() in the
2331 numpy list.
2338 numpy list.
2332
2339
2333 2003-10-06 Fernando Perez <fperez@colorado.edu>
2340 2003-10-06 Fernando Perez <fperez@colorado.edu>
2334
2341
2335 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2342 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2336 prevent crashes if sys lacks an argv attribute (it happens with
2343 prevent crashes if sys lacks an argv attribute (it happens with
2337 embedded interpreters which build a bare-bones sys module).
2344 embedded interpreters which build a bare-bones sys module).
2338 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2345 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2339
2346
2340 2003-09-24 Fernando Perez <fperez@colorado.edu>
2347 2003-09-24 Fernando Perez <fperez@colorado.edu>
2341
2348
2342 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2349 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2343 to protect against poorly written user objects where __getattr__
2350 to protect against poorly written user objects where __getattr__
2344 raises exceptions other than AttributeError. Thanks to a bug
2351 raises exceptions other than AttributeError. Thanks to a bug
2345 report by Oliver Sander <osander-AT-gmx.de>.
2352 report by Oliver Sander <osander-AT-gmx.de>.
2346
2353
2347 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2354 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2348 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2355 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2349
2356
2350 2003-09-09 Fernando Perez <fperez@colorado.edu>
2357 2003-09-09 Fernando Perez <fperez@colorado.edu>
2351
2358
2352 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2359 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2353 unpacking a list whith a callable as first element would
2360 unpacking a list whith a callable as first element would
2354 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2361 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2355 Collins.
2362 Collins.
2356
2363
2357 2003-08-25 *** Released version 0.5.0
2364 2003-08-25 *** Released version 0.5.0
2358
2365
2359 2003-08-22 Fernando Perez <fperez@colorado.edu>
2366 2003-08-22 Fernando Perez <fperez@colorado.edu>
2360
2367
2361 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2368 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2362 improperly defined user exceptions. Thanks to feedback from Mark
2369 improperly defined user exceptions. Thanks to feedback from Mark
2363 Russell <mrussell-AT-verio.net>.
2370 Russell <mrussell-AT-verio.net>.
2364
2371
2365 2003-08-20 Fernando Perez <fperez@colorado.edu>
2372 2003-08-20 Fernando Perez <fperez@colorado.edu>
2366
2373
2367 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2374 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2368 printing so that it would print multi-line string forms starting
2375 printing so that it would print multi-line string forms starting
2369 with a new line. This way the formatting is better respected for
2376 with a new line. This way the formatting is better respected for
2370 objects which work hard to make nice string forms.
2377 objects which work hard to make nice string forms.
2371
2378
2372 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2379 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2373 autocall would overtake data access for objects with both
2380 autocall would overtake data access for objects with both
2374 __getitem__ and __call__.
2381 __getitem__ and __call__.
2375
2382
2376 2003-08-19 *** Released version 0.5.0-rc1
2383 2003-08-19 *** Released version 0.5.0-rc1
2377
2384
2378 2003-08-19 Fernando Perez <fperez@colorado.edu>
2385 2003-08-19 Fernando Perez <fperez@colorado.edu>
2379
2386
2380 * IPython/deep_reload.py (load_tail): single tiny change here
2387 * IPython/deep_reload.py (load_tail): single tiny change here
2381 seems to fix the long-standing bug of dreload() failing to work
2388 seems to fix the long-standing bug of dreload() failing to work
2382 for dotted names. But this module is pretty tricky, so I may have
2389 for dotted names. But this module is pretty tricky, so I may have
2383 missed some subtlety. Needs more testing!.
2390 missed some subtlety. Needs more testing!.
2384
2391
2385 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2392 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2386 exceptions which have badly implemented __str__ methods.
2393 exceptions which have badly implemented __str__ methods.
2387 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2394 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2388 which I've been getting reports about from Python 2.3 users. I
2395 which I've been getting reports about from Python 2.3 users. I
2389 wish I had a simple test case to reproduce the problem, so I could
2396 wish I had a simple test case to reproduce the problem, so I could
2390 either write a cleaner workaround or file a bug report if
2397 either write a cleaner workaround or file a bug report if
2391 necessary.
2398 necessary.
2392
2399
2393 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2400 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2394 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2401 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2395 a bug report by Tjabo Kloppenburg.
2402 a bug report by Tjabo Kloppenburg.
2396
2403
2397 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2404 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2398 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2405 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2399 seems rather unstable. Thanks to a bug report by Tjabo
2406 seems rather unstable. Thanks to a bug report by Tjabo
2400 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2407 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2401
2408
2402 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2409 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2403 this out soon because of the critical fixes in the inner loop for
2410 this out soon because of the critical fixes in the inner loop for
2404 generators.
2411 generators.
2405
2412
2406 * IPython/Magic.py (Magic.getargspec): removed. This (and
2413 * IPython/Magic.py (Magic.getargspec): removed. This (and
2407 _get_def) have been obsoleted by OInspect for a long time, I
2414 _get_def) have been obsoleted by OInspect for a long time, I
2408 hadn't noticed that they were dead code.
2415 hadn't noticed that they were dead code.
2409 (Magic._ofind): restored _ofind functionality for a few literals
2416 (Magic._ofind): restored _ofind functionality for a few literals
2410 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2417 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2411 for things like "hello".capitalize?, since that would require a
2418 for things like "hello".capitalize?, since that would require a
2412 potentially dangerous eval() again.
2419 potentially dangerous eval() again.
2413
2420
2414 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2421 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2415 logic a bit more to clean up the escapes handling and minimize the
2422 logic a bit more to clean up the escapes handling and minimize the
2416 use of _ofind to only necessary cases. The interactive 'feel' of
2423 use of _ofind to only necessary cases. The interactive 'feel' of
2417 IPython should have improved quite a bit with the changes in
2424 IPython should have improved quite a bit with the changes in
2418 _prefilter and _ofind (besides being far safer than before).
2425 _prefilter and _ofind (besides being far safer than before).
2419
2426
2420 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2427 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2421 obscure, never reported). Edit would fail to find the object to
2428 obscure, never reported). Edit would fail to find the object to
2422 edit under some circumstances.
2429 edit under some circumstances.
2423 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2430 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2424 which were causing double-calling of generators. Those eval calls
2431 which were causing double-calling of generators. Those eval calls
2425 were _very_ dangerous, since code with side effects could be
2432 were _very_ dangerous, since code with side effects could be
2426 triggered. As they say, 'eval is evil'... These were the
2433 triggered. As they say, 'eval is evil'... These were the
2427 nastiest evals in IPython. Besides, _ofind is now far simpler,
2434 nastiest evals in IPython. Besides, _ofind is now far simpler,
2428 and it should also be quite a bit faster. Its use of inspect is
2435 and it should also be quite a bit faster. Its use of inspect is
2429 also safer, so perhaps some of the inspect-related crashes I've
2436 also safer, so perhaps some of the inspect-related crashes I've
2430 seen lately with Python 2.3 might be taken care of. That will
2437 seen lately with Python 2.3 might be taken care of. That will
2431 need more testing.
2438 need more testing.
2432
2439
2433 2003-08-17 Fernando Perez <fperez@colorado.edu>
2440 2003-08-17 Fernando Perez <fperez@colorado.edu>
2434
2441
2435 * IPython/iplib.py (InteractiveShell._prefilter): significant
2442 * IPython/iplib.py (InteractiveShell._prefilter): significant
2436 simplifications to the logic for handling user escapes. Faster
2443 simplifications to the logic for handling user escapes. Faster
2437 and simpler code.
2444 and simpler code.
2438
2445
2439 2003-08-14 Fernando Perez <fperez@colorado.edu>
2446 2003-08-14 Fernando Perez <fperez@colorado.edu>
2440
2447
2441 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2448 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2442 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2449 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2443 but it should be quite a bit faster. And the recursive version
2450 but it should be quite a bit faster. And the recursive version
2444 generated O(log N) intermediate storage for all rank>1 arrays,
2451 generated O(log N) intermediate storage for all rank>1 arrays,
2445 even if they were contiguous.
2452 even if they were contiguous.
2446 (l1norm): Added this function.
2453 (l1norm): Added this function.
2447 (norm): Added this function for arbitrary norms (including
2454 (norm): Added this function for arbitrary norms (including
2448 l-infinity). l1 and l2 are still special cases for convenience
2455 l-infinity). l1 and l2 are still special cases for convenience
2449 and speed.
2456 and speed.
2450
2457
2451 2003-08-03 Fernando Perez <fperez@colorado.edu>
2458 2003-08-03 Fernando Perez <fperez@colorado.edu>
2452
2459
2453 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2460 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2454 exceptions, which now raise PendingDeprecationWarnings in Python
2461 exceptions, which now raise PendingDeprecationWarnings in Python
2455 2.3. There were some in Magic and some in Gnuplot2.
2462 2.3. There were some in Magic and some in Gnuplot2.
2456
2463
2457 2003-06-30 Fernando Perez <fperez@colorado.edu>
2464 2003-06-30 Fernando Perez <fperez@colorado.edu>
2458
2465
2459 * IPython/genutils.py (page): modified to call curses only for
2466 * IPython/genutils.py (page): modified to call curses only for
2460 terminals where TERM=='xterm'. After problems under many other
2467 terminals where TERM=='xterm'. After problems under many other
2461 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2468 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2462
2469
2463 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2470 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2464 would be triggered when readline was absent. This was just an old
2471 would be triggered when readline was absent. This was just an old
2465 debugging statement I'd forgotten to take out.
2472 debugging statement I'd forgotten to take out.
2466
2473
2467 2003-06-20 Fernando Perez <fperez@colorado.edu>
2474 2003-06-20 Fernando Perez <fperez@colorado.edu>
2468
2475
2469 * IPython/genutils.py (clock): modified to return only user time
2476 * IPython/genutils.py (clock): modified to return only user time
2470 (not counting system time), after a discussion on scipy. While
2477 (not counting system time), after a discussion on scipy. While
2471 system time may be a useful quantity occasionally, it may much
2478 system time may be a useful quantity occasionally, it may much
2472 more easily be skewed by occasional swapping or other similar
2479 more easily be skewed by occasional swapping or other similar
2473 activity.
2480 activity.
2474
2481
2475 2003-06-05 Fernando Perez <fperez@colorado.edu>
2482 2003-06-05 Fernando Perez <fperez@colorado.edu>
2476
2483
2477 * IPython/numutils.py (identity): new function, for building
2484 * IPython/numutils.py (identity): new function, for building
2478 arbitrary rank Kronecker deltas (mostly backwards compatible with
2485 arbitrary rank Kronecker deltas (mostly backwards compatible with
2479 Numeric.identity)
2486 Numeric.identity)
2480
2487
2481 2003-06-03 Fernando Perez <fperez@colorado.edu>
2488 2003-06-03 Fernando Perez <fperez@colorado.edu>
2482
2489
2483 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2490 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2484 arguments passed to magics with spaces, to allow trailing '\' to
2491 arguments passed to magics with spaces, to allow trailing '\' to
2485 work normally (mainly for Windows users).
2492 work normally (mainly for Windows users).
2486
2493
2487 2003-05-29 Fernando Perez <fperez@colorado.edu>
2494 2003-05-29 Fernando Perez <fperez@colorado.edu>
2488
2495
2489 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2496 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2490 instead of pydoc.help. This fixes a bizarre behavior where
2497 instead of pydoc.help. This fixes a bizarre behavior where
2491 printing '%s' % locals() would trigger the help system. Now
2498 printing '%s' % locals() would trigger the help system. Now
2492 ipython behaves like normal python does.
2499 ipython behaves like normal python does.
2493
2500
2494 Note that if one does 'from pydoc import help', the bizarre
2501 Note that if one does 'from pydoc import help', the bizarre
2495 behavior returns, but this will also happen in normal python, so
2502 behavior returns, but this will also happen in normal python, so
2496 it's not an ipython bug anymore (it has to do with how pydoc.help
2503 it's not an ipython bug anymore (it has to do with how pydoc.help
2497 is implemented).
2504 is implemented).
2498
2505
2499 2003-05-22 Fernando Perez <fperez@colorado.edu>
2506 2003-05-22 Fernando Perez <fperez@colorado.edu>
2500
2507
2501 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2508 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2502 return [] instead of None when nothing matches, also match to end
2509 return [] instead of None when nothing matches, also match to end
2503 of line. Patch by Gary Bishop.
2510 of line. Patch by Gary Bishop.
2504
2511
2505 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2512 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2506 protection as before, for files passed on the command line. This
2513 protection as before, for files passed on the command line. This
2507 prevents the CrashHandler from kicking in if user files call into
2514 prevents the CrashHandler from kicking in if user files call into
2508 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2515 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2509 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2516 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2510
2517
2511 2003-05-20 *** Released version 0.4.0
2518 2003-05-20 *** Released version 0.4.0
2512
2519
2513 2003-05-20 Fernando Perez <fperez@colorado.edu>
2520 2003-05-20 Fernando Perez <fperez@colorado.edu>
2514
2521
2515 * setup.py: added support for manpages. It's a bit hackish b/c of
2522 * setup.py: added support for manpages. It's a bit hackish b/c of
2516 a bug in the way the bdist_rpm distutils target handles gzipped
2523 a bug in the way the bdist_rpm distutils target handles gzipped
2517 manpages, but it works. After a patch by Jack.
2524 manpages, but it works. After a patch by Jack.
2518
2525
2519 2003-05-19 Fernando Perez <fperez@colorado.edu>
2526 2003-05-19 Fernando Perez <fperez@colorado.edu>
2520
2527
2521 * IPython/numutils.py: added a mockup of the kinds module, since
2528 * IPython/numutils.py: added a mockup of the kinds module, since
2522 it was recently removed from Numeric. This way, numutils will
2529 it was recently removed from Numeric. This way, numutils will
2523 work for all users even if they are missing kinds.
2530 work for all users even if they are missing kinds.
2524
2531
2525 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2532 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2526 failure, which can occur with SWIG-wrapped extensions. After a
2533 failure, which can occur with SWIG-wrapped extensions. After a
2527 crash report from Prabhu.
2534 crash report from Prabhu.
2528
2535
2529 2003-05-16 Fernando Perez <fperez@colorado.edu>
2536 2003-05-16 Fernando Perez <fperez@colorado.edu>
2530
2537
2531 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2538 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2532 protect ipython from user code which may call directly
2539 protect ipython from user code which may call directly
2533 sys.excepthook (this looks like an ipython crash to the user, even
2540 sys.excepthook (this looks like an ipython crash to the user, even
2534 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2541 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2535 This is especially important to help users of WxWindows, but may
2542 This is especially important to help users of WxWindows, but may
2536 also be useful in other cases.
2543 also be useful in other cases.
2537
2544
2538 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2545 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2539 an optional tb_offset to be specified, and to preserve exception
2546 an optional tb_offset to be specified, and to preserve exception
2540 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2547 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2541
2548
2542 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2549 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2543
2550
2544 2003-05-15 Fernando Perez <fperez@colorado.edu>
2551 2003-05-15 Fernando Perez <fperez@colorado.edu>
2545
2552
2546 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2553 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2547 installing for a new user under Windows.
2554 installing for a new user under Windows.
2548
2555
2549 2003-05-12 Fernando Perez <fperez@colorado.edu>
2556 2003-05-12 Fernando Perez <fperez@colorado.edu>
2550
2557
2551 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2558 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2552 handler for Emacs comint-based lines. Currently it doesn't do
2559 handler for Emacs comint-based lines. Currently it doesn't do
2553 much (but importantly, it doesn't update the history cache). In
2560 much (but importantly, it doesn't update the history cache). In
2554 the future it may be expanded if Alex needs more functionality
2561 the future it may be expanded if Alex needs more functionality
2555 there.
2562 there.
2556
2563
2557 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2564 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2558 info to crash reports.
2565 info to crash reports.
2559
2566
2560 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2567 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2561 just like Python's -c. Also fixed crash with invalid -color
2568 just like Python's -c. Also fixed crash with invalid -color
2562 option value at startup. Thanks to Will French
2569 option value at startup. Thanks to Will French
2563 <wfrench-AT-bestweb.net> for the bug report.
2570 <wfrench-AT-bestweb.net> for the bug report.
2564
2571
2565 2003-05-09 Fernando Perez <fperez@colorado.edu>
2572 2003-05-09 Fernando Perez <fperez@colorado.edu>
2566
2573
2567 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2574 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2568 to EvalDict (it's a mapping, after all) and simplified its code
2575 to EvalDict (it's a mapping, after all) and simplified its code
2569 quite a bit, after a nice discussion on c.l.py where Gustavo
2576 quite a bit, after a nice discussion on c.l.py where Gustavo
2570 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2577 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2571
2578
2572 2003-04-30 Fernando Perez <fperez@colorado.edu>
2579 2003-04-30 Fernando Perez <fperez@colorado.edu>
2573
2580
2574 * IPython/genutils.py (timings_out): modified it to reduce its
2581 * IPython/genutils.py (timings_out): modified it to reduce its
2575 overhead in the common reps==1 case.
2582 overhead in the common reps==1 case.
2576
2583
2577 2003-04-29 Fernando Perez <fperez@colorado.edu>
2584 2003-04-29 Fernando Perez <fperez@colorado.edu>
2578
2585
2579 * IPython/genutils.py (timings_out): Modified to use the resource
2586 * IPython/genutils.py (timings_out): Modified to use the resource
2580 module, which avoids the wraparound problems of time.clock().
2587 module, which avoids the wraparound problems of time.clock().
2581
2588
2582 2003-04-17 *** Released version 0.2.15pre4
2589 2003-04-17 *** Released version 0.2.15pre4
2583
2590
2584 2003-04-17 Fernando Perez <fperez@colorado.edu>
2591 2003-04-17 Fernando Perez <fperez@colorado.edu>
2585
2592
2586 * setup.py (scriptfiles): Split windows-specific stuff over to a
2593 * setup.py (scriptfiles): Split windows-specific stuff over to a
2587 separate file, in an attempt to have a Windows GUI installer.
2594 separate file, in an attempt to have a Windows GUI installer.
2588 That didn't work, but part of the groundwork is done.
2595 That didn't work, but part of the groundwork is done.
2589
2596
2590 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2597 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2591 indent/unindent with 4 spaces. Particularly useful in combination
2598 indent/unindent with 4 spaces. Particularly useful in combination
2592 with the new auto-indent option.
2599 with the new auto-indent option.
2593
2600
2594 2003-04-16 Fernando Perez <fperez@colorado.edu>
2601 2003-04-16 Fernando Perez <fperez@colorado.edu>
2595
2602
2596 * IPython/Magic.py: various replacements of self.rc for
2603 * IPython/Magic.py: various replacements of self.rc for
2597 self.shell.rc. A lot more remains to be done to fully disentangle
2604 self.shell.rc. A lot more remains to be done to fully disentangle
2598 this class from the main Shell class.
2605 this class from the main Shell class.
2599
2606
2600 * IPython/GnuplotRuntime.py: added checks for mouse support so
2607 * IPython/GnuplotRuntime.py: added checks for mouse support so
2601 that we don't try to enable it if the current gnuplot doesn't
2608 that we don't try to enable it if the current gnuplot doesn't
2602 really support it. Also added checks so that we don't try to
2609 really support it. Also added checks so that we don't try to
2603 enable persist under Windows (where Gnuplot doesn't recognize the
2610 enable persist under Windows (where Gnuplot doesn't recognize the
2604 option).
2611 option).
2605
2612
2606 * IPython/iplib.py (InteractiveShell.interact): Added optional
2613 * IPython/iplib.py (InteractiveShell.interact): Added optional
2607 auto-indenting code, after a patch by King C. Shu
2614 auto-indenting code, after a patch by King C. Shu
2608 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2615 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2609 get along well with pasting indented code. If I ever figure out
2616 get along well with pasting indented code. If I ever figure out
2610 how to make that part go well, it will become on by default.
2617 how to make that part go well, it will become on by default.
2611
2618
2612 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2619 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2613 crash ipython if there was an unmatched '%' in the user's prompt
2620 crash ipython if there was an unmatched '%' in the user's prompt
2614 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2621 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2615
2622
2616 * IPython/iplib.py (InteractiveShell.interact): removed the
2623 * IPython/iplib.py (InteractiveShell.interact): removed the
2617 ability to ask the user whether he wants to crash or not at the
2624 ability to ask the user whether he wants to crash or not at the
2618 'last line' exception handler. Calling functions at that point
2625 'last line' exception handler. Calling functions at that point
2619 changes the stack, and the error reports would have incorrect
2626 changes the stack, and the error reports would have incorrect
2620 tracebacks.
2627 tracebacks.
2621
2628
2622 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2629 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2623 pass through a peger a pretty-printed form of any object. After a
2630 pass through a peger a pretty-printed form of any object. After a
2624 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2631 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2625
2632
2626 2003-04-14 Fernando Perez <fperez@colorado.edu>
2633 2003-04-14 Fernando Perez <fperez@colorado.edu>
2627
2634
2628 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2635 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2629 all files in ~ would be modified at first install (instead of
2636 all files in ~ would be modified at first install (instead of
2630 ~/.ipython). This could be potentially disastrous, as the
2637 ~/.ipython). This could be potentially disastrous, as the
2631 modification (make line-endings native) could damage binary files.
2638 modification (make line-endings native) could damage binary files.
2632
2639
2633 2003-04-10 Fernando Perez <fperez@colorado.edu>
2640 2003-04-10 Fernando Perez <fperez@colorado.edu>
2634
2641
2635 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2642 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2636 handle only lines which are invalid python. This now means that
2643 handle only lines which are invalid python. This now means that
2637 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2644 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2638 for the bug report.
2645 for the bug report.
2639
2646
2640 2003-04-01 Fernando Perez <fperez@colorado.edu>
2647 2003-04-01 Fernando Perez <fperez@colorado.edu>
2641
2648
2642 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2649 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2643 where failing to set sys.last_traceback would crash pdb.pm().
2650 where failing to set sys.last_traceback would crash pdb.pm().
2644 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2651 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2645 report.
2652 report.
2646
2653
2647 2003-03-25 Fernando Perez <fperez@colorado.edu>
2654 2003-03-25 Fernando Perez <fperez@colorado.edu>
2648
2655
2649 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2656 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2650 before printing it (it had a lot of spurious blank lines at the
2657 before printing it (it had a lot of spurious blank lines at the
2651 end).
2658 end).
2652
2659
2653 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2660 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2654 output would be sent 21 times! Obviously people don't use this
2661 output would be sent 21 times! Obviously people don't use this
2655 too often, or I would have heard about it.
2662 too often, or I would have heard about it.
2656
2663
2657 2003-03-24 Fernando Perez <fperez@colorado.edu>
2664 2003-03-24 Fernando Perez <fperez@colorado.edu>
2658
2665
2659 * setup.py (scriptfiles): renamed the data_files parameter from
2666 * setup.py (scriptfiles): renamed the data_files parameter from
2660 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2667 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2661 for the patch.
2668 for the patch.
2662
2669
2663 2003-03-20 Fernando Perez <fperez@colorado.edu>
2670 2003-03-20 Fernando Perez <fperez@colorado.edu>
2664
2671
2665 * IPython/genutils.py (error): added error() and fatal()
2672 * IPython/genutils.py (error): added error() and fatal()
2666 functions.
2673 functions.
2667
2674
2668 2003-03-18 *** Released version 0.2.15pre3
2675 2003-03-18 *** Released version 0.2.15pre3
2669
2676
2670 2003-03-18 Fernando Perez <fperez@colorado.edu>
2677 2003-03-18 Fernando Perez <fperez@colorado.edu>
2671
2678
2672 * setupext/install_data_ext.py
2679 * setupext/install_data_ext.py
2673 (install_data_ext.initialize_options): Class contributed by Jack
2680 (install_data_ext.initialize_options): Class contributed by Jack
2674 Moffit for fixing the old distutils hack. He is sending this to
2681 Moffit for fixing the old distutils hack. He is sending this to
2675 the distutils folks so in the future we may not need it as a
2682 the distutils folks so in the future we may not need it as a
2676 private fix.
2683 private fix.
2677
2684
2678 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2685 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2679 changes for Debian packaging. See his patch for full details.
2686 changes for Debian packaging. See his patch for full details.
2680 The old distutils hack of making the ipythonrc* files carry a
2687 The old distutils hack of making the ipythonrc* files carry a
2681 bogus .py extension is gone, at last. Examples were moved to a
2688 bogus .py extension is gone, at last. Examples were moved to a
2682 separate subdir under doc/, and the separate executable scripts
2689 separate subdir under doc/, and the separate executable scripts
2683 now live in their own directory. Overall a great cleanup. The
2690 now live in their own directory. Overall a great cleanup. The
2684 manual was updated to use the new files, and setup.py has been
2691 manual was updated to use the new files, and setup.py has been
2685 fixed for this setup.
2692 fixed for this setup.
2686
2693
2687 * IPython/PyColorize.py (Parser.usage): made non-executable and
2694 * IPython/PyColorize.py (Parser.usage): made non-executable and
2688 created a pycolor wrapper around it to be included as a script.
2695 created a pycolor wrapper around it to be included as a script.
2689
2696
2690 2003-03-12 *** Released version 0.2.15pre2
2697 2003-03-12 *** Released version 0.2.15pre2
2691
2698
2692 2003-03-12 Fernando Perez <fperez@colorado.edu>
2699 2003-03-12 Fernando Perez <fperez@colorado.edu>
2693
2700
2694 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2701 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2695 long-standing problem with garbage characters in some terminals.
2702 long-standing problem with garbage characters in some terminals.
2696 The issue was really that the \001 and \002 escapes must _only_ be
2703 The issue was really that the \001 and \002 escapes must _only_ be
2697 passed to input prompts (which call readline), but _never_ to
2704 passed to input prompts (which call readline), but _never_ to
2698 normal text to be printed on screen. I changed ColorANSI to have
2705 normal text to be printed on screen. I changed ColorANSI to have
2699 two classes: TermColors and InputTermColors, each with the
2706 two classes: TermColors and InputTermColors, each with the
2700 appropriate escapes for input prompts or normal text. The code in
2707 appropriate escapes for input prompts or normal text. The code in
2701 Prompts.py got slightly more complicated, but this very old and
2708 Prompts.py got slightly more complicated, but this very old and
2702 annoying bug is finally fixed.
2709 annoying bug is finally fixed.
2703
2710
2704 All the credit for nailing down the real origin of this problem
2711 All the credit for nailing down the real origin of this problem
2705 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2712 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2706 *Many* thanks to him for spending quite a bit of effort on this.
2713 *Many* thanks to him for spending quite a bit of effort on this.
2707
2714
2708 2003-03-05 *** Released version 0.2.15pre1
2715 2003-03-05 *** Released version 0.2.15pre1
2709
2716
2710 2003-03-03 Fernando Perez <fperez@colorado.edu>
2717 2003-03-03 Fernando Perez <fperez@colorado.edu>
2711
2718
2712 * IPython/FakeModule.py: Moved the former _FakeModule to a
2719 * IPython/FakeModule.py: Moved the former _FakeModule to a
2713 separate file, because it's also needed by Magic (to fix a similar
2720 separate file, because it's also needed by Magic (to fix a similar
2714 pickle-related issue in @run).
2721 pickle-related issue in @run).
2715
2722
2716 2003-03-02 Fernando Perez <fperez@colorado.edu>
2723 2003-03-02 Fernando Perez <fperez@colorado.edu>
2717
2724
2718 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2725 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2719 the autocall option at runtime.
2726 the autocall option at runtime.
2720 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2727 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2721 across Magic.py to start separating Magic from InteractiveShell.
2728 across Magic.py to start separating Magic from InteractiveShell.
2722 (Magic._ofind): Fixed to return proper namespace for dotted
2729 (Magic._ofind): Fixed to return proper namespace for dotted
2723 names. Before, a dotted name would always return 'not currently
2730 names. Before, a dotted name would always return 'not currently
2724 defined', because it would find the 'parent'. s.x would be found,
2731 defined', because it would find the 'parent'. s.x would be found,
2725 but since 'x' isn't defined by itself, it would get confused.
2732 but since 'x' isn't defined by itself, it would get confused.
2726 (Magic.magic_run): Fixed pickling problems reported by Ralf
2733 (Magic.magic_run): Fixed pickling problems reported by Ralf
2727 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2734 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2728 that I'd used when Mike Heeter reported similar issues at the
2735 that I'd used when Mike Heeter reported similar issues at the
2729 top-level, but now for @run. It boils down to injecting the
2736 top-level, but now for @run. It boils down to injecting the
2730 namespace where code is being executed with something that looks
2737 namespace where code is being executed with something that looks
2731 enough like a module to fool pickle.dump(). Since a pickle stores
2738 enough like a module to fool pickle.dump(). Since a pickle stores
2732 a named reference to the importing module, we need this for
2739 a named reference to the importing module, we need this for
2733 pickles to save something sensible.
2740 pickles to save something sensible.
2734
2741
2735 * IPython/ipmaker.py (make_IPython): added an autocall option.
2742 * IPython/ipmaker.py (make_IPython): added an autocall option.
2736
2743
2737 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2744 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2738 the auto-eval code. Now autocalling is an option, and the code is
2745 the auto-eval code. Now autocalling is an option, and the code is
2739 also vastly safer. There is no more eval() involved at all.
2746 also vastly safer. There is no more eval() involved at all.
2740
2747
2741 2003-03-01 Fernando Perez <fperez@colorado.edu>
2748 2003-03-01 Fernando Perez <fperez@colorado.edu>
2742
2749
2743 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2750 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2744 dict with named keys instead of a tuple.
2751 dict with named keys instead of a tuple.
2745
2752
2746 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2753 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2747
2754
2748 * setup.py (make_shortcut): Fixed message about directories
2755 * setup.py (make_shortcut): Fixed message about directories
2749 created during Windows installation (the directories were ok, just
2756 created during Windows installation (the directories were ok, just
2750 the printed message was misleading). Thanks to Chris Liechti
2757 the printed message was misleading). Thanks to Chris Liechti
2751 <cliechti-AT-gmx.net> for the heads up.
2758 <cliechti-AT-gmx.net> for the heads up.
2752
2759
2753 2003-02-21 Fernando Perez <fperez@colorado.edu>
2760 2003-02-21 Fernando Perez <fperez@colorado.edu>
2754
2761
2755 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2762 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2756 of ValueError exception when checking for auto-execution. This
2763 of ValueError exception when checking for auto-execution. This
2757 one is raised by things like Numeric arrays arr.flat when the
2764 one is raised by things like Numeric arrays arr.flat when the
2758 array is non-contiguous.
2765 array is non-contiguous.
2759
2766
2760 2003-01-31 Fernando Perez <fperez@colorado.edu>
2767 2003-01-31 Fernando Perez <fperez@colorado.edu>
2761
2768
2762 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2769 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2763 not return any value at all (even though the command would get
2770 not return any value at all (even though the command would get
2764 executed).
2771 executed).
2765 (xsys): Flush stdout right after printing the command to ensure
2772 (xsys): Flush stdout right after printing the command to ensure
2766 proper ordering of commands and command output in the total
2773 proper ordering of commands and command output in the total
2767 output.
2774 output.
2768 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2775 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2769 system/getoutput as defaults. The old ones are kept for
2776 system/getoutput as defaults. The old ones are kept for
2770 compatibility reasons, so no code which uses this library needs
2777 compatibility reasons, so no code which uses this library needs
2771 changing.
2778 changing.
2772
2779
2773 2003-01-27 *** Released version 0.2.14
2780 2003-01-27 *** Released version 0.2.14
2774
2781
2775 2003-01-25 Fernando Perez <fperez@colorado.edu>
2782 2003-01-25 Fernando Perez <fperez@colorado.edu>
2776
2783
2777 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2784 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2778 functions defined in previous edit sessions could not be re-edited
2785 functions defined in previous edit sessions could not be re-edited
2779 (because the temp files were immediately removed). Now temp files
2786 (because the temp files were immediately removed). Now temp files
2780 are removed only at IPython's exit.
2787 are removed only at IPython's exit.
2781 (Magic.magic_run): Improved @run to perform shell-like expansions
2788 (Magic.magic_run): Improved @run to perform shell-like expansions
2782 on its arguments (~users and $VARS). With this, @run becomes more
2789 on its arguments (~users and $VARS). With this, @run becomes more
2783 like a normal command-line.
2790 like a normal command-line.
2784
2791
2785 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2792 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2786 bugs related to embedding and cleaned up that code. A fairly
2793 bugs related to embedding and cleaned up that code. A fairly
2787 important one was the impossibility to access the global namespace
2794 important one was the impossibility to access the global namespace
2788 through the embedded IPython (only local variables were visible).
2795 through the embedded IPython (only local variables were visible).
2789
2796
2790 2003-01-14 Fernando Perez <fperez@colorado.edu>
2797 2003-01-14 Fernando Perez <fperez@colorado.edu>
2791
2798
2792 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2799 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2793 auto-calling to be a bit more conservative. Now it doesn't get
2800 auto-calling to be a bit more conservative. Now it doesn't get
2794 triggered if any of '!=()<>' are in the rest of the input line, to
2801 triggered if any of '!=()<>' are in the rest of the input line, to
2795 allow comparing callables. Thanks to Alex for the heads up.
2802 allow comparing callables. Thanks to Alex for the heads up.
2796
2803
2797 2003-01-07 Fernando Perez <fperez@colorado.edu>
2804 2003-01-07 Fernando Perez <fperez@colorado.edu>
2798
2805
2799 * IPython/genutils.py (page): fixed estimation of the number of
2806 * IPython/genutils.py (page): fixed estimation of the number of
2800 lines in a string to be paged to simply count newlines. This
2807 lines in a string to be paged to simply count newlines. This
2801 prevents over-guessing due to embedded escape sequences. A better
2808 prevents over-guessing due to embedded escape sequences. A better
2802 long-term solution would involve stripping out the control chars
2809 long-term solution would involve stripping out the control chars
2803 for the count, but it's potentially so expensive I just don't
2810 for the count, but it's potentially so expensive I just don't
2804 think it's worth doing.
2811 think it's worth doing.
2805
2812
2806 2002-12-19 *** Released version 0.2.14pre50
2813 2002-12-19 *** Released version 0.2.14pre50
2807
2814
2808 2002-12-19 Fernando Perez <fperez@colorado.edu>
2815 2002-12-19 Fernando Perez <fperez@colorado.edu>
2809
2816
2810 * tools/release (version): Changed release scripts to inform
2817 * tools/release (version): Changed release scripts to inform
2811 Andrea and build a NEWS file with a list of recent changes.
2818 Andrea and build a NEWS file with a list of recent changes.
2812
2819
2813 * IPython/ColorANSI.py (__all__): changed terminal detection
2820 * IPython/ColorANSI.py (__all__): changed terminal detection
2814 code. Seems to work better for xterms without breaking
2821 code. Seems to work better for xterms without breaking
2815 konsole. Will need more testing to determine if WinXP and Mac OSX
2822 konsole. Will need more testing to determine if WinXP and Mac OSX
2816 also work ok.
2823 also work ok.
2817
2824
2818 2002-12-18 *** Released version 0.2.14pre49
2825 2002-12-18 *** Released version 0.2.14pre49
2819
2826
2820 2002-12-18 Fernando Perez <fperez@colorado.edu>
2827 2002-12-18 Fernando Perez <fperez@colorado.edu>
2821
2828
2822 * Docs: added new info about Mac OSX, from Andrea.
2829 * Docs: added new info about Mac OSX, from Andrea.
2823
2830
2824 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2831 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2825 allow direct plotting of python strings whose format is the same
2832 allow direct plotting of python strings whose format is the same
2826 of gnuplot data files.
2833 of gnuplot data files.
2827
2834
2828 2002-12-16 Fernando Perez <fperez@colorado.edu>
2835 2002-12-16 Fernando Perez <fperez@colorado.edu>
2829
2836
2830 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2837 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2831 value of exit question to be acknowledged.
2838 value of exit question to be acknowledged.
2832
2839
2833 2002-12-03 Fernando Perez <fperez@colorado.edu>
2840 2002-12-03 Fernando Perez <fperez@colorado.edu>
2834
2841
2835 * IPython/ipmaker.py: removed generators, which had been added
2842 * IPython/ipmaker.py: removed generators, which had been added
2836 by mistake in an earlier debugging run. This was causing trouble
2843 by mistake in an earlier debugging run. This was causing trouble
2837 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2844 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2838 for pointing this out.
2845 for pointing this out.
2839
2846
2840 2002-11-17 Fernando Perez <fperez@colorado.edu>
2847 2002-11-17 Fernando Perez <fperez@colorado.edu>
2841
2848
2842 * Manual: updated the Gnuplot section.
2849 * Manual: updated the Gnuplot section.
2843
2850
2844 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2851 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2845 a much better split of what goes in Runtime and what goes in
2852 a much better split of what goes in Runtime and what goes in
2846 Interactive.
2853 Interactive.
2847
2854
2848 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2855 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2849 being imported from iplib.
2856 being imported from iplib.
2850
2857
2851 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2858 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2852 for command-passing. Now the global Gnuplot instance is called
2859 for command-passing. Now the global Gnuplot instance is called
2853 'gp' instead of 'g', which was really a far too fragile and
2860 'gp' instead of 'g', which was really a far too fragile and
2854 common name.
2861 common name.
2855
2862
2856 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2863 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2857 bounding boxes generated by Gnuplot for square plots.
2864 bounding boxes generated by Gnuplot for square plots.
2858
2865
2859 * IPython/genutils.py (popkey): new function added. I should
2866 * IPython/genutils.py (popkey): new function added. I should
2860 suggest this on c.l.py as a dict method, it seems useful.
2867 suggest this on c.l.py as a dict method, it seems useful.
2861
2868
2862 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2869 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2863 to transparently handle PostScript generation. MUCH better than
2870 to transparently handle PostScript generation. MUCH better than
2864 the previous plot_eps/replot_eps (which I removed now). The code
2871 the previous plot_eps/replot_eps (which I removed now). The code
2865 is also fairly clean and well documented now (including
2872 is also fairly clean and well documented now (including
2866 docstrings).
2873 docstrings).
2867
2874
2868 2002-11-13 Fernando Perez <fperez@colorado.edu>
2875 2002-11-13 Fernando Perez <fperez@colorado.edu>
2869
2876
2870 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2877 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2871 (inconsistent with options).
2878 (inconsistent with options).
2872
2879
2873 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2880 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2874 manually disabled, I don't know why. Fixed it.
2881 manually disabled, I don't know why. Fixed it.
2875 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2882 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2876 eps output.
2883 eps output.
2877
2884
2878 2002-11-12 Fernando Perez <fperez@colorado.edu>
2885 2002-11-12 Fernando Perez <fperez@colorado.edu>
2879
2886
2880 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2887 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2881 don't propagate up to caller. Fixes crash reported by François
2888 don't propagate up to caller. Fixes crash reported by François
2882 Pinard.
2889 Pinard.
2883
2890
2884 2002-11-09 Fernando Perez <fperez@colorado.edu>
2891 2002-11-09 Fernando Perez <fperez@colorado.edu>
2885
2892
2886 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2893 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2887 history file for new users.
2894 history file for new users.
2888 (make_IPython): fixed bug where initial install would leave the
2895 (make_IPython): fixed bug where initial install would leave the
2889 user running in the .ipython dir.
2896 user running in the .ipython dir.
2890 (make_IPython): fixed bug where config dir .ipython would be
2897 (make_IPython): fixed bug where config dir .ipython would be
2891 created regardless of the given -ipythondir option. Thanks to Cory
2898 created regardless of the given -ipythondir option. Thanks to Cory
2892 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2899 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2893
2900
2894 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2901 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2895 type confirmations. Will need to use it in all of IPython's code
2902 type confirmations. Will need to use it in all of IPython's code
2896 consistently.
2903 consistently.
2897
2904
2898 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2905 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2899 context to print 31 lines instead of the default 5. This will make
2906 context to print 31 lines instead of the default 5. This will make
2900 the crash reports extremely detailed in case the problem is in
2907 the crash reports extremely detailed in case the problem is in
2901 libraries I don't have access to.
2908 libraries I don't have access to.
2902
2909
2903 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2910 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2904 line of defense' code to still crash, but giving users fair
2911 line of defense' code to still crash, but giving users fair
2905 warning. I don't want internal errors to go unreported: if there's
2912 warning. I don't want internal errors to go unreported: if there's
2906 an internal problem, IPython should crash and generate a full
2913 an internal problem, IPython should crash and generate a full
2907 report.
2914 report.
2908
2915
2909 2002-11-08 Fernando Perez <fperez@colorado.edu>
2916 2002-11-08 Fernando Perez <fperez@colorado.edu>
2910
2917
2911 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2918 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2912 otherwise uncaught exceptions which can appear if people set
2919 otherwise uncaught exceptions which can appear if people set
2913 sys.stdout to something badly broken. Thanks to a crash report
2920 sys.stdout to something badly broken. Thanks to a crash report
2914 from henni-AT-mail.brainbot.com.
2921 from henni-AT-mail.brainbot.com.
2915
2922
2916 2002-11-04 Fernando Perez <fperez@colorado.edu>
2923 2002-11-04 Fernando Perez <fperez@colorado.edu>
2917
2924
2918 * IPython/iplib.py (InteractiveShell.interact): added
2925 * IPython/iplib.py (InteractiveShell.interact): added
2919 __IPYTHON__active to the builtins. It's a flag which goes on when
2926 __IPYTHON__active to the builtins. It's a flag which goes on when
2920 the interaction starts and goes off again when it stops. This
2927 the interaction starts and goes off again when it stops. This
2921 allows embedding code to detect being inside IPython. Before this
2928 allows embedding code to detect being inside IPython. Before this
2922 was done via __IPYTHON__, but that only shows that an IPython
2929 was done via __IPYTHON__, but that only shows that an IPython
2923 instance has been created.
2930 instance has been created.
2924
2931
2925 * IPython/Magic.py (Magic.magic_env): I realized that in a
2932 * IPython/Magic.py (Magic.magic_env): I realized that in a
2926 UserDict, instance.data holds the data as a normal dict. So I
2933 UserDict, instance.data holds the data as a normal dict. So I
2927 modified @env to return os.environ.data instead of rebuilding a
2934 modified @env to return os.environ.data instead of rebuilding a
2928 dict by hand.
2935 dict by hand.
2929
2936
2930 2002-11-02 Fernando Perez <fperez@colorado.edu>
2937 2002-11-02 Fernando Perez <fperez@colorado.edu>
2931
2938
2932 * IPython/genutils.py (warn): changed so that level 1 prints no
2939 * IPython/genutils.py (warn): changed so that level 1 prints no
2933 header. Level 2 is now the default (with 'WARNING' header, as
2940 header. Level 2 is now the default (with 'WARNING' header, as
2934 before). I think I tracked all places where changes were needed in
2941 before). I think I tracked all places where changes were needed in
2935 IPython, but outside code using the old level numbering may have
2942 IPython, but outside code using the old level numbering may have
2936 broken.
2943 broken.
2937
2944
2938 * IPython/iplib.py (InteractiveShell.runcode): added this to
2945 * IPython/iplib.py (InteractiveShell.runcode): added this to
2939 handle the tracebacks in SystemExit traps correctly. The previous
2946 handle the tracebacks in SystemExit traps correctly. The previous
2940 code (through interact) was printing more of the stack than
2947 code (through interact) was printing more of the stack than
2941 necessary, showing IPython internal code to the user.
2948 necessary, showing IPython internal code to the user.
2942
2949
2943 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2950 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2944 default. Now that the default at the confirmation prompt is yes,
2951 default. Now that the default at the confirmation prompt is yes,
2945 it's not so intrusive. François' argument that ipython sessions
2952 it's not so intrusive. François' argument that ipython sessions
2946 tend to be complex enough not to lose them from an accidental C-d,
2953 tend to be complex enough not to lose them from an accidental C-d,
2947 is a valid one.
2954 is a valid one.
2948
2955
2949 * IPython/iplib.py (InteractiveShell.interact): added a
2956 * IPython/iplib.py (InteractiveShell.interact): added a
2950 showtraceback() call to the SystemExit trap, and modified the exit
2957 showtraceback() call to the SystemExit trap, and modified the exit
2951 confirmation to have yes as the default.
2958 confirmation to have yes as the default.
2952
2959
2953 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2960 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2954 this file. It's been gone from the code for a long time, this was
2961 this file. It's been gone from the code for a long time, this was
2955 simply leftover junk.
2962 simply leftover junk.
2956
2963
2957 2002-11-01 Fernando Perez <fperez@colorado.edu>
2964 2002-11-01 Fernando Perez <fperez@colorado.edu>
2958
2965
2959 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2966 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2960 added. If set, IPython now traps EOF and asks for
2967 added. If set, IPython now traps EOF and asks for
2961 confirmation. After a request by François Pinard.
2968 confirmation. After a request by François Pinard.
2962
2969
2963 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2970 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2964 of @abort, and with a new (better) mechanism for handling the
2971 of @abort, and with a new (better) mechanism for handling the
2965 exceptions.
2972 exceptions.
2966
2973
2967 2002-10-27 Fernando Perez <fperez@colorado.edu>
2974 2002-10-27 Fernando Perez <fperez@colorado.edu>
2968
2975
2969 * IPython/usage.py (__doc__): updated the --help information and
2976 * IPython/usage.py (__doc__): updated the --help information and
2970 the ipythonrc file to indicate that -log generates
2977 the ipythonrc file to indicate that -log generates
2971 ./ipython.log. Also fixed the corresponding info in @logstart.
2978 ./ipython.log. Also fixed the corresponding info in @logstart.
2972 This and several other fixes in the manuals thanks to reports by
2979 This and several other fixes in the manuals thanks to reports by
2973 François Pinard <pinard-AT-iro.umontreal.ca>.
2980 François Pinard <pinard-AT-iro.umontreal.ca>.
2974
2981
2975 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2982 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2976 refer to @logstart (instead of @log, which doesn't exist).
2983 refer to @logstart (instead of @log, which doesn't exist).
2977
2984
2978 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2985 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2979 AttributeError crash. Thanks to Christopher Armstrong
2986 AttributeError crash. Thanks to Christopher Armstrong
2980 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2987 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2981 introduced recently (in 0.2.14pre37) with the fix to the eval
2988 introduced recently (in 0.2.14pre37) with the fix to the eval
2982 problem mentioned below.
2989 problem mentioned below.
2983
2990
2984 2002-10-17 Fernando Perez <fperez@colorado.edu>
2991 2002-10-17 Fernando Perez <fperez@colorado.edu>
2985
2992
2986 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2993 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2987 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2994 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2988
2995
2989 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2996 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2990 this function to fix a problem reported by Alex Schmolck. He saw
2997 this function to fix a problem reported by Alex Schmolck. He saw
2991 it with list comprehensions and generators, which were getting
2998 it with list comprehensions and generators, which were getting
2992 called twice. The real problem was an 'eval' call in testing for
2999 called twice. The real problem was an 'eval' call in testing for
2993 automagic which was evaluating the input line silently.
3000 automagic which was evaluating the input line silently.
2994
3001
2995 This is a potentially very nasty bug, if the input has side
3002 This is a potentially very nasty bug, if the input has side
2996 effects which must not be repeated. The code is much cleaner now,
3003 effects which must not be repeated. The code is much cleaner now,
2997 without any blanket 'except' left and with a regexp test for
3004 without any blanket 'except' left and with a regexp test for
2998 actual function names.
3005 actual function names.
2999
3006
3000 But an eval remains, which I'm not fully comfortable with. I just
3007 But an eval remains, which I'm not fully comfortable with. I just
3001 don't know how to find out if an expression could be a callable in
3008 don't know how to find out if an expression could be a callable in
3002 the user's namespace without doing an eval on the string. However
3009 the user's namespace without doing an eval on the string. However
3003 that string is now much more strictly checked so that no code
3010 that string is now much more strictly checked so that no code
3004 slips by, so the eval should only happen for things that can
3011 slips by, so the eval should only happen for things that can
3005 really be only function/method names.
3012 really be only function/method names.
3006
3013
3007 2002-10-15 Fernando Perez <fperez@colorado.edu>
3014 2002-10-15 Fernando Perez <fperez@colorado.edu>
3008
3015
3009 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3016 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3010 OSX information to main manual, removed README_Mac_OSX file from
3017 OSX information to main manual, removed README_Mac_OSX file from
3011 distribution. Also updated credits for recent additions.
3018 distribution. Also updated credits for recent additions.
3012
3019
3013 2002-10-10 Fernando Perez <fperez@colorado.edu>
3020 2002-10-10 Fernando Perez <fperez@colorado.edu>
3014
3021
3015 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3022 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3016 terminal-related issues. Many thanks to Andrea Riciputi
3023 terminal-related issues. Many thanks to Andrea Riciputi
3017 <andrea.riciputi-AT-libero.it> for writing it.
3024 <andrea.riciputi-AT-libero.it> for writing it.
3018
3025
3019 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3026 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3020 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3027 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3021
3028
3022 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3029 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3023 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3030 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3024 <syver-en-AT-online.no> who both submitted patches for this problem.
3031 <syver-en-AT-online.no> who both submitted patches for this problem.
3025
3032
3026 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3033 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3027 global embedding to make sure that things don't overwrite user
3034 global embedding to make sure that things don't overwrite user
3028 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3035 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3029
3036
3030 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3037 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3031 compatibility. Thanks to Hayden Callow
3038 compatibility. Thanks to Hayden Callow
3032 <h.callow-AT-elec.canterbury.ac.nz>
3039 <h.callow-AT-elec.canterbury.ac.nz>
3033
3040
3034 2002-10-04 Fernando Perez <fperez@colorado.edu>
3041 2002-10-04 Fernando Perez <fperez@colorado.edu>
3035
3042
3036 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3043 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3037 Gnuplot.File objects.
3044 Gnuplot.File objects.
3038
3045
3039 2002-07-23 Fernando Perez <fperez@colorado.edu>
3046 2002-07-23 Fernando Perez <fperez@colorado.edu>
3040
3047
3041 * IPython/genutils.py (timing): Added timings() and timing() for
3048 * IPython/genutils.py (timing): Added timings() and timing() for
3042 quick access to the most commonly needed data, the execution
3049 quick access to the most commonly needed data, the execution
3043 times. Old timing() renamed to timings_out().
3050 times. Old timing() renamed to timings_out().
3044
3051
3045 2002-07-18 Fernando Perez <fperez@colorado.edu>
3052 2002-07-18 Fernando Perez <fperez@colorado.edu>
3046
3053
3047 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3054 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3048 bug with nested instances disrupting the parent's tab completion.
3055 bug with nested instances disrupting the parent's tab completion.
3049
3056
3050 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3057 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3051 all_completions code to begin the emacs integration.
3058 all_completions code to begin the emacs integration.
3052
3059
3053 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3060 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3054 argument to allow titling individual arrays when plotting.
3061 argument to allow titling individual arrays when plotting.
3055
3062
3056 2002-07-15 Fernando Perez <fperez@colorado.edu>
3063 2002-07-15 Fernando Perez <fperez@colorado.edu>
3057
3064
3058 * setup.py (make_shortcut): changed to retrieve the value of
3065 * setup.py (make_shortcut): changed to retrieve the value of
3059 'Program Files' directory from the registry (this value changes in
3066 'Program Files' directory from the registry (this value changes in
3060 non-english versions of Windows). Thanks to Thomas Fanslau
3067 non-english versions of Windows). Thanks to Thomas Fanslau
3061 <tfanslau-AT-gmx.de> for the report.
3068 <tfanslau-AT-gmx.de> for the report.
3062
3069
3063 2002-07-10 Fernando Perez <fperez@colorado.edu>
3070 2002-07-10 Fernando Perez <fperez@colorado.edu>
3064
3071
3065 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3072 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3066 a bug in pdb, which crashes if a line with only whitespace is
3073 a bug in pdb, which crashes if a line with only whitespace is
3067 entered. Bug report submitted to sourceforge.
3074 entered. Bug report submitted to sourceforge.
3068
3075
3069 2002-07-09 Fernando Perez <fperez@colorado.edu>
3076 2002-07-09 Fernando Perez <fperez@colorado.edu>
3070
3077
3071 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3078 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3072 reporting exceptions (it's a bug in inspect.py, I just set a
3079 reporting exceptions (it's a bug in inspect.py, I just set a
3073 workaround).
3080 workaround).
3074
3081
3075 2002-07-08 Fernando Perez <fperez@colorado.edu>
3082 2002-07-08 Fernando Perez <fperez@colorado.edu>
3076
3083
3077 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3084 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3078 __IPYTHON__ in __builtins__ to show up in user_ns.
3085 __IPYTHON__ in __builtins__ to show up in user_ns.
3079
3086
3080 2002-07-03 Fernando Perez <fperez@colorado.edu>
3087 2002-07-03 Fernando Perez <fperez@colorado.edu>
3081
3088
3082 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3089 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3083 name from @gp_set_instance to @gp_set_default.
3090 name from @gp_set_instance to @gp_set_default.
3084
3091
3085 * IPython/ipmaker.py (make_IPython): default editor value set to
3092 * IPython/ipmaker.py (make_IPython): default editor value set to
3086 '0' (a string), to match the rc file. Otherwise will crash when
3093 '0' (a string), to match the rc file. Otherwise will crash when
3087 .strip() is called on it.
3094 .strip() is called on it.
3088
3095
3089
3096
3090 2002-06-28 Fernando Perez <fperez@colorado.edu>
3097 2002-06-28 Fernando Perez <fperez@colorado.edu>
3091
3098
3092 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3099 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3093 of files in current directory when a file is executed via
3100 of files in current directory when a file is executed via
3094 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3101 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3095
3102
3096 * setup.py (manfiles): fix for rpm builds, submitted by RA
3103 * setup.py (manfiles): fix for rpm builds, submitted by RA
3097 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3104 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3098
3105
3099 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3106 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3100 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3107 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3101 string!). A. Schmolck caught this one.
3108 string!). A. Schmolck caught this one.
3102
3109
3103 2002-06-27 Fernando Perez <fperez@colorado.edu>
3110 2002-06-27 Fernando Perez <fperez@colorado.edu>
3104
3111
3105 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3112 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3106 defined files at the cmd line. __name__ wasn't being set to
3113 defined files at the cmd line. __name__ wasn't being set to
3107 __main__.
3114 __main__.
3108
3115
3109 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3116 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3110 regular lists and tuples besides Numeric arrays.
3117 regular lists and tuples besides Numeric arrays.
3111
3118
3112 * IPython/Prompts.py (CachedOutput.__call__): Added output
3119 * IPython/Prompts.py (CachedOutput.__call__): Added output
3113 supression for input ending with ';'. Similar to Mathematica and
3120 supression for input ending with ';'. Similar to Mathematica and
3114 Matlab. The _* vars and Out[] list are still updated, just like
3121 Matlab. The _* vars and Out[] list are still updated, just like
3115 Mathematica behaves.
3122 Mathematica behaves.
3116
3123
3117 2002-06-25 Fernando Perez <fperez@colorado.edu>
3124 2002-06-25 Fernando Perez <fperez@colorado.edu>
3118
3125
3119 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3126 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3120 .ini extensions for profiels under Windows.
3127 .ini extensions for profiels under Windows.
3121
3128
3122 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3129 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3123 string form. Fix contributed by Alexander Schmolck
3130 string form. Fix contributed by Alexander Schmolck
3124 <a.schmolck-AT-gmx.net>
3131 <a.schmolck-AT-gmx.net>
3125
3132
3126 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3133 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3127 pre-configured Gnuplot instance.
3134 pre-configured Gnuplot instance.
3128
3135
3129 2002-06-21 Fernando Perez <fperez@colorado.edu>
3136 2002-06-21 Fernando Perez <fperez@colorado.edu>
3130
3137
3131 * IPython/numutils.py (exp_safe): new function, works around the
3138 * IPython/numutils.py (exp_safe): new function, works around the
3132 underflow problems in Numeric.
3139 underflow problems in Numeric.
3133 (log2): New fn. Safe log in base 2: returns exact integer answer
3140 (log2): New fn. Safe log in base 2: returns exact integer answer
3134 for exact integer powers of 2.
3141 for exact integer powers of 2.
3135
3142
3136 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3143 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3137 properly.
3144 properly.
3138
3145
3139 2002-06-20 Fernando Perez <fperez@colorado.edu>
3146 2002-06-20 Fernando Perez <fperez@colorado.edu>
3140
3147
3141 * IPython/genutils.py (timing): new function like
3148 * IPython/genutils.py (timing): new function like
3142 Mathematica's. Similar to time_test, but returns more info.
3149 Mathematica's. Similar to time_test, but returns more info.
3143
3150
3144 2002-06-18 Fernando Perez <fperez@colorado.edu>
3151 2002-06-18 Fernando Perez <fperez@colorado.edu>
3145
3152
3146 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3153 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3147 according to Mike Heeter's suggestions.
3154 according to Mike Heeter's suggestions.
3148
3155
3149 2002-06-16 Fernando Perez <fperez@colorado.edu>
3156 2002-06-16 Fernando Perez <fperez@colorado.edu>
3150
3157
3151 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3158 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3152 system. GnuplotMagic is gone as a user-directory option. New files
3159 system. GnuplotMagic is gone as a user-directory option. New files
3153 make it easier to use all the gnuplot stuff both from external
3160 make it easier to use all the gnuplot stuff both from external
3154 programs as well as from IPython. Had to rewrite part of
3161 programs as well as from IPython. Had to rewrite part of
3155 hardcopy() b/c of a strange bug: often the ps files simply don't
3162 hardcopy() b/c of a strange bug: often the ps files simply don't
3156 get created, and require a repeat of the command (often several
3163 get created, and require a repeat of the command (often several
3157 times).
3164 times).
3158
3165
3159 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3166 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3160 resolve output channel at call time, so that if sys.stderr has
3167 resolve output channel at call time, so that if sys.stderr has
3161 been redirected by user this gets honored.
3168 been redirected by user this gets honored.
3162
3169
3163 2002-06-13 Fernando Perez <fperez@colorado.edu>
3170 2002-06-13 Fernando Perez <fperez@colorado.edu>
3164
3171
3165 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3172 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3166 IPShell. Kept a copy with the old names to avoid breaking people's
3173 IPShell. Kept a copy with the old names to avoid breaking people's
3167 embedded code.
3174 embedded code.
3168
3175
3169 * IPython/ipython: simplified it to the bare minimum after
3176 * IPython/ipython: simplified it to the bare minimum after
3170 Holger's suggestions. Added info about how to use it in
3177 Holger's suggestions. Added info about how to use it in
3171 PYTHONSTARTUP.
3178 PYTHONSTARTUP.
3172
3179
3173 * IPython/Shell.py (IPythonShell): changed the options passing
3180 * IPython/Shell.py (IPythonShell): changed the options passing
3174 from a string with funky %s replacements to a straight list. Maybe
3181 from a string with funky %s replacements to a straight list. Maybe
3175 a bit more typing, but it follows sys.argv conventions, so there's
3182 a bit more typing, but it follows sys.argv conventions, so there's
3176 less special-casing to remember.
3183 less special-casing to remember.
3177
3184
3178 2002-06-12 Fernando Perez <fperez@colorado.edu>
3185 2002-06-12 Fernando Perez <fperez@colorado.edu>
3179
3186
3180 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3187 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3181 command. Thanks to a suggestion by Mike Heeter.
3188 command. Thanks to a suggestion by Mike Heeter.
3182 (Magic.magic_pfile): added behavior to look at filenames if given
3189 (Magic.magic_pfile): added behavior to look at filenames if given
3183 arg is not a defined object.
3190 arg is not a defined object.
3184 (Magic.magic_save): New @save function to save code snippets. Also
3191 (Magic.magic_save): New @save function to save code snippets. Also
3185 a Mike Heeter idea.
3192 a Mike Heeter idea.
3186
3193
3187 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3194 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3188 plot() and replot(). Much more convenient now, especially for
3195 plot() and replot(). Much more convenient now, especially for
3189 interactive use.
3196 interactive use.
3190
3197
3191 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3198 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3192 filenames.
3199 filenames.
3193
3200
3194 2002-06-02 Fernando Perez <fperez@colorado.edu>
3201 2002-06-02 Fernando Perez <fperez@colorado.edu>
3195
3202
3196 * IPython/Struct.py (Struct.__init__): modified to admit
3203 * IPython/Struct.py (Struct.__init__): modified to admit
3197 initialization via another struct.
3204 initialization via another struct.
3198
3205
3199 * IPython/genutils.py (SystemExec.__init__): New stateful
3206 * IPython/genutils.py (SystemExec.__init__): New stateful
3200 interface to xsys and bq. Useful for writing system scripts.
3207 interface to xsys and bq. Useful for writing system scripts.
3201
3208
3202 2002-05-30 Fernando Perez <fperez@colorado.edu>
3209 2002-05-30 Fernando Perez <fperez@colorado.edu>
3203
3210
3204 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3211 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3205 documents. This will make the user download smaller (it's getting
3212 documents. This will make the user download smaller (it's getting
3206 too big).
3213 too big).
3207
3214
3208 2002-05-29 Fernando Perez <fperez@colorado.edu>
3215 2002-05-29 Fernando Perez <fperez@colorado.edu>
3209
3216
3210 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3217 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3211 fix problems with shelve and pickle. Seems to work, but I don't
3218 fix problems with shelve and pickle. Seems to work, but I don't
3212 know if corner cases break it. Thanks to Mike Heeter
3219 know if corner cases break it. Thanks to Mike Heeter
3213 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3220 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3214
3221
3215 2002-05-24 Fernando Perez <fperez@colorado.edu>
3222 2002-05-24 Fernando Perez <fperez@colorado.edu>
3216
3223
3217 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3224 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3218 macros having broken.
3225 macros having broken.
3219
3226
3220 2002-05-21 Fernando Perez <fperez@colorado.edu>
3227 2002-05-21 Fernando Perez <fperez@colorado.edu>
3221
3228
3222 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3229 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3223 introduced logging bug: all history before logging started was
3230 introduced logging bug: all history before logging started was
3224 being written one character per line! This came from the redesign
3231 being written one character per line! This came from the redesign
3225 of the input history as a special list which slices to strings,
3232 of the input history as a special list which slices to strings,
3226 not to lists.
3233 not to lists.
3227
3234
3228 2002-05-20 Fernando Perez <fperez@colorado.edu>
3235 2002-05-20 Fernando Perez <fperez@colorado.edu>
3229
3236
3230 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3237 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3231 be an attribute of all classes in this module. The design of these
3238 be an attribute of all classes in this module. The design of these
3232 classes needs some serious overhauling.
3239 classes needs some serious overhauling.
3233
3240
3234 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3241 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3235 which was ignoring '_' in option names.
3242 which was ignoring '_' in option names.
3236
3243
3237 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3244 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3238 'Verbose_novars' to 'Context' and made it the new default. It's a
3245 'Verbose_novars' to 'Context' and made it the new default. It's a
3239 bit more readable and also safer than verbose.
3246 bit more readable and also safer than verbose.
3240
3247
3241 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3248 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3242 triple-quoted strings.
3249 triple-quoted strings.
3243
3250
3244 * IPython/OInspect.py (__all__): new module exposing the object
3251 * IPython/OInspect.py (__all__): new module exposing the object
3245 introspection facilities. Now the corresponding magics are dummy
3252 introspection facilities. Now the corresponding magics are dummy
3246 wrappers around this. Having this module will make it much easier
3253 wrappers around this. Having this module will make it much easier
3247 to put these functions into our modified pdb.
3254 to put these functions into our modified pdb.
3248 This new object inspector system uses the new colorizing module,
3255 This new object inspector system uses the new colorizing module,
3249 so source code and other things are nicely syntax highlighted.
3256 so source code and other things are nicely syntax highlighted.
3250
3257
3251 2002-05-18 Fernando Perez <fperez@colorado.edu>
3258 2002-05-18 Fernando Perez <fperez@colorado.edu>
3252
3259
3253 * IPython/ColorANSI.py: Split the coloring tools into a separate
3260 * IPython/ColorANSI.py: Split the coloring tools into a separate
3254 module so I can use them in other code easier (they were part of
3261 module so I can use them in other code easier (they were part of
3255 ultraTB).
3262 ultraTB).
3256
3263
3257 2002-05-17 Fernando Perez <fperez@colorado.edu>
3264 2002-05-17 Fernando Perez <fperez@colorado.edu>
3258
3265
3259 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3266 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3260 fixed it to set the global 'g' also to the called instance, as
3267 fixed it to set the global 'g' also to the called instance, as
3261 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3268 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3262 user's 'g' variables).
3269 user's 'g' variables).
3263
3270
3264 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3271 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3265 global variables (aliases to _ih,_oh) so that users which expect
3272 global variables (aliases to _ih,_oh) so that users which expect
3266 In[5] or Out[7] to work aren't unpleasantly surprised.
3273 In[5] or Out[7] to work aren't unpleasantly surprised.
3267 (InputList.__getslice__): new class to allow executing slices of
3274 (InputList.__getslice__): new class to allow executing slices of
3268 input history directly. Very simple class, complements the use of
3275 input history directly. Very simple class, complements the use of
3269 macros.
3276 macros.
3270
3277
3271 2002-05-16 Fernando Perez <fperez@colorado.edu>
3278 2002-05-16 Fernando Perez <fperez@colorado.edu>
3272
3279
3273 * setup.py (docdirbase): make doc directory be just doc/IPython
3280 * setup.py (docdirbase): make doc directory be just doc/IPython
3274 without version numbers, it will reduce clutter for users.
3281 without version numbers, it will reduce clutter for users.
3275
3282
3276 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3283 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3277 execfile call to prevent possible memory leak. See for details:
3284 execfile call to prevent possible memory leak. See for details:
3278 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3285 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3279
3286
3280 2002-05-15 Fernando Perez <fperez@colorado.edu>
3287 2002-05-15 Fernando Perez <fperez@colorado.edu>
3281
3288
3282 * IPython/Magic.py (Magic.magic_psource): made the object
3289 * IPython/Magic.py (Magic.magic_psource): made the object
3283 introspection names be more standard: pdoc, pdef, pfile and
3290 introspection names be more standard: pdoc, pdef, pfile and
3284 psource. They all print/page their output, and it makes
3291 psource. They all print/page their output, and it makes
3285 remembering them easier. Kept old names for compatibility as
3292 remembering them easier. Kept old names for compatibility as
3286 aliases.
3293 aliases.
3287
3294
3288 2002-05-14 Fernando Perez <fperez@colorado.edu>
3295 2002-05-14 Fernando Perez <fperez@colorado.edu>
3289
3296
3290 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3297 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3291 what the mouse problem was. The trick is to use gnuplot with temp
3298 what the mouse problem was. The trick is to use gnuplot with temp
3292 files and NOT with pipes (for data communication), because having
3299 files and NOT with pipes (for data communication), because having
3293 both pipes and the mouse on is bad news.
3300 both pipes and the mouse on is bad news.
3294
3301
3295 2002-05-13 Fernando Perez <fperez@colorado.edu>
3302 2002-05-13 Fernando Perez <fperez@colorado.edu>
3296
3303
3297 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3304 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3298 bug. Information would be reported about builtins even when
3305 bug. Information would be reported about builtins even when
3299 user-defined functions overrode them.
3306 user-defined functions overrode them.
3300
3307
3301 2002-05-11 Fernando Perez <fperez@colorado.edu>
3308 2002-05-11 Fernando Perez <fperez@colorado.edu>
3302
3309
3303 * IPython/__init__.py (__all__): removed FlexCompleter from
3310 * IPython/__init__.py (__all__): removed FlexCompleter from
3304 __all__ so that things don't fail in platforms without readline.
3311 __all__ so that things don't fail in platforms without readline.
3305
3312
3306 2002-05-10 Fernando Perez <fperez@colorado.edu>
3313 2002-05-10 Fernando Perez <fperez@colorado.edu>
3307
3314
3308 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3315 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3309 it requires Numeric, effectively making Numeric a dependency for
3316 it requires Numeric, effectively making Numeric a dependency for
3310 IPython.
3317 IPython.
3311
3318
3312 * Released 0.2.13
3319 * Released 0.2.13
3313
3320
3314 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3321 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3315 profiler interface. Now all the major options from the profiler
3322 profiler interface. Now all the major options from the profiler
3316 module are directly supported in IPython, both for single
3323 module are directly supported in IPython, both for single
3317 expressions (@prun) and for full programs (@run -p).
3324 expressions (@prun) and for full programs (@run -p).
3318
3325
3319 2002-05-09 Fernando Perez <fperez@colorado.edu>
3326 2002-05-09 Fernando Perez <fperez@colorado.edu>
3320
3327
3321 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3328 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3322 magic properly formatted for screen.
3329 magic properly formatted for screen.
3323
3330
3324 * setup.py (make_shortcut): Changed things to put pdf version in
3331 * setup.py (make_shortcut): Changed things to put pdf version in
3325 doc/ instead of doc/manual (had to change lyxport a bit).
3332 doc/ instead of doc/manual (had to change lyxport a bit).
3326
3333
3327 * IPython/Magic.py (Profile.string_stats): made profile runs go
3334 * IPython/Magic.py (Profile.string_stats): made profile runs go
3328 through pager (they are long and a pager allows searching, saving,
3335 through pager (they are long and a pager allows searching, saving,
3329 etc.)
3336 etc.)
3330
3337
3331 2002-05-08 Fernando Perez <fperez@colorado.edu>
3338 2002-05-08 Fernando Perez <fperez@colorado.edu>
3332
3339
3333 * Released 0.2.12
3340 * Released 0.2.12
3334
3341
3335 2002-05-06 Fernando Perez <fperez@colorado.edu>
3342 2002-05-06 Fernando Perez <fperez@colorado.edu>
3336
3343
3337 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3344 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3338 introduced); 'hist n1 n2' was broken.
3345 introduced); 'hist n1 n2' was broken.
3339 (Magic.magic_pdb): added optional on/off arguments to @pdb
3346 (Magic.magic_pdb): added optional on/off arguments to @pdb
3340 (Magic.magic_run): added option -i to @run, which executes code in
3347 (Magic.magic_run): added option -i to @run, which executes code in
3341 the IPython namespace instead of a clean one. Also added @irun as
3348 the IPython namespace instead of a clean one. Also added @irun as
3342 an alias to @run -i.
3349 an alias to @run -i.
3343
3350
3344 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3351 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3345 fixed (it didn't really do anything, the namespaces were wrong).
3352 fixed (it didn't really do anything, the namespaces were wrong).
3346
3353
3347 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3354 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3348
3355
3349 * IPython/__init__.py (__all__): Fixed package namespace, now
3356 * IPython/__init__.py (__all__): Fixed package namespace, now
3350 'import IPython' does give access to IPython.<all> as
3357 'import IPython' does give access to IPython.<all> as
3351 expected. Also renamed __release__ to Release.
3358 expected. Also renamed __release__ to Release.
3352
3359
3353 * IPython/Debugger.py (__license__): created new Pdb class which
3360 * IPython/Debugger.py (__license__): created new Pdb class which
3354 functions like a drop-in for the normal pdb.Pdb but does NOT
3361 functions like a drop-in for the normal pdb.Pdb but does NOT
3355 import readline by default. This way it doesn't muck up IPython's
3362 import readline by default. This way it doesn't muck up IPython's
3356 readline handling, and now tab-completion finally works in the
3363 readline handling, and now tab-completion finally works in the
3357 debugger -- sort of. It completes things globally visible, but the
3364 debugger -- sort of. It completes things globally visible, but the
3358 completer doesn't track the stack as pdb walks it. That's a bit
3365 completer doesn't track the stack as pdb walks it. That's a bit
3359 tricky, and I'll have to implement it later.
3366 tricky, and I'll have to implement it later.
3360
3367
3361 2002-05-05 Fernando Perez <fperez@colorado.edu>
3368 2002-05-05 Fernando Perez <fperez@colorado.edu>
3362
3369
3363 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3370 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3364 magic docstrings when printed via ? (explicit \'s were being
3371 magic docstrings when printed via ? (explicit \'s were being
3365 printed).
3372 printed).
3366
3373
3367 * IPython/ipmaker.py (make_IPython): fixed namespace
3374 * IPython/ipmaker.py (make_IPython): fixed namespace
3368 identification bug. Now variables loaded via logs or command-line
3375 identification bug. Now variables loaded via logs or command-line
3369 files are recognized in the interactive namespace by @who.
3376 files are recognized in the interactive namespace by @who.
3370
3377
3371 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3378 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3372 log replay system stemming from the string form of Structs.
3379 log replay system stemming from the string form of Structs.
3373
3380
3374 * IPython/Magic.py (Macro.__init__): improved macros to properly
3381 * IPython/Magic.py (Macro.__init__): improved macros to properly
3375 handle magic commands in them.
3382 handle magic commands in them.
3376 (Magic.magic_logstart): usernames are now expanded so 'logstart
3383 (Magic.magic_logstart): usernames are now expanded so 'logstart
3377 ~/mylog' now works.
3384 ~/mylog' now works.
3378
3385
3379 * IPython/iplib.py (complete): fixed bug where paths starting with
3386 * IPython/iplib.py (complete): fixed bug where paths starting with
3380 '/' would be completed as magic names.
3387 '/' would be completed as magic names.
3381
3388
3382 2002-05-04 Fernando Perez <fperez@colorado.edu>
3389 2002-05-04 Fernando Perez <fperez@colorado.edu>
3383
3390
3384 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3391 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3385 allow running full programs under the profiler's control.
3392 allow running full programs under the profiler's control.
3386
3393
3387 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3394 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3388 mode to report exceptions verbosely but without formatting
3395 mode to report exceptions verbosely but without formatting
3389 variables. This addresses the issue of ipython 'freezing' (it's
3396 variables. This addresses the issue of ipython 'freezing' (it's
3390 not frozen, but caught in an expensive formatting loop) when huge
3397 not frozen, but caught in an expensive formatting loop) when huge
3391 variables are in the context of an exception.
3398 variables are in the context of an exception.
3392 (VerboseTB.text): Added '--->' markers at line where exception was
3399 (VerboseTB.text): Added '--->' markers at line where exception was
3393 triggered. Much clearer to read, especially in NoColor modes.
3400 triggered. Much clearer to read, especially in NoColor modes.
3394
3401
3395 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3402 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3396 implemented in reverse when changing to the new parse_options().
3403 implemented in reverse when changing to the new parse_options().
3397
3404
3398 2002-05-03 Fernando Perez <fperez@colorado.edu>
3405 2002-05-03 Fernando Perez <fperez@colorado.edu>
3399
3406
3400 * IPython/Magic.py (Magic.parse_options): new function so that
3407 * IPython/Magic.py (Magic.parse_options): new function so that
3401 magics can parse options easier.
3408 magics can parse options easier.
3402 (Magic.magic_prun): new function similar to profile.run(),
3409 (Magic.magic_prun): new function similar to profile.run(),
3403 suggested by Chris Hart.
3410 suggested by Chris Hart.
3404 (Magic.magic_cd): fixed behavior so that it only changes if
3411 (Magic.magic_cd): fixed behavior so that it only changes if
3405 directory actually is in history.
3412 directory actually is in history.
3406
3413
3407 * IPython/usage.py (__doc__): added information about potential
3414 * IPython/usage.py (__doc__): added information about potential
3408 slowness of Verbose exception mode when there are huge data
3415 slowness of Verbose exception mode when there are huge data
3409 structures to be formatted (thanks to Archie Paulson).
3416 structures to be formatted (thanks to Archie Paulson).
3410
3417
3411 * IPython/ipmaker.py (make_IPython): Changed default logging
3418 * IPython/ipmaker.py (make_IPython): Changed default logging
3412 (when simply called with -log) to use curr_dir/ipython.log in
3419 (when simply called with -log) to use curr_dir/ipython.log in
3413 rotate mode. Fixed crash which was occuring with -log before
3420 rotate mode. Fixed crash which was occuring with -log before
3414 (thanks to Jim Boyle).
3421 (thanks to Jim Boyle).
3415
3422
3416 2002-05-01 Fernando Perez <fperez@colorado.edu>
3423 2002-05-01 Fernando Perez <fperez@colorado.edu>
3417
3424
3418 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3425 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3419 was nasty -- though somewhat of a corner case).
3426 was nasty -- though somewhat of a corner case).
3420
3427
3421 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3428 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3422 text (was a bug).
3429 text (was a bug).
3423
3430
3424 2002-04-30 Fernando Perez <fperez@colorado.edu>
3431 2002-04-30 Fernando Perez <fperez@colorado.edu>
3425
3432
3426 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3433 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3427 a print after ^D or ^C from the user so that the In[] prompt
3434 a print after ^D or ^C from the user so that the In[] prompt
3428 doesn't over-run the gnuplot one.
3435 doesn't over-run the gnuplot one.
3429
3436
3430 2002-04-29 Fernando Perez <fperez@colorado.edu>
3437 2002-04-29 Fernando Perez <fperez@colorado.edu>
3431
3438
3432 * Released 0.2.10
3439 * Released 0.2.10
3433
3440
3434 * IPython/__release__.py (version): get date dynamically.
3441 * IPython/__release__.py (version): get date dynamically.
3435
3442
3436 * Misc. documentation updates thanks to Arnd's comments. Also ran
3443 * Misc. documentation updates thanks to Arnd's comments. Also ran
3437 a full spellcheck on the manual (hadn't been done in a while).
3444 a full spellcheck on the manual (hadn't been done in a while).
3438
3445
3439 2002-04-27 Fernando Perez <fperez@colorado.edu>
3446 2002-04-27 Fernando Perez <fperez@colorado.edu>
3440
3447
3441 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3448 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3442 starting a log in mid-session would reset the input history list.
3449 starting a log in mid-session would reset the input history list.
3443
3450
3444 2002-04-26 Fernando Perez <fperez@colorado.edu>
3451 2002-04-26 Fernando Perez <fperez@colorado.edu>
3445
3452
3446 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3453 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3447 all files were being included in an update. Now anything in
3454 all files were being included in an update. Now anything in
3448 UserConfig that matches [A-Za-z]*.py will go (this excludes
3455 UserConfig that matches [A-Za-z]*.py will go (this excludes
3449 __init__.py)
3456 __init__.py)
3450
3457
3451 2002-04-25 Fernando Perez <fperez@colorado.edu>
3458 2002-04-25 Fernando Perez <fperez@colorado.edu>
3452
3459
3453 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3460 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3454 to __builtins__ so that any form of embedded or imported code can
3461 to __builtins__ so that any form of embedded or imported code can
3455 test for being inside IPython.
3462 test for being inside IPython.
3456
3463
3457 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3464 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3458 changed to GnuplotMagic because it's now an importable module,
3465 changed to GnuplotMagic because it's now an importable module,
3459 this makes the name follow that of the standard Gnuplot module.
3466 this makes the name follow that of the standard Gnuplot module.
3460 GnuplotMagic can now be loaded at any time in mid-session.
3467 GnuplotMagic can now be loaded at any time in mid-session.
3461
3468
3462 2002-04-24 Fernando Perez <fperez@colorado.edu>
3469 2002-04-24 Fernando Perez <fperez@colorado.edu>
3463
3470
3464 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3471 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3465 the globals (IPython has its own namespace) and the
3472 the globals (IPython has its own namespace) and the
3466 PhysicalQuantity stuff is much better anyway.
3473 PhysicalQuantity stuff is much better anyway.
3467
3474
3468 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3475 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3469 embedding example to standard user directory for
3476 embedding example to standard user directory for
3470 distribution. Also put it in the manual.
3477 distribution. Also put it in the manual.
3471
3478
3472 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3479 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3473 instance as first argument (so it doesn't rely on some obscure
3480 instance as first argument (so it doesn't rely on some obscure
3474 hidden global).
3481 hidden global).
3475
3482
3476 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3483 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3477 delimiters. While it prevents ().TAB from working, it allows
3484 delimiters. While it prevents ().TAB from working, it allows
3478 completions in open (... expressions. This is by far a more common
3485 completions in open (... expressions. This is by far a more common
3479 case.
3486 case.
3480
3487
3481 2002-04-23 Fernando Perez <fperez@colorado.edu>
3488 2002-04-23 Fernando Perez <fperez@colorado.edu>
3482
3489
3483 * IPython/Extensions/InterpreterPasteInput.py: new
3490 * IPython/Extensions/InterpreterPasteInput.py: new
3484 syntax-processing module for pasting lines with >>> or ... at the
3491 syntax-processing module for pasting lines with >>> or ... at the
3485 start.
3492 start.
3486
3493
3487 * IPython/Extensions/PhysicalQ_Interactive.py
3494 * IPython/Extensions/PhysicalQ_Interactive.py
3488 (PhysicalQuantityInteractive.__int__): fixed to work with either
3495 (PhysicalQuantityInteractive.__int__): fixed to work with either
3489 Numeric or math.
3496 Numeric or math.
3490
3497
3491 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3498 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3492 provided profiles. Now we have:
3499 provided profiles. Now we have:
3493 -math -> math module as * and cmath with its own namespace.
3500 -math -> math module as * and cmath with its own namespace.
3494 -numeric -> Numeric as *, plus gnuplot & grace
3501 -numeric -> Numeric as *, plus gnuplot & grace
3495 -physics -> same as before
3502 -physics -> same as before
3496
3503
3497 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3504 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3498 user-defined magics wouldn't be found by @magic if they were
3505 user-defined magics wouldn't be found by @magic if they were
3499 defined as class methods. Also cleaned up the namespace search
3506 defined as class methods. Also cleaned up the namespace search
3500 logic and the string building (to use %s instead of many repeated
3507 logic and the string building (to use %s instead of many repeated
3501 string adds).
3508 string adds).
3502
3509
3503 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3510 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3504 of user-defined magics to operate with class methods (cleaner, in
3511 of user-defined magics to operate with class methods (cleaner, in
3505 line with the gnuplot code).
3512 line with the gnuplot code).
3506
3513
3507 2002-04-22 Fernando Perez <fperez@colorado.edu>
3514 2002-04-22 Fernando Perez <fperez@colorado.edu>
3508
3515
3509 * setup.py: updated dependency list so that manual is updated when
3516 * setup.py: updated dependency list so that manual is updated when
3510 all included files change.
3517 all included files change.
3511
3518
3512 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3519 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3513 the delimiter removal option (the fix is ugly right now).
3520 the delimiter removal option (the fix is ugly right now).
3514
3521
3515 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3522 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3516 all of the math profile (quicker loading, no conflict between
3523 all of the math profile (quicker loading, no conflict between
3517 g-9.8 and g-gnuplot).
3524 g-9.8 and g-gnuplot).
3518
3525
3519 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3526 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3520 name of post-mortem files to IPython_crash_report.txt.
3527 name of post-mortem files to IPython_crash_report.txt.
3521
3528
3522 * Cleanup/update of the docs. Added all the new readline info and
3529 * Cleanup/update of the docs. Added all the new readline info and
3523 formatted all lists as 'real lists'.
3530 formatted all lists as 'real lists'.
3524
3531
3525 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3532 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3526 tab-completion options, since the full readline parse_and_bind is
3533 tab-completion options, since the full readline parse_and_bind is
3527 now accessible.
3534 now accessible.
3528
3535
3529 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3536 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3530 handling of readline options. Now users can specify any string to
3537 handling of readline options. Now users can specify any string to
3531 be passed to parse_and_bind(), as well as the delimiters to be
3538 be passed to parse_and_bind(), as well as the delimiters to be
3532 removed.
3539 removed.
3533 (InteractiveShell.__init__): Added __name__ to the global
3540 (InteractiveShell.__init__): Added __name__ to the global
3534 namespace so that things like Itpl which rely on its existence
3541 namespace so that things like Itpl which rely on its existence
3535 don't crash.
3542 don't crash.
3536 (InteractiveShell._prefilter): Defined the default with a _ so
3543 (InteractiveShell._prefilter): Defined the default with a _ so
3537 that prefilter() is easier to override, while the default one
3544 that prefilter() is easier to override, while the default one
3538 remains available.
3545 remains available.
3539
3546
3540 2002-04-18 Fernando Perez <fperez@colorado.edu>
3547 2002-04-18 Fernando Perez <fperez@colorado.edu>
3541
3548
3542 * Added information about pdb in the docs.
3549 * Added information about pdb in the docs.
3543
3550
3544 2002-04-17 Fernando Perez <fperez@colorado.edu>
3551 2002-04-17 Fernando Perez <fperez@colorado.edu>
3545
3552
3546 * IPython/ipmaker.py (make_IPython): added rc_override option to
3553 * IPython/ipmaker.py (make_IPython): added rc_override option to
3547 allow passing config options at creation time which may override
3554 allow passing config options at creation time which may override
3548 anything set in the config files or command line. This is
3555 anything set in the config files or command line. This is
3549 particularly useful for configuring embedded instances.
3556 particularly useful for configuring embedded instances.
3550
3557
3551 2002-04-15 Fernando Perez <fperez@colorado.edu>
3558 2002-04-15 Fernando Perez <fperez@colorado.edu>
3552
3559
3553 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3560 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3554 crash embedded instances because of the input cache falling out of
3561 crash embedded instances because of the input cache falling out of
3555 sync with the output counter.
3562 sync with the output counter.
3556
3563
3557 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3564 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3558 mode which calls pdb after an uncaught exception in IPython itself.
3565 mode which calls pdb after an uncaught exception in IPython itself.
3559
3566
3560 2002-04-14 Fernando Perez <fperez@colorado.edu>
3567 2002-04-14 Fernando Perez <fperez@colorado.edu>
3561
3568
3562 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3569 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3563 readline, fix it back after each call.
3570 readline, fix it back after each call.
3564
3571
3565 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3572 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3566 method to force all access via __call__(), which guarantees that
3573 method to force all access via __call__(), which guarantees that
3567 traceback references are properly deleted.
3574 traceback references are properly deleted.
3568
3575
3569 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3576 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3570 improve printing when pprint is in use.
3577 improve printing when pprint is in use.
3571
3578
3572 2002-04-13 Fernando Perez <fperez@colorado.edu>
3579 2002-04-13 Fernando Perez <fperez@colorado.edu>
3573
3580
3574 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3581 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3575 exceptions aren't caught anymore. If the user triggers one, he
3582 exceptions aren't caught anymore. If the user triggers one, he
3576 should know why he's doing it and it should go all the way up,
3583 should know why he's doing it and it should go all the way up,
3577 just like any other exception. So now @abort will fully kill the
3584 just like any other exception. So now @abort will fully kill the
3578 embedded interpreter and the embedding code (unless that happens
3585 embedded interpreter and the embedding code (unless that happens
3579 to catch SystemExit).
3586 to catch SystemExit).
3580
3587
3581 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3588 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3582 and a debugger() method to invoke the interactive pdb debugger
3589 and a debugger() method to invoke the interactive pdb debugger
3583 after printing exception information. Also added the corresponding
3590 after printing exception information. Also added the corresponding
3584 -pdb option and @pdb magic to control this feature, and updated
3591 -pdb option and @pdb magic to control this feature, and updated
3585 the docs. After a suggestion from Christopher Hart
3592 the docs. After a suggestion from Christopher Hart
3586 (hart-AT-caltech.edu).
3593 (hart-AT-caltech.edu).
3587
3594
3588 2002-04-12 Fernando Perez <fperez@colorado.edu>
3595 2002-04-12 Fernando Perez <fperez@colorado.edu>
3589
3596
3590 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3597 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3591 the exception handlers defined by the user (not the CrashHandler)
3598 the exception handlers defined by the user (not the CrashHandler)
3592 so that user exceptions don't trigger an ipython bug report.
3599 so that user exceptions don't trigger an ipython bug report.
3593
3600
3594 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3601 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3595 configurable (it should have always been so).
3602 configurable (it should have always been so).
3596
3603
3597 2002-03-26 Fernando Perez <fperez@colorado.edu>
3604 2002-03-26 Fernando Perez <fperez@colorado.edu>
3598
3605
3599 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3606 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3600 and there to fix embedding namespace issues. This should all be
3607 and there to fix embedding namespace issues. This should all be
3601 done in a more elegant way.
3608 done in a more elegant way.
3602
3609
3603 2002-03-25 Fernando Perez <fperez@colorado.edu>
3610 2002-03-25 Fernando Perez <fperez@colorado.edu>
3604
3611
3605 * IPython/genutils.py (get_home_dir): Try to make it work under
3612 * IPython/genutils.py (get_home_dir): Try to make it work under
3606 win9x also.
3613 win9x also.
3607
3614
3608 2002-03-20 Fernando Perez <fperez@colorado.edu>
3615 2002-03-20 Fernando Perez <fperez@colorado.edu>
3609
3616
3610 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3617 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3611 sys.displayhook untouched upon __init__.
3618 sys.displayhook untouched upon __init__.
3612
3619
3613 2002-03-19 Fernando Perez <fperez@colorado.edu>
3620 2002-03-19 Fernando Perez <fperez@colorado.edu>
3614
3621
3615 * Released 0.2.9 (for embedding bug, basically).
3622 * Released 0.2.9 (for embedding bug, basically).
3616
3623
3617 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3624 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3618 exceptions so that enclosing shell's state can be restored.
3625 exceptions so that enclosing shell's state can be restored.
3619
3626
3620 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3627 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3621 naming conventions in the .ipython/ dir.
3628 naming conventions in the .ipython/ dir.
3622
3629
3623 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3630 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3624 from delimiters list so filenames with - in them get expanded.
3631 from delimiters list so filenames with - in them get expanded.
3625
3632
3626 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3633 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3627 sys.displayhook not being properly restored after an embedded call.
3634 sys.displayhook not being properly restored after an embedded call.
3628
3635
3629 2002-03-18 Fernando Perez <fperez@colorado.edu>
3636 2002-03-18 Fernando Perez <fperez@colorado.edu>
3630
3637
3631 * Released 0.2.8
3638 * Released 0.2.8
3632
3639
3633 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3640 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3634 some files weren't being included in a -upgrade.
3641 some files weren't being included in a -upgrade.
3635 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3642 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3636 on' so that the first tab completes.
3643 on' so that the first tab completes.
3637 (InteractiveShell.handle_magic): fixed bug with spaces around
3644 (InteractiveShell.handle_magic): fixed bug with spaces around
3638 quotes breaking many magic commands.
3645 quotes breaking many magic commands.
3639
3646
3640 * setup.py: added note about ignoring the syntax error messages at
3647 * setup.py: added note about ignoring the syntax error messages at
3641 installation.
3648 installation.
3642
3649
3643 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3650 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3644 streamlining the gnuplot interface, now there's only one magic @gp.
3651 streamlining the gnuplot interface, now there's only one magic @gp.
3645
3652
3646 2002-03-17 Fernando Perez <fperez@colorado.edu>
3653 2002-03-17 Fernando Perez <fperez@colorado.edu>
3647
3654
3648 * IPython/UserConfig/magic_gnuplot.py: new name for the
3655 * IPython/UserConfig/magic_gnuplot.py: new name for the
3649 example-magic_pm.py file. Much enhanced system, now with a shell
3656 example-magic_pm.py file. Much enhanced system, now with a shell
3650 for communicating directly with gnuplot, one command at a time.
3657 for communicating directly with gnuplot, one command at a time.
3651
3658
3652 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3659 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3653 setting __name__=='__main__'.
3660 setting __name__=='__main__'.
3654
3661
3655 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3662 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3656 mini-shell for accessing gnuplot from inside ipython. Should
3663 mini-shell for accessing gnuplot from inside ipython. Should
3657 extend it later for grace access too. Inspired by Arnd's
3664 extend it later for grace access too. Inspired by Arnd's
3658 suggestion.
3665 suggestion.
3659
3666
3660 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3667 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3661 calling magic functions with () in their arguments. Thanks to Arnd
3668 calling magic functions with () in their arguments. Thanks to Arnd
3662 Baecker for pointing this to me.
3669 Baecker for pointing this to me.
3663
3670
3664 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3671 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3665 infinitely for integer or complex arrays (only worked with floats).
3672 infinitely for integer or complex arrays (only worked with floats).
3666
3673
3667 2002-03-16 Fernando Perez <fperez@colorado.edu>
3674 2002-03-16 Fernando Perez <fperez@colorado.edu>
3668
3675
3669 * setup.py: Merged setup and setup_windows into a single script
3676 * setup.py: Merged setup and setup_windows into a single script
3670 which properly handles things for windows users.
3677 which properly handles things for windows users.
3671
3678
3672 2002-03-15 Fernando Perez <fperez@colorado.edu>
3679 2002-03-15 Fernando Perez <fperez@colorado.edu>
3673
3680
3674 * Big change to the manual: now the magics are all automatically
3681 * Big change to the manual: now the magics are all automatically
3675 documented. This information is generated from their docstrings
3682 documented. This information is generated from their docstrings
3676 and put in a latex file included by the manual lyx file. This way
3683 and put in a latex file included by the manual lyx file. This way
3677 we get always up to date information for the magics. The manual
3684 we get always up to date information for the magics. The manual
3678 now also has proper version information, also auto-synced.
3685 now also has proper version information, also auto-synced.
3679
3686
3680 For this to work, an undocumented --magic_docstrings option was added.
3687 For this to work, an undocumented --magic_docstrings option was added.
3681
3688
3682 2002-03-13 Fernando Perez <fperez@colorado.edu>
3689 2002-03-13 Fernando Perez <fperez@colorado.edu>
3683
3690
3684 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3691 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3685 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3692 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3686
3693
3687 2002-03-12 Fernando Perez <fperez@colorado.edu>
3694 2002-03-12 Fernando Perez <fperez@colorado.edu>
3688
3695
3689 * IPython/ultraTB.py (TermColors): changed color escapes again to
3696 * IPython/ultraTB.py (TermColors): changed color escapes again to
3690 fix the (old, reintroduced) line-wrapping bug. Basically, if
3697 fix the (old, reintroduced) line-wrapping bug. Basically, if
3691 \001..\002 aren't given in the color escapes, lines get wrapped
3698 \001..\002 aren't given in the color escapes, lines get wrapped
3692 weirdly. But giving those screws up old xterms and emacs terms. So
3699 weirdly. But giving those screws up old xterms and emacs terms. So
3693 I added some logic for emacs terms to be ok, but I can't identify old
3700 I added some logic for emacs terms to be ok, but I can't identify old
3694 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3701 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3695
3702
3696 2002-03-10 Fernando Perez <fperez@colorado.edu>
3703 2002-03-10 Fernando Perez <fperez@colorado.edu>
3697
3704
3698 * IPython/usage.py (__doc__): Various documentation cleanups and
3705 * IPython/usage.py (__doc__): Various documentation cleanups and
3699 updates, both in usage docstrings and in the manual.
3706 updates, both in usage docstrings and in the manual.
3700
3707
3701 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3708 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3702 handling of caching. Set minimum acceptabe value for having a
3709 handling of caching. Set minimum acceptabe value for having a
3703 cache at 20 values.
3710 cache at 20 values.
3704
3711
3705 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3712 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3706 install_first_time function to a method, renamed it and added an
3713 install_first_time function to a method, renamed it and added an
3707 'upgrade' mode. Now people can update their config directory with
3714 'upgrade' mode. Now people can update their config directory with
3708 a simple command line switch (-upgrade, also new).
3715 a simple command line switch (-upgrade, also new).
3709
3716
3710 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3717 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3711 @file (convenient for automagic users under Python >= 2.2).
3718 @file (convenient for automagic users under Python >= 2.2).
3712 Removed @files (it seemed more like a plural than an abbrev. of
3719 Removed @files (it seemed more like a plural than an abbrev. of
3713 'file show').
3720 'file show').
3714
3721
3715 * IPython/iplib.py (install_first_time): Fixed crash if there were
3722 * IPython/iplib.py (install_first_time): Fixed crash if there were
3716 backup files ('~') in .ipython/ install directory.
3723 backup files ('~') in .ipython/ install directory.
3717
3724
3718 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3725 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3719 system. Things look fine, but these changes are fairly
3726 system. Things look fine, but these changes are fairly
3720 intrusive. Test them for a few days.
3727 intrusive. Test them for a few days.
3721
3728
3722 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3729 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3723 the prompts system. Now all in/out prompt strings are user
3730 the prompts system. Now all in/out prompt strings are user
3724 controllable. This is particularly useful for embedding, as one
3731 controllable. This is particularly useful for embedding, as one
3725 can tag embedded instances with particular prompts.
3732 can tag embedded instances with particular prompts.
3726
3733
3727 Also removed global use of sys.ps1/2, which now allows nested
3734 Also removed global use of sys.ps1/2, which now allows nested
3728 embeddings without any problems. Added command-line options for
3735 embeddings without any problems. Added command-line options for
3729 the prompt strings.
3736 the prompt strings.
3730
3737
3731 2002-03-08 Fernando Perez <fperez@colorado.edu>
3738 2002-03-08 Fernando Perez <fperez@colorado.edu>
3732
3739
3733 * IPython/UserConfig/example-embed-short.py (ipshell): added
3740 * IPython/UserConfig/example-embed-short.py (ipshell): added
3734 example file with the bare minimum code for embedding.
3741 example file with the bare minimum code for embedding.
3735
3742
3736 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3743 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3737 functionality for the embeddable shell to be activated/deactivated
3744 functionality for the embeddable shell to be activated/deactivated
3738 either globally or at each call.
3745 either globally or at each call.
3739
3746
3740 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3747 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3741 rewriting the prompt with '--->' for auto-inputs with proper
3748 rewriting the prompt with '--->' for auto-inputs with proper
3742 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3749 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3743 this is handled by the prompts class itself, as it should.
3750 this is handled by the prompts class itself, as it should.
3744
3751
3745 2002-03-05 Fernando Perez <fperez@colorado.edu>
3752 2002-03-05 Fernando Perez <fperez@colorado.edu>
3746
3753
3747 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3754 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3748 @logstart to avoid name clashes with the math log function.
3755 @logstart to avoid name clashes with the math log function.
3749
3756
3750 * Big updates to X/Emacs section of the manual.
3757 * Big updates to X/Emacs section of the manual.
3751
3758
3752 * Removed ipython_emacs. Milan explained to me how to pass
3759 * Removed ipython_emacs. Milan explained to me how to pass
3753 arguments to ipython through Emacs. Some day I'm going to end up
3760 arguments to ipython through Emacs. Some day I'm going to end up
3754 learning some lisp...
3761 learning some lisp...
3755
3762
3756 2002-03-04 Fernando Perez <fperez@colorado.edu>
3763 2002-03-04 Fernando Perez <fperez@colorado.edu>
3757
3764
3758 * IPython/ipython_emacs: Created script to be used as the
3765 * IPython/ipython_emacs: Created script to be used as the
3759 py-python-command Emacs variable so we can pass IPython
3766 py-python-command Emacs variable so we can pass IPython
3760 parameters. I can't figure out how to tell Emacs directly to pass
3767 parameters. I can't figure out how to tell Emacs directly to pass
3761 parameters to IPython, so a dummy shell script will do it.
3768 parameters to IPython, so a dummy shell script will do it.
3762
3769
3763 Other enhancements made for things to work better under Emacs'
3770 Other enhancements made for things to work better under Emacs'
3764 various types of terminals. Many thanks to Milan Zamazal
3771 various types of terminals. Many thanks to Milan Zamazal
3765 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3772 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3766
3773
3767 2002-03-01 Fernando Perez <fperez@colorado.edu>
3774 2002-03-01 Fernando Perez <fperez@colorado.edu>
3768
3775
3769 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3776 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3770 that loading of readline is now optional. This gives better
3777 that loading of readline is now optional. This gives better
3771 control to emacs users.
3778 control to emacs users.
3772
3779
3773 * IPython/ultraTB.py (__date__): Modified color escape sequences
3780 * IPython/ultraTB.py (__date__): Modified color escape sequences
3774 and now things work fine under xterm and in Emacs' term buffers
3781 and now things work fine under xterm and in Emacs' term buffers
3775 (though not shell ones). Well, in emacs you get colors, but all
3782 (though not shell ones). Well, in emacs you get colors, but all
3776 seem to be 'light' colors (no difference between dark and light
3783 seem to be 'light' colors (no difference between dark and light
3777 ones). But the garbage chars are gone, and also in xterms. It
3784 ones). But the garbage chars are gone, and also in xterms. It
3778 seems that now I'm using 'cleaner' ansi sequences.
3785 seems that now I'm using 'cleaner' ansi sequences.
3779
3786
3780 2002-02-21 Fernando Perez <fperez@colorado.edu>
3787 2002-02-21 Fernando Perez <fperez@colorado.edu>
3781
3788
3782 * Released 0.2.7 (mainly to publish the scoping fix).
3789 * Released 0.2.7 (mainly to publish the scoping fix).
3783
3790
3784 * IPython/Logger.py (Logger.logstate): added. A corresponding
3791 * IPython/Logger.py (Logger.logstate): added. A corresponding
3785 @logstate magic was created.
3792 @logstate magic was created.
3786
3793
3787 * IPython/Magic.py: fixed nested scoping problem under Python
3794 * IPython/Magic.py: fixed nested scoping problem under Python
3788 2.1.x (automagic wasn't working).
3795 2.1.x (automagic wasn't working).
3789
3796
3790 2002-02-20 Fernando Perez <fperez@colorado.edu>
3797 2002-02-20 Fernando Perez <fperez@colorado.edu>
3791
3798
3792 * Released 0.2.6.
3799 * Released 0.2.6.
3793
3800
3794 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3801 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3795 option so that logs can come out without any headers at all.
3802 option so that logs can come out without any headers at all.
3796
3803
3797 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3804 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3798 SciPy.
3805 SciPy.
3799
3806
3800 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3807 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3801 that embedded IPython calls don't require vars() to be explicitly
3808 that embedded IPython calls don't require vars() to be explicitly
3802 passed. Now they are extracted from the caller's frame (code
3809 passed. Now they are extracted from the caller's frame (code
3803 snatched from Eric Jones' weave). Added better documentation to
3810 snatched from Eric Jones' weave). Added better documentation to
3804 the section on embedding and the example file.
3811 the section on embedding and the example file.
3805
3812
3806 * IPython/genutils.py (page): Changed so that under emacs, it just
3813 * IPython/genutils.py (page): Changed so that under emacs, it just
3807 prints the string. You can then page up and down in the emacs
3814 prints the string. You can then page up and down in the emacs
3808 buffer itself. This is how the builtin help() works.
3815 buffer itself. This is how the builtin help() works.
3809
3816
3810 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3817 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3811 macro scoping: macros need to be executed in the user's namespace
3818 macro scoping: macros need to be executed in the user's namespace
3812 to work as if they had been typed by the user.
3819 to work as if they had been typed by the user.
3813
3820
3814 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3821 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3815 execute automatically (no need to type 'exec...'). They then
3822 execute automatically (no need to type 'exec...'). They then
3816 behave like 'true macros'. The printing system was also modified
3823 behave like 'true macros'. The printing system was also modified
3817 for this to work.
3824 for this to work.
3818
3825
3819 2002-02-19 Fernando Perez <fperez@colorado.edu>
3826 2002-02-19 Fernando Perez <fperez@colorado.edu>
3820
3827
3821 * IPython/genutils.py (page_file): new function for paging files
3828 * IPython/genutils.py (page_file): new function for paging files
3822 in an OS-independent way. Also necessary for file viewing to work
3829 in an OS-independent way. Also necessary for file viewing to work
3823 well inside Emacs buffers.
3830 well inside Emacs buffers.
3824 (page): Added checks for being in an emacs buffer.
3831 (page): Added checks for being in an emacs buffer.
3825 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3832 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3826 same bug in iplib.
3833 same bug in iplib.
3827
3834
3828 2002-02-18 Fernando Perez <fperez@colorado.edu>
3835 2002-02-18 Fernando Perez <fperez@colorado.edu>
3829
3836
3830 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3837 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3831 of readline so that IPython can work inside an Emacs buffer.
3838 of readline so that IPython can work inside an Emacs buffer.
3832
3839
3833 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3840 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3834 method signatures (they weren't really bugs, but it looks cleaner
3841 method signatures (they weren't really bugs, but it looks cleaner
3835 and keeps PyChecker happy).
3842 and keeps PyChecker happy).
3836
3843
3837 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3844 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3838 for implementing various user-defined hooks. Currently only
3845 for implementing various user-defined hooks. Currently only
3839 display is done.
3846 display is done.
3840
3847
3841 * IPython/Prompts.py (CachedOutput._display): changed display
3848 * IPython/Prompts.py (CachedOutput._display): changed display
3842 functions so that they can be dynamically changed by users easily.
3849 functions so that they can be dynamically changed by users easily.
3843
3850
3844 * IPython/Extensions/numeric_formats.py (num_display): added an
3851 * IPython/Extensions/numeric_formats.py (num_display): added an
3845 extension for printing NumPy arrays in flexible manners. It
3852 extension for printing NumPy arrays in flexible manners. It
3846 doesn't do anything yet, but all the structure is in
3853 doesn't do anything yet, but all the structure is in
3847 place. Ultimately the plan is to implement output format control
3854 place. Ultimately the plan is to implement output format control
3848 like in Octave.
3855 like in Octave.
3849
3856
3850 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3857 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3851 methods are found at run-time by all the automatic machinery.
3858 methods are found at run-time by all the automatic machinery.
3852
3859
3853 2002-02-17 Fernando Perez <fperez@colorado.edu>
3860 2002-02-17 Fernando Perez <fperez@colorado.edu>
3854
3861
3855 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3862 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3856 whole file a little.
3863 whole file a little.
3857
3864
3858 * ToDo: closed this document. Now there's a new_design.lyx
3865 * ToDo: closed this document. Now there's a new_design.lyx
3859 document for all new ideas. Added making a pdf of it for the
3866 document for all new ideas. Added making a pdf of it for the
3860 end-user distro.
3867 end-user distro.
3861
3868
3862 * IPython/Logger.py (Logger.switch_log): Created this to replace
3869 * IPython/Logger.py (Logger.switch_log): Created this to replace
3863 logon() and logoff(). It also fixes a nasty crash reported by
3870 logon() and logoff(). It also fixes a nasty crash reported by
3864 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3871 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3865
3872
3866 * IPython/iplib.py (complete): got auto-completion to work with
3873 * IPython/iplib.py (complete): got auto-completion to work with
3867 automagic (I had wanted this for a long time).
3874 automagic (I had wanted this for a long time).
3868
3875
3869 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3876 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3870 to @file, since file() is now a builtin and clashes with automagic
3877 to @file, since file() is now a builtin and clashes with automagic
3871 for @file.
3878 for @file.
3872
3879
3873 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3880 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3874 of this was previously in iplib, which had grown to more than 2000
3881 of this was previously in iplib, which had grown to more than 2000
3875 lines, way too long. No new functionality, but it makes managing
3882 lines, way too long. No new functionality, but it makes managing
3876 the code a bit easier.
3883 the code a bit easier.
3877
3884
3878 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3885 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3879 information to crash reports.
3886 information to crash reports.
3880
3887
3881 2002-02-12 Fernando Perez <fperez@colorado.edu>
3888 2002-02-12 Fernando Perez <fperez@colorado.edu>
3882
3889
3883 * Released 0.2.5.
3890 * Released 0.2.5.
3884
3891
3885 2002-02-11 Fernando Perez <fperez@colorado.edu>
3892 2002-02-11 Fernando Perez <fperez@colorado.edu>
3886
3893
3887 * Wrote a relatively complete Windows installer. It puts
3894 * Wrote a relatively complete Windows installer. It puts
3888 everything in place, creates Start Menu entries and fixes the
3895 everything in place, creates Start Menu entries and fixes the
3889 color issues. Nothing fancy, but it works.
3896 color issues. Nothing fancy, but it works.
3890
3897
3891 2002-02-10 Fernando Perez <fperez@colorado.edu>
3898 2002-02-10 Fernando Perez <fperez@colorado.edu>
3892
3899
3893 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3900 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3894 os.path.expanduser() call so that we can type @run ~/myfile.py and
3901 os.path.expanduser() call so that we can type @run ~/myfile.py and
3895 have thigs work as expected.
3902 have thigs work as expected.
3896
3903
3897 * IPython/genutils.py (page): fixed exception handling so things
3904 * IPython/genutils.py (page): fixed exception handling so things
3898 work both in Unix and Windows correctly. Quitting a pager triggers
3905 work both in Unix and Windows correctly. Quitting a pager triggers
3899 an IOError/broken pipe in Unix, and in windows not finding a pager
3906 an IOError/broken pipe in Unix, and in windows not finding a pager
3900 is also an IOError, so I had to actually look at the return value
3907 is also an IOError, so I had to actually look at the return value
3901 of the exception, not just the exception itself. Should be ok now.
3908 of the exception, not just the exception itself. Should be ok now.
3902
3909
3903 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3910 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3904 modified to allow case-insensitive color scheme changes.
3911 modified to allow case-insensitive color scheme changes.
3905
3912
3906 2002-02-09 Fernando Perez <fperez@colorado.edu>
3913 2002-02-09 Fernando Perez <fperez@colorado.edu>
3907
3914
3908 * IPython/genutils.py (native_line_ends): new function to leave
3915 * IPython/genutils.py (native_line_ends): new function to leave
3909 user config files with os-native line-endings.
3916 user config files with os-native line-endings.
3910
3917
3911 * README and manual updates.
3918 * README and manual updates.
3912
3919
3913 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3920 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3914 instead of StringType to catch Unicode strings.
3921 instead of StringType to catch Unicode strings.
3915
3922
3916 * IPython/genutils.py (filefind): fixed bug for paths with
3923 * IPython/genutils.py (filefind): fixed bug for paths with
3917 embedded spaces (very common in Windows).
3924 embedded spaces (very common in Windows).
3918
3925
3919 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3926 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3920 files under Windows, so that they get automatically associated
3927 files under Windows, so that they get automatically associated
3921 with a text editor. Windows makes it a pain to handle
3928 with a text editor. Windows makes it a pain to handle
3922 extension-less files.
3929 extension-less files.
3923
3930
3924 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3931 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3925 warning about readline only occur for Posix. In Windows there's no
3932 warning about readline only occur for Posix. In Windows there's no
3926 way to get readline, so why bother with the warning.
3933 way to get readline, so why bother with the warning.
3927
3934
3928 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3935 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3929 for __str__ instead of dir(self), since dir() changed in 2.2.
3936 for __str__ instead of dir(self), since dir() changed in 2.2.
3930
3937
3931 * Ported to Windows! Tested on XP, I suspect it should work fine
3938 * Ported to Windows! Tested on XP, I suspect it should work fine
3932 on NT/2000, but I don't think it will work on 98 et al. That
3939 on NT/2000, but I don't think it will work on 98 et al. That
3933 series of Windows is such a piece of junk anyway that I won't try
3940 series of Windows is such a piece of junk anyway that I won't try
3934 porting it there. The XP port was straightforward, showed a few
3941 porting it there. The XP port was straightforward, showed a few
3935 bugs here and there (fixed all), in particular some string
3942 bugs here and there (fixed all), in particular some string
3936 handling stuff which required considering Unicode strings (which
3943 handling stuff which required considering Unicode strings (which
3937 Windows uses). This is good, but hasn't been too tested :) No
3944 Windows uses). This is good, but hasn't been too tested :) No
3938 fancy installer yet, I'll put a note in the manual so people at
3945 fancy installer yet, I'll put a note in the manual so people at
3939 least make manually a shortcut.
3946 least make manually a shortcut.
3940
3947
3941 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3948 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3942 into a single one, "colors". This now controls both prompt and
3949 into a single one, "colors". This now controls both prompt and
3943 exception color schemes, and can be changed both at startup
3950 exception color schemes, and can be changed both at startup
3944 (either via command-line switches or via ipythonrc files) and at
3951 (either via command-line switches or via ipythonrc files) and at
3945 runtime, with @colors.
3952 runtime, with @colors.
3946 (Magic.magic_run): renamed @prun to @run and removed the old
3953 (Magic.magic_run): renamed @prun to @run and removed the old
3947 @run. The two were too similar to warrant keeping both.
3954 @run. The two were too similar to warrant keeping both.
3948
3955
3949 2002-02-03 Fernando Perez <fperez@colorado.edu>
3956 2002-02-03 Fernando Perez <fperez@colorado.edu>
3950
3957
3951 * IPython/iplib.py (install_first_time): Added comment on how to
3958 * IPython/iplib.py (install_first_time): Added comment on how to
3952 configure the color options for first-time users. Put a <return>
3959 configure the color options for first-time users. Put a <return>
3953 request at the end so that small-terminal users get a chance to
3960 request at the end so that small-terminal users get a chance to
3954 read the startup info.
3961 read the startup info.
3955
3962
3956 2002-01-23 Fernando Perez <fperez@colorado.edu>
3963 2002-01-23 Fernando Perez <fperez@colorado.edu>
3957
3964
3958 * IPython/iplib.py (CachedOutput.update): Changed output memory
3965 * IPython/iplib.py (CachedOutput.update): Changed output memory
3959 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3966 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3960 input history we still use _i. Did this b/c these variable are
3967 input history we still use _i. Did this b/c these variable are
3961 very commonly used in interactive work, so the less we need to
3968 very commonly used in interactive work, so the less we need to
3962 type the better off we are.
3969 type the better off we are.
3963 (Magic.magic_prun): updated @prun to better handle the namespaces
3970 (Magic.magic_prun): updated @prun to better handle the namespaces
3964 the file will run in, including a fix for __name__ not being set
3971 the file will run in, including a fix for __name__ not being set
3965 before.
3972 before.
3966
3973
3967 2002-01-20 Fernando Perez <fperez@colorado.edu>
3974 2002-01-20 Fernando Perez <fperez@colorado.edu>
3968
3975
3969 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3976 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3970 extra garbage for Python 2.2. Need to look more carefully into
3977 extra garbage for Python 2.2. Need to look more carefully into
3971 this later.
3978 this later.
3972
3979
3973 2002-01-19 Fernando Perez <fperez@colorado.edu>
3980 2002-01-19 Fernando Perez <fperez@colorado.edu>
3974
3981
3975 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3982 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3976 display SyntaxError exceptions properly formatted when they occur
3983 display SyntaxError exceptions properly formatted when they occur
3977 (they can be triggered by imported code).
3984 (they can be triggered by imported code).
3978
3985
3979 2002-01-18 Fernando Perez <fperez@colorado.edu>
3986 2002-01-18 Fernando Perez <fperez@colorado.edu>
3980
3987
3981 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3988 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3982 SyntaxError exceptions are reported nicely formatted, instead of
3989 SyntaxError exceptions are reported nicely formatted, instead of
3983 spitting out only offset information as before.
3990 spitting out only offset information as before.
3984 (Magic.magic_prun): Added the @prun function for executing
3991 (Magic.magic_prun): Added the @prun function for executing
3985 programs with command line args inside IPython.
3992 programs with command line args inside IPython.
3986
3993
3987 2002-01-16 Fernando Perez <fperez@colorado.edu>
3994 2002-01-16 Fernando Perez <fperez@colorado.edu>
3988
3995
3989 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3996 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3990 to *not* include the last item given in a range. This brings their
3997 to *not* include the last item given in a range. This brings their
3991 behavior in line with Python's slicing:
3998 behavior in line with Python's slicing:
3992 a[n1:n2] -> a[n1]...a[n2-1]
3999 a[n1:n2] -> a[n1]...a[n2-1]
3993 It may be a bit less convenient, but I prefer to stick to Python's
4000 It may be a bit less convenient, but I prefer to stick to Python's
3994 conventions *everywhere*, so users never have to wonder.
4001 conventions *everywhere*, so users never have to wonder.
3995 (Magic.magic_macro): Added @macro function to ease the creation of
4002 (Magic.magic_macro): Added @macro function to ease the creation of
3996 macros.
4003 macros.
3997
4004
3998 2002-01-05 Fernando Perez <fperez@colorado.edu>
4005 2002-01-05 Fernando Perez <fperez@colorado.edu>
3999
4006
4000 * Released 0.2.4.
4007 * Released 0.2.4.
4001
4008
4002 * IPython/iplib.py (Magic.magic_pdef):
4009 * IPython/iplib.py (Magic.magic_pdef):
4003 (InteractiveShell.safe_execfile): report magic lines and error
4010 (InteractiveShell.safe_execfile): report magic lines and error
4004 lines without line numbers so one can easily copy/paste them for
4011 lines without line numbers so one can easily copy/paste them for
4005 re-execution.
4012 re-execution.
4006
4013
4007 * Updated manual with recent changes.
4014 * Updated manual with recent changes.
4008
4015
4009 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4016 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4010 docstring printing when class? is called. Very handy for knowing
4017 docstring printing when class? is called. Very handy for knowing
4011 how to create class instances (as long as __init__ is well
4018 how to create class instances (as long as __init__ is well
4012 documented, of course :)
4019 documented, of course :)
4013 (Magic.magic_doc): print both class and constructor docstrings.
4020 (Magic.magic_doc): print both class and constructor docstrings.
4014 (Magic.magic_pdef): give constructor info if passed a class and
4021 (Magic.magic_pdef): give constructor info if passed a class and
4015 __call__ info for callable object instances.
4022 __call__ info for callable object instances.
4016
4023
4017 2002-01-04 Fernando Perez <fperez@colorado.edu>
4024 2002-01-04 Fernando Perez <fperez@colorado.edu>
4018
4025
4019 * Made deep_reload() off by default. It doesn't always work
4026 * Made deep_reload() off by default. It doesn't always work
4020 exactly as intended, so it's probably safer to have it off. It's
4027 exactly as intended, so it's probably safer to have it off. It's
4021 still available as dreload() anyway, so nothing is lost.
4028 still available as dreload() anyway, so nothing is lost.
4022
4029
4023 2002-01-02 Fernando Perez <fperez@colorado.edu>
4030 2002-01-02 Fernando Perez <fperez@colorado.edu>
4024
4031
4025 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4032 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4026 so I wanted an updated release).
4033 so I wanted an updated release).
4027
4034
4028 2001-12-27 Fernando Perez <fperez@colorado.edu>
4035 2001-12-27 Fernando Perez <fperez@colorado.edu>
4029
4036
4030 * IPython/iplib.py (InteractiveShell.interact): Added the original
4037 * IPython/iplib.py (InteractiveShell.interact): Added the original
4031 code from 'code.py' for this module in order to change the
4038 code from 'code.py' for this module in order to change the
4032 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4039 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4033 the history cache would break when the user hit Ctrl-C, and
4040 the history cache would break when the user hit Ctrl-C, and
4034 interact() offers no way to add any hooks to it.
4041 interact() offers no way to add any hooks to it.
4035
4042
4036 2001-12-23 Fernando Perez <fperez@colorado.edu>
4043 2001-12-23 Fernando Perez <fperez@colorado.edu>
4037
4044
4038 * setup.py: added check for 'MANIFEST' before trying to remove
4045 * setup.py: added check for 'MANIFEST' before trying to remove
4039 it. Thanks to Sean Reifschneider.
4046 it. Thanks to Sean Reifschneider.
4040
4047
4041 2001-12-22 Fernando Perez <fperez@colorado.edu>
4048 2001-12-22 Fernando Perez <fperez@colorado.edu>
4042
4049
4043 * Released 0.2.2.
4050 * Released 0.2.2.
4044
4051
4045 * Finished (reasonably) writing the manual. Later will add the
4052 * Finished (reasonably) writing the manual. Later will add the
4046 python-standard navigation stylesheets, but for the time being
4053 python-standard navigation stylesheets, but for the time being
4047 it's fairly complete. Distribution will include html and pdf
4054 it's fairly complete. Distribution will include html and pdf
4048 versions.
4055 versions.
4049
4056
4050 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4057 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4051 (MayaVi author).
4058 (MayaVi author).
4052
4059
4053 2001-12-21 Fernando Perez <fperez@colorado.edu>
4060 2001-12-21 Fernando Perez <fperez@colorado.edu>
4054
4061
4055 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4062 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4056 good public release, I think (with the manual and the distutils
4063 good public release, I think (with the manual and the distutils
4057 installer). The manual can use some work, but that can go
4064 installer). The manual can use some work, but that can go
4058 slowly. Otherwise I think it's quite nice for end users. Next
4065 slowly. Otherwise I think it's quite nice for end users. Next
4059 summer, rewrite the guts of it...
4066 summer, rewrite the guts of it...
4060
4067
4061 * Changed format of ipythonrc files to use whitespace as the
4068 * Changed format of ipythonrc files to use whitespace as the
4062 separator instead of an explicit '='. Cleaner.
4069 separator instead of an explicit '='. Cleaner.
4063
4070
4064 2001-12-20 Fernando Perez <fperez@colorado.edu>
4071 2001-12-20 Fernando Perez <fperez@colorado.edu>
4065
4072
4066 * Started a manual in LyX. For now it's just a quick merge of the
4073 * Started a manual in LyX. For now it's just a quick merge of the
4067 various internal docstrings and READMEs. Later it may grow into a
4074 various internal docstrings and READMEs. Later it may grow into a
4068 nice, full-blown manual.
4075 nice, full-blown manual.
4069
4076
4070 * Set up a distutils based installer. Installation should now be
4077 * Set up a distutils based installer. Installation should now be
4071 trivially simple for end-users.
4078 trivially simple for end-users.
4072
4079
4073 2001-12-11 Fernando Perez <fperez@colorado.edu>
4080 2001-12-11 Fernando Perez <fperez@colorado.edu>
4074
4081
4075 * Released 0.2.0. First public release, announced it at
4082 * Released 0.2.0. First public release, announced it at
4076 comp.lang.python. From now on, just bugfixes...
4083 comp.lang.python. From now on, just bugfixes...
4077
4084
4078 * Went through all the files, set copyright/license notices and
4085 * Went through all the files, set copyright/license notices and
4079 cleaned up things. Ready for release.
4086 cleaned up things. Ready for release.
4080
4087
4081 2001-12-10 Fernando Perez <fperez@colorado.edu>
4088 2001-12-10 Fernando Perez <fperez@colorado.edu>
4082
4089
4083 * Changed the first-time installer not to use tarfiles. It's more
4090 * Changed the first-time installer not to use tarfiles. It's more
4084 robust now and less unix-dependent. Also makes it easier for
4091 robust now and less unix-dependent. Also makes it easier for
4085 people to later upgrade versions.
4092 people to later upgrade versions.
4086
4093
4087 * Changed @exit to @abort to reflect the fact that it's pretty
4094 * Changed @exit to @abort to reflect the fact that it's pretty
4088 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4095 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4089 becomes significant only when IPyhton is embedded: in that case,
4096 becomes significant only when IPyhton is embedded: in that case,
4090 C-D closes IPython only, but @abort kills the enclosing program
4097 C-D closes IPython only, but @abort kills the enclosing program
4091 too (unless it had called IPython inside a try catching
4098 too (unless it had called IPython inside a try catching
4092 SystemExit).
4099 SystemExit).
4093
4100
4094 * Created Shell module which exposes the actuall IPython Shell
4101 * Created Shell module which exposes the actuall IPython Shell
4095 classes, currently the normal and the embeddable one. This at
4102 classes, currently the normal and the embeddable one. This at
4096 least offers a stable interface we won't need to change when
4103 least offers a stable interface we won't need to change when
4097 (later) the internals are rewritten. That rewrite will be confined
4104 (later) the internals are rewritten. That rewrite will be confined
4098 to iplib and ipmaker, but the Shell interface should remain as is.
4105 to iplib and ipmaker, but the Shell interface should remain as is.
4099
4106
4100 * Added embed module which offers an embeddable IPShell object,
4107 * Added embed module which offers an embeddable IPShell object,
4101 useful to fire up IPython *inside* a running program. Great for
4108 useful to fire up IPython *inside* a running program. Great for
4102 debugging or dynamical data analysis.
4109 debugging or dynamical data analysis.
4103
4110
4104 2001-12-08 Fernando Perez <fperez@colorado.edu>
4111 2001-12-08 Fernando Perez <fperez@colorado.edu>
4105
4112
4106 * Fixed small bug preventing seeing info from methods of defined
4113 * Fixed small bug preventing seeing info from methods of defined
4107 objects (incorrect namespace in _ofind()).
4114 objects (incorrect namespace in _ofind()).
4108
4115
4109 * Documentation cleanup. Moved the main usage docstrings to a
4116 * Documentation cleanup. Moved the main usage docstrings to a
4110 separate file, usage.py (cleaner to maintain, and hopefully in the
4117 separate file, usage.py (cleaner to maintain, and hopefully in the
4111 future some perlpod-like way of producing interactive, man and
4118 future some perlpod-like way of producing interactive, man and
4112 html docs out of it will be found).
4119 html docs out of it will be found).
4113
4120
4114 * Added @profile to see your profile at any time.
4121 * Added @profile to see your profile at any time.
4115
4122
4116 * Added @p as an alias for 'print'. It's especially convenient if
4123 * Added @p as an alias for 'print'. It's especially convenient if
4117 using automagic ('p x' prints x).
4124 using automagic ('p x' prints x).
4118
4125
4119 * Small cleanups and fixes after a pychecker run.
4126 * Small cleanups and fixes after a pychecker run.
4120
4127
4121 * Changed the @cd command to handle @cd - and @cd -<n> for
4128 * Changed the @cd command to handle @cd - and @cd -<n> for
4122 visiting any directory in _dh.
4129 visiting any directory in _dh.
4123
4130
4124 * Introduced _dh, a history of visited directories. @dhist prints
4131 * Introduced _dh, a history of visited directories. @dhist prints
4125 it out with numbers.
4132 it out with numbers.
4126
4133
4127 2001-12-07 Fernando Perez <fperez@colorado.edu>
4134 2001-12-07 Fernando Perez <fperez@colorado.edu>
4128
4135
4129 * Released 0.1.22
4136 * Released 0.1.22
4130
4137
4131 * Made initialization a bit more robust against invalid color
4138 * Made initialization a bit more robust against invalid color
4132 options in user input (exit, not traceback-crash).
4139 options in user input (exit, not traceback-crash).
4133
4140
4134 * Changed the bug crash reporter to write the report only in the
4141 * Changed the bug crash reporter to write the report only in the
4135 user's .ipython directory. That way IPython won't litter people's
4142 user's .ipython directory. That way IPython won't litter people's
4136 hard disks with crash files all over the place. Also print on
4143 hard disks with crash files all over the place. Also print on
4137 screen the necessary mail command.
4144 screen the necessary mail command.
4138
4145
4139 * With the new ultraTB, implemented LightBG color scheme for light
4146 * With the new ultraTB, implemented LightBG color scheme for light
4140 background terminals. A lot of people like white backgrounds, so I
4147 background terminals. A lot of people like white backgrounds, so I
4141 guess we should at least give them something readable.
4148 guess we should at least give them something readable.
4142
4149
4143 2001-12-06 Fernando Perez <fperez@colorado.edu>
4150 2001-12-06 Fernando Perez <fperez@colorado.edu>
4144
4151
4145 * Modified the structure of ultraTB. Now there's a proper class
4152 * Modified the structure of ultraTB. Now there's a proper class
4146 for tables of color schemes which allow adding schemes easily and
4153 for tables of color schemes which allow adding schemes easily and
4147 switching the active scheme without creating a new instance every
4154 switching the active scheme without creating a new instance every
4148 time (which was ridiculous). The syntax for creating new schemes
4155 time (which was ridiculous). The syntax for creating new schemes
4149 is also cleaner. I think ultraTB is finally done, with a clean
4156 is also cleaner. I think ultraTB is finally done, with a clean
4150 class structure. Names are also much cleaner (now there's proper
4157 class structure. Names are also much cleaner (now there's proper
4151 color tables, no need for every variable to also have 'color' in
4158 color tables, no need for every variable to also have 'color' in
4152 its name).
4159 its name).
4153
4160
4154 * Broke down genutils into separate files. Now genutils only
4161 * Broke down genutils into separate files. Now genutils only
4155 contains utility functions, and classes have been moved to their
4162 contains utility functions, and classes have been moved to their
4156 own files (they had enough independent functionality to warrant
4163 own files (they had enough independent functionality to warrant
4157 it): ConfigLoader, OutputTrap, Struct.
4164 it): ConfigLoader, OutputTrap, Struct.
4158
4165
4159 2001-12-05 Fernando Perez <fperez@colorado.edu>
4166 2001-12-05 Fernando Perez <fperez@colorado.edu>
4160
4167
4161 * IPython turns 21! Released version 0.1.21, as a candidate for
4168 * IPython turns 21! Released version 0.1.21, as a candidate for
4162 public consumption. If all goes well, release in a few days.
4169 public consumption. If all goes well, release in a few days.
4163
4170
4164 * Fixed path bug (files in Extensions/ directory wouldn't be found
4171 * Fixed path bug (files in Extensions/ directory wouldn't be found
4165 unless IPython/ was explicitly in sys.path).
4172 unless IPython/ was explicitly in sys.path).
4166
4173
4167 * Extended the FlexCompleter class as MagicCompleter to allow
4174 * Extended the FlexCompleter class as MagicCompleter to allow
4168 completion of @-starting lines.
4175 completion of @-starting lines.
4169
4176
4170 * Created __release__.py file as a central repository for release
4177 * Created __release__.py file as a central repository for release
4171 info that other files can read from.
4178 info that other files can read from.
4172
4179
4173 * Fixed small bug in logging: when logging was turned on in
4180 * Fixed small bug in logging: when logging was turned on in
4174 mid-session, old lines with special meanings (!@?) were being
4181 mid-session, old lines with special meanings (!@?) were being
4175 logged without the prepended comment, which is necessary since
4182 logged without the prepended comment, which is necessary since
4176 they are not truly valid python syntax. This should make session
4183 they are not truly valid python syntax. This should make session
4177 restores produce less errors.
4184 restores produce less errors.
4178
4185
4179 * The namespace cleanup forced me to make a FlexCompleter class
4186 * The namespace cleanup forced me to make a FlexCompleter class
4180 which is nothing but a ripoff of rlcompleter, but with selectable
4187 which is nothing but a ripoff of rlcompleter, but with selectable
4181 namespace (rlcompleter only works in __main__.__dict__). I'll try
4188 namespace (rlcompleter only works in __main__.__dict__). I'll try
4182 to submit a note to the authors to see if this change can be
4189 to submit a note to the authors to see if this change can be
4183 incorporated in future rlcompleter releases (Dec.6: done)
4190 incorporated in future rlcompleter releases (Dec.6: done)
4184
4191
4185 * More fixes to namespace handling. It was a mess! Now all
4192 * More fixes to namespace handling. It was a mess! Now all
4186 explicit references to __main__.__dict__ are gone (except when
4193 explicit references to __main__.__dict__ are gone (except when
4187 really needed) and everything is handled through the namespace
4194 really needed) and everything is handled through the namespace
4188 dicts in the IPython instance. We seem to be getting somewhere
4195 dicts in the IPython instance. We seem to be getting somewhere
4189 with this, finally...
4196 with this, finally...
4190
4197
4191 * Small documentation updates.
4198 * Small documentation updates.
4192
4199
4193 * Created the Extensions directory under IPython (with an
4200 * Created the Extensions directory under IPython (with an
4194 __init__.py). Put the PhysicalQ stuff there. This directory should
4201 __init__.py). Put the PhysicalQ stuff there. This directory should
4195 be used for all special-purpose extensions.
4202 be used for all special-purpose extensions.
4196
4203
4197 * File renaming:
4204 * File renaming:
4198 ipythonlib --> ipmaker
4205 ipythonlib --> ipmaker
4199 ipplib --> iplib
4206 ipplib --> iplib
4200 This makes a bit more sense in terms of what these files actually do.
4207 This makes a bit more sense in terms of what these files actually do.
4201
4208
4202 * Moved all the classes and functions in ipythonlib to ipplib, so
4209 * Moved all the classes and functions in ipythonlib to ipplib, so
4203 now ipythonlib only has make_IPython(). This will ease up its
4210 now ipythonlib only has make_IPython(). This will ease up its
4204 splitting in smaller functional chunks later.
4211 splitting in smaller functional chunks later.
4205
4212
4206 * Cleaned up (done, I think) output of @whos. Better column
4213 * Cleaned up (done, I think) output of @whos. Better column
4207 formatting, and now shows str(var) for as much as it can, which is
4214 formatting, and now shows str(var) for as much as it can, which is
4208 typically what one gets with a 'print var'.
4215 typically what one gets with a 'print var'.
4209
4216
4210 2001-12-04 Fernando Perez <fperez@colorado.edu>
4217 2001-12-04 Fernando Perez <fperez@colorado.edu>
4211
4218
4212 * Fixed namespace problems. Now builtin/IPyhton/user names get
4219 * Fixed namespace problems. Now builtin/IPyhton/user names get
4213 properly reported in their namespace. Internal namespace handling
4220 properly reported in their namespace. Internal namespace handling
4214 is finally getting decent (not perfect yet, but much better than
4221 is finally getting decent (not perfect yet, but much better than
4215 the ad-hoc mess we had).
4222 the ad-hoc mess we had).
4216
4223
4217 * Removed -exit option. If people just want to run a python
4224 * Removed -exit option. If people just want to run a python
4218 script, that's what the normal interpreter is for. Less
4225 script, that's what the normal interpreter is for. Less
4219 unnecessary options, less chances for bugs.
4226 unnecessary options, less chances for bugs.
4220
4227
4221 * Added a crash handler which generates a complete post-mortem if
4228 * Added a crash handler which generates a complete post-mortem if
4222 IPython crashes. This will help a lot in tracking bugs down the
4229 IPython crashes. This will help a lot in tracking bugs down the
4223 road.
4230 road.
4224
4231
4225 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4232 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4226 which were boud to functions being reassigned would bypass the
4233 which were boud to functions being reassigned would bypass the
4227 logger, breaking the sync of _il with the prompt counter. This
4234 logger, breaking the sync of _il with the prompt counter. This
4228 would then crash IPython later when a new line was logged.
4235 would then crash IPython later when a new line was logged.
4229
4236
4230 2001-12-02 Fernando Perez <fperez@colorado.edu>
4237 2001-12-02 Fernando Perez <fperez@colorado.edu>
4231
4238
4232 * Made IPython a package. This means people don't have to clutter
4239 * Made IPython a package. This means people don't have to clutter
4233 their sys.path with yet another directory. Changed the INSTALL
4240 their sys.path with yet another directory. Changed the INSTALL
4234 file accordingly.
4241 file accordingly.
4235
4242
4236 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4243 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4237 sorts its output (so @who shows it sorted) and @whos formats the
4244 sorts its output (so @who shows it sorted) and @whos formats the
4238 table according to the width of the first column. Nicer, easier to
4245 table according to the width of the first column. Nicer, easier to
4239 read. Todo: write a generic table_format() which takes a list of
4246 read. Todo: write a generic table_format() which takes a list of
4240 lists and prints it nicely formatted, with optional row/column
4247 lists and prints it nicely formatted, with optional row/column
4241 separators and proper padding and justification.
4248 separators and proper padding and justification.
4242
4249
4243 * Released 0.1.20
4250 * Released 0.1.20
4244
4251
4245 * Fixed bug in @log which would reverse the inputcache list (a
4252 * Fixed bug in @log which would reverse the inputcache list (a
4246 copy operation was missing).
4253 copy operation was missing).
4247
4254
4248 * Code cleanup. @config was changed to use page(). Better, since
4255 * Code cleanup. @config was changed to use page(). Better, since
4249 its output is always quite long.
4256 its output is always quite long.
4250
4257
4251 * Itpl is back as a dependency. I was having too many problems
4258 * Itpl is back as a dependency. I was having too many problems
4252 getting the parametric aliases to work reliably, and it's just
4259 getting the parametric aliases to work reliably, and it's just
4253 easier to code weird string operations with it than playing %()s
4260 easier to code weird string operations with it than playing %()s
4254 games. It's only ~6k, so I don't think it's too big a deal.
4261 games. It's only ~6k, so I don't think it's too big a deal.
4255
4262
4256 * Found (and fixed) a very nasty bug with history. !lines weren't
4263 * Found (and fixed) a very nasty bug with history. !lines weren't
4257 getting cached, and the out of sync caches would crash
4264 getting cached, and the out of sync caches would crash
4258 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4265 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4259 division of labor a bit better. Bug fixed, cleaner structure.
4266 division of labor a bit better. Bug fixed, cleaner structure.
4260
4267
4261 2001-12-01 Fernando Perez <fperez@colorado.edu>
4268 2001-12-01 Fernando Perez <fperez@colorado.edu>
4262
4269
4263 * Released 0.1.19
4270 * Released 0.1.19
4264
4271
4265 * Added option -n to @hist to prevent line number printing. Much
4272 * Added option -n to @hist to prevent line number printing. Much
4266 easier to copy/paste code this way.
4273 easier to copy/paste code this way.
4267
4274
4268 * Created global _il to hold the input list. Allows easy
4275 * Created global _il to hold the input list. Allows easy
4269 re-execution of blocks of code by slicing it (inspired by Janko's
4276 re-execution of blocks of code by slicing it (inspired by Janko's
4270 comment on 'macros').
4277 comment on 'macros').
4271
4278
4272 * Small fixes and doc updates.
4279 * Small fixes and doc updates.
4273
4280
4274 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4281 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4275 much too fragile with automagic. Handles properly multi-line
4282 much too fragile with automagic. Handles properly multi-line
4276 statements and takes parameters.
4283 statements and takes parameters.
4277
4284
4278 2001-11-30 Fernando Perez <fperez@colorado.edu>
4285 2001-11-30 Fernando Perez <fperez@colorado.edu>
4279
4286
4280 * Version 0.1.18 released.
4287 * Version 0.1.18 released.
4281
4288
4282 * Fixed nasty namespace bug in initial module imports.
4289 * Fixed nasty namespace bug in initial module imports.
4283
4290
4284 * Added copyright/license notes to all code files (except
4291 * Added copyright/license notes to all code files (except
4285 DPyGetOpt). For the time being, LGPL. That could change.
4292 DPyGetOpt). For the time being, LGPL. That could change.
4286
4293
4287 * Rewrote a much nicer README, updated INSTALL, cleaned up
4294 * Rewrote a much nicer README, updated INSTALL, cleaned up
4288 ipythonrc-* samples.
4295 ipythonrc-* samples.
4289
4296
4290 * Overall code/documentation cleanup. Basically ready for
4297 * Overall code/documentation cleanup. Basically ready for
4291 release. Only remaining thing: licence decision (LGPL?).
4298 release. Only remaining thing: licence decision (LGPL?).
4292
4299
4293 * Converted load_config to a class, ConfigLoader. Now recursion
4300 * Converted load_config to a class, ConfigLoader. Now recursion
4294 control is better organized. Doesn't include the same file twice.
4301 control is better organized. Doesn't include the same file twice.
4295
4302
4296 2001-11-29 Fernando Perez <fperez@colorado.edu>
4303 2001-11-29 Fernando Perez <fperez@colorado.edu>
4297
4304
4298 * Got input history working. Changed output history variables from
4305 * Got input history working. Changed output history variables from
4299 _p to _o so that _i is for input and _o for output. Just cleaner
4306 _p to _o so that _i is for input and _o for output. Just cleaner
4300 convention.
4307 convention.
4301
4308
4302 * Implemented parametric aliases. This pretty much allows the
4309 * Implemented parametric aliases. This pretty much allows the
4303 alias system to offer full-blown shell convenience, I think.
4310 alias system to offer full-blown shell convenience, I think.
4304
4311
4305 * Version 0.1.17 released, 0.1.18 opened.
4312 * Version 0.1.17 released, 0.1.18 opened.
4306
4313
4307 * dot_ipython/ipythonrc (alias): added documentation.
4314 * dot_ipython/ipythonrc (alias): added documentation.
4308 (xcolor): Fixed small bug (xcolors -> xcolor)
4315 (xcolor): Fixed small bug (xcolors -> xcolor)
4309
4316
4310 * Changed the alias system. Now alias is a magic command to define
4317 * Changed the alias system. Now alias is a magic command to define
4311 aliases just like the shell. Rationale: the builtin magics should
4318 aliases just like the shell. Rationale: the builtin magics should
4312 be there for things deeply connected to IPython's
4319 be there for things deeply connected to IPython's
4313 architecture. And this is a much lighter system for what I think
4320 architecture. And this is a much lighter system for what I think
4314 is the really important feature: allowing users to define quickly
4321 is the really important feature: allowing users to define quickly
4315 magics that will do shell things for them, so they can customize
4322 magics that will do shell things for them, so they can customize
4316 IPython easily to match their work habits. If someone is really
4323 IPython easily to match their work habits. If someone is really
4317 desperate to have another name for a builtin alias, they can
4324 desperate to have another name for a builtin alias, they can
4318 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4325 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4319 works.
4326 works.
4320
4327
4321 2001-11-28 Fernando Perez <fperez@colorado.edu>
4328 2001-11-28 Fernando Perez <fperez@colorado.edu>
4322
4329
4323 * Changed @file so that it opens the source file at the proper
4330 * Changed @file so that it opens the source file at the proper
4324 line. Since it uses less, if your EDITOR environment is
4331 line. Since it uses less, if your EDITOR environment is
4325 configured, typing v will immediately open your editor of choice
4332 configured, typing v will immediately open your editor of choice
4326 right at the line where the object is defined. Not as quick as
4333 right at the line where the object is defined. Not as quick as
4327 having a direct @edit command, but for all intents and purposes it
4334 having a direct @edit command, but for all intents and purposes it
4328 works. And I don't have to worry about writing @edit to deal with
4335 works. And I don't have to worry about writing @edit to deal with
4329 all the editors, less does that.
4336 all the editors, less does that.
4330
4337
4331 * Version 0.1.16 released, 0.1.17 opened.
4338 * Version 0.1.16 released, 0.1.17 opened.
4332
4339
4333 * Fixed some nasty bugs in the page/page_dumb combo that could
4340 * Fixed some nasty bugs in the page/page_dumb combo that could
4334 crash IPython.
4341 crash IPython.
4335
4342
4336 2001-11-27 Fernando Perez <fperez@colorado.edu>
4343 2001-11-27 Fernando Perez <fperez@colorado.edu>
4337
4344
4338 * Version 0.1.15 released, 0.1.16 opened.
4345 * Version 0.1.15 released, 0.1.16 opened.
4339
4346
4340 * Finally got ? and ?? to work for undefined things: now it's
4347 * Finally got ? and ?? to work for undefined things: now it's
4341 possible to type {}.get? and get information about the get method
4348 possible to type {}.get? and get information about the get method
4342 of dicts, or os.path? even if only os is defined (so technically
4349 of dicts, or os.path? even if only os is defined (so technically
4343 os.path isn't). Works at any level. For example, after import os,
4350 os.path isn't). Works at any level. For example, after import os,
4344 os?, os.path?, os.path.abspath? all work. This is great, took some
4351 os?, os.path?, os.path.abspath? all work. This is great, took some
4345 work in _ofind.
4352 work in _ofind.
4346
4353
4347 * Fixed more bugs with logging. The sanest way to do it was to add
4354 * Fixed more bugs with logging. The sanest way to do it was to add
4348 to @log a 'mode' parameter. Killed two in one shot (this mode
4355 to @log a 'mode' parameter. Killed two in one shot (this mode
4349 option was a request of Janko's). I think it's finally clean
4356 option was a request of Janko's). I think it's finally clean
4350 (famous last words).
4357 (famous last words).
4351
4358
4352 * Added a page_dumb() pager which does a decent job of paging on
4359 * Added a page_dumb() pager which does a decent job of paging on
4353 screen, if better things (like less) aren't available. One less
4360 screen, if better things (like less) aren't available. One less
4354 unix dependency (someday maybe somebody will port this to
4361 unix dependency (someday maybe somebody will port this to
4355 windows).
4362 windows).
4356
4363
4357 * Fixed problem in magic_log: would lock of logging out if log
4364 * Fixed problem in magic_log: would lock of logging out if log
4358 creation failed (because it would still think it had succeeded).
4365 creation failed (because it would still think it had succeeded).
4359
4366
4360 * Improved the page() function using curses to auto-detect screen
4367 * Improved the page() function using curses to auto-detect screen
4361 size. Now it can make a much better decision on whether to print
4368 size. Now it can make a much better decision on whether to print
4362 or page a string. Option screen_length was modified: a value 0
4369 or page a string. Option screen_length was modified: a value 0
4363 means auto-detect, and that's the default now.
4370 means auto-detect, and that's the default now.
4364
4371
4365 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4372 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4366 go out. I'll test it for a few days, then talk to Janko about
4373 go out. I'll test it for a few days, then talk to Janko about
4367 licences and announce it.
4374 licences and announce it.
4368
4375
4369 * Fixed the length of the auto-generated ---> prompt which appears
4376 * Fixed the length of the auto-generated ---> prompt which appears
4370 for auto-parens and auto-quotes. Getting this right isn't trivial,
4377 for auto-parens and auto-quotes. Getting this right isn't trivial,
4371 with all the color escapes, different prompt types and optional
4378 with all the color escapes, different prompt types and optional
4372 separators. But it seems to be working in all the combinations.
4379 separators. But it seems to be working in all the combinations.
4373
4380
4374 2001-11-26 Fernando Perez <fperez@colorado.edu>
4381 2001-11-26 Fernando Perez <fperez@colorado.edu>
4375
4382
4376 * Wrote a regexp filter to get option types from the option names
4383 * Wrote a regexp filter to get option types from the option names
4377 string. This eliminates the need to manually keep two duplicate
4384 string. This eliminates the need to manually keep two duplicate
4378 lists.
4385 lists.
4379
4386
4380 * Removed the unneeded check_option_names. Now options are handled
4387 * Removed the unneeded check_option_names. Now options are handled
4381 in a much saner manner and it's easy to visually check that things
4388 in a much saner manner and it's easy to visually check that things
4382 are ok.
4389 are ok.
4383
4390
4384 * Updated version numbers on all files I modified to carry a
4391 * Updated version numbers on all files I modified to carry a
4385 notice so Janko and Nathan have clear version markers.
4392 notice so Janko and Nathan have clear version markers.
4386
4393
4387 * Updated docstring for ultraTB with my changes. I should send
4394 * Updated docstring for ultraTB with my changes. I should send
4388 this to Nathan.
4395 this to Nathan.
4389
4396
4390 * Lots of small fixes. Ran everything through pychecker again.
4397 * Lots of small fixes. Ran everything through pychecker again.
4391
4398
4392 * Made loading of deep_reload an cmd line option. If it's not too
4399 * Made loading of deep_reload an cmd line option. If it's not too
4393 kosher, now people can just disable it. With -nodeep_reload it's
4400 kosher, now people can just disable it. With -nodeep_reload it's
4394 still available as dreload(), it just won't overwrite reload().
4401 still available as dreload(), it just won't overwrite reload().
4395
4402
4396 * Moved many options to the no| form (-opt and -noopt
4403 * Moved many options to the no| form (-opt and -noopt
4397 accepted). Cleaner.
4404 accepted). Cleaner.
4398
4405
4399 * Changed magic_log so that if called with no parameters, it uses
4406 * Changed magic_log so that if called with no parameters, it uses
4400 'rotate' mode. That way auto-generated logs aren't automatically
4407 'rotate' mode. That way auto-generated logs aren't automatically
4401 over-written. For normal logs, now a backup is made if it exists
4408 over-written. For normal logs, now a backup is made if it exists
4402 (only 1 level of backups). A new 'backup' mode was added to the
4409 (only 1 level of backups). A new 'backup' mode was added to the
4403 Logger class to support this. This was a request by Janko.
4410 Logger class to support this. This was a request by Janko.
4404
4411
4405 * Added @logoff/@logon to stop/restart an active log.
4412 * Added @logoff/@logon to stop/restart an active log.
4406
4413
4407 * Fixed a lot of bugs in log saving/replay. It was pretty
4414 * Fixed a lot of bugs in log saving/replay. It was pretty
4408 broken. Now special lines (!@,/) appear properly in the command
4415 broken. Now special lines (!@,/) appear properly in the command
4409 history after a log replay.
4416 history after a log replay.
4410
4417
4411 * Tried and failed to implement full session saving via pickle. My
4418 * Tried and failed to implement full session saving via pickle. My
4412 idea was to pickle __main__.__dict__, but modules can't be
4419 idea was to pickle __main__.__dict__, but modules can't be
4413 pickled. This would be a better alternative to replaying logs, but
4420 pickled. This would be a better alternative to replaying logs, but
4414 seems quite tricky to get to work. Changed -session to be called
4421 seems quite tricky to get to work. Changed -session to be called
4415 -logplay, which more accurately reflects what it does. And if we
4422 -logplay, which more accurately reflects what it does. And if we
4416 ever get real session saving working, -session is now available.
4423 ever get real session saving working, -session is now available.
4417
4424
4418 * Implemented color schemes for prompts also. As for tracebacks,
4425 * Implemented color schemes for prompts also. As for tracebacks,
4419 currently only NoColor and Linux are supported. But now the
4426 currently only NoColor and Linux are supported. But now the
4420 infrastructure is in place, based on a generic ColorScheme
4427 infrastructure is in place, based on a generic ColorScheme
4421 class. So writing and activating new schemes both for the prompts
4428 class. So writing and activating new schemes both for the prompts
4422 and the tracebacks should be straightforward.
4429 and the tracebacks should be straightforward.
4423
4430
4424 * Version 0.1.13 released, 0.1.14 opened.
4431 * Version 0.1.13 released, 0.1.14 opened.
4425
4432
4426 * Changed handling of options for output cache. Now counter is
4433 * Changed handling of options for output cache. Now counter is
4427 hardwired starting at 1 and one specifies the maximum number of
4434 hardwired starting at 1 and one specifies the maximum number of
4428 entries *in the outcache* (not the max prompt counter). This is
4435 entries *in the outcache* (not the max prompt counter). This is
4429 much better, since many statements won't increase the cache
4436 much better, since many statements won't increase the cache
4430 count. It also eliminated some confusing options, now there's only
4437 count. It also eliminated some confusing options, now there's only
4431 one: cache_size.
4438 one: cache_size.
4432
4439
4433 * Added 'alias' magic function and magic_alias option in the
4440 * Added 'alias' magic function and magic_alias option in the
4434 ipythonrc file. Now the user can easily define whatever names he
4441 ipythonrc file. Now the user can easily define whatever names he
4435 wants for the magic functions without having to play weird
4442 wants for the magic functions without having to play weird
4436 namespace games. This gives IPython a real shell-like feel.
4443 namespace games. This gives IPython a real shell-like feel.
4437
4444
4438 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4445 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4439 @ or not).
4446 @ or not).
4440
4447
4441 This was one of the last remaining 'visible' bugs (that I know
4448 This was one of the last remaining 'visible' bugs (that I know
4442 of). I think if I can clean up the session loading so it works
4449 of). I think if I can clean up the session loading so it works
4443 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4450 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4444 about licensing).
4451 about licensing).
4445
4452
4446 2001-11-25 Fernando Perez <fperez@colorado.edu>
4453 2001-11-25 Fernando Perez <fperez@colorado.edu>
4447
4454
4448 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4455 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4449 there's a cleaner distinction between what ? and ?? show.
4456 there's a cleaner distinction between what ? and ?? show.
4450
4457
4451 * Added screen_length option. Now the user can define his own
4458 * Added screen_length option. Now the user can define his own
4452 screen size for page() operations.
4459 screen size for page() operations.
4453
4460
4454 * Implemented magic shell-like functions with automatic code
4461 * Implemented magic shell-like functions with automatic code
4455 generation. Now adding another function is just a matter of adding
4462 generation. Now adding another function is just a matter of adding
4456 an entry to a dict, and the function is dynamically generated at
4463 an entry to a dict, and the function is dynamically generated at
4457 run-time. Python has some really cool features!
4464 run-time. Python has some really cool features!
4458
4465
4459 * Renamed many options to cleanup conventions a little. Now all
4466 * Renamed many options to cleanup conventions a little. Now all
4460 are lowercase, and only underscores where needed. Also in the code
4467 are lowercase, and only underscores where needed. Also in the code
4461 option name tables are clearer.
4468 option name tables are clearer.
4462
4469
4463 * Changed prompts a little. Now input is 'In [n]:' instead of
4470 * Changed prompts a little. Now input is 'In [n]:' instead of
4464 'In[n]:='. This allows it the numbers to be aligned with the
4471 'In[n]:='. This allows it the numbers to be aligned with the
4465 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4472 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4466 Python (it was a Mathematica thing). The '...' continuation prompt
4473 Python (it was a Mathematica thing). The '...' continuation prompt
4467 was also changed a little to align better.
4474 was also changed a little to align better.
4468
4475
4469 * Fixed bug when flushing output cache. Not all _p<n> variables
4476 * Fixed bug when flushing output cache. Not all _p<n> variables
4470 exist, so their deletion needs to be wrapped in a try:
4477 exist, so their deletion needs to be wrapped in a try:
4471
4478
4472 * Figured out how to properly use inspect.formatargspec() (it
4479 * Figured out how to properly use inspect.formatargspec() (it
4473 requires the args preceded by *). So I removed all the code from
4480 requires the args preceded by *). So I removed all the code from
4474 _get_pdef in Magic, which was just replicating that.
4481 _get_pdef in Magic, which was just replicating that.
4475
4482
4476 * Added test to prefilter to allow redefining magic function names
4483 * Added test to prefilter to allow redefining magic function names
4477 as variables. This is ok, since the @ form is always available,
4484 as variables. This is ok, since the @ form is always available,
4478 but whe should allow the user to define a variable called 'ls' if
4485 but whe should allow the user to define a variable called 'ls' if
4479 he needs it.
4486 he needs it.
4480
4487
4481 * Moved the ToDo information from README into a separate ToDo.
4488 * Moved the ToDo information from README into a separate ToDo.
4482
4489
4483 * General code cleanup and small bugfixes. I think it's close to a
4490 * General code cleanup and small bugfixes. I think it's close to a
4484 state where it can be released, obviously with a big 'beta'
4491 state where it can be released, obviously with a big 'beta'
4485 warning on it.
4492 warning on it.
4486
4493
4487 * Got the magic function split to work. Now all magics are defined
4494 * Got the magic function split to work. Now all magics are defined
4488 in a separate class. It just organizes things a bit, and now
4495 in a separate class. It just organizes things a bit, and now
4489 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4496 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4490 was too long).
4497 was too long).
4491
4498
4492 * Changed @clear to @reset to avoid potential confusions with
4499 * Changed @clear to @reset to avoid potential confusions with
4493 the shell command clear. Also renamed @cl to @clear, which does
4500 the shell command clear. Also renamed @cl to @clear, which does
4494 exactly what people expect it to from their shell experience.
4501 exactly what people expect it to from their shell experience.
4495
4502
4496 Added a check to the @reset command (since it's so
4503 Added a check to the @reset command (since it's so
4497 destructive, it's probably a good idea to ask for confirmation).
4504 destructive, it's probably a good idea to ask for confirmation).
4498 But now reset only works for full namespace resetting. Since the
4505 But now reset only works for full namespace resetting. Since the
4499 del keyword is already there for deleting a few specific
4506 del keyword is already there for deleting a few specific
4500 variables, I don't see the point of having a redundant magic
4507 variables, I don't see the point of having a redundant magic
4501 function for the same task.
4508 function for the same task.
4502
4509
4503 2001-11-24 Fernando Perez <fperez@colorado.edu>
4510 2001-11-24 Fernando Perez <fperez@colorado.edu>
4504
4511
4505 * Updated the builtin docs (esp. the ? ones).
4512 * Updated the builtin docs (esp. the ? ones).
4506
4513
4507 * Ran all the code through pychecker. Not terribly impressed with
4514 * Ran all the code through pychecker. Not terribly impressed with
4508 it: lots of spurious warnings and didn't really find anything of
4515 it: lots of spurious warnings and didn't really find anything of
4509 substance (just a few modules being imported and not used).
4516 substance (just a few modules being imported and not used).
4510
4517
4511 * Implemented the new ultraTB functionality into IPython. New
4518 * Implemented the new ultraTB functionality into IPython. New
4512 option: xcolors. This chooses color scheme. xmode now only selects
4519 option: xcolors. This chooses color scheme. xmode now only selects
4513 between Plain and Verbose. Better orthogonality.
4520 between Plain and Verbose. Better orthogonality.
4514
4521
4515 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4522 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4516 mode and color scheme for the exception handlers. Now it's
4523 mode and color scheme for the exception handlers. Now it's
4517 possible to have the verbose traceback with no coloring.
4524 possible to have the verbose traceback with no coloring.
4518
4525
4519 2001-11-23 Fernando Perez <fperez@colorado.edu>
4526 2001-11-23 Fernando Perez <fperez@colorado.edu>
4520
4527
4521 * Version 0.1.12 released, 0.1.13 opened.
4528 * Version 0.1.12 released, 0.1.13 opened.
4522
4529
4523 * Removed option to set auto-quote and auto-paren escapes by
4530 * Removed option to set auto-quote and auto-paren escapes by
4524 user. The chances of breaking valid syntax are just too high. If
4531 user. The chances of breaking valid syntax are just too high. If
4525 someone *really* wants, they can always dig into the code.
4532 someone *really* wants, they can always dig into the code.
4526
4533
4527 * Made prompt separators configurable.
4534 * Made prompt separators configurable.
4528
4535
4529 2001-11-22 Fernando Perez <fperez@colorado.edu>
4536 2001-11-22 Fernando Perez <fperez@colorado.edu>
4530
4537
4531 * Small bugfixes in many places.
4538 * Small bugfixes in many places.
4532
4539
4533 * Removed the MyCompleter class from ipplib. It seemed redundant
4540 * Removed the MyCompleter class from ipplib. It seemed redundant
4534 with the C-p,C-n history search functionality. Less code to
4541 with the C-p,C-n history search functionality. Less code to
4535 maintain.
4542 maintain.
4536
4543
4537 * Moved all the original ipython.py code into ipythonlib.py. Right
4544 * Moved all the original ipython.py code into ipythonlib.py. Right
4538 now it's just one big dump into a function called make_IPython, so
4545 now it's just one big dump into a function called make_IPython, so
4539 no real modularity has been gained. But at least it makes the
4546 no real modularity has been gained. But at least it makes the
4540 wrapper script tiny, and since ipythonlib is a module, it gets
4547 wrapper script tiny, and since ipythonlib is a module, it gets
4541 compiled and startup is much faster.
4548 compiled and startup is much faster.
4542
4549
4543 This is a reasobably 'deep' change, so we should test it for a
4550 This is a reasobably 'deep' change, so we should test it for a
4544 while without messing too much more with the code.
4551 while without messing too much more with the code.
4545
4552
4546 2001-11-21 Fernando Perez <fperez@colorado.edu>
4553 2001-11-21 Fernando Perez <fperez@colorado.edu>
4547
4554
4548 * Version 0.1.11 released, 0.1.12 opened for further work.
4555 * Version 0.1.11 released, 0.1.12 opened for further work.
4549
4556
4550 * Removed dependency on Itpl. It was only needed in one place. It
4557 * Removed dependency on Itpl. It was only needed in one place. It
4551 would be nice if this became part of python, though. It makes life
4558 would be nice if this became part of python, though. It makes life
4552 *a lot* easier in some cases.
4559 *a lot* easier in some cases.
4553
4560
4554 * Simplified the prefilter code a bit. Now all handlers are
4561 * Simplified the prefilter code a bit. Now all handlers are
4555 expected to explicitly return a value (at least a blank string).
4562 expected to explicitly return a value (at least a blank string).
4556
4563
4557 * Heavy edits in ipplib. Removed the help system altogether. Now
4564 * Heavy edits in ipplib. Removed the help system altogether. Now
4558 obj?/?? is used for inspecting objects, a magic @doc prints
4565 obj?/?? is used for inspecting objects, a magic @doc prints
4559 docstrings, and full-blown Python help is accessed via the 'help'
4566 docstrings, and full-blown Python help is accessed via the 'help'
4560 keyword. This cleans up a lot of code (less to maintain) and does
4567 keyword. This cleans up a lot of code (less to maintain) and does
4561 the job. Since 'help' is now a standard Python component, might as
4568 the job. Since 'help' is now a standard Python component, might as
4562 well use it and remove duplicate functionality.
4569 well use it and remove duplicate functionality.
4563
4570
4564 Also removed the option to use ipplib as a standalone program. By
4571 Also removed the option to use ipplib as a standalone program. By
4565 now it's too dependent on other parts of IPython to function alone.
4572 now it's too dependent on other parts of IPython to function alone.
4566
4573
4567 * Fixed bug in genutils.pager. It would crash if the pager was
4574 * Fixed bug in genutils.pager. It would crash if the pager was
4568 exited immediately after opening (broken pipe).
4575 exited immediately after opening (broken pipe).
4569
4576
4570 * Trimmed down the VerboseTB reporting a little. The header is
4577 * Trimmed down the VerboseTB reporting a little. The header is
4571 much shorter now and the repeated exception arguments at the end
4578 much shorter now and the repeated exception arguments at the end
4572 have been removed. For interactive use the old header seemed a bit
4579 have been removed. For interactive use the old header seemed a bit
4573 excessive.
4580 excessive.
4574
4581
4575 * Fixed small bug in output of @whos for variables with multi-word
4582 * Fixed small bug in output of @whos for variables with multi-word
4576 types (only first word was displayed).
4583 types (only first word was displayed).
4577
4584
4578 2001-11-17 Fernando Perez <fperez@colorado.edu>
4585 2001-11-17 Fernando Perez <fperez@colorado.edu>
4579
4586
4580 * Version 0.1.10 released, 0.1.11 opened for further work.
4587 * Version 0.1.10 released, 0.1.11 opened for further work.
4581
4588
4582 * Modified dirs and friends. dirs now *returns* the stack (not
4589 * Modified dirs and friends. dirs now *returns* the stack (not
4583 prints), so one can manipulate it as a variable. Convenient to
4590 prints), so one can manipulate it as a variable. Convenient to
4584 travel along many directories.
4591 travel along many directories.
4585
4592
4586 * Fixed bug in magic_pdef: would only work with functions with
4593 * Fixed bug in magic_pdef: would only work with functions with
4587 arguments with default values.
4594 arguments with default values.
4588
4595
4589 2001-11-14 Fernando Perez <fperez@colorado.edu>
4596 2001-11-14 Fernando Perez <fperez@colorado.edu>
4590
4597
4591 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4598 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4592 example with IPython. Various other minor fixes and cleanups.
4599 example with IPython. Various other minor fixes and cleanups.
4593
4600
4594 * Version 0.1.9 released, 0.1.10 opened for further work.
4601 * Version 0.1.9 released, 0.1.10 opened for further work.
4595
4602
4596 * Added sys.path to the list of directories searched in the
4603 * Added sys.path to the list of directories searched in the
4597 execfile= option. It used to be the current directory and the
4604 execfile= option. It used to be the current directory and the
4598 user's IPYTHONDIR only.
4605 user's IPYTHONDIR only.
4599
4606
4600 2001-11-13 Fernando Perez <fperez@colorado.edu>
4607 2001-11-13 Fernando Perez <fperez@colorado.edu>
4601
4608
4602 * Reinstated the raw_input/prefilter separation that Janko had
4609 * Reinstated the raw_input/prefilter separation that Janko had
4603 initially. This gives a more convenient setup for extending the
4610 initially. This gives a more convenient setup for extending the
4604 pre-processor from the outside: raw_input always gets a string,
4611 pre-processor from the outside: raw_input always gets a string,
4605 and prefilter has to process it. We can then redefine prefilter
4612 and prefilter has to process it. We can then redefine prefilter
4606 from the outside and implement extensions for special
4613 from the outside and implement extensions for special
4607 purposes.
4614 purposes.
4608
4615
4609 Today I got one for inputting PhysicalQuantity objects
4616 Today I got one for inputting PhysicalQuantity objects
4610 (from Scientific) without needing any function calls at
4617 (from Scientific) without needing any function calls at
4611 all. Extremely convenient, and it's all done as a user-level
4618 all. Extremely convenient, and it's all done as a user-level
4612 extension (no IPython code was touched). Now instead of:
4619 extension (no IPython code was touched). Now instead of:
4613 a = PhysicalQuantity(4.2,'m/s**2')
4620 a = PhysicalQuantity(4.2,'m/s**2')
4614 one can simply say
4621 one can simply say
4615 a = 4.2 m/s**2
4622 a = 4.2 m/s**2
4616 or even
4623 or even
4617 a = 4.2 m/s^2
4624 a = 4.2 m/s^2
4618
4625
4619 I use this, but it's also a proof of concept: IPython really is
4626 I use this, but it's also a proof of concept: IPython really is
4620 fully user-extensible, even at the level of the parsing of the
4627 fully user-extensible, even at the level of the parsing of the
4621 command line. It's not trivial, but it's perfectly doable.
4628 command line. It's not trivial, but it's perfectly doable.
4622
4629
4623 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4630 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4624 the problem of modules being loaded in the inverse order in which
4631 the problem of modules being loaded in the inverse order in which
4625 they were defined in
4632 they were defined in
4626
4633
4627 * Version 0.1.8 released, 0.1.9 opened for further work.
4634 * Version 0.1.8 released, 0.1.9 opened for further work.
4628
4635
4629 * Added magics pdef, source and file. They respectively show the
4636 * Added magics pdef, source and file. They respectively show the
4630 definition line ('prototype' in C), source code and full python
4637 definition line ('prototype' in C), source code and full python
4631 file for any callable object. The object inspector oinfo uses
4638 file for any callable object. The object inspector oinfo uses
4632 these to show the same information.
4639 these to show the same information.
4633
4640
4634 * Version 0.1.7 released, 0.1.8 opened for further work.
4641 * Version 0.1.7 released, 0.1.8 opened for further work.
4635
4642
4636 * Separated all the magic functions into a class called Magic. The
4643 * Separated all the magic functions into a class called Magic. The
4637 InteractiveShell class was becoming too big for Xemacs to handle
4644 InteractiveShell class was becoming too big for Xemacs to handle
4638 (de-indenting a line would lock it up for 10 seconds while it
4645 (de-indenting a line would lock it up for 10 seconds while it
4639 backtracked on the whole class!)
4646 backtracked on the whole class!)
4640
4647
4641 FIXME: didn't work. It can be done, but right now namespaces are
4648 FIXME: didn't work. It can be done, but right now namespaces are
4642 all messed up. Do it later (reverted it for now, so at least
4649 all messed up. Do it later (reverted it for now, so at least
4643 everything works as before).
4650 everything works as before).
4644
4651
4645 * Got the object introspection system (magic_oinfo) working! I
4652 * Got the object introspection system (magic_oinfo) working! I
4646 think this is pretty much ready for release to Janko, so he can
4653 think this is pretty much ready for release to Janko, so he can
4647 test it for a while and then announce it. Pretty much 100% of what
4654 test it for a while and then announce it. Pretty much 100% of what
4648 I wanted for the 'phase 1' release is ready. Happy, tired.
4655 I wanted for the 'phase 1' release is ready. Happy, tired.
4649
4656
4650 2001-11-12 Fernando Perez <fperez@colorado.edu>
4657 2001-11-12 Fernando Perez <fperez@colorado.edu>
4651
4658
4652 * Version 0.1.6 released, 0.1.7 opened for further work.
4659 * Version 0.1.6 released, 0.1.7 opened for further work.
4653
4660
4654 * Fixed bug in printing: it used to test for truth before
4661 * Fixed bug in printing: it used to test for truth before
4655 printing, so 0 wouldn't print. Now checks for None.
4662 printing, so 0 wouldn't print. Now checks for None.
4656
4663
4657 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4664 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4658 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4665 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4659 reaches by hand into the outputcache. Think of a better way to do
4666 reaches by hand into the outputcache. Think of a better way to do
4660 this later.
4667 this later.
4661
4668
4662 * Various small fixes thanks to Nathan's comments.
4669 * Various small fixes thanks to Nathan's comments.
4663
4670
4664 * Changed magic_pprint to magic_Pprint. This way it doesn't
4671 * Changed magic_pprint to magic_Pprint. This way it doesn't
4665 collide with pprint() and the name is consistent with the command
4672 collide with pprint() and the name is consistent with the command
4666 line option.
4673 line option.
4667
4674
4668 * Changed prompt counter behavior to be fully like
4675 * Changed prompt counter behavior to be fully like
4669 Mathematica's. That is, even input that doesn't return a result
4676 Mathematica's. That is, even input that doesn't return a result
4670 raises the prompt counter. The old behavior was kind of confusing
4677 raises the prompt counter. The old behavior was kind of confusing
4671 (getting the same prompt number several times if the operation
4678 (getting the same prompt number several times if the operation
4672 didn't return a result).
4679 didn't return a result).
4673
4680
4674 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4681 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4675
4682
4676 * Fixed -Classic mode (wasn't working anymore).
4683 * Fixed -Classic mode (wasn't working anymore).
4677
4684
4678 * Added colored prompts using Nathan's new code. Colors are
4685 * Added colored prompts using Nathan's new code. Colors are
4679 currently hardwired, they can be user-configurable. For
4686 currently hardwired, they can be user-configurable. For
4680 developers, they can be chosen in file ipythonlib.py, at the
4687 developers, they can be chosen in file ipythonlib.py, at the
4681 beginning of the CachedOutput class def.
4688 beginning of the CachedOutput class def.
4682
4689
4683 2001-11-11 Fernando Perez <fperez@colorado.edu>
4690 2001-11-11 Fernando Perez <fperez@colorado.edu>
4684
4691
4685 * Version 0.1.5 released, 0.1.6 opened for further work.
4692 * Version 0.1.5 released, 0.1.6 opened for further work.
4686
4693
4687 * Changed magic_env to *return* the environment as a dict (not to
4694 * Changed magic_env to *return* the environment as a dict (not to
4688 print it). This way it prints, but it can also be processed.
4695 print it). This way it prints, but it can also be processed.
4689
4696
4690 * Added Verbose exception reporting to interactive
4697 * Added Verbose exception reporting to interactive
4691 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4698 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4692 traceback. Had to make some changes to the ultraTB file. This is
4699 traceback. Had to make some changes to the ultraTB file. This is
4693 probably the last 'big' thing in my mental todo list. This ties
4700 probably the last 'big' thing in my mental todo list. This ties
4694 in with the next entry:
4701 in with the next entry:
4695
4702
4696 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4703 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4697 has to specify is Plain, Color or Verbose for all exception
4704 has to specify is Plain, Color or Verbose for all exception
4698 handling.
4705 handling.
4699
4706
4700 * Removed ShellServices option. All this can really be done via
4707 * Removed ShellServices option. All this can really be done via
4701 the magic system. It's easier to extend, cleaner and has automatic
4708 the magic system. It's easier to extend, cleaner and has automatic
4702 namespace protection and documentation.
4709 namespace protection and documentation.
4703
4710
4704 2001-11-09 Fernando Perez <fperez@colorado.edu>
4711 2001-11-09 Fernando Perez <fperez@colorado.edu>
4705
4712
4706 * Fixed bug in output cache flushing (missing parameter to
4713 * Fixed bug in output cache flushing (missing parameter to
4707 __init__). Other small bugs fixed (found using pychecker).
4714 __init__). Other small bugs fixed (found using pychecker).
4708
4715
4709 * Version 0.1.4 opened for bugfixing.
4716 * Version 0.1.4 opened for bugfixing.
4710
4717
4711 2001-11-07 Fernando Perez <fperez@colorado.edu>
4718 2001-11-07 Fernando Perez <fperez@colorado.edu>
4712
4719
4713 * Version 0.1.3 released, mainly because of the raw_input bug.
4720 * Version 0.1.3 released, mainly because of the raw_input bug.
4714
4721
4715 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4722 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4716 and when testing for whether things were callable, a call could
4723 and when testing for whether things were callable, a call could
4717 actually be made to certain functions. They would get called again
4724 actually be made to certain functions. They would get called again
4718 once 'really' executed, with a resulting double call. A disaster
4725 once 'really' executed, with a resulting double call. A disaster
4719 in many cases (list.reverse() would never work!).
4726 in many cases (list.reverse() would never work!).
4720
4727
4721 * Removed prefilter() function, moved its code to raw_input (which
4728 * Removed prefilter() function, moved its code to raw_input (which
4722 after all was just a near-empty caller for prefilter). This saves
4729 after all was just a near-empty caller for prefilter). This saves
4723 a function call on every prompt, and simplifies the class a tiny bit.
4730 a function call on every prompt, and simplifies the class a tiny bit.
4724
4731
4725 * Fix _ip to __ip name in magic example file.
4732 * Fix _ip to __ip name in magic example file.
4726
4733
4727 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4734 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4728 work with non-gnu versions of tar.
4735 work with non-gnu versions of tar.
4729
4736
4730 2001-11-06 Fernando Perez <fperez@colorado.edu>
4737 2001-11-06 Fernando Perez <fperez@colorado.edu>
4731
4738
4732 * Version 0.1.2. Just to keep track of the recent changes.
4739 * Version 0.1.2. Just to keep track of the recent changes.
4733
4740
4734 * Fixed nasty bug in output prompt routine. It used to check 'if
4741 * Fixed nasty bug in output prompt routine. It used to check 'if
4735 arg != None...'. Problem is, this fails if arg implements a
4742 arg != None...'. Problem is, this fails if arg implements a
4736 special comparison (__cmp__) which disallows comparing to
4743 special comparison (__cmp__) which disallows comparing to
4737 None. Found it when trying to use the PhysicalQuantity module from
4744 None. Found it when trying to use the PhysicalQuantity module from
4738 ScientificPython.
4745 ScientificPython.
4739
4746
4740 2001-11-05 Fernando Perez <fperez@colorado.edu>
4747 2001-11-05 Fernando Perez <fperez@colorado.edu>
4741
4748
4742 * Also added dirs. Now the pushd/popd/dirs family functions
4749 * Also added dirs. Now the pushd/popd/dirs family functions
4743 basically like the shell, with the added convenience of going home
4750 basically like the shell, with the added convenience of going home
4744 when called with no args.
4751 when called with no args.
4745
4752
4746 * pushd/popd slightly modified to mimic shell behavior more
4753 * pushd/popd slightly modified to mimic shell behavior more
4747 closely.
4754 closely.
4748
4755
4749 * Added env,pushd,popd from ShellServices as magic functions. I
4756 * Added env,pushd,popd from ShellServices as magic functions. I
4750 think the cleanest will be to port all desired functions from
4757 think the cleanest will be to port all desired functions from
4751 ShellServices as magics and remove ShellServices altogether. This
4758 ShellServices as magics and remove ShellServices altogether. This
4752 will provide a single, clean way of adding functionality
4759 will provide a single, clean way of adding functionality
4753 (shell-type or otherwise) to IP.
4760 (shell-type or otherwise) to IP.
4754
4761
4755 2001-11-04 Fernando Perez <fperez@colorado.edu>
4762 2001-11-04 Fernando Perez <fperez@colorado.edu>
4756
4763
4757 * Added .ipython/ directory to sys.path. This way users can keep
4764 * Added .ipython/ directory to sys.path. This way users can keep
4758 customizations there and access them via import.
4765 customizations there and access them via import.
4759
4766
4760 2001-11-03 Fernando Perez <fperez@colorado.edu>
4767 2001-11-03 Fernando Perez <fperez@colorado.edu>
4761
4768
4762 * Opened version 0.1.1 for new changes.
4769 * Opened version 0.1.1 for new changes.
4763
4770
4764 * Changed version number to 0.1.0: first 'public' release, sent to
4771 * Changed version number to 0.1.0: first 'public' release, sent to
4765 Nathan and Janko.
4772 Nathan and Janko.
4766
4773
4767 * Lots of small fixes and tweaks.
4774 * Lots of small fixes and tweaks.
4768
4775
4769 * Minor changes to whos format. Now strings are shown, snipped if
4776 * Minor changes to whos format. Now strings are shown, snipped if
4770 too long.
4777 too long.
4771
4778
4772 * Changed ShellServices to work on __main__ so they show up in @who
4779 * Changed ShellServices to work on __main__ so they show up in @who
4773
4780
4774 * Help also works with ? at the end of a line:
4781 * Help also works with ? at the end of a line:
4775 ?sin and sin?
4782 ?sin and sin?
4776 both produce the same effect. This is nice, as often I use the
4783 both produce the same effect. This is nice, as often I use the
4777 tab-complete to find the name of a method, but I used to then have
4784 tab-complete to find the name of a method, but I used to then have
4778 to go to the beginning of the line to put a ? if I wanted more
4785 to go to the beginning of the line to put a ? if I wanted more
4779 info. Now I can just add the ? and hit return. Convenient.
4786 info. Now I can just add the ? and hit return. Convenient.
4780
4787
4781 2001-11-02 Fernando Perez <fperez@colorado.edu>
4788 2001-11-02 Fernando Perez <fperez@colorado.edu>
4782
4789
4783 * Python version check (>=2.1) added.
4790 * Python version check (>=2.1) added.
4784
4791
4785 * Added LazyPython documentation. At this point the docs are quite
4792 * Added LazyPython documentation. At this point the docs are quite
4786 a mess. A cleanup is in order.
4793 a mess. A cleanup is in order.
4787
4794
4788 * Auto-installer created. For some bizarre reason, the zipfiles
4795 * Auto-installer created. For some bizarre reason, the zipfiles
4789 module isn't working on my system. So I made a tar version
4796 module isn't working on my system. So I made a tar version
4790 (hopefully the command line options in various systems won't kill
4797 (hopefully the command line options in various systems won't kill
4791 me).
4798 me).
4792
4799
4793 * Fixes to Struct in genutils. Now all dictionary-like methods are
4800 * Fixes to Struct in genutils. Now all dictionary-like methods are
4794 protected (reasonably).
4801 protected (reasonably).
4795
4802
4796 * Added pager function to genutils and changed ? to print usage
4803 * Added pager function to genutils and changed ? to print usage
4797 note through it (it was too long).
4804 note through it (it was too long).
4798
4805
4799 * Added the LazyPython functionality. Works great! I changed the
4806 * Added the LazyPython functionality. Works great! I changed the
4800 auto-quote escape to ';', it's on home row and next to '. But
4807 auto-quote escape to ';', it's on home row and next to '. But
4801 both auto-quote and auto-paren (still /) escapes are command-line
4808 both auto-quote and auto-paren (still /) escapes are command-line
4802 parameters.
4809 parameters.
4803
4810
4804
4811
4805 2001-11-01 Fernando Perez <fperez@colorado.edu>
4812 2001-11-01 Fernando Perez <fperez@colorado.edu>
4806
4813
4807 * Version changed to 0.0.7. Fairly large change: configuration now
4814 * Version changed to 0.0.7. Fairly large change: configuration now
4808 is all stored in a directory, by default .ipython. There, all
4815 is all stored in a directory, by default .ipython. There, all
4809 config files have normal looking names (not .names)
4816 config files have normal looking names (not .names)
4810
4817
4811 * Version 0.0.6 Released first to Lucas and Archie as a test
4818 * Version 0.0.6 Released first to Lucas and Archie as a test
4812 run. Since it's the first 'semi-public' release, change version to
4819 run. Since it's the first 'semi-public' release, change version to
4813 > 0.0.6 for any changes now.
4820 > 0.0.6 for any changes now.
4814
4821
4815 * Stuff I had put in the ipplib.py changelog:
4822 * Stuff I had put in the ipplib.py changelog:
4816
4823
4817 Changes to InteractiveShell:
4824 Changes to InteractiveShell:
4818
4825
4819 - Made the usage message a parameter.
4826 - Made the usage message a parameter.
4820
4827
4821 - Require the name of the shell variable to be given. It's a bit
4828 - Require the name of the shell variable to be given. It's a bit
4822 of a hack, but allows the name 'shell' not to be hardwire in the
4829 of a hack, but allows the name 'shell' not to be hardwire in the
4823 magic (@) handler, which is problematic b/c it requires
4830 magic (@) handler, which is problematic b/c it requires
4824 polluting the global namespace with 'shell'. This in turn is
4831 polluting the global namespace with 'shell'. This in turn is
4825 fragile: if a user redefines a variable called shell, things
4832 fragile: if a user redefines a variable called shell, things
4826 break.
4833 break.
4827
4834
4828 - magic @: all functions available through @ need to be defined
4835 - magic @: all functions available through @ need to be defined
4829 as magic_<name>, even though they can be called simply as
4836 as magic_<name>, even though they can be called simply as
4830 @<name>. This allows the special command @magic to gather
4837 @<name>. This allows the special command @magic to gather
4831 information automatically about all existing magic functions,
4838 information automatically about all existing magic functions,
4832 even if they are run-time user extensions, by parsing the shell
4839 even if they are run-time user extensions, by parsing the shell
4833 instance __dict__ looking for special magic_ names.
4840 instance __dict__ looking for special magic_ names.
4834
4841
4835 - mainloop: added *two* local namespace parameters. This allows
4842 - mainloop: added *two* local namespace parameters. This allows
4836 the class to differentiate between parameters which were there
4843 the class to differentiate between parameters which were there
4837 before and after command line initialization was processed. This
4844 before and after command line initialization was processed. This
4838 way, later @who can show things loaded at startup by the
4845 way, later @who can show things loaded at startup by the
4839 user. This trick was necessary to make session saving/reloading
4846 user. This trick was necessary to make session saving/reloading
4840 really work: ideally after saving/exiting/reloading a session,
4847 really work: ideally after saving/exiting/reloading a session,
4841 *everythin* should look the same, including the output of @who. I
4848 *everythin* should look the same, including the output of @who. I
4842 was only able to make this work with this double namespace
4849 was only able to make this work with this double namespace
4843 trick.
4850 trick.
4844
4851
4845 - added a header to the logfile which allows (almost) full
4852 - added a header to the logfile which allows (almost) full
4846 session restoring.
4853 session restoring.
4847
4854
4848 - prepend lines beginning with @ or !, with a and log
4855 - prepend lines beginning with @ or !, with a and log
4849 them. Why? !lines: may be useful to know what you did @lines:
4856 them. Why? !lines: may be useful to know what you did @lines:
4850 they may affect session state. So when restoring a session, at
4857 they may affect session state. So when restoring a session, at
4851 least inform the user of their presence. I couldn't quite get
4858 least inform the user of their presence. I couldn't quite get
4852 them to properly re-execute, but at least the user is warned.
4859 them to properly re-execute, but at least the user is warned.
4853
4860
4854 * Started ChangeLog.
4861 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now