##// END OF EJS Templates
fixed , and ; autocall to not consider exclusion regexp
vivainio -
Show More
@@ -1,2213 +1,2218 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1019 2006-01-14 13:02:12Z vivainio $
9 $Id: iplib.py 1027 2006-01-16 21:07:24Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77 import IPython.ipapi
78
78
79 # Globals
79 # Globals
80
80
81 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
82 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
83 raw_input_original = raw_input
83 raw_input_original = raw_input
84
84
85 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
93
93
94 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
95 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
96
96
97 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
98 if ini_spaces:
98 if ini_spaces:
99 return ini_spaces.end()
99 return ini_spaces.end()
100 else:
100 else:
101 return 0
101 return 0
102
102
103 def softspace(file, newvalue):
103 def softspace(file, newvalue):
104 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
105
105
106 oldvalue = 0
106 oldvalue = 0
107 try:
107 try:
108 oldvalue = file.softspace
108 oldvalue = file.softspace
109 except AttributeError:
109 except AttributeError:
110 pass
110 pass
111 try:
111 try:
112 file.softspace = newvalue
112 file.softspace = newvalue
113 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
114 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
115 pass
115 pass
116 return oldvalue
116 return oldvalue
117
117
118
118
119 #****************************************************************************
119 #****************************************************************************
120 # Local use exceptions
120 # Local use exceptions
121 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
122
122
123
123
124 #****************************************************************************
124 #****************************************************************************
125 # Local use classes
125 # Local use classes
126 class Bunch: pass
126 class Bunch: pass
127
127
128 class Undefined: pass
128 class Undefined: pass
129
129
130 class InputList(list):
130 class InputList(list):
131 """Class to store user input.
131 """Class to store user input.
132
132
133 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
134 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
135
135
136 exec In[4:7]
136 exec In[4:7]
137
137
138 or
138 or
139
139
140 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
141
141
142 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
143 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
144
144
145 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
146 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
147
147
148 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
149 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
150 self.last_syntax_error = None
150 self.last_syntax_error = None
151
151
152 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
153 self.last_syntax_error = value
153 self.last_syntax_error = value
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
155
155
156 def clear_err_state(self):
156 def clear_err_state(self):
157 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
158 e = self.last_syntax_error
158 e = self.last_syntax_error
159 self.last_syntax_error = None
159 self.last_syntax_error = None
160 return e
160 return e
161
161
162 #****************************************************************************
162 #****************************************************************************
163 # Main IPython class
163 # Main IPython class
164
164
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 #
169 #
170 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
171 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
172 # chainsaw branch.
172 # chainsaw branch.
173
173
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class, to prevent clashes.
176 # class, to prevent clashes.
177
177
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.value']
181 # 'self.value']
182
182
183 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
184 """An enhanced console for Python."""
184 """An enhanced console for Python."""
185
185
186 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
187 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
188 isthreaded = False
188 isthreaded = False
189
189
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
192 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
193
193
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object.
195 # before it knows an InteractiveShell object.
196 IPython.ipapi._init_with_shell(self)
196 IPython.ipapi._init_with_shell(self)
197
197
198 # some minimal strict typechecks. For some core data structures, I
198 # some minimal strict typechecks. For some core data structures, I
199 # want actual basic python types, not just anything that looks like
199 # want actual basic python types, not just anything that looks like
200 # one. This is especially true for namespaces.
200 # one. This is especially true for namespaces.
201 for ns in (user_ns,user_global_ns):
201 for ns in (user_ns,user_global_ns):
202 if ns is not None and type(ns) != types.DictType:
202 if ns is not None and type(ns) != types.DictType:
203 raise TypeError,'namespace must be a dictionary'
203 raise TypeError,'namespace must be a dictionary'
204
204
205 # Job manager (for jobs run as background threads)
205 # Job manager (for jobs run as background threads)
206 self.jobs = BackgroundJobManager()
206 self.jobs = BackgroundJobManager()
207
207
208 # track which builtins we add, so we can clean up later
208 # track which builtins we add, so we can clean up later
209 self.builtins_added = {}
209 self.builtins_added = {}
210 # This method will add the necessary builtins for operation, but
210 # This method will add the necessary builtins for operation, but
211 # tracking what it did via the builtins_added dict.
211 # tracking what it did via the builtins_added dict.
212 self.add_builtins()
212 self.add_builtins()
213
213
214 # Do the intuitively correct thing for quit/exit: we remove the
214 # Do the intuitively correct thing for quit/exit: we remove the
215 # builtins if they exist, and our own magics will deal with this
215 # builtins if they exist, and our own magics will deal with this
216 try:
216 try:
217 del __builtin__.exit, __builtin__.quit
217 del __builtin__.exit, __builtin__.quit
218 except AttributeError:
218 except AttributeError:
219 pass
219 pass
220
220
221 # Store the actual shell's name
221 # Store the actual shell's name
222 self.name = name
222 self.name = name
223
223
224 # We need to know whether the instance is meant for embedding, since
224 # We need to know whether the instance is meant for embedding, since
225 # global/local namespaces need to be handled differently in that case
225 # global/local namespaces need to be handled differently in that case
226 self.embedded = embedded
226 self.embedded = embedded
227
227
228 # command compiler
228 # command compiler
229 self.compile = codeop.CommandCompiler()
229 self.compile = codeop.CommandCompiler()
230
230
231 # User input buffer
231 # User input buffer
232 self.buffer = []
232 self.buffer = []
233
233
234 # Default name given in compilation of code
234 # Default name given in compilation of code
235 self.filename = '<ipython console>'
235 self.filename = '<ipython console>'
236
236
237 # Make an empty namespace, which extension writers can rely on both
237 # Make an empty namespace, which extension writers can rely on both
238 # existing and NEVER being used by ipython itself. This gives them a
238 # existing and NEVER being used by ipython itself. This gives them a
239 # convenient location for storing additional information and state
239 # convenient location for storing additional information and state
240 # their extensions may require, without fear of collisions with other
240 # their extensions may require, without fear of collisions with other
241 # ipython names that may develop later.
241 # ipython names that may develop later.
242 self.meta = Bunch()
242 self.meta = Bunch()
243
243
244 # Create the namespace where the user will operate. user_ns is
244 # Create the namespace where the user will operate. user_ns is
245 # normally the only one used, and it is passed to the exec calls as
245 # normally the only one used, and it is passed to the exec calls as
246 # the locals argument. But we do carry a user_global_ns namespace
246 # the locals argument. But we do carry a user_global_ns namespace
247 # given as the exec 'globals' argument, This is useful in embedding
247 # given as the exec 'globals' argument, This is useful in embedding
248 # situations where the ipython shell opens in a context where the
248 # situations where the ipython shell opens in a context where the
249 # distinction between locals and globals is meaningful.
249 # distinction between locals and globals is meaningful.
250
250
251 # FIXME. For some strange reason, __builtins__ is showing up at user
251 # FIXME. For some strange reason, __builtins__ is showing up at user
252 # level as a dict instead of a module. This is a manual fix, but I
252 # level as a dict instead of a module. This is a manual fix, but I
253 # should really track down where the problem is coming from. Alex
253 # should really track down where the problem is coming from. Alex
254 # Schmolck reported this problem first.
254 # Schmolck reported this problem first.
255
255
256 # A useful post by Alex Martelli on this topic:
256 # A useful post by Alex Martelli on this topic:
257 # Re: inconsistent value from __builtins__
257 # Re: inconsistent value from __builtins__
258 # Von: Alex Martelli <aleaxit@yahoo.com>
258 # Von: Alex Martelli <aleaxit@yahoo.com>
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
260 # Gruppen: comp.lang.python
260 # Gruppen: comp.lang.python
261
261
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
264 # > <type 'dict'>
264 # > <type 'dict'>
265 # > >>> print type(__builtins__)
265 # > >>> print type(__builtins__)
266 # > <type 'module'>
266 # > <type 'module'>
267 # > Is this difference in return value intentional?
267 # > Is this difference in return value intentional?
268
268
269 # Well, it's documented that '__builtins__' can be either a dictionary
269 # Well, it's documented that '__builtins__' can be either a dictionary
270 # or a module, and it's been that way for a long time. Whether it's
270 # or a module, and it's been that way for a long time. Whether it's
271 # intentional (or sensible), I don't know. In any case, the idea is
271 # intentional (or sensible), I don't know. In any case, the idea is
272 # that if you need to access the built-in namespace directly, you
272 # that if you need to access the built-in namespace directly, you
273 # should start with "import __builtin__" (note, no 's') which will
273 # should start with "import __builtin__" (note, no 's') which will
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
275
275
276 if user_ns is None:
276 if user_ns is None:
277 # Set __name__ to __main__ to better match the behavior of the
277 # Set __name__ to __main__ to better match the behavior of the
278 # normal interpreter.
278 # normal interpreter.
279 user_ns = {'__name__' :'__main__',
279 user_ns = {'__name__' :'__main__',
280 '__builtins__' : __builtin__,
280 '__builtins__' : __builtin__,
281 }
281 }
282
282
283 if user_global_ns is None:
283 if user_global_ns is None:
284 user_global_ns = {}
284 user_global_ns = {}
285
285
286 # Assign namespaces
286 # Assign namespaces
287 # This is the namespace where all normal user variables live
287 # This is the namespace where all normal user variables live
288 self.user_ns = user_ns
288 self.user_ns = user_ns
289 # Embedded instances require a separate namespace for globals.
289 # Embedded instances require a separate namespace for globals.
290 # Normally this one is unused by non-embedded instances.
290 # Normally this one is unused by non-embedded instances.
291 self.user_global_ns = user_global_ns
291 self.user_global_ns = user_global_ns
292 # A namespace to keep track of internal data structures to prevent
292 # A namespace to keep track of internal data structures to prevent
293 # them from cluttering user-visible stuff. Will be updated later
293 # them from cluttering user-visible stuff. Will be updated later
294 self.internal_ns = {}
294 self.internal_ns = {}
295
295
296 # Namespace of system aliases. Each entry in the alias
296 # Namespace of system aliases. Each entry in the alias
297 # table must be a 2-tuple of the form (N,name), where N is the number
297 # table must be a 2-tuple of the form (N,name), where N is the number
298 # of positional arguments of the alias.
298 # of positional arguments of the alias.
299 self.alias_table = {}
299 self.alias_table = {}
300
300
301 # A table holding all the namespaces IPython deals with, so that
301 # A table holding all the namespaces IPython deals with, so that
302 # introspection facilities can search easily.
302 # introspection facilities can search easily.
303 self.ns_table = {'user':user_ns,
303 self.ns_table = {'user':user_ns,
304 'user_global':user_global_ns,
304 'user_global':user_global_ns,
305 'alias':self.alias_table,
305 'alias':self.alias_table,
306 'internal':self.internal_ns,
306 'internal':self.internal_ns,
307 'builtin':__builtin__.__dict__
307 'builtin':__builtin__.__dict__
308 }
308 }
309
309
310 # The user namespace MUST have a pointer to the shell itself.
310 # The user namespace MUST have a pointer to the shell itself.
311 self.user_ns[name] = self
311 self.user_ns[name] = self
312
312
313 # We need to insert into sys.modules something that looks like a
313 # We need to insert into sys.modules something that looks like a
314 # module but which accesses the IPython namespace, for shelve and
314 # module but which accesses the IPython namespace, for shelve and
315 # pickle to work interactively. Normally they rely on getting
315 # pickle to work interactively. Normally they rely on getting
316 # everything out of __main__, but for embedding purposes each IPython
316 # everything out of __main__, but for embedding purposes each IPython
317 # instance has its own private namespace, so we can't go shoving
317 # instance has its own private namespace, so we can't go shoving
318 # everything into __main__.
318 # everything into __main__.
319
319
320 # note, however, that we should only do this for non-embedded
320 # note, however, that we should only do this for non-embedded
321 # ipythons, which really mimic the __main__.__dict__ with their own
321 # ipythons, which really mimic the __main__.__dict__ with their own
322 # namespace. Embedded instances, on the other hand, should not do
322 # namespace. Embedded instances, on the other hand, should not do
323 # this because they need to manage the user local/global namespaces
323 # this because they need to manage the user local/global namespaces
324 # only, but they live within a 'normal' __main__ (meaning, they
324 # only, but they live within a 'normal' __main__ (meaning, they
325 # shouldn't overtake the execution environment of the script they're
325 # shouldn't overtake the execution environment of the script they're
326 # embedded in).
326 # embedded in).
327
327
328 if not embedded:
328 if not embedded:
329 try:
329 try:
330 main_name = self.user_ns['__name__']
330 main_name = self.user_ns['__name__']
331 except KeyError:
331 except KeyError:
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
333 else:
333 else:
334 #print "pickle hack in place" # dbg
334 #print "pickle hack in place" # dbg
335 #print 'main_name:',main_name # dbg
335 #print 'main_name:',main_name # dbg
336 sys.modules[main_name] = FakeModule(self.user_ns)
336 sys.modules[main_name] = FakeModule(self.user_ns)
337
337
338 # List of input with multi-line handling.
338 # List of input with multi-line handling.
339 # Fill its zero entry, user counter starts at 1
339 # Fill its zero entry, user counter starts at 1
340 self.input_hist = InputList(['\n'])
340 self.input_hist = InputList(['\n'])
341
341
342 # list of visited directories
342 # list of visited directories
343 try:
343 try:
344 self.dir_hist = [os.getcwd()]
344 self.dir_hist = [os.getcwd()]
345 except IOError, e:
345 except IOError, e:
346 self.dir_hist = []
346 self.dir_hist = []
347
347
348 # dict of output history
348 # dict of output history
349 self.output_hist = {}
349 self.output_hist = {}
350
350
351 # dict of things NOT to alias (keywords, builtins and some magics)
351 # dict of things NOT to alias (keywords, builtins and some magics)
352 no_alias = {}
352 no_alias = {}
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
354 for key in keyword.kwlist + no_alias_magics:
354 for key in keyword.kwlist + no_alias_magics:
355 no_alias[key] = 1
355 no_alias[key] = 1
356 no_alias.update(__builtin__.__dict__)
356 no_alias.update(__builtin__.__dict__)
357 self.no_alias = no_alias
357 self.no_alias = no_alias
358
358
359 # make global variables for user access to these
359 # make global variables for user access to these
360 self.user_ns['_ih'] = self.input_hist
360 self.user_ns['_ih'] = self.input_hist
361 self.user_ns['_oh'] = self.output_hist
361 self.user_ns['_oh'] = self.output_hist
362 self.user_ns['_dh'] = self.dir_hist
362 self.user_ns['_dh'] = self.dir_hist
363
363
364 # user aliases to input and output histories
364 # user aliases to input and output histories
365 self.user_ns['In'] = self.input_hist
365 self.user_ns['In'] = self.input_hist
366 self.user_ns['Out'] = self.output_hist
366 self.user_ns['Out'] = self.output_hist
367
367
368 # Object variable to store code object waiting execution. This is
368 # Object variable to store code object waiting execution. This is
369 # used mainly by the multithreaded shells, but it can come in handy in
369 # used mainly by the multithreaded shells, but it can come in handy in
370 # other situations. No need to use a Queue here, since it's a single
370 # other situations. No need to use a Queue here, since it's a single
371 # item which gets cleared once run.
371 # item which gets cleared once run.
372 self.code_to_run = None
372 self.code_to_run = None
373
373
374 # escapes for automatic behavior on the command line
374 # escapes for automatic behavior on the command line
375 self.ESC_SHELL = '!'
375 self.ESC_SHELL = '!'
376 self.ESC_HELP = '?'
376 self.ESC_HELP = '?'
377 self.ESC_MAGIC = '%'
377 self.ESC_MAGIC = '%'
378 self.ESC_QUOTE = ','
378 self.ESC_QUOTE = ','
379 self.ESC_QUOTE2 = ';'
379 self.ESC_QUOTE2 = ';'
380 self.ESC_PAREN = '/'
380 self.ESC_PAREN = '/'
381
381
382 # And their associated handlers
382 # And their associated handlers
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
386 self.ESC_MAGIC : self.handle_magic,
386 self.ESC_MAGIC : self.handle_magic,
387 self.ESC_HELP : self.handle_help,
387 self.ESC_HELP : self.handle_help,
388 self.ESC_SHELL : self.handle_shell_escape,
388 self.ESC_SHELL : self.handle_shell_escape,
389 }
389 }
390
390
391 # class initializations
391 # class initializations
392 Magic.__init__(self,self)
392 Magic.__init__(self,self)
393
393
394 # Python source parser/formatter for syntax highlighting
394 # Python source parser/formatter for syntax highlighting
395 pyformat = PyColorize.Parser().format
395 pyformat = PyColorize.Parser().format
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
397
397
398 # hooks holds pointers used for user-side customizations
398 # hooks holds pointers used for user-side customizations
399 self.hooks = Struct()
399 self.hooks = Struct()
400
400
401 # Set all default hooks, defined in the IPython.hooks module.
401 # Set all default hooks, defined in the IPython.hooks module.
402 hooks = IPython.hooks
402 hooks = IPython.hooks
403 for hook_name in hooks.__all__:
403 for hook_name in hooks.__all__:
404 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
404 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
405 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
405 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
406
406
407 # Flag to mark unconditional exit
407 # Flag to mark unconditional exit
408 self.exit_now = False
408 self.exit_now = False
409
409
410 self.usage_min = """\
410 self.usage_min = """\
411 An enhanced console for Python.
411 An enhanced console for Python.
412 Some of its features are:
412 Some of its features are:
413 - Readline support if the readline library is present.
413 - Readline support if the readline library is present.
414 - Tab completion in the local namespace.
414 - Tab completion in the local namespace.
415 - Logging of input, see command-line options.
415 - Logging of input, see command-line options.
416 - System shell escape via ! , eg !ls.
416 - System shell escape via ! , eg !ls.
417 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
417 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
418 - Keeps track of locally defined variables via %who, %whos.
418 - Keeps track of locally defined variables via %who, %whos.
419 - Show object information with a ? eg ?x or x? (use ?? for more info).
419 - Show object information with a ? eg ?x or x? (use ?? for more info).
420 """
420 """
421 if usage: self.usage = usage
421 if usage: self.usage = usage
422 else: self.usage = self.usage_min
422 else: self.usage = self.usage_min
423
423
424 # Storage
424 # Storage
425 self.rc = rc # This will hold all configuration information
425 self.rc = rc # This will hold all configuration information
426 self.pager = 'less'
426 self.pager = 'less'
427 # temporary files used for various purposes. Deleted at exit.
427 # temporary files used for various purposes. Deleted at exit.
428 self.tempfiles = []
428 self.tempfiles = []
429
429
430 # Keep track of readline usage (later set by init_readline)
430 # Keep track of readline usage (later set by init_readline)
431 self.has_readline = False
431 self.has_readline = False
432
432
433 # template for logfile headers. It gets resolved at runtime by the
433 # template for logfile headers. It gets resolved at runtime by the
434 # logstart method.
434 # logstart method.
435 self.loghead_tpl = \
435 self.loghead_tpl = \
436 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
436 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
437 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
437 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
438 #log# opts = %s
438 #log# opts = %s
439 #log# args = %s
439 #log# args = %s
440 #log# It is safe to make manual edits below here.
440 #log# It is safe to make manual edits below here.
441 #log#-----------------------------------------------------------------------
441 #log#-----------------------------------------------------------------------
442 """
442 """
443 # for pushd/popd management
443 # for pushd/popd management
444 try:
444 try:
445 self.home_dir = get_home_dir()
445 self.home_dir = get_home_dir()
446 except HomeDirError,msg:
446 except HomeDirError,msg:
447 fatal(msg)
447 fatal(msg)
448
448
449 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
449 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
450
450
451 # Functions to call the underlying shell.
451 # Functions to call the underlying shell.
452
452
453 # utility to expand user variables via Itpl
453 # utility to expand user variables via Itpl
454 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
454 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
455 self.user_ns))
455 self.user_ns))
456 # The first is similar to os.system, but it doesn't return a value,
456 # The first is similar to os.system, but it doesn't return a value,
457 # and it allows interpolation of variables in the user's namespace.
457 # and it allows interpolation of variables in the user's namespace.
458 self.system = lambda cmd: shell(self.var_expand(cmd),
458 self.system = lambda cmd: shell(self.var_expand(cmd),
459 header='IPython system call: ',
459 header='IPython system call: ',
460 verbose=self.rc.system_verbose)
460 verbose=self.rc.system_verbose)
461 # These are for getoutput and getoutputerror:
461 # These are for getoutput and getoutputerror:
462 self.getoutput = lambda cmd: \
462 self.getoutput = lambda cmd: \
463 getoutput(self.var_expand(cmd),
463 getoutput(self.var_expand(cmd),
464 header='IPython system call: ',
464 header='IPython system call: ',
465 verbose=self.rc.system_verbose)
465 verbose=self.rc.system_verbose)
466 self.getoutputerror = lambda cmd: \
466 self.getoutputerror = lambda cmd: \
467 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
467 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
468 self.user_ns)),
468 self.user_ns)),
469 header='IPython system call: ',
469 header='IPython system call: ',
470 verbose=self.rc.system_verbose)
470 verbose=self.rc.system_verbose)
471
471
472 # RegExp for splitting line contents into pre-char//first
472 # RegExp for splitting line contents into pre-char//first
473 # word-method//rest. For clarity, each group in on one line.
473 # word-method//rest. For clarity, each group in on one line.
474
474
475 # WARNING: update the regexp if the above escapes are changed, as they
475 # WARNING: update the regexp if the above escapes are changed, as they
476 # are hardwired in.
476 # are hardwired in.
477
477
478 # Don't get carried away with trying to make the autocalling catch too
478 # Don't get carried away with trying to make the autocalling catch too
479 # much: it's better to be conservative rather than to trigger hidden
479 # much: it's better to be conservative rather than to trigger hidden
480 # evals() somewhere and end up causing side effects.
480 # evals() somewhere and end up causing side effects.
481
481
482 self.line_split = re.compile(r'^([\s*,;/])'
482 self.line_split = re.compile(r'^([\s*,;/])'
483 r'([\?\w\.]+\w*\s*)'
483 r'([\?\w\.]+\w*\s*)'
484 r'(\(?.*$)')
484 r'(\(?.*$)')
485
485
486 # Original re, keep around for a while in case changes break something
486 # Original re, keep around for a while in case changes break something
487 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
487 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
488 # r'(\s*[\?\w\.]+\w*\s*)'
488 # r'(\s*[\?\w\.]+\w*\s*)'
489 # r'(\(?.*$)')
489 # r'(\(?.*$)')
490
490
491 # RegExp to identify potential function names
491 # RegExp to identify potential function names
492 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
492 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
493
493
494 # RegExp to exclude strings with this start from autocalling. In
494 # RegExp to exclude strings with this start from autocalling. In
495 # particular, all binary operators should be excluded, so that if foo
495 # particular, all binary operators should be excluded, so that if foo
496 # is callable, foo OP bar doesn't become foo(OP bar), which is
496 # is callable, foo OP bar doesn't become foo(OP bar), which is
497 # invalid. The characters '!=()' don't need to be checked for, as the
497 # invalid. The characters '!=()' don't need to be checked for, as the
498 # _prefilter routine explicitely does so, to catch direct calls and
498 # _prefilter routine explicitely does so, to catch direct calls and
499 # rebindings of existing names.
499 # rebindings of existing names.
500
500
501 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
501 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
502 # it affects the rest of the group in square brackets.
502 # it affects the rest of the group in square brackets.
503 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
503 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
504 '|^is |^not |^in |^and |^or ')
504 '|^is |^not |^in |^and |^or ')
505
505
506 # try to catch also methods for stuff in lists/tuples/dicts: off
506 # try to catch also methods for stuff in lists/tuples/dicts: off
507 # (experimental). For this to work, the line_split regexp would need
507 # (experimental). For this to work, the line_split regexp would need
508 # to be modified so it wouldn't break things at '['. That line is
508 # to be modified so it wouldn't break things at '['. That line is
509 # nasty enough that I shouldn't change it until I can test it _well_.
509 # nasty enough that I shouldn't change it until I can test it _well_.
510 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
510 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
511
511
512 # keep track of where we started running (mainly for crash post-mortem)
512 # keep track of where we started running (mainly for crash post-mortem)
513 self.starting_dir = os.getcwd()
513 self.starting_dir = os.getcwd()
514
514
515 # Various switches which can be set
515 # Various switches which can be set
516 self.CACHELENGTH = 5000 # this is cheap, it's just text
516 self.CACHELENGTH = 5000 # this is cheap, it's just text
517 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
517 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
518 self.banner2 = banner2
518 self.banner2 = banner2
519
519
520 # TraceBack handlers:
520 # TraceBack handlers:
521
521
522 # Syntax error handler.
522 # Syntax error handler.
523 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
523 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
524
524
525 # The interactive one is initialized with an offset, meaning we always
525 # The interactive one is initialized with an offset, meaning we always
526 # want to remove the topmost item in the traceback, which is our own
526 # want to remove the topmost item in the traceback, which is our own
527 # internal code. Valid modes: ['Plain','Context','Verbose']
527 # internal code. Valid modes: ['Plain','Context','Verbose']
528 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
528 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
529 color_scheme='NoColor',
529 color_scheme='NoColor',
530 tb_offset = 1)
530 tb_offset = 1)
531
531
532 # IPython itself shouldn't crash. This will produce a detailed
532 # IPython itself shouldn't crash. This will produce a detailed
533 # post-mortem if it does. But we only install the crash handler for
533 # post-mortem if it does. But we only install the crash handler for
534 # non-threaded shells, the threaded ones use a normal verbose reporter
534 # non-threaded shells, the threaded ones use a normal verbose reporter
535 # and lose the crash handler. This is because exceptions in the main
535 # and lose the crash handler. This is because exceptions in the main
536 # thread (such as in GUI code) propagate directly to sys.excepthook,
536 # thread (such as in GUI code) propagate directly to sys.excepthook,
537 # and there's no point in printing crash dumps for every user exception.
537 # and there's no point in printing crash dumps for every user exception.
538 if self.isthreaded:
538 if self.isthreaded:
539 sys.excepthook = ultraTB.FormattedTB()
539 sys.excepthook = ultraTB.FormattedTB()
540 else:
540 else:
541 from IPython import CrashHandler
541 from IPython import CrashHandler
542 sys.excepthook = CrashHandler.CrashHandler(self)
542 sys.excepthook = CrashHandler.CrashHandler(self)
543
543
544 # The instance will store a pointer to this, so that runtime code
544 # The instance will store a pointer to this, so that runtime code
545 # (such as magics) can access it. This is because during the
545 # (such as magics) can access it. This is because during the
546 # read-eval loop, it gets temporarily overwritten (to deal with GUI
546 # read-eval loop, it gets temporarily overwritten (to deal with GUI
547 # frameworks).
547 # frameworks).
548 self.sys_excepthook = sys.excepthook
548 self.sys_excepthook = sys.excepthook
549
549
550 # and add any custom exception handlers the user may have specified
550 # and add any custom exception handlers the user may have specified
551 self.set_custom_exc(*custom_exceptions)
551 self.set_custom_exc(*custom_exceptions)
552
552
553 # Object inspector
553 # Object inspector
554 self.inspector = OInspect.Inspector(OInspect.InspectColors,
554 self.inspector = OInspect.Inspector(OInspect.InspectColors,
555 PyColorize.ANSICodeColors,
555 PyColorize.ANSICodeColors,
556 'NoColor')
556 'NoColor')
557 # indentation management
557 # indentation management
558 self.autoindent = False
558 self.autoindent = False
559 self.indent_current_nsp = 0
559 self.indent_current_nsp = 0
560 self.indent_current = '' # actual indent string
560 self.indent_current = '' # actual indent string
561
561
562 # Make some aliases automatically
562 # Make some aliases automatically
563 # Prepare list of shell aliases to auto-define
563 # Prepare list of shell aliases to auto-define
564 if os.name == 'posix':
564 if os.name == 'posix':
565 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
566 'mv mv -i','rm rm -i','cp cp -i',
566 'mv mv -i','rm rm -i','cp cp -i',
567 'cat cat','less less','clear clear',
567 'cat cat','less less','clear clear',
568 # a better ls
568 # a better ls
569 'ls ls -F',
569 'ls ls -F',
570 # long ls
570 # long ls
571 'll ls -lF',
571 'll ls -lF',
572 # color ls
572 # color ls
573 'lc ls -F -o --color',
573 'lc ls -F -o --color',
574 # ls normal files only
574 # ls normal files only
575 'lf ls -F -o --color %l | grep ^-',
575 'lf ls -F -o --color %l | grep ^-',
576 # ls symbolic links
576 # ls symbolic links
577 'lk ls -F -o --color %l | grep ^l',
577 'lk ls -F -o --color %l | grep ^l',
578 # directories or links to directories,
578 # directories or links to directories,
579 'ldir ls -F -o --color %l | grep /$',
579 'ldir ls -F -o --color %l | grep /$',
580 # things which are executable
580 # things which are executable
581 'lx ls -F -o --color %l | grep ^-..x',
581 'lx ls -F -o --color %l | grep ^-..x',
582 )
582 )
583 elif os.name in ['nt','dos']:
583 elif os.name in ['nt','dos']:
584 auto_alias = ('dir dir /on', 'ls dir /on',
584 auto_alias = ('dir dir /on', 'ls dir /on',
585 'ddir dir /ad /on', 'ldir dir /ad /on',
585 'ddir dir /ad /on', 'ldir dir /ad /on',
586 'mkdir mkdir','rmdir rmdir','echo echo',
586 'mkdir mkdir','rmdir rmdir','echo echo',
587 'ren ren','cls cls','copy copy')
587 'ren ren','cls cls','copy copy')
588 else:
588 else:
589 auto_alias = ()
589 auto_alias = ()
590 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
590 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
591 # Call the actual (public) initializer
591 # Call the actual (public) initializer
592 self.init_auto_alias()
592 self.init_auto_alias()
593 # end __init__
593 # end __init__
594
594
595 def post_config_initialization(self):
595 def post_config_initialization(self):
596 """Post configuration init method
596 """Post configuration init method
597
597
598 This is called after the configuration files have been processed to
598 This is called after the configuration files have been processed to
599 'finalize' the initialization."""
599 'finalize' the initialization."""
600
600
601 rc = self.rc
601 rc = self.rc
602
602
603 # Load readline proper
603 # Load readline proper
604 if rc.readline:
604 if rc.readline:
605 self.init_readline()
605 self.init_readline()
606
606
607 # log system
607 # log system
608 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
608 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
609 # local shortcut, this is used a LOT
609 # local shortcut, this is used a LOT
610 self.log = self.logger.log
610 self.log = self.logger.log
611
611
612 # Initialize cache, set in/out prompts and printing system
612 # Initialize cache, set in/out prompts and printing system
613 self.outputcache = CachedOutput(self,
613 self.outputcache = CachedOutput(self,
614 rc.cache_size,
614 rc.cache_size,
615 rc.pprint,
615 rc.pprint,
616 input_sep = rc.separate_in,
616 input_sep = rc.separate_in,
617 output_sep = rc.separate_out,
617 output_sep = rc.separate_out,
618 output_sep2 = rc.separate_out2,
618 output_sep2 = rc.separate_out2,
619 ps1 = rc.prompt_in1,
619 ps1 = rc.prompt_in1,
620 ps2 = rc.prompt_in2,
620 ps2 = rc.prompt_in2,
621 ps_out = rc.prompt_out,
621 ps_out = rc.prompt_out,
622 pad_left = rc.prompts_pad_left)
622 pad_left = rc.prompts_pad_left)
623
623
624 # user may have over-ridden the default print hook:
624 # user may have over-ridden the default print hook:
625 try:
625 try:
626 self.outputcache.__class__.display = self.hooks.display
626 self.outputcache.__class__.display = self.hooks.display
627 except AttributeError:
627 except AttributeError:
628 pass
628 pass
629
629
630 # I don't like assigning globally to sys, because it means when embedding
630 # I don't like assigning globally to sys, because it means when embedding
631 # instances, each embedded instance overrides the previous choice. But
631 # instances, each embedded instance overrides the previous choice. But
632 # sys.displayhook seems to be called internally by exec, so I don't see a
632 # sys.displayhook seems to be called internally by exec, so I don't see a
633 # way around it.
633 # way around it.
634 sys.displayhook = self.outputcache
634 sys.displayhook = self.outputcache
635
635
636 # Set user colors (don't do it in the constructor above so that it
636 # Set user colors (don't do it in the constructor above so that it
637 # doesn't crash if colors option is invalid)
637 # doesn't crash if colors option is invalid)
638 self.magic_colors(rc.colors)
638 self.magic_colors(rc.colors)
639
639
640 # Set calling of pdb on exceptions
640 # Set calling of pdb on exceptions
641 self.call_pdb = rc.pdb
641 self.call_pdb = rc.pdb
642
642
643 # Load user aliases
643 # Load user aliases
644 for alias in rc.alias:
644 for alias in rc.alias:
645 self.magic_alias(alias)
645 self.magic_alias(alias)
646
646
647 # dynamic data that survives through sessions
647 # dynamic data that survives through sessions
648 # XXX make the filename a config option?
648 # XXX make the filename a config option?
649 persist_base = 'persist'
649 persist_base = 'persist'
650 if rc.profile:
650 if rc.profile:
651 persist_base += '_%s' % rc.profile
651 persist_base += '_%s' % rc.profile
652 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
652 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
653
653
654 try:
654 try:
655 self.persist = pickle.load(file(self.persist_fname))
655 self.persist = pickle.load(file(self.persist_fname))
656 except:
656 except:
657 self.persist = {}
657 self.persist = {}
658
658
659
659
660 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
660 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
661 try:
661 try:
662 obj = pickle.loads(value)
662 obj = pickle.loads(value)
663 except:
663 except:
664
664
665 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
665 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
666 print "The error was:",sys.exc_info()[0]
666 print "The error was:",sys.exc_info()[0]
667 continue
667 continue
668
668
669
669
670 self.user_ns[key] = obj
670 self.user_ns[key] = obj
671
671
672 def add_builtins(self):
672 def add_builtins(self):
673 """Store ipython references into the builtin namespace.
673 """Store ipython references into the builtin namespace.
674
674
675 Some parts of ipython operate via builtins injected here, which hold a
675 Some parts of ipython operate via builtins injected here, which hold a
676 reference to IPython itself."""
676 reference to IPython itself."""
677
677
678 builtins_new = dict(__IPYTHON__ = self,
678 builtins_new = dict(__IPYTHON__ = self,
679 ip_set_hook = self.set_hook,
679 ip_set_hook = self.set_hook,
680 jobs = self.jobs,
680 jobs = self.jobs,
681 ipmagic = self.ipmagic,
681 ipmagic = self.ipmagic,
682 ipalias = self.ipalias,
682 ipalias = self.ipalias,
683 ipsystem = self.ipsystem,
683 ipsystem = self.ipsystem,
684 )
684 )
685 for biname,bival in builtins_new.items():
685 for biname,bival in builtins_new.items():
686 try:
686 try:
687 # store the orignal value so we can restore it
687 # store the orignal value so we can restore it
688 self.builtins_added[biname] = __builtin__.__dict__[biname]
688 self.builtins_added[biname] = __builtin__.__dict__[biname]
689 except KeyError:
689 except KeyError:
690 # or mark that it wasn't defined, and we'll just delete it at
690 # or mark that it wasn't defined, and we'll just delete it at
691 # cleanup
691 # cleanup
692 self.builtins_added[biname] = Undefined
692 self.builtins_added[biname] = Undefined
693 __builtin__.__dict__[biname] = bival
693 __builtin__.__dict__[biname] = bival
694
694
695 # Keep in the builtins a flag for when IPython is active. We set it
695 # Keep in the builtins a flag for when IPython is active. We set it
696 # with setdefault so that multiple nested IPythons don't clobber one
696 # with setdefault so that multiple nested IPythons don't clobber one
697 # another. Each will increase its value by one upon being activated,
697 # another. Each will increase its value by one upon being activated,
698 # which also gives us a way to determine the nesting level.
698 # which also gives us a way to determine the nesting level.
699 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
699 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
700
700
701 def clean_builtins(self):
701 def clean_builtins(self):
702 """Remove any builtins which might have been added by add_builtins, or
702 """Remove any builtins which might have been added by add_builtins, or
703 restore overwritten ones to their previous values."""
703 restore overwritten ones to their previous values."""
704 for biname,bival in self.builtins_added.items():
704 for biname,bival in self.builtins_added.items():
705 if bival is Undefined:
705 if bival is Undefined:
706 del __builtin__.__dict__[biname]
706 del __builtin__.__dict__[biname]
707 else:
707 else:
708 __builtin__.__dict__[biname] = bival
708 __builtin__.__dict__[biname] = bival
709 self.builtins_added.clear()
709 self.builtins_added.clear()
710
710
711 def set_hook(self,name,hook, priority = 50):
711 def set_hook(self,name,hook, priority = 50):
712 """set_hook(name,hook) -> sets an internal IPython hook.
712 """set_hook(name,hook) -> sets an internal IPython hook.
713
713
714 IPython exposes some of its internal API as user-modifiable hooks. By
714 IPython exposes some of its internal API as user-modifiable hooks. By
715 adding your function to one of these hooks, you can modify IPython's
715 adding your function to one of these hooks, you can modify IPython's
716 behavior to call at runtime your own routines."""
716 behavior to call at runtime your own routines."""
717
717
718 # At some point in the future, this should validate the hook before it
718 # At some point in the future, this should validate the hook before it
719 # accepts it. Probably at least check that the hook takes the number
719 # accepts it. Probably at least check that the hook takes the number
720 # of args it's supposed to.
720 # of args it's supposed to.
721 dp = getattr(self.hooks, name, None)
721 dp = getattr(self.hooks, name, None)
722 if not dp:
722 if not dp:
723 dp = IPython.hooks.CommandChainDispatcher()
723 dp = IPython.hooks.CommandChainDispatcher()
724
724
725 f = new.instancemethod(hook,self,self.__class__)
725 f = new.instancemethod(hook,self,self.__class__)
726 try:
726 try:
727 dp.add(f,priority)
727 dp.add(f,priority)
728 except AttributeError:
728 except AttributeError:
729 # it was not commandchain, plain old func - replace
729 # it was not commandchain, plain old func - replace
730 dp = f
730 dp = f
731
731
732 setattr(self.hooks,name, dp)
732 setattr(self.hooks,name, dp)
733
733
734
734
735 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
735 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
736
736
737 def set_custom_exc(self,exc_tuple,handler):
737 def set_custom_exc(self,exc_tuple,handler):
738 """set_custom_exc(exc_tuple,handler)
738 """set_custom_exc(exc_tuple,handler)
739
739
740 Set a custom exception handler, which will be called if any of the
740 Set a custom exception handler, which will be called if any of the
741 exceptions in exc_tuple occur in the mainloop (specifically, in the
741 exceptions in exc_tuple occur in the mainloop (specifically, in the
742 runcode() method.
742 runcode() method.
743
743
744 Inputs:
744 Inputs:
745
745
746 - exc_tuple: a *tuple* of valid exceptions to call the defined
746 - exc_tuple: a *tuple* of valid exceptions to call the defined
747 handler for. It is very important that you use a tuple, and NOT A
747 handler for. It is very important that you use a tuple, and NOT A
748 LIST here, because of the way Python's except statement works. If
748 LIST here, because of the way Python's except statement works. If
749 you only want to trap a single exception, use a singleton tuple:
749 you only want to trap a single exception, use a singleton tuple:
750
750
751 exc_tuple == (MyCustomException,)
751 exc_tuple == (MyCustomException,)
752
752
753 - handler: this must be defined as a function with the following
753 - handler: this must be defined as a function with the following
754 basic interface: def my_handler(self,etype,value,tb).
754 basic interface: def my_handler(self,etype,value,tb).
755
755
756 This will be made into an instance method (via new.instancemethod)
756 This will be made into an instance method (via new.instancemethod)
757 of IPython itself, and it will be called if any of the exceptions
757 of IPython itself, and it will be called if any of the exceptions
758 listed in the exc_tuple are caught. If the handler is None, an
758 listed in the exc_tuple are caught. If the handler is None, an
759 internal basic one is used, which just prints basic info.
759 internal basic one is used, which just prints basic info.
760
760
761 WARNING: by putting in your own exception handler into IPython's main
761 WARNING: by putting in your own exception handler into IPython's main
762 execution loop, you run a very good chance of nasty crashes. This
762 execution loop, you run a very good chance of nasty crashes. This
763 facility should only be used if you really know what you are doing."""
763 facility should only be used if you really know what you are doing."""
764
764
765 assert type(exc_tuple)==type(()) , \
765 assert type(exc_tuple)==type(()) , \
766 "The custom exceptions must be given AS A TUPLE."
766 "The custom exceptions must be given AS A TUPLE."
767
767
768 def dummy_handler(self,etype,value,tb):
768 def dummy_handler(self,etype,value,tb):
769 print '*** Simple custom exception handler ***'
769 print '*** Simple custom exception handler ***'
770 print 'Exception type :',etype
770 print 'Exception type :',etype
771 print 'Exception value:',value
771 print 'Exception value:',value
772 print 'Traceback :',tb
772 print 'Traceback :',tb
773 print 'Source code :','\n'.join(self.buffer)
773 print 'Source code :','\n'.join(self.buffer)
774
774
775 if handler is None: handler = dummy_handler
775 if handler is None: handler = dummy_handler
776
776
777 self.CustomTB = new.instancemethod(handler,self,self.__class__)
777 self.CustomTB = new.instancemethod(handler,self,self.__class__)
778 self.custom_exceptions = exc_tuple
778 self.custom_exceptions = exc_tuple
779
779
780 def set_custom_completer(self,completer,pos=0):
780 def set_custom_completer(self,completer,pos=0):
781 """set_custom_completer(completer,pos=0)
781 """set_custom_completer(completer,pos=0)
782
782
783 Adds a new custom completer function.
783 Adds a new custom completer function.
784
784
785 The position argument (defaults to 0) is the index in the completers
785 The position argument (defaults to 0) is the index in the completers
786 list where you want the completer to be inserted."""
786 list where you want the completer to be inserted."""
787
787
788 newcomp = new.instancemethod(completer,self.Completer,
788 newcomp = new.instancemethod(completer,self.Completer,
789 self.Completer.__class__)
789 self.Completer.__class__)
790 self.Completer.matchers.insert(pos,newcomp)
790 self.Completer.matchers.insert(pos,newcomp)
791
791
792 def _get_call_pdb(self):
792 def _get_call_pdb(self):
793 return self._call_pdb
793 return self._call_pdb
794
794
795 def _set_call_pdb(self,val):
795 def _set_call_pdb(self,val):
796
796
797 if val not in (0,1,False,True):
797 if val not in (0,1,False,True):
798 raise ValueError,'new call_pdb value must be boolean'
798 raise ValueError,'new call_pdb value must be boolean'
799
799
800 # store value in instance
800 # store value in instance
801 self._call_pdb = val
801 self._call_pdb = val
802
802
803 # notify the actual exception handlers
803 # notify the actual exception handlers
804 self.InteractiveTB.call_pdb = val
804 self.InteractiveTB.call_pdb = val
805 if self.isthreaded:
805 if self.isthreaded:
806 try:
806 try:
807 self.sys_excepthook.call_pdb = val
807 self.sys_excepthook.call_pdb = val
808 except:
808 except:
809 warn('Failed to activate pdb for threaded exception handler')
809 warn('Failed to activate pdb for threaded exception handler')
810
810
811 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
811 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
812 'Control auto-activation of pdb at exceptions')
812 'Control auto-activation of pdb at exceptions')
813
813
814
814
815 # These special functions get installed in the builtin namespace, to
815 # These special functions get installed in the builtin namespace, to
816 # provide programmatic (pure python) access to magics, aliases and system
816 # provide programmatic (pure python) access to magics, aliases and system
817 # calls. This is important for logging, user scripting, and more.
817 # calls. This is important for logging, user scripting, and more.
818
818
819 # We are basically exposing, via normal python functions, the three
819 # We are basically exposing, via normal python functions, the three
820 # mechanisms in which ipython offers special call modes (magics for
820 # mechanisms in which ipython offers special call modes (magics for
821 # internal control, aliases for direct system access via pre-selected
821 # internal control, aliases for direct system access via pre-selected
822 # names, and !cmd for calling arbitrary system commands).
822 # names, and !cmd for calling arbitrary system commands).
823
823
824 def ipmagic(self,arg_s):
824 def ipmagic(self,arg_s):
825 """Call a magic function by name.
825 """Call a magic function by name.
826
826
827 Input: a string containing the name of the magic function to call and any
827 Input: a string containing the name of the magic function to call and any
828 additional arguments to be passed to the magic.
828 additional arguments to be passed to the magic.
829
829
830 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
830 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
831 prompt:
831 prompt:
832
832
833 In[1]: %name -opt foo bar
833 In[1]: %name -opt foo bar
834
834
835 To call a magic without arguments, simply use ipmagic('name').
835 To call a magic without arguments, simply use ipmagic('name').
836
836
837 This provides a proper Python function to call IPython's magics in any
837 This provides a proper Python function to call IPython's magics in any
838 valid Python code you can type at the interpreter, including loops and
838 valid Python code you can type at the interpreter, including loops and
839 compound statements. It is added by IPython to the Python builtin
839 compound statements. It is added by IPython to the Python builtin
840 namespace upon initialization."""
840 namespace upon initialization."""
841
841
842 args = arg_s.split(' ',1)
842 args = arg_s.split(' ',1)
843 magic_name = args[0]
843 magic_name = args[0]
844 magic_name = magic_name.lstrip(self.ESC_MAGIC)
844 magic_name = magic_name.lstrip(self.ESC_MAGIC)
845
845
846 try:
846 try:
847 magic_args = args[1]
847 magic_args = args[1]
848 except IndexError:
848 except IndexError:
849 magic_args = ''
849 magic_args = ''
850 fn = getattr(self,'magic_'+magic_name,None)
850 fn = getattr(self,'magic_'+magic_name,None)
851 if fn is None:
851 if fn is None:
852 error("Magic function `%s` not found." % magic_name)
852 error("Magic function `%s` not found." % magic_name)
853 else:
853 else:
854 magic_args = self.var_expand(magic_args)
854 magic_args = self.var_expand(magic_args)
855 return fn(magic_args)
855 return fn(magic_args)
856
856
857 def ipalias(self,arg_s):
857 def ipalias(self,arg_s):
858 """Call an alias by name.
858 """Call an alias by name.
859
859
860 Input: a string containing the name of the alias to call and any
860 Input: a string containing the name of the alias to call and any
861 additional arguments to be passed to the magic.
861 additional arguments to be passed to the magic.
862
862
863 ipalias('name -opt foo bar') is equivalent to typing at the ipython
863 ipalias('name -opt foo bar') is equivalent to typing at the ipython
864 prompt:
864 prompt:
865
865
866 In[1]: name -opt foo bar
866 In[1]: name -opt foo bar
867
867
868 To call an alias without arguments, simply use ipalias('name').
868 To call an alias without arguments, simply use ipalias('name').
869
869
870 This provides a proper Python function to call IPython's aliases in any
870 This provides a proper Python function to call IPython's aliases in any
871 valid Python code you can type at the interpreter, including loops and
871 valid Python code you can type at the interpreter, including loops and
872 compound statements. It is added by IPython to the Python builtin
872 compound statements. It is added by IPython to the Python builtin
873 namespace upon initialization."""
873 namespace upon initialization."""
874
874
875 args = arg_s.split(' ',1)
875 args = arg_s.split(' ',1)
876 alias_name = args[0]
876 alias_name = args[0]
877 try:
877 try:
878 alias_args = args[1]
878 alias_args = args[1]
879 except IndexError:
879 except IndexError:
880 alias_args = ''
880 alias_args = ''
881 if alias_name in self.alias_table:
881 if alias_name in self.alias_table:
882 self.call_alias(alias_name,alias_args)
882 self.call_alias(alias_name,alias_args)
883 else:
883 else:
884 error("Alias `%s` not found." % alias_name)
884 error("Alias `%s` not found." % alias_name)
885
885
886 def ipsystem(self,arg_s):
886 def ipsystem(self,arg_s):
887 """Make a system call, using IPython."""
887 """Make a system call, using IPython."""
888
888
889 self.system(arg_s)
889 self.system(arg_s)
890
890
891 def complete(self,text):
891 def complete(self,text):
892 """Return a sorted list of all possible completions on text.
892 """Return a sorted list of all possible completions on text.
893
893
894 Inputs:
894 Inputs:
895
895
896 - text: a string of text to be completed on.
896 - text: a string of text to be completed on.
897
897
898 This is a wrapper around the completion mechanism, similar to what
898 This is a wrapper around the completion mechanism, similar to what
899 readline does at the command line when the TAB key is hit. By
899 readline does at the command line when the TAB key is hit. By
900 exposing it as a method, it can be used by other non-readline
900 exposing it as a method, it can be used by other non-readline
901 environments (such as GUIs) for text completion.
901 environments (such as GUIs) for text completion.
902
902
903 Simple usage example:
903 Simple usage example:
904
904
905 In [1]: x = 'hello'
905 In [1]: x = 'hello'
906
906
907 In [2]: __IP.complete('x.l')
907 In [2]: __IP.complete('x.l')
908 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
908 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
909
909
910 complete = self.Completer.complete
910 complete = self.Completer.complete
911 state = 0
911 state = 0
912 # use a dict so we get unique keys, since ipyhton's multiple
912 # use a dict so we get unique keys, since ipyhton's multiple
913 # completers can return duplicates.
913 # completers can return duplicates.
914 comps = {}
914 comps = {}
915 while True:
915 while True:
916 newcomp = complete(text,state)
916 newcomp = complete(text,state)
917 if newcomp is None:
917 if newcomp is None:
918 break
918 break
919 comps[newcomp] = 1
919 comps[newcomp] = 1
920 state += 1
920 state += 1
921 outcomps = comps.keys()
921 outcomps = comps.keys()
922 outcomps.sort()
922 outcomps.sort()
923 return outcomps
923 return outcomps
924
924
925 def set_completer_frame(self, frame=None):
925 def set_completer_frame(self, frame=None):
926 if frame:
926 if frame:
927 self.Completer.namespace = frame.f_locals
927 self.Completer.namespace = frame.f_locals
928 self.Completer.global_namespace = frame.f_globals
928 self.Completer.global_namespace = frame.f_globals
929 else:
929 else:
930 self.Completer.namespace = self.user_ns
930 self.Completer.namespace = self.user_ns
931 self.Completer.global_namespace = self.user_global_ns
931 self.Completer.global_namespace = self.user_global_ns
932
932
933 def init_auto_alias(self):
933 def init_auto_alias(self):
934 """Define some aliases automatically.
934 """Define some aliases automatically.
935
935
936 These are ALL parameter-less aliases"""
936 These are ALL parameter-less aliases"""
937
937
938 for alias,cmd in self.auto_alias:
938 for alias,cmd in self.auto_alias:
939 self.alias_table[alias] = (0,cmd)
939 self.alias_table[alias] = (0,cmd)
940
940
941 def alias_table_validate(self,verbose=0):
941 def alias_table_validate(self,verbose=0):
942 """Update information about the alias table.
942 """Update information about the alias table.
943
943
944 In particular, make sure no Python keywords/builtins are in it."""
944 In particular, make sure no Python keywords/builtins are in it."""
945
945
946 no_alias = self.no_alias
946 no_alias = self.no_alias
947 for k in self.alias_table.keys():
947 for k in self.alias_table.keys():
948 if k in no_alias:
948 if k in no_alias:
949 del self.alias_table[k]
949 del self.alias_table[k]
950 if verbose:
950 if verbose:
951 print ("Deleting alias <%s>, it's a Python "
951 print ("Deleting alias <%s>, it's a Python "
952 "keyword or builtin." % k)
952 "keyword or builtin." % k)
953
953
954 def set_autoindent(self,value=None):
954 def set_autoindent(self,value=None):
955 """Set the autoindent flag, checking for readline support.
955 """Set the autoindent flag, checking for readline support.
956
956
957 If called with no arguments, it acts as a toggle."""
957 If called with no arguments, it acts as a toggle."""
958
958
959 if not self.has_readline:
959 if not self.has_readline:
960 if os.name == 'posix':
960 if os.name == 'posix':
961 warn("The auto-indent feature requires the readline library")
961 warn("The auto-indent feature requires the readline library")
962 self.autoindent = 0
962 self.autoindent = 0
963 return
963 return
964 if value is None:
964 if value is None:
965 self.autoindent = not self.autoindent
965 self.autoindent = not self.autoindent
966 else:
966 else:
967 self.autoindent = value
967 self.autoindent = value
968
968
969 def rc_set_toggle(self,rc_field,value=None):
969 def rc_set_toggle(self,rc_field,value=None):
970 """Set or toggle a field in IPython's rc config. structure.
970 """Set or toggle a field in IPython's rc config. structure.
971
971
972 If called with no arguments, it acts as a toggle.
972 If called with no arguments, it acts as a toggle.
973
973
974 If called with a non-existent field, the resulting AttributeError
974 If called with a non-existent field, the resulting AttributeError
975 exception will propagate out."""
975 exception will propagate out."""
976
976
977 rc_val = getattr(self.rc,rc_field)
977 rc_val = getattr(self.rc,rc_field)
978 if value is None:
978 if value is None:
979 value = not rc_val
979 value = not rc_val
980 setattr(self.rc,rc_field,value)
980 setattr(self.rc,rc_field,value)
981
981
982 def user_setup(self,ipythondir,rc_suffix,mode='install'):
982 def user_setup(self,ipythondir,rc_suffix,mode='install'):
983 """Install the user configuration directory.
983 """Install the user configuration directory.
984
984
985 Can be called when running for the first time or to upgrade the user's
985 Can be called when running for the first time or to upgrade the user's
986 .ipython/ directory with the mode parameter. Valid modes are 'install'
986 .ipython/ directory with the mode parameter. Valid modes are 'install'
987 and 'upgrade'."""
987 and 'upgrade'."""
988
988
989 def wait():
989 def wait():
990 try:
990 try:
991 raw_input("Please press <RETURN> to start IPython.")
991 raw_input("Please press <RETURN> to start IPython.")
992 except EOFError:
992 except EOFError:
993 print >> Term.cout
993 print >> Term.cout
994 print '*'*70
994 print '*'*70
995
995
996 cwd = os.getcwd() # remember where we started
996 cwd = os.getcwd() # remember where we started
997 glb = glob.glob
997 glb = glob.glob
998 print '*'*70
998 print '*'*70
999 if mode == 'install':
999 if mode == 'install':
1000 print \
1000 print \
1001 """Welcome to IPython. I will try to create a personal configuration directory
1001 """Welcome to IPython. I will try to create a personal configuration directory
1002 where you can customize many aspects of IPython's functionality in:\n"""
1002 where you can customize many aspects of IPython's functionality in:\n"""
1003 else:
1003 else:
1004 print 'I am going to upgrade your configuration in:'
1004 print 'I am going to upgrade your configuration in:'
1005
1005
1006 print ipythondir
1006 print ipythondir
1007
1007
1008 rcdirend = os.path.join('IPython','UserConfig')
1008 rcdirend = os.path.join('IPython','UserConfig')
1009 cfg = lambda d: os.path.join(d,rcdirend)
1009 cfg = lambda d: os.path.join(d,rcdirend)
1010 try:
1010 try:
1011 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1011 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1012 except IOError:
1012 except IOError:
1013 warning = """
1013 warning = """
1014 Installation error. IPython's directory was not found.
1014 Installation error. IPython's directory was not found.
1015
1015
1016 Check the following:
1016 Check the following:
1017
1017
1018 The ipython/IPython directory should be in a directory belonging to your
1018 The ipython/IPython directory should be in a directory belonging to your
1019 PYTHONPATH environment variable (that is, it should be in a directory
1019 PYTHONPATH environment variable (that is, it should be in a directory
1020 belonging to sys.path). You can copy it explicitly there or just link to it.
1020 belonging to sys.path). You can copy it explicitly there or just link to it.
1021
1021
1022 IPython will proceed with builtin defaults.
1022 IPython will proceed with builtin defaults.
1023 """
1023 """
1024 warn(warning)
1024 warn(warning)
1025 wait()
1025 wait()
1026 return
1026 return
1027
1027
1028 if mode == 'install':
1028 if mode == 'install':
1029 try:
1029 try:
1030 shutil.copytree(rcdir,ipythondir)
1030 shutil.copytree(rcdir,ipythondir)
1031 os.chdir(ipythondir)
1031 os.chdir(ipythondir)
1032 rc_files = glb("ipythonrc*")
1032 rc_files = glb("ipythonrc*")
1033 for rc_file in rc_files:
1033 for rc_file in rc_files:
1034 os.rename(rc_file,rc_file+rc_suffix)
1034 os.rename(rc_file,rc_file+rc_suffix)
1035 except:
1035 except:
1036 warning = """
1036 warning = """
1037
1037
1038 There was a problem with the installation:
1038 There was a problem with the installation:
1039 %s
1039 %s
1040 Try to correct it or contact the developers if you think it's a bug.
1040 Try to correct it or contact the developers if you think it's a bug.
1041 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1041 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1042 warn(warning)
1042 warn(warning)
1043 wait()
1043 wait()
1044 return
1044 return
1045
1045
1046 elif mode == 'upgrade':
1046 elif mode == 'upgrade':
1047 try:
1047 try:
1048 os.chdir(ipythondir)
1048 os.chdir(ipythondir)
1049 except:
1049 except:
1050 print """
1050 print """
1051 Can not upgrade: changing to directory %s failed. Details:
1051 Can not upgrade: changing to directory %s failed. Details:
1052 %s
1052 %s
1053 """ % (ipythondir,sys.exc_info()[1])
1053 """ % (ipythondir,sys.exc_info()[1])
1054 wait()
1054 wait()
1055 return
1055 return
1056 else:
1056 else:
1057 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1057 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1058 for new_full_path in sources:
1058 for new_full_path in sources:
1059 new_filename = os.path.basename(new_full_path)
1059 new_filename = os.path.basename(new_full_path)
1060 if new_filename.startswith('ipythonrc'):
1060 if new_filename.startswith('ipythonrc'):
1061 new_filename = new_filename + rc_suffix
1061 new_filename = new_filename + rc_suffix
1062 # The config directory should only contain files, skip any
1062 # The config directory should only contain files, skip any
1063 # directories which may be there (like CVS)
1063 # directories which may be there (like CVS)
1064 if os.path.isdir(new_full_path):
1064 if os.path.isdir(new_full_path):
1065 continue
1065 continue
1066 if os.path.exists(new_filename):
1066 if os.path.exists(new_filename):
1067 old_file = new_filename+'.old'
1067 old_file = new_filename+'.old'
1068 if os.path.exists(old_file):
1068 if os.path.exists(old_file):
1069 os.remove(old_file)
1069 os.remove(old_file)
1070 os.rename(new_filename,old_file)
1070 os.rename(new_filename,old_file)
1071 shutil.copy(new_full_path,new_filename)
1071 shutil.copy(new_full_path,new_filename)
1072 else:
1072 else:
1073 raise ValueError,'unrecognized mode for install:',`mode`
1073 raise ValueError,'unrecognized mode for install:',`mode`
1074
1074
1075 # Fix line-endings to those native to each platform in the config
1075 # Fix line-endings to those native to each platform in the config
1076 # directory.
1076 # directory.
1077 try:
1077 try:
1078 os.chdir(ipythondir)
1078 os.chdir(ipythondir)
1079 except:
1079 except:
1080 print """
1080 print """
1081 Problem: changing to directory %s failed.
1081 Problem: changing to directory %s failed.
1082 Details:
1082 Details:
1083 %s
1083 %s
1084
1084
1085 Some configuration files may have incorrect line endings. This should not
1085 Some configuration files may have incorrect line endings. This should not
1086 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1086 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1087 wait()
1087 wait()
1088 else:
1088 else:
1089 for fname in glb('ipythonrc*'):
1089 for fname in glb('ipythonrc*'):
1090 try:
1090 try:
1091 native_line_ends(fname,backup=0)
1091 native_line_ends(fname,backup=0)
1092 except IOError:
1092 except IOError:
1093 pass
1093 pass
1094
1094
1095 if mode == 'install':
1095 if mode == 'install':
1096 print """
1096 print """
1097 Successful installation!
1097 Successful installation!
1098
1098
1099 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1099 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1100 IPython manual (there are both HTML and PDF versions supplied with the
1100 IPython manual (there are both HTML and PDF versions supplied with the
1101 distribution) to make sure that your system environment is properly configured
1101 distribution) to make sure that your system environment is properly configured
1102 to take advantage of IPython's features."""
1102 to take advantage of IPython's features."""
1103 else:
1103 else:
1104 print """
1104 print """
1105 Successful upgrade!
1105 Successful upgrade!
1106
1106
1107 All files in your directory:
1107 All files in your directory:
1108 %(ipythondir)s
1108 %(ipythondir)s
1109 which would have been overwritten by the upgrade were backed up with a .old
1109 which would have been overwritten by the upgrade were backed up with a .old
1110 extension. If you had made particular customizations in those files you may
1110 extension. If you had made particular customizations in those files you may
1111 want to merge them back into the new files.""" % locals()
1111 want to merge them back into the new files.""" % locals()
1112 wait()
1112 wait()
1113 os.chdir(cwd)
1113 os.chdir(cwd)
1114 # end user_setup()
1114 # end user_setup()
1115
1115
1116 def atexit_operations(self):
1116 def atexit_operations(self):
1117 """This will be executed at the time of exit.
1117 """This will be executed at the time of exit.
1118
1118
1119 Saving of persistent data should be performed here. """
1119 Saving of persistent data should be performed here. """
1120
1120
1121 #print '*** IPython exit cleanup ***' # dbg
1121 #print '*** IPython exit cleanup ***' # dbg
1122 # input history
1122 # input history
1123 self.savehist()
1123 self.savehist()
1124
1124
1125 # Cleanup all tempfiles left around
1125 # Cleanup all tempfiles left around
1126 for tfile in self.tempfiles:
1126 for tfile in self.tempfiles:
1127 try:
1127 try:
1128 os.unlink(tfile)
1128 os.unlink(tfile)
1129 except OSError:
1129 except OSError:
1130 pass
1130 pass
1131
1131
1132 # save the "persistent data" catch-all dictionary
1132 # save the "persistent data" catch-all dictionary
1133 try:
1133 try:
1134 pickle.dump(self.persist, open(self.persist_fname,"w"))
1134 pickle.dump(self.persist, open(self.persist_fname,"w"))
1135 except:
1135 except:
1136 print "*** ERROR *** persistent data saving failed."
1136 print "*** ERROR *** persistent data saving failed."
1137
1137
1138 def savehist(self):
1138 def savehist(self):
1139 """Save input history to a file (via readline library)."""
1139 """Save input history to a file (via readline library)."""
1140 try:
1140 try:
1141 self.readline.write_history_file(self.histfile)
1141 self.readline.write_history_file(self.histfile)
1142 except:
1142 except:
1143 print 'Unable to save IPython command history to file: ' + \
1143 print 'Unable to save IPython command history to file: ' + \
1144 `self.histfile`
1144 `self.histfile`
1145
1145
1146 def pre_readline(self):
1146 def pre_readline(self):
1147 """readline hook to be used at the start of each line.
1147 """readline hook to be used at the start of each line.
1148
1148
1149 Currently it handles auto-indent only."""
1149 Currently it handles auto-indent only."""
1150
1150
1151 self.readline.insert_text(self.indent_current)
1151 self.readline.insert_text(self.indent_current)
1152
1152
1153 def init_readline(self):
1153 def init_readline(self):
1154 """Command history completion/saving/reloading."""
1154 """Command history completion/saving/reloading."""
1155 try:
1155 try:
1156 import readline
1156 import readline
1157 except ImportError:
1157 except ImportError:
1158 self.has_readline = 0
1158 self.has_readline = 0
1159 self.readline = None
1159 self.readline = None
1160 # no point in bugging windows users with this every time:
1160 # no point in bugging windows users with this every time:
1161 if os.name == 'posix':
1161 if os.name == 'posix':
1162 warn('Readline services not available on this platform.')
1162 warn('Readline services not available on this platform.')
1163 else:
1163 else:
1164 import atexit
1164 import atexit
1165 from IPython.completer import IPCompleter
1165 from IPython.completer import IPCompleter
1166 self.Completer = IPCompleter(self,
1166 self.Completer = IPCompleter(self,
1167 self.user_ns,
1167 self.user_ns,
1168 self.user_global_ns,
1168 self.user_global_ns,
1169 self.rc.readline_omit__names,
1169 self.rc.readline_omit__names,
1170 self.alias_table)
1170 self.alias_table)
1171
1171
1172 # Platform-specific configuration
1172 # Platform-specific configuration
1173 if os.name == 'nt':
1173 if os.name == 'nt':
1174 self.readline_startup_hook = readline.set_pre_input_hook
1174 self.readline_startup_hook = readline.set_pre_input_hook
1175 else:
1175 else:
1176 self.readline_startup_hook = readline.set_startup_hook
1176 self.readline_startup_hook = readline.set_startup_hook
1177
1177
1178 # Load user's initrc file (readline config)
1178 # Load user's initrc file (readline config)
1179 inputrc_name = os.environ.get('INPUTRC')
1179 inputrc_name = os.environ.get('INPUTRC')
1180 if inputrc_name is None:
1180 if inputrc_name is None:
1181 home_dir = get_home_dir()
1181 home_dir = get_home_dir()
1182 if home_dir is not None:
1182 if home_dir is not None:
1183 inputrc_name = os.path.join(home_dir,'.inputrc')
1183 inputrc_name = os.path.join(home_dir,'.inputrc')
1184 if os.path.isfile(inputrc_name):
1184 if os.path.isfile(inputrc_name):
1185 try:
1185 try:
1186 readline.read_init_file(inputrc_name)
1186 readline.read_init_file(inputrc_name)
1187 except:
1187 except:
1188 warn('Problems reading readline initialization file <%s>'
1188 warn('Problems reading readline initialization file <%s>'
1189 % inputrc_name)
1189 % inputrc_name)
1190
1190
1191 self.has_readline = 1
1191 self.has_readline = 1
1192 self.readline = readline
1192 self.readline = readline
1193 # save this in sys so embedded copies can restore it properly
1193 # save this in sys so embedded copies can restore it properly
1194 sys.ipcompleter = self.Completer.complete
1194 sys.ipcompleter = self.Completer.complete
1195 readline.set_completer(self.Completer.complete)
1195 readline.set_completer(self.Completer.complete)
1196
1196
1197 # Configure readline according to user's prefs
1197 # Configure readline according to user's prefs
1198 for rlcommand in self.rc.readline_parse_and_bind:
1198 for rlcommand in self.rc.readline_parse_and_bind:
1199 readline.parse_and_bind(rlcommand)
1199 readline.parse_and_bind(rlcommand)
1200
1200
1201 # remove some chars from the delimiters list
1201 # remove some chars from the delimiters list
1202 delims = readline.get_completer_delims()
1202 delims = readline.get_completer_delims()
1203 delims = delims.translate(string._idmap,
1203 delims = delims.translate(string._idmap,
1204 self.rc.readline_remove_delims)
1204 self.rc.readline_remove_delims)
1205 readline.set_completer_delims(delims)
1205 readline.set_completer_delims(delims)
1206 # otherwise we end up with a monster history after a while:
1206 # otherwise we end up with a monster history after a while:
1207 readline.set_history_length(1000)
1207 readline.set_history_length(1000)
1208 try:
1208 try:
1209 #print '*** Reading readline history' # dbg
1209 #print '*** Reading readline history' # dbg
1210 readline.read_history_file(self.histfile)
1210 readline.read_history_file(self.histfile)
1211 except IOError:
1211 except IOError:
1212 pass # It doesn't exist yet.
1212 pass # It doesn't exist yet.
1213
1213
1214 atexit.register(self.atexit_operations)
1214 atexit.register(self.atexit_operations)
1215 del atexit
1215 del atexit
1216
1216
1217 # Configure auto-indent for all platforms
1217 # Configure auto-indent for all platforms
1218 self.set_autoindent(self.rc.autoindent)
1218 self.set_autoindent(self.rc.autoindent)
1219
1219
1220 def _should_recompile(self,e):
1220 def _should_recompile(self,e):
1221 """Utility routine for edit_syntax_error"""
1221 """Utility routine for edit_syntax_error"""
1222
1222
1223 if e.filename in ('<ipython console>','<input>','<string>',
1223 if e.filename in ('<ipython console>','<input>','<string>',
1224 '<console>',None):
1224 '<console>',None):
1225
1225
1226 return False
1226 return False
1227 try:
1227 try:
1228 if not ask_yes_no('Return to editor to correct syntax error? '
1228 if not ask_yes_no('Return to editor to correct syntax error? '
1229 '[Y/n] ','y'):
1229 '[Y/n] ','y'):
1230 return False
1230 return False
1231 except EOFError:
1231 except EOFError:
1232 return False
1232 return False
1233
1233
1234 def int0(x):
1234 def int0(x):
1235 try:
1235 try:
1236 return int(x)
1236 return int(x)
1237 except TypeError:
1237 except TypeError:
1238 return 0
1238 return 0
1239 # always pass integer line and offset values to editor hook
1239 # always pass integer line and offset values to editor hook
1240 self.hooks.fix_error_editor(e.filename,
1240 self.hooks.fix_error_editor(e.filename,
1241 int0(e.lineno),int0(e.offset),e.msg)
1241 int0(e.lineno),int0(e.offset),e.msg)
1242 return True
1242 return True
1243
1243
1244 def edit_syntax_error(self):
1244 def edit_syntax_error(self):
1245 """The bottom half of the syntax error handler called in the main loop.
1245 """The bottom half of the syntax error handler called in the main loop.
1246
1246
1247 Loop until syntax error is fixed or user cancels.
1247 Loop until syntax error is fixed or user cancels.
1248 """
1248 """
1249
1249
1250 while self.SyntaxTB.last_syntax_error:
1250 while self.SyntaxTB.last_syntax_error:
1251 # copy and clear last_syntax_error
1251 # copy and clear last_syntax_error
1252 err = self.SyntaxTB.clear_err_state()
1252 err = self.SyntaxTB.clear_err_state()
1253 if not self._should_recompile(err):
1253 if not self._should_recompile(err):
1254 return
1254 return
1255 try:
1255 try:
1256 # may set last_syntax_error again if a SyntaxError is raised
1256 # may set last_syntax_error again if a SyntaxError is raised
1257 self.safe_execfile(err.filename,self.shell.user_ns)
1257 self.safe_execfile(err.filename,self.shell.user_ns)
1258 except:
1258 except:
1259 self.showtraceback()
1259 self.showtraceback()
1260 else:
1260 else:
1261 f = file(err.filename)
1261 f = file(err.filename)
1262 try:
1262 try:
1263 sys.displayhook(f.read())
1263 sys.displayhook(f.read())
1264 finally:
1264 finally:
1265 f.close()
1265 f.close()
1266
1266
1267 def showsyntaxerror(self, filename=None):
1267 def showsyntaxerror(self, filename=None):
1268 """Display the syntax error that just occurred.
1268 """Display the syntax error that just occurred.
1269
1269
1270 This doesn't display a stack trace because there isn't one.
1270 This doesn't display a stack trace because there isn't one.
1271
1271
1272 If a filename is given, it is stuffed in the exception instead
1272 If a filename is given, it is stuffed in the exception instead
1273 of what was there before (because Python's parser always uses
1273 of what was there before (because Python's parser always uses
1274 "<string>" when reading from a string).
1274 "<string>" when reading from a string).
1275 """
1275 """
1276 etype, value, last_traceback = sys.exc_info()
1276 etype, value, last_traceback = sys.exc_info()
1277 if filename and etype is SyntaxError:
1277 if filename and etype is SyntaxError:
1278 # Work hard to stuff the correct filename in the exception
1278 # Work hard to stuff the correct filename in the exception
1279 try:
1279 try:
1280 msg, (dummy_filename, lineno, offset, line) = value
1280 msg, (dummy_filename, lineno, offset, line) = value
1281 except:
1281 except:
1282 # Not the format we expect; leave it alone
1282 # Not the format we expect; leave it alone
1283 pass
1283 pass
1284 else:
1284 else:
1285 # Stuff in the right filename
1285 # Stuff in the right filename
1286 try:
1286 try:
1287 # Assume SyntaxError is a class exception
1287 # Assume SyntaxError is a class exception
1288 value = SyntaxError(msg, (filename, lineno, offset, line))
1288 value = SyntaxError(msg, (filename, lineno, offset, line))
1289 except:
1289 except:
1290 # If that failed, assume SyntaxError is a string
1290 # If that failed, assume SyntaxError is a string
1291 value = msg, (filename, lineno, offset, line)
1291 value = msg, (filename, lineno, offset, line)
1292 self.SyntaxTB(etype,value,[])
1292 self.SyntaxTB(etype,value,[])
1293
1293
1294 def debugger(self):
1294 def debugger(self):
1295 """Call the pdb debugger."""
1295 """Call the pdb debugger."""
1296
1296
1297 if not self.rc.pdb:
1297 if not self.rc.pdb:
1298 return
1298 return
1299 pdb.pm()
1299 pdb.pm()
1300
1300
1301 def showtraceback(self,exc_tuple = None,filename=None):
1301 def showtraceback(self,exc_tuple = None,filename=None):
1302 """Display the exception that just occurred."""
1302 """Display the exception that just occurred."""
1303
1303
1304 # Though this won't be called by syntax errors in the input line,
1304 # Though this won't be called by syntax errors in the input line,
1305 # there may be SyntaxError cases whith imported code.
1305 # there may be SyntaxError cases whith imported code.
1306 if exc_tuple is None:
1306 if exc_tuple is None:
1307 type, value, tb = sys.exc_info()
1307 type, value, tb = sys.exc_info()
1308 else:
1308 else:
1309 type, value, tb = exc_tuple
1309 type, value, tb = exc_tuple
1310 if type is SyntaxError:
1310 if type is SyntaxError:
1311 self.showsyntaxerror(filename)
1311 self.showsyntaxerror(filename)
1312 else:
1312 else:
1313 self.InteractiveTB()
1313 self.InteractiveTB()
1314 if self.InteractiveTB.call_pdb and self.has_readline:
1314 if self.InteractiveTB.call_pdb and self.has_readline:
1315 # pdb mucks up readline, fix it back
1315 # pdb mucks up readline, fix it back
1316 self.readline.set_completer(self.Completer.complete)
1316 self.readline.set_completer(self.Completer.complete)
1317
1317
1318 def mainloop(self,banner=None):
1318 def mainloop(self,banner=None):
1319 """Creates the local namespace and starts the mainloop.
1319 """Creates the local namespace and starts the mainloop.
1320
1320
1321 If an optional banner argument is given, it will override the
1321 If an optional banner argument is given, it will override the
1322 internally created default banner."""
1322 internally created default banner."""
1323
1323
1324 if self.rc.c: # Emulate Python's -c option
1324 if self.rc.c: # Emulate Python's -c option
1325 self.exec_init_cmd()
1325 self.exec_init_cmd()
1326 if banner is None:
1326 if banner is None:
1327 if self.rc.banner:
1327 if self.rc.banner:
1328 banner = self.BANNER+self.banner2
1328 banner = self.BANNER+self.banner2
1329 else:
1329 else:
1330 banner = ''
1330 banner = ''
1331 self.interact(banner)
1331 self.interact(banner)
1332
1332
1333 def exec_init_cmd(self):
1333 def exec_init_cmd(self):
1334 """Execute a command given at the command line.
1334 """Execute a command given at the command line.
1335
1335
1336 This emulates Python's -c option."""
1336 This emulates Python's -c option."""
1337
1337
1338 sys.argv = ['-c']
1338 sys.argv = ['-c']
1339 self.push(self.rc.c)
1339 self.push(self.rc.c)
1340
1340
1341 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1341 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1342 """Embeds IPython into a running python program.
1342 """Embeds IPython into a running python program.
1343
1343
1344 Input:
1344 Input:
1345
1345
1346 - header: An optional header message can be specified.
1346 - header: An optional header message can be specified.
1347
1347
1348 - local_ns, global_ns: working namespaces. If given as None, the
1348 - local_ns, global_ns: working namespaces. If given as None, the
1349 IPython-initialized one is updated with __main__.__dict__, so that
1349 IPython-initialized one is updated with __main__.__dict__, so that
1350 program variables become visible but user-specific configuration
1350 program variables become visible but user-specific configuration
1351 remains possible.
1351 remains possible.
1352
1352
1353 - stack_depth: specifies how many levels in the stack to go to
1353 - stack_depth: specifies how many levels in the stack to go to
1354 looking for namespaces (when local_ns and global_ns are None). This
1354 looking for namespaces (when local_ns and global_ns are None). This
1355 allows an intermediate caller to make sure that this function gets
1355 allows an intermediate caller to make sure that this function gets
1356 the namespace from the intended level in the stack. By default (0)
1356 the namespace from the intended level in the stack. By default (0)
1357 it will get its locals and globals from the immediate caller.
1357 it will get its locals and globals from the immediate caller.
1358
1358
1359 Warning: it's possible to use this in a program which is being run by
1359 Warning: it's possible to use this in a program which is being run by
1360 IPython itself (via %run), but some funny things will happen (a few
1360 IPython itself (via %run), but some funny things will happen (a few
1361 globals get overwritten). In the future this will be cleaned up, as
1361 globals get overwritten). In the future this will be cleaned up, as
1362 there is no fundamental reason why it can't work perfectly."""
1362 there is no fundamental reason why it can't work perfectly."""
1363
1363
1364 # Get locals and globals from caller
1364 # Get locals and globals from caller
1365 if local_ns is None or global_ns is None:
1365 if local_ns is None or global_ns is None:
1366 call_frame = sys._getframe(stack_depth).f_back
1366 call_frame = sys._getframe(stack_depth).f_back
1367
1367
1368 if local_ns is None:
1368 if local_ns is None:
1369 local_ns = call_frame.f_locals
1369 local_ns = call_frame.f_locals
1370 if global_ns is None:
1370 if global_ns is None:
1371 global_ns = call_frame.f_globals
1371 global_ns = call_frame.f_globals
1372
1372
1373 # Update namespaces and fire up interpreter
1373 # Update namespaces and fire up interpreter
1374
1374
1375 # The global one is easy, we can just throw it in
1375 # The global one is easy, we can just throw it in
1376 self.user_global_ns = global_ns
1376 self.user_global_ns = global_ns
1377
1377
1378 # but the user/local one is tricky: ipython needs it to store internal
1378 # but the user/local one is tricky: ipython needs it to store internal
1379 # data, but we also need the locals. We'll copy locals in the user
1379 # data, but we also need the locals. We'll copy locals in the user
1380 # one, but will track what got copied so we can delete them at exit.
1380 # one, but will track what got copied so we can delete them at exit.
1381 # This is so that a later embedded call doesn't see locals from a
1381 # This is so that a later embedded call doesn't see locals from a
1382 # previous call (which most likely existed in a separate scope).
1382 # previous call (which most likely existed in a separate scope).
1383 local_varnames = local_ns.keys()
1383 local_varnames = local_ns.keys()
1384 self.user_ns.update(local_ns)
1384 self.user_ns.update(local_ns)
1385
1385
1386 # Patch for global embedding to make sure that things don't overwrite
1386 # Patch for global embedding to make sure that things don't overwrite
1387 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1387 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1388 # FIXME. Test this a bit more carefully (the if.. is new)
1388 # FIXME. Test this a bit more carefully (the if.. is new)
1389 if local_ns is None and global_ns is None:
1389 if local_ns is None and global_ns is None:
1390 self.user_global_ns.update(__main__.__dict__)
1390 self.user_global_ns.update(__main__.__dict__)
1391
1391
1392 # make sure the tab-completer has the correct frame information, so it
1392 # make sure the tab-completer has the correct frame information, so it
1393 # actually completes using the frame's locals/globals
1393 # actually completes using the frame's locals/globals
1394 self.set_completer_frame()
1394 self.set_completer_frame()
1395
1395
1396 # before activating the interactive mode, we need to make sure that
1396 # before activating the interactive mode, we need to make sure that
1397 # all names in the builtin namespace needed by ipython point to
1397 # all names in the builtin namespace needed by ipython point to
1398 # ourselves, and not to other instances.
1398 # ourselves, and not to other instances.
1399 self.add_builtins()
1399 self.add_builtins()
1400
1400
1401 self.interact(header)
1401 self.interact(header)
1402
1402
1403 # now, purge out the user namespace from anything we might have added
1403 # now, purge out the user namespace from anything we might have added
1404 # from the caller's local namespace
1404 # from the caller's local namespace
1405 delvar = self.user_ns.pop
1405 delvar = self.user_ns.pop
1406 for var in local_varnames:
1406 for var in local_varnames:
1407 delvar(var,None)
1407 delvar(var,None)
1408 # and clean builtins we may have overridden
1408 # and clean builtins we may have overridden
1409 self.clean_builtins()
1409 self.clean_builtins()
1410
1410
1411 def interact(self, banner=None):
1411 def interact(self, banner=None):
1412 """Closely emulate the interactive Python console.
1412 """Closely emulate the interactive Python console.
1413
1413
1414 The optional banner argument specify the banner to print
1414 The optional banner argument specify the banner to print
1415 before the first interaction; by default it prints a banner
1415 before the first interaction; by default it prints a banner
1416 similar to the one printed by the real Python interpreter,
1416 similar to the one printed by the real Python interpreter,
1417 followed by the current class name in parentheses (so as not
1417 followed by the current class name in parentheses (so as not
1418 to confuse this with the real interpreter -- since it's so
1418 to confuse this with the real interpreter -- since it's so
1419 close!).
1419 close!).
1420
1420
1421 """
1421 """
1422 cprt = 'Type "copyright", "credits" or "license" for more information.'
1422 cprt = 'Type "copyright", "credits" or "license" for more information.'
1423 if banner is None:
1423 if banner is None:
1424 self.write("Python %s on %s\n%s\n(%s)\n" %
1424 self.write("Python %s on %s\n%s\n(%s)\n" %
1425 (sys.version, sys.platform, cprt,
1425 (sys.version, sys.platform, cprt,
1426 self.__class__.__name__))
1426 self.__class__.__name__))
1427 else:
1427 else:
1428 self.write(banner)
1428 self.write(banner)
1429
1429
1430 more = 0
1430 more = 0
1431
1431
1432 # Mark activity in the builtins
1432 # Mark activity in the builtins
1433 __builtin__.__dict__['__IPYTHON__active'] += 1
1433 __builtin__.__dict__['__IPYTHON__active'] += 1
1434
1434
1435 # exit_now is set by a call to %Exit or %Quit
1435 # exit_now is set by a call to %Exit or %Quit
1436 self.exit_now = False
1436 self.exit_now = False
1437 while not self.exit_now:
1437 while not self.exit_now:
1438
1438
1439 try:
1439 try:
1440 if more:
1440 if more:
1441 prompt = self.outputcache.prompt2
1441 prompt = self.outputcache.prompt2
1442 if self.autoindent:
1442 if self.autoindent:
1443 self.readline_startup_hook(self.pre_readline)
1443 self.readline_startup_hook(self.pre_readline)
1444 else:
1444 else:
1445 prompt = self.outputcache.prompt1
1445 prompt = self.outputcache.prompt1
1446 try:
1446 try:
1447 line = self.raw_input(prompt,more)
1447 line = self.raw_input(prompt,more)
1448 if self.autoindent:
1448 if self.autoindent:
1449 self.readline_startup_hook(None)
1449 self.readline_startup_hook(None)
1450 except EOFError:
1450 except EOFError:
1451 if self.autoindent:
1451 if self.autoindent:
1452 self.readline_startup_hook(None)
1452 self.readline_startup_hook(None)
1453 self.write("\n")
1453 self.write("\n")
1454 self.exit()
1454 self.exit()
1455 else:
1455 else:
1456 more = self.push(line)
1456 more = self.push(line)
1457
1457
1458 if (self.SyntaxTB.last_syntax_error and
1458 if (self.SyntaxTB.last_syntax_error and
1459 self.rc.autoedit_syntax):
1459 self.rc.autoedit_syntax):
1460 self.edit_syntax_error()
1460 self.edit_syntax_error()
1461
1461
1462 except KeyboardInterrupt:
1462 except KeyboardInterrupt:
1463 self.write("\nKeyboardInterrupt\n")
1463 self.write("\nKeyboardInterrupt\n")
1464 self.resetbuffer()
1464 self.resetbuffer()
1465 more = 0
1465 more = 0
1466 # keep cache in sync with the prompt counter:
1466 # keep cache in sync with the prompt counter:
1467 self.outputcache.prompt_count -= 1
1467 self.outputcache.prompt_count -= 1
1468
1468
1469 if self.autoindent:
1469 if self.autoindent:
1470 self.indent_current_nsp = 0
1470 self.indent_current_nsp = 0
1471 self.indent_current = ' '* self.indent_current_nsp
1471 self.indent_current = ' '* self.indent_current_nsp
1472
1472
1473 except bdb.BdbQuit:
1473 except bdb.BdbQuit:
1474 warn("The Python debugger has exited with a BdbQuit exception.\n"
1474 warn("The Python debugger has exited with a BdbQuit exception.\n"
1475 "Because of how pdb handles the stack, it is impossible\n"
1475 "Because of how pdb handles the stack, it is impossible\n"
1476 "for IPython to properly format this particular exception.\n"
1476 "for IPython to properly format this particular exception.\n"
1477 "IPython will resume normal operation.")
1477 "IPython will resume normal operation.")
1478
1478
1479 # We are off again...
1479 # We are off again...
1480 __builtin__.__dict__['__IPYTHON__active'] -= 1
1480 __builtin__.__dict__['__IPYTHON__active'] -= 1
1481
1481
1482 def excepthook(self, type, value, tb):
1482 def excepthook(self, type, value, tb):
1483 """One more defense for GUI apps that call sys.excepthook.
1483 """One more defense for GUI apps that call sys.excepthook.
1484
1484
1485 GUI frameworks like wxPython trap exceptions and call
1485 GUI frameworks like wxPython trap exceptions and call
1486 sys.excepthook themselves. I guess this is a feature that
1486 sys.excepthook themselves. I guess this is a feature that
1487 enables them to keep running after exceptions that would
1487 enables them to keep running after exceptions that would
1488 otherwise kill their mainloop. This is a bother for IPython
1488 otherwise kill their mainloop. This is a bother for IPython
1489 which excepts to catch all of the program exceptions with a try:
1489 which excepts to catch all of the program exceptions with a try:
1490 except: statement.
1490 except: statement.
1491
1491
1492 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1492 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1493 any app directly invokes sys.excepthook, it will look to the user like
1493 any app directly invokes sys.excepthook, it will look to the user like
1494 IPython crashed. In order to work around this, we can disable the
1494 IPython crashed. In order to work around this, we can disable the
1495 CrashHandler and replace it with this excepthook instead, which prints a
1495 CrashHandler and replace it with this excepthook instead, which prints a
1496 regular traceback using our InteractiveTB. In this fashion, apps which
1496 regular traceback using our InteractiveTB. In this fashion, apps which
1497 call sys.excepthook will generate a regular-looking exception from
1497 call sys.excepthook will generate a regular-looking exception from
1498 IPython, and the CrashHandler will only be triggered by real IPython
1498 IPython, and the CrashHandler will only be triggered by real IPython
1499 crashes.
1499 crashes.
1500
1500
1501 This hook should be used sparingly, only in places which are not likely
1501 This hook should be used sparingly, only in places which are not likely
1502 to be true IPython errors.
1502 to be true IPython errors.
1503 """
1503 """
1504
1504
1505 self.InteractiveTB(type, value, tb, tb_offset=0)
1505 self.InteractiveTB(type, value, tb, tb_offset=0)
1506 if self.InteractiveTB.call_pdb and self.has_readline:
1506 if self.InteractiveTB.call_pdb and self.has_readline:
1507 self.readline.set_completer(self.Completer.complete)
1507 self.readline.set_completer(self.Completer.complete)
1508
1508
1509 def call_alias(self,alias,rest=''):
1509 def call_alias(self,alias,rest=''):
1510 """Call an alias given its name and the rest of the line.
1510 """Call an alias given its name and the rest of the line.
1511
1511
1512 This function MUST be given a proper alias, because it doesn't make
1512 This function MUST be given a proper alias, because it doesn't make
1513 any checks when looking up into the alias table. The caller is
1513 any checks when looking up into the alias table. The caller is
1514 responsible for invoking it only with a valid alias."""
1514 responsible for invoking it only with a valid alias."""
1515
1515
1516 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1516 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1517 nargs,cmd = self.alias_table[alias]
1517 nargs,cmd = self.alias_table[alias]
1518 # Expand the %l special to be the user's input line
1518 # Expand the %l special to be the user's input line
1519 if cmd.find('%l') >= 0:
1519 if cmd.find('%l') >= 0:
1520 cmd = cmd.replace('%l',rest)
1520 cmd = cmd.replace('%l',rest)
1521 rest = ''
1521 rest = ''
1522 if nargs==0:
1522 if nargs==0:
1523 # Simple, argument-less aliases
1523 # Simple, argument-less aliases
1524 cmd = '%s %s' % (cmd,rest)
1524 cmd = '%s %s' % (cmd,rest)
1525 else:
1525 else:
1526 # Handle aliases with positional arguments
1526 # Handle aliases with positional arguments
1527 args = rest.split(None,nargs)
1527 args = rest.split(None,nargs)
1528 if len(args)< nargs:
1528 if len(args)< nargs:
1529 error('Alias <%s> requires %s arguments, %s given.' %
1529 error('Alias <%s> requires %s arguments, %s given.' %
1530 (alias,nargs,len(args)))
1530 (alias,nargs,len(args)))
1531 return
1531 return
1532 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1532 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1533 # Now call the macro, evaluating in the user's namespace
1533 # Now call the macro, evaluating in the user's namespace
1534 try:
1534 try:
1535 self.system(cmd)
1535 self.system(cmd)
1536 except:
1536 except:
1537 self.showtraceback()
1537 self.showtraceback()
1538
1538
1539 def autoindent_update(self,line):
1539 def autoindent_update(self,line):
1540 """Keep track of the indent level."""
1540 """Keep track of the indent level."""
1541
1541
1542 if self.autoindent:
1542 if self.autoindent:
1543 if line:
1543 if line:
1544 self.indent_current_nsp = num_ini_spaces(line)
1544 self.indent_current_nsp = num_ini_spaces(line)
1545
1545
1546 if line[-1] == ':':
1546 if line[-1] == ':':
1547 self.indent_current_nsp += 4
1547 self.indent_current_nsp += 4
1548 elif dedent_re.match(line):
1548 elif dedent_re.match(line):
1549 self.indent_current_nsp -= 4
1549 self.indent_current_nsp -= 4
1550 else:
1550 else:
1551 self.indent_current_nsp = 0
1551 self.indent_current_nsp = 0
1552
1552
1553 # indent_current is the actual string to be inserted
1553 # indent_current is the actual string to be inserted
1554 # by the readline hooks for indentation
1554 # by the readline hooks for indentation
1555 self.indent_current = ' '* self.indent_current_nsp
1555 self.indent_current = ' '* self.indent_current_nsp
1556
1556
1557 def runlines(self,lines):
1557 def runlines(self,lines):
1558 """Run a string of one or more lines of source.
1558 """Run a string of one or more lines of source.
1559
1559
1560 This method is capable of running a string containing multiple source
1560 This method is capable of running a string containing multiple source
1561 lines, as if they had been entered at the IPython prompt. Since it
1561 lines, as if they had been entered at the IPython prompt. Since it
1562 exposes IPython's processing machinery, the given strings can contain
1562 exposes IPython's processing machinery, the given strings can contain
1563 magic calls (%magic), special shell access (!cmd), etc."""
1563 magic calls (%magic), special shell access (!cmd), etc."""
1564
1564
1565 # We must start with a clean buffer, in case this is run from an
1565 # We must start with a clean buffer, in case this is run from an
1566 # interactive IPython session (via a magic, for example).
1566 # interactive IPython session (via a magic, for example).
1567 self.resetbuffer()
1567 self.resetbuffer()
1568 lines = lines.split('\n')
1568 lines = lines.split('\n')
1569 more = 0
1569 more = 0
1570 for line in lines:
1570 for line in lines:
1571 # skip blank lines so we don't mess up the prompt counter, but do
1571 # skip blank lines so we don't mess up the prompt counter, but do
1572 # NOT skip even a blank line if we are in a code block (more is
1572 # NOT skip even a blank line if we are in a code block (more is
1573 # true)
1573 # true)
1574 if line or more:
1574 if line or more:
1575 more = self.push(self.prefilter(line,more))
1575 more = self.push(self.prefilter(line,more))
1576 # IPython's runsource returns None if there was an error
1576 # IPython's runsource returns None if there was an error
1577 # compiling the code. This allows us to stop processing right
1577 # compiling the code. This allows us to stop processing right
1578 # away, so the user gets the error message at the right place.
1578 # away, so the user gets the error message at the right place.
1579 if more is None:
1579 if more is None:
1580 break
1580 break
1581 # final newline in case the input didn't have it, so that the code
1581 # final newline in case the input didn't have it, so that the code
1582 # actually does get executed
1582 # actually does get executed
1583 if more:
1583 if more:
1584 self.push('\n')
1584 self.push('\n')
1585
1585
1586 def runsource(self, source, filename='<input>', symbol='single'):
1586 def runsource(self, source, filename='<input>', symbol='single'):
1587 """Compile and run some source in the interpreter.
1587 """Compile and run some source in the interpreter.
1588
1588
1589 Arguments are as for compile_command().
1589 Arguments are as for compile_command().
1590
1590
1591 One several things can happen:
1591 One several things can happen:
1592
1592
1593 1) The input is incorrect; compile_command() raised an
1593 1) The input is incorrect; compile_command() raised an
1594 exception (SyntaxError or OverflowError). A syntax traceback
1594 exception (SyntaxError or OverflowError). A syntax traceback
1595 will be printed by calling the showsyntaxerror() method.
1595 will be printed by calling the showsyntaxerror() method.
1596
1596
1597 2) The input is incomplete, and more input is required;
1597 2) The input is incomplete, and more input is required;
1598 compile_command() returned None. Nothing happens.
1598 compile_command() returned None. Nothing happens.
1599
1599
1600 3) The input is complete; compile_command() returned a code
1600 3) The input is complete; compile_command() returned a code
1601 object. The code is executed by calling self.runcode() (which
1601 object. The code is executed by calling self.runcode() (which
1602 also handles run-time exceptions, except for SystemExit).
1602 also handles run-time exceptions, except for SystemExit).
1603
1603
1604 The return value is:
1604 The return value is:
1605
1605
1606 - True in case 2
1606 - True in case 2
1607
1607
1608 - False in the other cases, unless an exception is raised, where
1608 - False in the other cases, unless an exception is raised, where
1609 None is returned instead. This can be used by external callers to
1609 None is returned instead. This can be used by external callers to
1610 know whether to continue feeding input or not.
1610 know whether to continue feeding input or not.
1611
1611
1612 The return value can be used to decide whether to use sys.ps1 or
1612 The return value can be used to decide whether to use sys.ps1 or
1613 sys.ps2 to prompt the next line."""
1613 sys.ps2 to prompt the next line."""
1614
1614
1615 try:
1615 try:
1616 code = self.compile(source,filename,symbol)
1616 code = self.compile(source,filename,symbol)
1617 except (OverflowError, SyntaxError, ValueError):
1617 except (OverflowError, SyntaxError, ValueError):
1618 # Case 1
1618 # Case 1
1619 self.showsyntaxerror(filename)
1619 self.showsyntaxerror(filename)
1620 return None
1620 return None
1621
1621
1622 if code is None:
1622 if code is None:
1623 # Case 2
1623 # Case 2
1624 return True
1624 return True
1625
1625
1626 # Case 3
1626 # Case 3
1627 # We store the code object so that threaded shells and
1627 # We store the code object so that threaded shells and
1628 # custom exception handlers can access all this info if needed.
1628 # custom exception handlers can access all this info if needed.
1629 # The source corresponding to this can be obtained from the
1629 # The source corresponding to this can be obtained from the
1630 # buffer attribute as '\n'.join(self.buffer).
1630 # buffer attribute as '\n'.join(self.buffer).
1631 self.code_to_run = code
1631 self.code_to_run = code
1632 # now actually execute the code object
1632 # now actually execute the code object
1633 if self.runcode(code) == 0:
1633 if self.runcode(code) == 0:
1634 return False
1634 return False
1635 else:
1635 else:
1636 return None
1636 return None
1637
1637
1638 def runcode(self,code_obj):
1638 def runcode(self,code_obj):
1639 """Execute a code object.
1639 """Execute a code object.
1640
1640
1641 When an exception occurs, self.showtraceback() is called to display a
1641 When an exception occurs, self.showtraceback() is called to display a
1642 traceback.
1642 traceback.
1643
1643
1644 Return value: a flag indicating whether the code to be run completed
1644 Return value: a flag indicating whether the code to be run completed
1645 successfully:
1645 successfully:
1646
1646
1647 - 0: successful execution.
1647 - 0: successful execution.
1648 - 1: an error occurred.
1648 - 1: an error occurred.
1649 """
1649 """
1650
1650
1651 # Set our own excepthook in case the user code tries to call it
1651 # Set our own excepthook in case the user code tries to call it
1652 # directly, so that the IPython crash handler doesn't get triggered
1652 # directly, so that the IPython crash handler doesn't get triggered
1653 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1653 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1654
1654
1655 # we save the original sys.excepthook in the instance, in case config
1655 # we save the original sys.excepthook in the instance, in case config
1656 # code (such as magics) needs access to it.
1656 # code (such as magics) needs access to it.
1657 self.sys_excepthook = old_excepthook
1657 self.sys_excepthook = old_excepthook
1658 outflag = 1 # happens in more places, so it's easier as default
1658 outflag = 1 # happens in more places, so it's easier as default
1659 try:
1659 try:
1660 try:
1660 try:
1661 # Embedded instances require separate global/local namespaces
1661 # Embedded instances require separate global/local namespaces
1662 # so they can see both the surrounding (local) namespace and
1662 # so they can see both the surrounding (local) namespace and
1663 # the module-level globals when called inside another function.
1663 # the module-level globals when called inside another function.
1664 if self.embedded:
1664 if self.embedded:
1665 exec code_obj in self.user_global_ns, self.user_ns
1665 exec code_obj in self.user_global_ns, self.user_ns
1666 # Normal (non-embedded) instances should only have a single
1666 # Normal (non-embedded) instances should only have a single
1667 # namespace for user code execution, otherwise functions won't
1667 # namespace for user code execution, otherwise functions won't
1668 # see interactive top-level globals.
1668 # see interactive top-level globals.
1669 else:
1669 else:
1670 exec code_obj in self.user_ns
1670 exec code_obj in self.user_ns
1671 finally:
1671 finally:
1672 # Reset our crash handler in place
1672 # Reset our crash handler in place
1673 sys.excepthook = old_excepthook
1673 sys.excepthook = old_excepthook
1674 except SystemExit:
1674 except SystemExit:
1675 self.resetbuffer()
1675 self.resetbuffer()
1676 self.showtraceback()
1676 self.showtraceback()
1677 warn("Type exit or quit to exit IPython "
1677 warn("Type exit or quit to exit IPython "
1678 "(%Exit or %Quit do so unconditionally).",level=1)
1678 "(%Exit or %Quit do so unconditionally).",level=1)
1679 except self.custom_exceptions:
1679 except self.custom_exceptions:
1680 etype,value,tb = sys.exc_info()
1680 etype,value,tb = sys.exc_info()
1681 self.CustomTB(etype,value,tb)
1681 self.CustomTB(etype,value,tb)
1682 except:
1682 except:
1683 self.showtraceback()
1683 self.showtraceback()
1684 else:
1684 else:
1685 outflag = 0
1685 outflag = 0
1686 if softspace(sys.stdout, 0):
1686 if softspace(sys.stdout, 0):
1687 print
1687 print
1688 # Flush out code object which has been run (and source)
1688 # Flush out code object which has been run (and source)
1689 self.code_to_run = None
1689 self.code_to_run = None
1690 return outflag
1690 return outflag
1691
1691
1692 def push(self, line):
1692 def push(self, line):
1693 """Push a line to the interpreter.
1693 """Push a line to the interpreter.
1694
1694
1695 The line should not have a trailing newline; it may have
1695 The line should not have a trailing newline; it may have
1696 internal newlines. The line is appended to a buffer and the
1696 internal newlines. The line is appended to a buffer and the
1697 interpreter's runsource() method is called with the
1697 interpreter's runsource() method is called with the
1698 concatenated contents of the buffer as source. If this
1698 concatenated contents of the buffer as source. If this
1699 indicates that the command was executed or invalid, the buffer
1699 indicates that the command was executed or invalid, the buffer
1700 is reset; otherwise, the command is incomplete, and the buffer
1700 is reset; otherwise, the command is incomplete, and the buffer
1701 is left as it was after the line was appended. The return
1701 is left as it was after the line was appended. The return
1702 value is 1 if more input is required, 0 if the line was dealt
1702 value is 1 if more input is required, 0 if the line was dealt
1703 with in some way (this is the same as runsource()).
1703 with in some way (this is the same as runsource()).
1704 """
1704 """
1705
1705
1706 # autoindent management should be done here, and not in the
1706 # autoindent management should be done here, and not in the
1707 # interactive loop, since that one is only seen by keyboard input. We
1707 # interactive loop, since that one is only seen by keyboard input. We
1708 # need this done correctly even for code run via runlines (which uses
1708 # need this done correctly even for code run via runlines (which uses
1709 # push).
1709 # push).
1710
1710
1711 #print 'push line: <%s>' % line # dbg
1711 #print 'push line: <%s>' % line # dbg
1712 self.autoindent_update(line)
1712 self.autoindent_update(line)
1713
1713
1714 self.buffer.append(line)
1714 self.buffer.append(line)
1715 more = self.runsource('\n'.join(self.buffer), self.filename)
1715 more = self.runsource('\n'.join(self.buffer), self.filename)
1716 if not more:
1716 if not more:
1717 self.resetbuffer()
1717 self.resetbuffer()
1718 return more
1718 return more
1719
1719
1720 def resetbuffer(self):
1720 def resetbuffer(self):
1721 """Reset the input buffer."""
1721 """Reset the input buffer."""
1722 self.buffer[:] = []
1722 self.buffer[:] = []
1723
1723
1724 def raw_input(self,prompt='',continue_prompt=False):
1724 def raw_input(self,prompt='',continue_prompt=False):
1725 """Write a prompt and read a line.
1725 """Write a prompt and read a line.
1726
1726
1727 The returned line does not include the trailing newline.
1727 The returned line does not include the trailing newline.
1728 When the user enters the EOF key sequence, EOFError is raised.
1728 When the user enters the EOF key sequence, EOFError is raised.
1729
1729
1730 Optional inputs:
1730 Optional inputs:
1731
1731
1732 - prompt(''): a string to be printed to prompt the user.
1732 - prompt(''): a string to be printed to prompt the user.
1733
1733
1734 - continue_prompt(False): whether this line is the first one or a
1734 - continue_prompt(False): whether this line is the first one or a
1735 continuation in a sequence of inputs.
1735 continuation in a sequence of inputs.
1736 """
1736 """
1737
1737
1738 line = raw_input_original(prompt)
1738 line = raw_input_original(prompt)
1739 # Try to be reasonably smart about not re-indenting pasted input more
1739 # Try to be reasonably smart about not re-indenting pasted input more
1740 # than necessary. We do this by trimming out the auto-indent initial
1740 # than necessary. We do this by trimming out the auto-indent initial
1741 # spaces, if the user's actual input started itself with whitespace.
1741 # spaces, if the user's actual input started itself with whitespace.
1742 #debugp('self.buffer[-1]')
1742 #debugp('self.buffer[-1]')
1743 ## if self.autoindent:
1743 ## if self.autoindent:
1744 ## try:
1744 ## try:
1745 ## prev_line = self.buffer[-1]
1745 ## prev_line = self.buffer[-1]
1746 ## except IndexError:
1746 ## except IndexError:
1747 ## prev_line = ''
1747 ## prev_line = ''
1748 ## prev_indent = num_ini_spaces(prev_line)
1748 ## prev_indent = num_ini_spaces(prev_line)
1749 ## debugp('prev_indent')
1749 ## debugp('prev_indent')
1750 ## # Split the user's input
1750 ## # Split the user's input
1751 ## line1 = line[:self.indent_current_nsp]
1751 ## line1 = line[:self.indent_current_nsp]
1752 ## line2 = line[self.indent_current_nsp:]
1752 ## line2 = line[self.indent_current_nsp:]
1753 ## if line1.isspace() and line2 and \
1753 ## if line1.isspace() and line2 and \
1754 ## num_ini_spaces(line2)==prev_indent:
1754 ## num_ini_spaces(line2)==prev_indent:
1755 ## line = line2
1755 ## line = line2
1756 #debugp('line')
1756 #debugp('line')
1757 #debugp('line1')
1757 #debugp('line1')
1758 #debugp('line2')
1758 #debugp('line2')
1759 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1759 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1760 ## line = line2
1760 ## line = line2
1761 ## debugp('line')
1761 ## debugp('line')
1762 return self.prefilter(line,continue_prompt)
1762 return self.prefilter(line,continue_prompt)
1763
1763
1764 def split_user_input(self,line):
1764 def split_user_input(self,line):
1765 """Split user input into pre-char, function part and rest."""
1765 """Split user input into pre-char, function part and rest."""
1766
1766
1767 lsplit = self.line_split.match(line)
1767 lsplit = self.line_split.match(line)
1768 if lsplit is None: # no regexp match returns None
1768 if lsplit is None: # no regexp match returns None
1769 try:
1769 try:
1770 iFun,theRest = line.split(None,1)
1770 iFun,theRest = line.split(None,1)
1771 except ValueError:
1771 except ValueError:
1772 iFun,theRest = line,''
1772 iFun,theRest = line,''
1773 pre = re.match('^(\s*)(.*)',line).groups()[0]
1773 pre = re.match('^(\s*)(.*)',line).groups()[0]
1774 else:
1774 else:
1775 pre,iFun,theRest = lsplit.groups()
1775 pre,iFun,theRest = lsplit.groups()
1776
1776
1777 #print 'line:<%s>' % line # dbg
1777 #print 'line:<%s>' % line # dbg
1778 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1778 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1779 return pre,iFun.strip(),theRest
1779 return pre,iFun.strip(),theRest
1780
1780
1781 def _prefilter(self, line, continue_prompt):
1781 def _prefilter(self, line, continue_prompt):
1782 """Calls different preprocessors, depending on the form of line."""
1782 """Calls different preprocessors, depending on the form of line."""
1783
1783
1784 # All handlers *must* return a value, even if it's blank ('').
1784 # All handlers *must* return a value, even if it's blank ('').
1785
1785
1786 # Lines are NOT logged here. Handlers should process the line as
1786 # Lines are NOT logged here. Handlers should process the line as
1787 # needed, update the cache AND log it (so that the input cache array
1787 # needed, update the cache AND log it (so that the input cache array
1788 # stays synced).
1788 # stays synced).
1789
1789
1790 # This function is _very_ delicate, and since it's also the one which
1790 # This function is _very_ delicate, and since it's also the one which
1791 # determines IPython's response to user input, it must be as efficient
1791 # determines IPython's response to user input, it must be as efficient
1792 # as possible. For this reason it has _many_ returns in it, trying
1792 # as possible. For this reason it has _many_ returns in it, trying
1793 # always to exit as quickly as it can figure out what it needs to do.
1793 # always to exit as quickly as it can figure out what it needs to do.
1794
1794
1795 # This function is the main responsible for maintaining IPython's
1795 # This function is the main responsible for maintaining IPython's
1796 # behavior respectful of Python's semantics. So be _very_ careful if
1796 # behavior respectful of Python's semantics. So be _very_ careful if
1797 # making changes to anything here.
1797 # making changes to anything here.
1798
1798
1799 #.....................................................................
1799 #.....................................................................
1800 # Code begins
1800 # Code begins
1801
1801
1802 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1802 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1803
1803
1804 # save the line away in case we crash, so the post-mortem handler can
1804 # save the line away in case we crash, so the post-mortem handler can
1805 # record it
1805 # record it
1806 self._last_input_line = line
1806 self._last_input_line = line
1807
1807
1808 #print '***line: <%s>' % line # dbg
1808 #print '***line: <%s>' % line # dbg
1809
1809
1810 # the input history needs to track even empty lines
1810 # the input history needs to track even empty lines
1811 if not line.strip():
1811 if not line.strip():
1812 if not continue_prompt:
1812 if not continue_prompt:
1813 self.outputcache.prompt_count -= 1
1813 self.outputcache.prompt_count -= 1
1814 return self.handle_normal(line,continue_prompt)
1814 return self.handle_normal(line,continue_prompt)
1815 #return self.handle_normal('',continue_prompt)
1815 #return self.handle_normal('',continue_prompt)
1816
1816
1817 # print '***cont',continue_prompt # dbg
1817 # print '***cont',continue_prompt # dbg
1818 # special handlers are only allowed for single line statements
1818 # special handlers are only allowed for single line statements
1819 if continue_prompt and not self.rc.multi_line_specials:
1819 if continue_prompt and not self.rc.multi_line_specials:
1820 return self.handle_normal(line,continue_prompt)
1820 return self.handle_normal(line,continue_prompt)
1821
1821
1822 # For the rest, we need the structure of the input
1822 # For the rest, we need the structure of the input
1823 pre,iFun,theRest = self.split_user_input(line)
1823 pre,iFun,theRest = self.split_user_input(line)
1824 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1824 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1825
1825
1826 # First check for explicit escapes in the last/first character
1826 # First check for explicit escapes in the last/first character
1827 handler = None
1827 handler = None
1828 if line[-1] == self.ESC_HELP:
1828 if line[-1] == self.ESC_HELP:
1829 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1829 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1830 if handler is None:
1830 if handler is None:
1831 # look at the first character of iFun, NOT of line, so we skip
1831 # look at the first character of iFun, NOT of line, so we skip
1832 # leading whitespace in multiline input
1832 # leading whitespace in multiline input
1833 handler = self.esc_handlers.get(iFun[0:1])
1833 handler = self.esc_handlers.get(iFun[0:1])
1834 if handler is not None:
1834 if handler is not None:
1835 return handler(line,continue_prompt,pre,iFun,theRest)
1835 return handler(line,continue_prompt,pre,iFun,theRest)
1836 # Emacs ipython-mode tags certain input lines
1836 # Emacs ipython-mode tags certain input lines
1837 if line.endswith('# PYTHON-MODE'):
1837 if line.endswith('# PYTHON-MODE'):
1838 return self.handle_emacs(line,continue_prompt)
1838 return self.handle_emacs(line,continue_prompt)
1839
1839
1840 # Next, check if we can automatically execute this thing
1840 # Next, check if we can automatically execute this thing
1841
1841
1842 # Allow ! in multi-line statements if multi_line_specials is on:
1842 # Allow ! in multi-line statements if multi_line_specials is on:
1843 if continue_prompt and self.rc.multi_line_specials and \
1843 if continue_prompt and self.rc.multi_line_specials and \
1844 iFun.startswith(self.ESC_SHELL):
1844 iFun.startswith(self.ESC_SHELL):
1845 return self.handle_shell_escape(line,continue_prompt,
1845 return self.handle_shell_escape(line,continue_prompt,
1846 pre=pre,iFun=iFun,
1846 pre=pre,iFun=iFun,
1847 theRest=theRest)
1847 theRest=theRest)
1848
1848
1849 # Let's try to find if the input line is a magic fn
1849 # Let's try to find if the input line is a magic fn
1850 oinfo = None
1850 oinfo = None
1851 if hasattr(self,'magic_'+iFun):
1851 if hasattr(self,'magic_'+iFun):
1852 # WARNING: _ofind uses getattr(), so it can consume generators and
1852 # WARNING: _ofind uses getattr(), so it can consume generators and
1853 # cause other side effects.
1853 # cause other side effects.
1854 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1854 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1855 if oinfo['ismagic']:
1855 if oinfo['ismagic']:
1856 # Be careful not to call magics when a variable assignment is
1856 # Be careful not to call magics when a variable assignment is
1857 # being made (ls='hi', for example)
1857 # being made (ls='hi', for example)
1858 if self.rc.automagic and \
1858 if self.rc.automagic and \
1859 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1859 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1860 (self.rc.multi_line_specials or not continue_prompt):
1860 (self.rc.multi_line_specials or not continue_prompt):
1861 return self.handle_magic(line,continue_prompt,
1861 return self.handle_magic(line,continue_prompt,
1862 pre,iFun,theRest)
1862 pre,iFun,theRest)
1863 else:
1863 else:
1864 return self.handle_normal(line,continue_prompt)
1864 return self.handle_normal(line,continue_prompt)
1865
1865
1866 # If the rest of the line begins with an (in)equality, assginment or
1866 # If the rest of the line begins with an (in)equality, assginment or
1867 # function call, we should not call _ofind but simply execute it.
1867 # function call, we should not call _ofind but simply execute it.
1868 # This avoids spurious geattr() accesses on objects upon assignment.
1868 # This avoids spurious geattr() accesses on objects upon assignment.
1869 #
1869 #
1870 # It also allows users to assign to either alias or magic names true
1870 # It also allows users to assign to either alias or magic names true
1871 # python variables (the magic/alias systems always take second seat to
1871 # python variables (the magic/alias systems always take second seat to
1872 # true python code).
1872 # true python code).
1873 if theRest and theRest[0] in '!=()':
1873 if theRest and theRest[0] in '!=()':
1874 return self.handle_normal(line,continue_prompt)
1874 return self.handle_normal(line,continue_prompt)
1875
1875
1876 if oinfo is None:
1876 if oinfo is None:
1877 # let's try to ensure that _oinfo is ONLY called when autocall is
1877 # let's try to ensure that _oinfo is ONLY called when autocall is
1878 # on. Since it has inevitable potential side effects, at least
1878 # on. Since it has inevitable potential side effects, at least
1879 # having autocall off should be a guarantee to the user that no
1879 # having autocall off should be a guarantee to the user that no
1880 # weird things will happen.
1880 # weird things will happen.
1881
1881
1882 if self.rc.autocall:
1882 if self.rc.autocall:
1883 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1883 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1884 else:
1884 else:
1885 # in this case, all that's left is either an alias or
1885 # in this case, all that's left is either an alias or
1886 # processing the line normally.
1886 # processing the line normally.
1887 if iFun in self.alias_table:
1887 if iFun in self.alias_table:
1888 return self.handle_alias(line,continue_prompt,
1888 return self.handle_alias(line,continue_prompt,
1889 pre,iFun,theRest)
1889 pre,iFun,theRest)
1890
1890
1891 else:
1891 else:
1892 return self.handle_normal(line,continue_prompt)
1892 return self.handle_normal(line,continue_prompt)
1893
1893
1894 if not oinfo['found']:
1894 if not oinfo['found']:
1895 return self.handle_normal(line,continue_prompt)
1895 return self.handle_normal(line,continue_prompt)
1896 else:
1896 else:
1897 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1897 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1898 if oinfo['isalias']:
1898 if oinfo['isalias']:
1899 return self.handle_alias(line,continue_prompt,
1899 return self.handle_alias(line,continue_prompt,
1900 pre,iFun,theRest)
1900 pre,iFun,theRest)
1901
1901
1902 if self.rc.autocall and \
1902 if (self.rc.autocall
1903 not self.re_exclude_auto.match(theRest) and \
1903 and
1904 self.re_fun_name.match(iFun) and \
1904 (
1905 callable(oinfo['obj']) :
1905 #only consider exclusion re if not "," or ";" autoquoting
1906 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2) or
1907 (not self.re_exclude_auto.match(theRest)))
1908 and
1909 self.re_fun_name.match(iFun) and
1910 callable(oinfo['obj'])) :
1906 #print 'going auto' # dbg
1911 #print 'going auto' # dbg
1907 return self.handle_auto(line,continue_prompt,
1912 return self.handle_auto(line,continue_prompt,
1908 pre,iFun,theRest,oinfo['obj'])
1913 pre,iFun,theRest,oinfo['obj'])
1909 else:
1914 else:
1910 #print 'was callable?', callable(oinfo['obj']) # dbg
1915 #print 'was callable?', callable(oinfo['obj']) # dbg
1911 return self.handle_normal(line,continue_prompt)
1916 return self.handle_normal(line,continue_prompt)
1912
1917
1913 # If we get here, we have a normal Python line. Log and return.
1918 # If we get here, we have a normal Python line. Log and return.
1914 return self.handle_normal(line,continue_prompt)
1919 return self.handle_normal(line,continue_prompt)
1915
1920
1916 def _prefilter_dumb(self, line, continue_prompt):
1921 def _prefilter_dumb(self, line, continue_prompt):
1917 """simple prefilter function, for debugging"""
1922 """simple prefilter function, for debugging"""
1918 return self.handle_normal(line,continue_prompt)
1923 return self.handle_normal(line,continue_prompt)
1919
1924
1920 # Set the default prefilter() function (this can be user-overridden)
1925 # Set the default prefilter() function (this can be user-overridden)
1921 prefilter = _prefilter
1926 prefilter = _prefilter
1922
1927
1923 def handle_normal(self,line,continue_prompt=None,
1928 def handle_normal(self,line,continue_prompt=None,
1924 pre=None,iFun=None,theRest=None):
1929 pre=None,iFun=None,theRest=None):
1925 """Handle normal input lines. Use as a template for handlers."""
1930 """Handle normal input lines. Use as a template for handlers."""
1926
1931
1927 # With autoindent on, we need some way to exit the input loop, and I
1932 # With autoindent on, we need some way to exit the input loop, and I
1928 # don't want to force the user to have to backspace all the way to
1933 # don't want to force the user to have to backspace all the way to
1929 # clear the line. The rule will be in this case, that either two
1934 # clear the line. The rule will be in this case, that either two
1930 # lines of pure whitespace in a row, or a line of pure whitespace but
1935 # lines of pure whitespace in a row, or a line of pure whitespace but
1931 # of a size different to the indent level, will exit the input loop.
1936 # of a size different to the indent level, will exit the input loop.
1932
1937
1933 if (continue_prompt and self.autoindent and line.isspace() and
1938 if (continue_prompt and self.autoindent and line.isspace() and
1934 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1939 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1935 line = ''
1940 line = ''
1936
1941
1937 self.log(line,continue_prompt)
1942 self.log(line,continue_prompt)
1938 return line
1943 return line
1939
1944
1940 def handle_alias(self,line,continue_prompt=None,
1945 def handle_alias(self,line,continue_prompt=None,
1941 pre=None,iFun=None,theRest=None):
1946 pre=None,iFun=None,theRest=None):
1942 """Handle alias input lines. """
1947 """Handle alias input lines. """
1943
1948
1944 # pre is needed, because it carries the leading whitespace. Otherwise
1949 # pre is needed, because it carries the leading whitespace. Otherwise
1945 # aliases won't work in indented sections.
1950 # aliases won't work in indented sections.
1946 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1951 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1947 self.log(line_out,continue_prompt)
1952 self.log(line_out,continue_prompt)
1948 return line_out
1953 return line_out
1949
1954
1950 def handle_shell_escape(self, line, continue_prompt=None,
1955 def handle_shell_escape(self, line, continue_prompt=None,
1951 pre=None,iFun=None,theRest=None):
1956 pre=None,iFun=None,theRest=None):
1952 """Execute the line in a shell, empty return value"""
1957 """Execute the line in a shell, empty return value"""
1953
1958
1954 #print 'line in :', `line` # dbg
1959 #print 'line in :', `line` # dbg
1955 # Example of a special handler. Others follow a similar pattern.
1960 # Example of a special handler. Others follow a similar pattern.
1956 if line.lstrip().startswith('!!'):
1961 if line.lstrip().startswith('!!'):
1957 # rewrite iFun/theRest to properly hold the call to %sx and
1962 # rewrite iFun/theRest to properly hold the call to %sx and
1958 # the actual command to be executed, so handle_magic can work
1963 # the actual command to be executed, so handle_magic can work
1959 # correctly
1964 # correctly
1960 theRest = '%s %s' % (iFun[2:],theRest)
1965 theRest = '%s %s' % (iFun[2:],theRest)
1961 iFun = 'sx'
1966 iFun = 'sx'
1962 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1967 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1963 line.lstrip()[2:]),
1968 line.lstrip()[2:]),
1964 continue_prompt,pre,iFun,theRest)
1969 continue_prompt,pre,iFun,theRest)
1965 else:
1970 else:
1966 cmd=line.lstrip().lstrip('!')
1971 cmd=line.lstrip().lstrip('!')
1967 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1972 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1968 # update cache/log and return
1973 # update cache/log and return
1969 self.log(line_out,continue_prompt)
1974 self.log(line_out,continue_prompt)
1970 return line_out
1975 return line_out
1971
1976
1972 def handle_magic(self, line, continue_prompt=None,
1977 def handle_magic(self, line, continue_prompt=None,
1973 pre=None,iFun=None,theRest=None):
1978 pre=None,iFun=None,theRest=None):
1974 """Execute magic functions."""
1979 """Execute magic functions."""
1975
1980
1976
1981
1977 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1982 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1978 self.log(cmd,continue_prompt)
1983 self.log(cmd,continue_prompt)
1979 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1984 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1980 return cmd
1985 return cmd
1981
1986
1982 def handle_auto(self, line, continue_prompt=None,
1987 def handle_auto(self, line, continue_prompt=None,
1983 pre=None,iFun=None,theRest=None,obj=None):
1988 pre=None,iFun=None,theRest=None,obj=None):
1984 """Hande lines which can be auto-executed, quoting if requested."""
1989 """Hande lines which can be auto-executed, quoting if requested."""
1985
1990
1986 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1991 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1987
1992
1988 # This should only be active for single-line input!
1993 # This should only be active for single-line input!
1989 if continue_prompt:
1994 if continue_prompt:
1990 self.log(line,continue_prompt)
1995 self.log(line,continue_prompt)
1991 return line
1996 return line
1992
1997
1993 auto_rewrite = True
1998 auto_rewrite = True
1994 if pre == self.ESC_QUOTE:
1999 if pre == self.ESC_QUOTE:
1995 # Auto-quote splitting on whitespace
2000 # Auto-quote splitting on whitespace
1996 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2001 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1997 elif pre == self.ESC_QUOTE2:
2002 elif pre == self.ESC_QUOTE2:
1998 # Auto-quote whole string
2003 # Auto-quote whole string
1999 newcmd = '%s("%s")' % (iFun,theRest)
2004 newcmd = '%s("%s")' % (iFun,theRest)
2000 else:
2005 else:
2001 # Auto-paren.
2006 # Auto-paren.
2002 # We only apply it to argument-less calls if the autocall
2007 # We only apply it to argument-less calls if the autocall
2003 # parameter is set to 2. We only need to check that autocall is <
2008 # parameter is set to 2. We only need to check that autocall is <
2004 # 2, since this function isn't called unless it's at least 1.
2009 # 2, since this function isn't called unless it's at least 1.
2005 if not theRest and (self.rc.autocall < 2):
2010 if not theRest and (self.rc.autocall < 2):
2006 newcmd = '%s %s' % (iFun,theRest)
2011 newcmd = '%s %s' % (iFun,theRest)
2007 auto_rewrite = False
2012 auto_rewrite = False
2008 else:
2013 else:
2009 if theRest.startswith('['):
2014 if theRest.startswith('['):
2010 if hasattr(obj,'__getitem__'):
2015 if hasattr(obj,'__getitem__'):
2011 # Don't autocall in this case: item access for an object
2016 # Don't autocall in this case: item access for an object
2012 # which is BOTH callable and implements __getitem__.
2017 # which is BOTH callable and implements __getitem__.
2013 newcmd = '%s %s' % (iFun,theRest)
2018 newcmd = '%s %s' % (iFun,theRest)
2014 auto_rewrite = False
2019 auto_rewrite = False
2015 else:
2020 else:
2016 # if the object doesn't support [] access, go ahead and
2021 # if the object doesn't support [] access, go ahead and
2017 # autocall
2022 # autocall
2018 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2023 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2019 elif theRest.endswith(';'):
2024 elif theRest.endswith(';'):
2020 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2025 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2021 else:
2026 else:
2022 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2027 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2023
2028
2024 if auto_rewrite:
2029 if auto_rewrite:
2025 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2030 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2026 # log what is now valid Python, not the actual user input (without the
2031 # log what is now valid Python, not the actual user input (without the
2027 # final newline)
2032 # final newline)
2028 self.log(newcmd,continue_prompt)
2033 self.log(newcmd,continue_prompt)
2029 return newcmd
2034 return newcmd
2030
2035
2031 def handle_help(self, line, continue_prompt=None,
2036 def handle_help(self, line, continue_prompt=None,
2032 pre=None,iFun=None,theRest=None):
2037 pre=None,iFun=None,theRest=None):
2033 """Try to get some help for the object.
2038 """Try to get some help for the object.
2034
2039
2035 obj? or ?obj -> basic information.
2040 obj? or ?obj -> basic information.
2036 obj?? or ??obj -> more details.
2041 obj?? or ??obj -> more details.
2037 """
2042 """
2038
2043
2039 # We need to make sure that we don't process lines which would be
2044 # We need to make sure that we don't process lines which would be
2040 # otherwise valid python, such as "x=1 # what?"
2045 # otherwise valid python, such as "x=1 # what?"
2041 try:
2046 try:
2042 codeop.compile_command(line)
2047 codeop.compile_command(line)
2043 except SyntaxError:
2048 except SyntaxError:
2044 # We should only handle as help stuff which is NOT valid syntax
2049 # We should only handle as help stuff which is NOT valid syntax
2045 if line[0]==self.ESC_HELP:
2050 if line[0]==self.ESC_HELP:
2046 line = line[1:]
2051 line = line[1:]
2047 elif line[-1]==self.ESC_HELP:
2052 elif line[-1]==self.ESC_HELP:
2048 line = line[:-1]
2053 line = line[:-1]
2049 self.log('#?'+line)
2054 self.log('#?'+line)
2050 if line:
2055 if line:
2051 self.magic_pinfo(line)
2056 self.magic_pinfo(line)
2052 else:
2057 else:
2053 page(self.usage,screen_lines=self.rc.screen_length)
2058 page(self.usage,screen_lines=self.rc.screen_length)
2054 return '' # Empty string is needed here!
2059 return '' # Empty string is needed here!
2055 except:
2060 except:
2056 # Pass any other exceptions through to the normal handler
2061 # Pass any other exceptions through to the normal handler
2057 return self.handle_normal(line,continue_prompt)
2062 return self.handle_normal(line,continue_prompt)
2058 else:
2063 else:
2059 # If the code compiles ok, we should handle it normally
2064 # If the code compiles ok, we should handle it normally
2060 return self.handle_normal(line,continue_prompt)
2065 return self.handle_normal(line,continue_prompt)
2061
2066
2062 def handle_emacs(self,line,continue_prompt=None,
2067 def handle_emacs(self,line,continue_prompt=None,
2063 pre=None,iFun=None,theRest=None):
2068 pre=None,iFun=None,theRest=None):
2064 """Handle input lines marked by python-mode."""
2069 """Handle input lines marked by python-mode."""
2065
2070
2066 # Currently, nothing is done. Later more functionality can be added
2071 # Currently, nothing is done. Later more functionality can be added
2067 # here if needed.
2072 # here if needed.
2068
2073
2069 # The input cache shouldn't be updated
2074 # The input cache shouldn't be updated
2070
2075
2071 return line
2076 return line
2072
2077
2073 def mktempfile(self,data=None):
2078 def mktempfile(self,data=None):
2074 """Make a new tempfile and return its filename.
2079 """Make a new tempfile and return its filename.
2075
2080
2076 This makes a call to tempfile.mktemp, but it registers the created
2081 This makes a call to tempfile.mktemp, but it registers the created
2077 filename internally so ipython cleans it up at exit time.
2082 filename internally so ipython cleans it up at exit time.
2078
2083
2079 Optional inputs:
2084 Optional inputs:
2080
2085
2081 - data(None): if data is given, it gets written out to the temp file
2086 - data(None): if data is given, it gets written out to the temp file
2082 immediately, and the file is closed again."""
2087 immediately, and the file is closed again."""
2083
2088
2084 filename = tempfile.mktemp('.py','ipython_edit_')
2089 filename = tempfile.mktemp('.py','ipython_edit_')
2085 self.tempfiles.append(filename)
2090 self.tempfiles.append(filename)
2086
2091
2087 if data:
2092 if data:
2088 tmp_file = open(filename,'w')
2093 tmp_file = open(filename,'w')
2089 tmp_file.write(data)
2094 tmp_file.write(data)
2090 tmp_file.close()
2095 tmp_file.close()
2091 return filename
2096 return filename
2092
2097
2093 def write(self,data):
2098 def write(self,data):
2094 """Write a string to the default output"""
2099 """Write a string to the default output"""
2095 Term.cout.write(data)
2100 Term.cout.write(data)
2096
2101
2097 def write_err(self,data):
2102 def write_err(self,data):
2098 """Write a string to the default error output"""
2103 """Write a string to the default error output"""
2099 Term.cerr.write(data)
2104 Term.cerr.write(data)
2100
2105
2101 def exit(self):
2106 def exit(self):
2102 """Handle interactive exit.
2107 """Handle interactive exit.
2103
2108
2104 This method sets the exit_now attribute."""
2109 This method sets the exit_now attribute."""
2105
2110
2106 if self.rc.confirm_exit:
2111 if self.rc.confirm_exit:
2107 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2112 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2108 self.exit_now = True
2113 self.exit_now = True
2109 else:
2114 else:
2110 self.exit_now = True
2115 self.exit_now = True
2111 return self.exit_now
2116 return self.exit_now
2112
2117
2113 def safe_execfile(self,fname,*where,**kw):
2118 def safe_execfile(self,fname,*where,**kw):
2114 fname = os.path.expanduser(fname)
2119 fname = os.path.expanduser(fname)
2115
2120
2116 # find things also in current directory
2121 # find things also in current directory
2117 dname = os.path.dirname(fname)
2122 dname = os.path.dirname(fname)
2118 if not sys.path.count(dname):
2123 if not sys.path.count(dname):
2119 sys.path.append(dname)
2124 sys.path.append(dname)
2120
2125
2121 try:
2126 try:
2122 xfile = open(fname)
2127 xfile = open(fname)
2123 except:
2128 except:
2124 print >> Term.cerr, \
2129 print >> Term.cerr, \
2125 'Could not open file <%s> for safe execution.' % fname
2130 'Could not open file <%s> for safe execution.' % fname
2126 return None
2131 return None
2127
2132
2128 kw.setdefault('islog',0)
2133 kw.setdefault('islog',0)
2129 kw.setdefault('quiet',1)
2134 kw.setdefault('quiet',1)
2130 kw.setdefault('exit_ignore',0)
2135 kw.setdefault('exit_ignore',0)
2131 first = xfile.readline()
2136 first = xfile.readline()
2132 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2137 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2133 xfile.close()
2138 xfile.close()
2134 # line by line execution
2139 # line by line execution
2135 if first.startswith(loghead) or kw['islog']:
2140 if first.startswith(loghead) or kw['islog']:
2136 print 'Loading log file <%s> one line at a time...' % fname
2141 print 'Loading log file <%s> one line at a time...' % fname
2137 if kw['quiet']:
2142 if kw['quiet']:
2138 stdout_save = sys.stdout
2143 stdout_save = sys.stdout
2139 sys.stdout = StringIO.StringIO()
2144 sys.stdout = StringIO.StringIO()
2140 try:
2145 try:
2141 globs,locs = where[0:2]
2146 globs,locs = where[0:2]
2142 except:
2147 except:
2143 try:
2148 try:
2144 globs = locs = where[0]
2149 globs = locs = where[0]
2145 except:
2150 except:
2146 globs = locs = globals()
2151 globs = locs = globals()
2147 badblocks = []
2152 badblocks = []
2148
2153
2149 # we also need to identify indented blocks of code when replaying
2154 # we also need to identify indented blocks of code when replaying
2150 # logs and put them together before passing them to an exec
2155 # logs and put them together before passing them to an exec
2151 # statement. This takes a bit of regexp and look-ahead work in the
2156 # statement. This takes a bit of regexp and look-ahead work in the
2152 # file. It's easiest if we swallow the whole thing in memory
2157 # file. It's easiest if we swallow the whole thing in memory
2153 # first, and manually walk through the lines list moving the
2158 # first, and manually walk through the lines list moving the
2154 # counter ourselves.
2159 # counter ourselves.
2155 indent_re = re.compile('\s+\S')
2160 indent_re = re.compile('\s+\S')
2156 xfile = open(fname)
2161 xfile = open(fname)
2157 filelines = xfile.readlines()
2162 filelines = xfile.readlines()
2158 xfile.close()
2163 xfile.close()
2159 nlines = len(filelines)
2164 nlines = len(filelines)
2160 lnum = 0
2165 lnum = 0
2161 while lnum < nlines:
2166 while lnum < nlines:
2162 line = filelines[lnum]
2167 line = filelines[lnum]
2163 lnum += 1
2168 lnum += 1
2164 # don't re-insert logger status info into cache
2169 # don't re-insert logger status info into cache
2165 if line.startswith('#log#'):
2170 if line.startswith('#log#'):
2166 continue
2171 continue
2167 else:
2172 else:
2168 # build a block of code (maybe a single line) for execution
2173 # build a block of code (maybe a single line) for execution
2169 block = line
2174 block = line
2170 try:
2175 try:
2171 next = filelines[lnum] # lnum has already incremented
2176 next = filelines[lnum] # lnum has already incremented
2172 except:
2177 except:
2173 next = None
2178 next = None
2174 while next and indent_re.match(next):
2179 while next and indent_re.match(next):
2175 block += next
2180 block += next
2176 lnum += 1
2181 lnum += 1
2177 try:
2182 try:
2178 next = filelines[lnum]
2183 next = filelines[lnum]
2179 except:
2184 except:
2180 next = None
2185 next = None
2181 # now execute the block of one or more lines
2186 # now execute the block of one or more lines
2182 try:
2187 try:
2183 exec block in globs,locs
2188 exec block in globs,locs
2184 except SystemExit:
2189 except SystemExit:
2185 pass
2190 pass
2186 except:
2191 except:
2187 badblocks.append(block.rstrip())
2192 badblocks.append(block.rstrip())
2188 if kw['quiet']: # restore stdout
2193 if kw['quiet']: # restore stdout
2189 sys.stdout.close()
2194 sys.stdout.close()
2190 sys.stdout = stdout_save
2195 sys.stdout = stdout_save
2191 print 'Finished replaying log file <%s>' % fname
2196 print 'Finished replaying log file <%s>' % fname
2192 if badblocks:
2197 if badblocks:
2193 print >> sys.stderr, ('\nThe following lines/blocks in file '
2198 print >> sys.stderr, ('\nThe following lines/blocks in file '
2194 '<%s> reported errors:' % fname)
2199 '<%s> reported errors:' % fname)
2195
2200
2196 for badline in badblocks:
2201 for badline in badblocks:
2197 print >> sys.stderr, badline
2202 print >> sys.stderr, badline
2198 else: # regular file execution
2203 else: # regular file execution
2199 try:
2204 try:
2200 execfile(fname,*where)
2205 execfile(fname,*where)
2201 except SyntaxError:
2206 except SyntaxError:
2202 etype,evalue = sys.exc_info()[:2]
2207 etype,evalue = sys.exc_info()[:2]
2203 self.SyntaxTB(etype,evalue,[])
2208 self.SyntaxTB(etype,evalue,[])
2204 warn('Failure executing file: <%s>' % fname)
2209 warn('Failure executing file: <%s>' % fname)
2205 except SystemExit,status:
2210 except SystemExit,status:
2206 if not kw['exit_ignore']:
2211 if not kw['exit_ignore']:
2207 self.InteractiveTB()
2212 self.InteractiveTB()
2208 warn('Failure executing file: <%s>' % fname)
2213 warn('Failure executing file: <%s>' % fname)
2209 except:
2214 except:
2210 self.InteractiveTB()
2215 self.InteractiveTB()
2211 warn('Failure executing file: <%s>' % fname)
2216 warn('Failure executing file: <%s>' % fname)
2212
2217
2213 #************************* end of file <iplib.py> *****************************
2218 #************************* end of file <iplib.py> *****************************
@@ -1,4926 +1,4932 b''
1 2006-01-16 Ville Vainio <vivainio@gmail.com>
1 2006-01-16 Ville Vainio <vivainio@gmail.com>
2
2
3 * Reverted back to old %edit functionality that returns
3 * Ipython/magic.py:Reverted back to old %edit functionality
4 file contents on exit.
4 that returns file contents on exit.
5
6 * IPython/path.py: Added Jason Orendorff's "path" module to
7 IPython tree, http://www.jorendorff.com/articles/python/path/
8
9 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
10 now work again without considering the exclusion regexp -
11 hence, things like ',foo my/path' turn to 'foo("my/path")'
12 instead of syntax error.
5
13
6 * Added Jason Orendorff's "path" module to IPython tree,
7 http://www.jorendorff.com/articles/python/path/
8
14
9 2006-01-14 Ville Vainio <vivainio@gmail.com>
15 2006-01-14 Ville Vainio <vivainio@gmail.com>
10
16
11 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
17 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
12 ipapi decorators for python 2.4 users, options() provides access to rc
18 ipapi decorators for python 2.4 users, options() provides access to rc
13 data.
19 data.
14
20
15 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
21 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
16 as path separators (even on Linux ;-). Space character after
22 as path separators (even on Linux ;-). Space character after
17 backslash (as yielded by tab completer) is still space;
23 backslash (as yielded by tab completer) is still space;
18 "%cd long\ name" works as expected.
24 "%cd long\ name" works as expected.
19
25
20 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
26 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
21 as "chain of command", with priority. API stays the same,
27 as "chain of command", with priority. API stays the same,
22 TryNext exception raised by a hook function signals that
28 TryNext exception raised by a hook function signals that
23 current hook failed and next hook should try handling it, as
29 current hook failed and next hook should try handling it, as
24 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
30 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
25 requested configurable display hook, which is now implemented.
31 requested configurable display hook, which is now implemented.
26
32
27 2006-01-13 Ville Vainio <vivainio@gmail.com>
33 2006-01-13 Ville Vainio <vivainio@gmail.com>
28
34
29 * IPython/platutils*.py: platform specific utility functions,
35 * IPython/platutils*.py: platform specific utility functions,
30 so far only set_term_title is implemented (change terminal
36 so far only set_term_title is implemented (change terminal
31 label in windowing systems). %cd now changes the title to
37 label in windowing systems). %cd now changes the title to
32 current dir.
38 current dir.
33
39
34 * IPython/Release.py: Added myself to "authors" list,
40 * IPython/Release.py: Added myself to "authors" list,
35 had to create new files.
41 had to create new files.
36
42
37 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
43 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
38 shell escape; not a known bug but had potential to be one in the
44 shell escape; not a known bug but had potential to be one in the
39 future.
45 future.
40
46
41 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
47 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
42 extension API for IPython! See the module for usage example. Fix
48 extension API for IPython! See the module for usage example. Fix
43 OInspect for docstring-less magic functions.
49 OInspect for docstring-less magic functions.
44
50
45
51
46 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
52 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
47
53
48 * IPython/iplib.py (raw_input): temporarily deactivate all
54 * IPython/iplib.py (raw_input): temporarily deactivate all
49 attempts at allowing pasting of code with autoindent on. It
55 attempts at allowing pasting of code with autoindent on. It
50 introduced bugs (reported by Prabhu) and I can't seem to find a
56 introduced bugs (reported by Prabhu) and I can't seem to find a
51 robust combination which works in all cases. Will have to revisit
57 robust combination which works in all cases. Will have to revisit
52 later.
58 later.
53
59
54 * IPython/genutils.py: remove isspace() function. We've dropped
60 * IPython/genutils.py: remove isspace() function. We've dropped
55 2.2 compatibility, so it's OK to use the string method.
61 2.2 compatibility, so it's OK to use the string method.
56
62
57 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
63 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
58
64
59 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
65 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
60 matching what NOT to autocall on, to include all python binary
66 matching what NOT to autocall on, to include all python binary
61 operators (including things like 'and', 'or', 'is' and 'in').
67 operators (including things like 'and', 'or', 'is' and 'in').
62 Prompted by a bug report on 'foo & bar', but I realized we had
68 Prompted by a bug report on 'foo & bar', but I realized we had
63 many more potential bug cases with other operators. The regexp is
69 many more potential bug cases with other operators. The regexp is
64 self.re_exclude_auto, it's fairly commented.
70 self.re_exclude_auto, it's fairly commented.
65
71
66 2006-01-12 Ville Vainio <vivainio@gmail.com>
72 2006-01-12 Ville Vainio <vivainio@gmail.com>
67
73
68 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
74 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
69 Prettified and hardened string/backslash quoting with ipsystem(),
75 Prettified and hardened string/backslash quoting with ipsystem(),
70 ipalias() and ipmagic(). Now even \ characters are passed to
76 ipalias() and ipmagic(). Now even \ characters are passed to
71 %magics, !shell escapes and aliases exactly as they are in the
77 %magics, !shell escapes and aliases exactly as they are in the
72 ipython command line. Should improve backslash experience,
78 ipython command line. Should improve backslash experience,
73 particularly in Windows (path delimiter for some commands that
79 particularly in Windows (path delimiter for some commands that
74 won't understand '/'), but Unix benefits as well (regexps). %cd
80 won't understand '/'), but Unix benefits as well (regexps). %cd
75 magic still doesn't support backslash path delimiters, though. Also
81 magic still doesn't support backslash path delimiters, though. Also
76 deleted all pretense of supporting multiline command strings in
82 deleted all pretense of supporting multiline command strings in
77 !system or %magic commands. Thanks to Jerry McRae for suggestions.
83 !system or %magic commands. Thanks to Jerry McRae for suggestions.
78
84
79 * doc/build_doc_instructions.txt added. Documentation on how to
85 * doc/build_doc_instructions.txt added. Documentation on how to
80 use doc/update_manual.py, added yesterday. Both files contributed
86 use doc/update_manual.py, added yesterday. Both files contributed
81 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
87 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
82 doc/*.sh for deprecation at a later date.
88 doc/*.sh for deprecation at a later date.
83
89
84 * /ipython.py Added ipython.py to root directory for
90 * /ipython.py Added ipython.py to root directory for
85 zero-installation (tar xzvf ipython.tgz; cd ipython; python
91 zero-installation (tar xzvf ipython.tgz; cd ipython; python
86 ipython.py) and development convenience (no need to kee doing
92 ipython.py) and development convenience (no need to kee doing
87 "setup.py install" between changes).
93 "setup.py install" between changes).
88
94
89 * Made ! and !! shell escapes work (again) in multiline expressions:
95 * Made ! and !! shell escapes work (again) in multiline expressions:
90 if 1:
96 if 1:
91 !ls
97 !ls
92 !!ls
98 !!ls
93
99
94 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
100 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
95
101
96 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
102 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
97 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
103 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
98 module in case-insensitive installation. Was causing crashes
104 module in case-insensitive installation. Was causing crashes
99 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
105 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
100
106
101 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
107 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
102 <marienz-AT-gentoo.org>, closes
108 <marienz-AT-gentoo.org>, closes
103 http://www.scipy.net/roundup/ipython/issue51.
109 http://www.scipy.net/roundup/ipython/issue51.
104
110
105 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
111 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
106
112
107 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
113 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
108 problem of excessive CPU usage under *nix and keyboard lag under
114 problem of excessive CPU usage under *nix and keyboard lag under
109 win32.
115 win32.
110
116
111 2006-01-10 *** Released version 0.7.0
117 2006-01-10 *** Released version 0.7.0
112
118
113 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
119 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
114
120
115 * IPython/Release.py (revision): tag version number to 0.7.0,
121 * IPython/Release.py (revision): tag version number to 0.7.0,
116 ready for release.
122 ready for release.
117
123
118 * IPython/Magic.py (magic_edit): Add print statement to %edit so
124 * IPython/Magic.py (magic_edit): Add print statement to %edit so
119 it informs the user of the name of the temp. file used. This can
125 it informs the user of the name of the temp. file used. This can
120 help if you decide later to reuse that same file, so you know
126 help if you decide later to reuse that same file, so you know
121 where to copy the info from.
127 where to copy the info from.
122
128
123 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
129 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
124
130
125 * setup_bdist_egg.py: little script to build an egg. Added
131 * setup_bdist_egg.py: little script to build an egg. Added
126 support in the release tools as well.
132 support in the release tools as well.
127
133
128 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
134 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
129
135
130 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
136 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
131 version selection (new -wxversion command line and ipythonrc
137 version selection (new -wxversion command line and ipythonrc
132 parameter). Patch contributed by Arnd Baecker
138 parameter). Patch contributed by Arnd Baecker
133 <arnd.baecker-AT-web.de>.
139 <arnd.baecker-AT-web.de>.
134
140
135 * IPython/iplib.py (embed_mainloop): fix tab-completion in
141 * IPython/iplib.py (embed_mainloop): fix tab-completion in
136 embedded instances, for variables defined at the interactive
142 embedded instances, for variables defined at the interactive
137 prompt of the embedded ipython. Reported by Arnd.
143 prompt of the embedded ipython. Reported by Arnd.
138
144
139 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
145 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
140 it can be used as a (stateful) toggle, or with a direct parameter.
146 it can be used as a (stateful) toggle, or with a direct parameter.
141
147
142 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
148 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
143 could be triggered in certain cases and cause the traceback
149 could be triggered in certain cases and cause the traceback
144 printer not to work.
150 printer not to work.
145
151
146 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
152 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
147
153
148 * IPython/iplib.py (_should_recompile): Small fix, closes
154 * IPython/iplib.py (_should_recompile): Small fix, closes
149 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
155 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
150
156
151 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
157 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
152
158
153 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
159 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
154 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
160 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
155 Moad for help with tracking it down.
161 Moad for help with tracking it down.
156
162
157 * IPython/iplib.py (handle_auto): fix autocall handling for
163 * IPython/iplib.py (handle_auto): fix autocall handling for
158 objects which support BOTH __getitem__ and __call__ (so that f [x]
164 objects which support BOTH __getitem__ and __call__ (so that f [x]
159 is left alone, instead of becoming f([x]) automatically).
165 is left alone, instead of becoming f([x]) automatically).
160
166
161 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
167 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
162 Ville's patch.
168 Ville's patch.
163
169
164 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
170 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
165
171
166 * IPython/iplib.py (handle_auto): changed autocall semantics to
172 * IPython/iplib.py (handle_auto): changed autocall semantics to
167 include 'smart' mode, where the autocall transformation is NOT
173 include 'smart' mode, where the autocall transformation is NOT
168 applied if there are no arguments on the line. This allows you to
174 applied if there are no arguments on the line. This allows you to
169 just type 'foo' if foo is a callable to see its internal form,
175 just type 'foo' if foo is a callable to see its internal form,
170 instead of having it called with no arguments (typically a
176 instead of having it called with no arguments (typically a
171 mistake). The old 'full' autocall still exists: for that, you
177 mistake). The old 'full' autocall still exists: for that, you
172 need to set the 'autocall' parameter to 2 in your ipythonrc file.
178 need to set the 'autocall' parameter to 2 in your ipythonrc file.
173
179
174 * IPython/completer.py (Completer.attr_matches): add
180 * IPython/completer.py (Completer.attr_matches): add
175 tab-completion support for Enthoughts' traits. After a report by
181 tab-completion support for Enthoughts' traits. After a report by
176 Arnd and a patch by Prabhu.
182 Arnd and a patch by Prabhu.
177
183
178 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
184 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
179
185
180 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
186 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
181 Schmolck's patch to fix inspect.getinnerframes().
187 Schmolck's patch to fix inspect.getinnerframes().
182
188
183 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
189 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
184 for embedded instances, regarding handling of namespaces and items
190 for embedded instances, regarding handling of namespaces and items
185 added to the __builtin__ one. Multiple embedded instances and
191 added to the __builtin__ one. Multiple embedded instances and
186 recursive embeddings should work better now (though I'm not sure
192 recursive embeddings should work better now (though I'm not sure
187 I've got all the corner cases fixed, that code is a bit of a brain
193 I've got all the corner cases fixed, that code is a bit of a brain
188 twister).
194 twister).
189
195
190 * IPython/Magic.py (magic_edit): added support to edit in-memory
196 * IPython/Magic.py (magic_edit): added support to edit in-memory
191 macros (automatically creates the necessary temp files). %edit
197 macros (automatically creates the necessary temp files). %edit
192 also doesn't return the file contents anymore, it's just noise.
198 also doesn't return the file contents anymore, it's just noise.
193
199
194 * IPython/completer.py (Completer.attr_matches): revert change to
200 * IPython/completer.py (Completer.attr_matches): revert change to
195 complete only on attributes listed in __all__. I realized it
201 complete only on attributes listed in __all__. I realized it
196 cripples the tab-completion system as a tool for exploring the
202 cripples the tab-completion system as a tool for exploring the
197 internals of unknown libraries (it renders any non-__all__
203 internals of unknown libraries (it renders any non-__all__
198 attribute off-limits). I got bit by this when trying to see
204 attribute off-limits). I got bit by this when trying to see
199 something inside the dis module.
205 something inside the dis module.
200
206
201 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
207 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
202
208
203 * IPython/iplib.py (InteractiveShell.__init__): add .meta
209 * IPython/iplib.py (InteractiveShell.__init__): add .meta
204 namespace for users and extension writers to hold data in. This
210 namespace for users and extension writers to hold data in. This
205 follows the discussion in
211 follows the discussion in
206 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
212 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
207
213
208 * IPython/completer.py (IPCompleter.complete): small patch to help
214 * IPython/completer.py (IPCompleter.complete): small patch to help
209 tab-completion under Emacs, after a suggestion by John Barnard
215 tab-completion under Emacs, after a suggestion by John Barnard
210 <barnarj-AT-ccf.org>.
216 <barnarj-AT-ccf.org>.
211
217
212 * IPython/Magic.py (Magic.extract_input_slices): added support for
218 * IPython/Magic.py (Magic.extract_input_slices): added support for
213 the slice notation in magics to use N-M to represent numbers N...M
219 the slice notation in magics to use N-M to represent numbers N...M
214 (closed endpoints). This is used by %macro and %save.
220 (closed endpoints). This is used by %macro and %save.
215
221
216 * IPython/completer.py (Completer.attr_matches): for modules which
222 * IPython/completer.py (Completer.attr_matches): for modules which
217 define __all__, complete only on those. After a patch by Jeffrey
223 define __all__, complete only on those. After a patch by Jeffrey
218 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
224 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
219 speed up this routine.
225 speed up this routine.
220
226
221 * IPython/Logger.py (Logger.log): fix a history handling bug. I
227 * IPython/Logger.py (Logger.log): fix a history handling bug. I
222 don't know if this is the end of it, but the behavior now is
228 don't know if this is the end of it, but the behavior now is
223 certainly much more correct. Note that coupled with macros,
229 certainly much more correct. Note that coupled with macros,
224 slightly surprising (at first) behavior may occur: a macro will in
230 slightly surprising (at first) behavior may occur: a macro will in
225 general expand to multiple lines of input, so upon exiting, the
231 general expand to multiple lines of input, so upon exiting, the
226 in/out counters will both be bumped by the corresponding amount
232 in/out counters will both be bumped by the corresponding amount
227 (as if the macro's contents had been typed interactively). Typing
233 (as if the macro's contents had been typed interactively). Typing
228 %hist will reveal the intermediate (silently processed) lines.
234 %hist will reveal the intermediate (silently processed) lines.
229
235
230 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
236 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
231 pickle to fail (%run was overwriting __main__ and not restoring
237 pickle to fail (%run was overwriting __main__ and not restoring
232 it, but pickle relies on __main__ to operate).
238 it, but pickle relies on __main__ to operate).
233
239
234 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
240 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
235 using properties, but forgot to make the main InteractiveShell
241 using properties, but forgot to make the main InteractiveShell
236 class a new-style class. Properties fail silently, and
242 class a new-style class. Properties fail silently, and
237 misteriously, with old-style class (getters work, but
243 misteriously, with old-style class (getters work, but
238 setters don't do anything).
244 setters don't do anything).
239
245
240 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
246 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
241
247
242 * IPython/Magic.py (magic_history): fix history reporting bug (I
248 * IPython/Magic.py (magic_history): fix history reporting bug (I
243 know some nasties are still there, I just can't seem to find a
249 know some nasties are still there, I just can't seem to find a
244 reproducible test case to track them down; the input history is
250 reproducible test case to track them down; the input history is
245 falling out of sync...)
251 falling out of sync...)
246
252
247 * IPython/iplib.py (handle_shell_escape): fix bug where both
253 * IPython/iplib.py (handle_shell_escape): fix bug where both
248 aliases and system accesses where broken for indented code (such
254 aliases and system accesses where broken for indented code (such
249 as loops).
255 as loops).
250
256
251 * IPython/genutils.py (shell): fix small but critical bug for
257 * IPython/genutils.py (shell): fix small but critical bug for
252 win32 system access.
258 win32 system access.
253
259
254 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
260 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
255
261
256 * IPython/iplib.py (showtraceback): remove use of the
262 * IPython/iplib.py (showtraceback): remove use of the
257 sys.last_{type/value/traceback} structures, which are non
263 sys.last_{type/value/traceback} structures, which are non
258 thread-safe.
264 thread-safe.
259 (_prefilter): change control flow to ensure that we NEVER
265 (_prefilter): change control flow to ensure that we NEVER
260 introspect objects when autocall is off. This will guarantee that
266 introspect objects when autocall is off. This will guarantee that
261 having an input line of the form 'x.y', where access to attribute
267 having an input line of the form 'x.y', where access to attribute
262 'y' has side effects, doesn't trigger the side effect TWICE. It
268 'y' has side effects, doesn't trigger the side effect TWICE. It
263 is important to note that, with autocall on, these side effects
269 is important to note that, with autocall on, these side effects
264 can still happen.
270 can still happen.
265 (ipsystem): new builtin, to complete the ip{magic/alias/system}
271 (ipsystem): new builtin, to complete the ip{magic/alias/system}
266 trio. IPython offers these three kinds of special calls which are
272 trio. IPython offers these three kinds of special calls which are
267 not python code, and it's a good thing to have their call method
273 not python code, and it's a good thing to have their call method
268 be accessible as pure python functions (not just special syntax at
274 be accessible as pure python functions (not just special syntax at
269 the command line). It gives us a better internal implementation
275 the command line). It gives us a better internal implementation
270 structure, as well as exposing these for user scripting more
276 structure, as well as exposing these for user scripting more
271 cleanly.
277 cleanly.
272
278
273 * IPython/macro.py (Macro.__init__): moved macros to a standalone
279 * IPython/macro.py (Macro.__init__): moved macros to a standalone
274 file. Now that they'll be more likely to be used with the
280 file. Now that they'll be more likely to be used with the
275 persistance system (%store), I want to make sure their module path
281 persistance system (%store), I want to make sure their module path
276 doesn't change in the future, so that we don't break things for
282 doesn't change in the future, so that we don't break things for
277 users' persisted data.
283 users' persisted data.
278
284
279 * IPython/iplib.py (autoindent_update): move indentation
285 * IPython/iplib.py (autoindent_update): move indentation
280 management into the _text_ processing loop, not the keyboard
286 management into the _text_ processing loop, not the keyboard
281 interactive one. This is necessary to correctly process non-typed
287 interactive one. This is necessary to correctly process non-typed
282 multiline input (such as macros).
288 multiline input (such as macros).
283
289
284 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
290 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
285 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
291 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
286 which was producing problems in the resulting manual.
292 which was producing problems in the resulting manual.
287 (magic_whos): improve reporting of instances (show their class,
293 (magic_whos): improve reporting of instances (show their class,
288 instead of simply printing 'instance' which isn't terribly
294 instead of simply printing 'instance' which isn't terribly
289 informative).
295 informative).
290
296
291 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
297 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
292 (minor mods) to support network shares under win32.
298 (minor mods) to support network shares under win32.
293
299
294 * IPython/winconsole.py (get_console_size): add new winconsole
300 * IPython/winconsole.py (get_console_size): add new winconsole
295 module and fixes to page_dumb() to improve its behavior under
301 module and fixes to page_dumb() to improve its behavior under
296 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
302 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
297
303
298 * IPython/Magic.py (Macro): simplified Macro class to just
304 * IPython/Magic.py (Macro): simplified Macro class to just
299 subclass list. We've had only 2.2 compatibility for a very long
305 subclass list. We've had only 2.2 compatibility for a very long
300 time, yet I was still avoiding subclassing the builtin types. No
306 time, yet I was still avoiding subclassing the builtin types. No
301 more (I'm also starting to use properties, though I won't shift to
307 more (I'm also starting to use properties, though I won't shift to
302 2.3-specific features quite yet).
308 2.3-specific features quite yet).
303 (magic_store): added Ville's patch for lightweight variable
309 (magic_store): added Ville's patch for lightweight variable
304 persistence, after a request on the user list by Matt Wilkie
310 persistence, after a request on the user list by Matt Wilkie
305 <maphew-AT-gmail.com>. The new %store magic's docstring has full
311 <maphew-AT-gmail.com>. The new %store magic's docstring has full
306 details.
312 details.
307
313
308 * IPython/iplib.py (InteractiveShell.post_config_initialization):
314 * IPython/iplib.py (InteractiveShell.post_config_initialization):
309 changed the default logfile name from 'ipython.log' to
315 changed the default logfile name from 'ipython.log' to
310 'ipython_log.py'. These logs are real python files, and now that
316 'ipython_log.py'. These logs are real python files, and now that
311 we have much better multiline support, people are more likely to
317 we have much better multiline support, people are more likely to
312 want to use them as such. Might as well name them correctly.
318 want to use them as such. Might as well name them correctly.
313
319
314 * IPython/Magic.py: substantial cleanup. While we can't stop
320 * IPython/Magic.py: substantial cleanup. While we can't stop
315 using magics as mixins, due to the existing customizations 'out
321 using magics as mixins, due to the existing customizations 'out
316 there' which rely on the mixin naming conventions, at least I
322 there' which rely on the mixin naming conventions, at least I
317 cleaned out all cross-class name usage. So once we are OK with
323 cleaned out all cross-class name usage. So once we are OK with
318 breaking compatibility, the two systems can be separated.
324 breaking compatibility, the two systems can be separated.
319
325
320 * IPython/Logger.py: major cleanup. This one is NOT a mixin
326 * IPython/Logger.py: major cleanup. This one is NOT a mixin
321 anymore, and the class is a fair bit less hideous as well. New
327 anymore, and the class is a fair bit less hideous as well. New
322 features were also introduced: timestamping of input, and logging
328 features were also introduced: timestamping of input, and logging
323 of output results. These are user-visible with the -t and -o
329 of output results. These are user-visible with the -t and -o
324 options to %logstart. Closes
330 options to %logstart. Closes
325 http://www.scipy.net/roundup/ipython/issue11 and a request by
331 http://www.scipy.net/roundup/ipython/issue11 and a request by
326 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
332 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
327
333
328 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
334 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
329
335
330 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
336 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
331 better hadnle backslashes in paths. See the thread 'More Windows
337 better hadnle backslashes in paths. See the thread 'More Windows
332 questions part 2 - \/ characters revisited' on the iypthon user
338 questions part 2 - \/ characters revisited' on the iypthon user
333 list:
339 list:
334 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
340 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
335
341
336 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
342 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
337
343
338 (InteractiveShell.__init__): change threaded shells to not use the
344 (InteractiveShell.__init__): change threaded shells to not use the
339 ipython crash handler. This was causing more problems than not,
345 ipython crash handler. This was causing more problems than not,
340 as exceptions in the main thread (GUI code, typically) would
346 as exceptions in the main thread (GUI code, typically) would
341 always show up as a 'crash', when they really weren't.
347 always show up as a 'crash', when they really weren't.
342
348
343 The colors and exception mode commands (%colors/%xmode) have been
349 The colors and exception mode commands (%colors/%xmode) have been
344 synchronized to also take this into account, so users can get
350 synchronized to also take this into account, so users can get
345 verbose exceptions for their threaded code as well. I also added
351 verbose exceptions for their threaded code as well. I also added
346 support for activating pdb inside this exception handler as well,
352 support for activating pdb inside this exception handler as well,
347 so now GUI authors can use IPython's enhanced pdb at runtime.
353 so now GUI authors can use IPython's enhanced pdb at runtime.
348
354
349 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
355 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
350 true by default, and add it to the shipped ipythonrc file. Since
356 true by default, and add it to the shipped ipythonrc file. Since
351 this asks the user before proceeding, I think it's OK to make it
357 this asks the user before proceeding, I think it's OK to make it
352 true by default.
358 true by default.
353
359
354 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
360 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
355 of the previous special-casing of input in the eval loop. I think
361 of the previous special-casing of input in the eval loop. I think
356 this is cleaner, as they really are commands and shouldn't have
362 this is cleaner, as they really are commands and shouldn't have
357 a special role in the middle of the core code.
363 a special role in the middle of the core code.
358
364
359 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
365 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
360
366
361 * IPython/iplib.py (edit_syntax_error): added support for
367 * IPython/iplib.py (edit_syntax_error): added support for
362 automatically reopening the editor if the file had a syntax error
368 automatically reopening the editor if the file had a syntax error
363 in it. Thanks to scottt who provided the patch at:
369 in it. Thanks to scottt who provided the patch at:
364 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
370 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
365 version committed).
371 version committed).
366
372
367 * IPython/iplib.py (handle_normal): add suport for multi-line
373 * IPython/iplib.py (handle_normal): add suport for multi-line
368 input with emtpy lines. This fixes
374 input with emtpy lines. This fixes
369 http://www.scipy.net/roundup/ipython/issue43 and a similar
375 http://www.scipy.net/roundup/ipython/issue43 and a similar
370 discussion on the user list.
376 discussion on the user list.
371
377
372 WARNING: a behavior change is necessarily introduced to support
378 WARNING: a behavior change is necessarily introduced to support
373 blank lines: now a single blank line with whitespace does NOT
379 blank lines: now a single blank line with whitespace does NOT
374 break the input loop, which means that when autoindent is on, by
380 break the input loop, which means that when autoindent is on, by
375 default hitting return on the next (indented) line does NOT exit.
381 default hitting return on the next (indented) line does NOT exit.
376
382
377 Instead, to exit a multiline input you can either have:
383 Instead, to exit a multiline input you can either have:
378
384
379 - TWO whitespace lines (just hit return again), or
385 - TWO whitespace lines (just hit return again), or
380 - a single whitespace line of a different length than provided
386 - a single whitespace line of a different length than provided
381 by the autoindent (add or remove a space).
387 by the autoindent (add or remove a space).
382
388
383 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
389 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
384 module to better organize all readline-related functionality.
390 module to better organize all readline-related functionality.
385 I've deleted FlexCompleter and put all completion clases here.
391 I've deleted FlexCompleter and put all completion clases here.
386
392
387 * IPython/iplib.py (raw_input): improve indentation management.
393 * IPython/iplib.py (raw_input): improve indentation management.
388 It is now possible to paste indented code with autoindent on, and
394 It is now possible to paste indented code with autoindent on, and
389 the code is interpreted correctly (though it still looks bad on
395 the code is interpreted correctly (though it still looks bad on
390 screen, due to the line-oriented nature of ipython).
396 screen, due to the line-oriented nature of ipython).
391 (MagicCompleter.complete): change behavior so that a TAB key on an
397 (MagicCompleter.complete): change behavior so that a TAB key on an
392 otherwise empty line actually inserts a tab, instead of completing
398 otherwise empty line actually inserts a tab, instead of completing
393 on the entire global namespace. This makes it easier to use the
399 on the entire global namespace. This makes it easier to use the
394 TAB key for indentation. After a request by Hans Meine
400 TAB key for indentation. After a request by Hans Meine
395 <hans_meine-AT-gmx.net>
401 <hans_meine-AT-gmx.net>
396 (_prefilter): add support so that typing plain 'exit' or 'quit'
402 (_prefilter): add support so that typing plain 'exit' or 'quit'
397 does a sensible thing. Originally I tried to deviate as little as
403 does a sensible thing. Originally I tried to deviate as little as
398 possible from the default python behavior, but even that one may
404 possible from the default python behavior, but even that one may
399 change in this direction (thread on python-dev to that effect).
405 change in this direction (thread on python-dev to that effect).
400 Regardless, ipython should do the right thing even if CPython's
406 Regardless, ipython should do the right thing even if CPython's
401 '>>>' prompt doesn't.
407 '>>>' prompt doesn't.
402 (InteractiveShell): removed subclassing code.InteractiveConsole
408 (InteractiveShell): removed subclassing code.InteractiveConsole
403 class. By now we'd overridden just about all of its methods: I've
409 class. By now we'd overridden just about all of its methods: I've
404 copied the remaining two over, and now ipython is a standalone
410 copied the remaining two over, and now ipython is a standalone
405 class. This will provide a clearer picture for the chainsaw
411 class. This will provide a clearer picture for the chainsaw
406 branch refactoring.
412 branch refactoring.
407
413
408 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
414 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
409
415
410 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
416 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
411 failures for objects which break when dir() is called on them.
417 failures for objects which break when dir() is called on them.
412
418
413 * IPython/FlexCompleter.py (Completer.__init__): Added support for
419 * IPython/FlexCompleter.py (Completer.__init__): Added support for
414 distinct local and global namespaces in the completer API. This
420 distinct local and global namespaces in the completer API. This
415 change allows us top properly handle completion with distinct
421 change allows us top properly handle completion with distinct
416 scopes, including in embedded instances (this had never really
422 scopes, including in embedded instances (this had never really
417 worked correctly).
423 worked correctly).
418
424
419 Note: this introduces a change in the constructor for
425 Note: this introduces a change in the constructor for
420 MagicCompleter, as a new global_namespace parameter is now the
426 MagicCompleter, as a new global_namespace parameter is now the
421 second argument (the others were bumped one position).
427 second argument (the others were bumped one position).
422
428
423 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
429 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
424
430
425 * IPython/iplib.py (embed_mainloop): fix tab-completion in
431 * IPython/iplib.py (embed_mainloop): fix tab-completion in
426 embedded instances (which can be done now thanks to Vivian's
432 embedded instances (which can be done now thanks to Vivian's
427 frame-handling fixes for pdb).
433 frame-handling fixes for pdb).
428 (InteractiveShell.__init__): Fix namespace handling problem in
434 (InteractiveShell.__init__): Fix namespace handling problem in
429 embedded instances. We were overwriting __main__ unconditionally,
435 embedded instances. We were overwriting __main__ unconditionally,
430 and this should only be done for 'full' (non-embedded) IPython;
436 and this should only be done for 'full' (non-embedded) IPython;
431 embedded instances must respect the caller's __main__. Thanks to
437 embedded instances must respect the caller's __main__. Thanks to
432 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
438 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
433
439
434 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
440 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
435
441
436 * setup.py: added download_url to setup(). This registers the
442 * setup.py: added download_url to setup(). This registers the
437 download address at PyPI, which is not only useful to humans
443 download address at PyPI, which is not only useful to humans
438 browsing the site, but is also picked up by setuptools (the Eggs
444 browsing the site, but is also picked up by setuptools (the Eggs
439 machinery). Thanks to Ville and R. Kern for the info/discussion
445 machinery). Thanks to Ville and R. Kern for the info/discussion
440 on this.
446 on this.
441
447
442 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
448 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
443
449
444 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
450 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
445 This brings a lot of nice functionality to the pdb mode, which now
451 This brings a lot of nice functionality to the pdb mode, which now
446 has tab-completion, syntax highlighting, and better stack handling
452 has tab-completion, syntax highlighting, and better stack handling
447 than before. Many thanks to Vivian De Smedt
453 than before. Many thanks to Vivian De Smedt
448 <vivian-AT-vdesmedt.com> for the original patches.
454 <vivian-AT-vdesmedt.com> for the original patches.
449
455
450 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
456 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
451
457
452 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
458 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
453 sequence to consistently accept the banner argument. The
459 sequence to consistently accept the banner argument. The
454 inconsistency was tripping SAGE, thanks to Gary Zablackis
460 inconsistency was tripping SAGE, thanks to Gary Zablackis
455 <gzabl-AT-yahoo.com> for the report.
461 <gzabl-AT-yahoo.com> for the report.
456
462
457 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
463 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
458
464
459 * IPython/iplib.py (InteractiveShell.post_config_initialization):
465 * IPython/iplib.py (InteractiveShell.post_config_initialization):
460 Fix bug where a naked 'alias' call in the ipythonrc file would
466 Fix bug where a naked 'alias' call in the ipythonrc file would
461 cause a crash. Bug reported by Jorgen Stenarson.
467 cause a crash. Bug reported by Jorgen Stenarson.
462
468
463 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
469 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
464
470
465 * IPython/ipmaker.py (make_IPython): cleanups which should improve
471 * IPython/ipmaker.py (make_IPython): cleanups which should improve
466 startup time.
472 startup time.
467
473
468 * IPython/iplib.py (runcode): my globals 'fix' for embedded
474 * IPython/iplib.py (runcode): my globals 'fix' for embedded
469 instances had introduced a bug with globals in normal code. Now
475 instances had introduced a bug with globals in normal code. Now
470 it's working in all cases.
476 it's working in all cases.
471
477
472 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
478 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
473 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
479 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
474 has been introduced to set the default case sensitivity of the
480 has been introduced to set the default case sensitivity of the
475 searches. Users can still select either mode at runtime on a
481 searches. Users can still select either mode at runtime on a
476 per-search basis.
482 per-search basis.
477
483
478 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
484 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
479
485
480 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
486 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
481 attributes in wildcard searches for subclasses. Modified version
487 attributes in wildcard searches for subclasses. Modified version
482 of a patch by Jorgen.
488 of a patch by Jorgen.
483
489
484 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
490 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
485
491
486 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
492 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
487 embedded instances. I added a user_global_ns attribute to the
493 embedded instances. I added a user_global_ns attribute to the
488 InteractiveShell class to handle this.
494 InteractiveShell class to handle this.
489
495
490 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
496 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
491
497
492 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
498 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
493 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
499 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
494 (reported under win32, but may happen also in other platforms).
500 (reported under win32, but may happen also in other platforms).
495 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
501 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
496
502
497 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
503 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
498
504
499 * IPython/Magic.py (magic_psearch): new support for wildcard
505 * IPython/Magic.py (magic_psearch): new support for wildcard
500 patterns. Now, typing ?a*b will list all names which begin with a
506 patterns. Now, typing ?a*b will list all names which begin with a
501 and end in b, for example. The %psearch magic has full
507 and end in b, for example. The %psearch magic has full
502 docstrings. Many thanks to JΓΆrgen Stenarson
508 docstrings. Many thanks to JΓΆrgen Stenarson
503 <jorgen.stenarson-AT-bostream.nu>, author of the patches
509 <jorgen.stenarson-AT-bostream.nu>, author of the patches
504 implementing this functionality.
510 implementing this functionality.
505
511
506 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
512 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
507
513
508 * Manual: fixed long-standing annoyance of double-dashes (as in
514 * Manual: fixed long-standing annoyance of double-dashes (as in
509 --prefix=~, for example) being stripped in the HTML version. This
515 --prefix=~, for example) being stripped in the HTML version. This
510 is a latex2html bug, but a workaround was provided. Many thanks
516 is a latex2html bug, but a workaround was provided. Many thanks
511 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
517 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
512 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
518 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
513 rolling. This seemingly small issue had tripped a number of users
519 rolling. This seemingly small issue had tripped a number of users
514 when first installing, so I'm glad to see it gone.
520 when first installing, so I'm glad to see it gone.
515
521
516 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
522 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
517
523
518 * IPython/Extensions/numeric_formats.py: fix missing import,
524 * IPython/Extensions/numeric_formats.py: fix missing import,
519 reported by Stephen Walton.
525 reported by Stephen Walton.
520
526
521 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
527 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
522
528
523 * IPython/demo.py: finish demo module, fully documented now.
529 * IPython/demo.py: finish demo module, fully documented now.
524
530
525 * IPython/genutils.py (file_read): simple little utility to read a
531 * IPython/genutils.py (file_read): simple little utility to read a
526 file and ensure it's closed afterwards.
532 file and ensure it's closed afterwards.
527
533
528 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
534 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
529
535
530 * IPython/demo.py (Demo.__init__): added support for individually
536 * IPython/demo.py (Demo.__init__): added support for individually
531 tagging blocks for automatic execution.
537 tagging blocks for automatic execution.
532
538
533 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
539 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
534 syntax-highlighted python sources, requested by John.
540 syntax-highlighted python sources, requested by John.
535
541
536 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
542 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
537
543
538 * IPython/demo.py (Demo.again): fix bug where again() blocks after
544 * IPython/demo.py (Demo.again): fix bug where again() blocks after
539 finishing.
545 finishing.
540
546
541 * IPython/genutils.py (shlex_split): moved from Magic to here,
547 * IPython/genutils.py (shlex_split): moved from Magic to here,
542 where all 2.2 compatibility stuff lives. I needed it for demo.py.
548 where all 2.2 compatibility stuff lives. I needed it for demo.py.
543
549
544 * IPython/demo.py (Demo.__init__): added support for silent
550 * IPython/demo.py (Demo.__init__): added support for silent
545 blocks, improved marks as regexps, docstrings written.
551 blocks, improved marks as regexps, docstrings written.
546 (Demo.__init__): better docstring, added support for sys.argv.
552 (Demo.__init__): better docstring, added support for sys.argv.
547
553
548 * IPython/genutils.py (marquee): little utility used by the demo
554 * IPython/genutils.py (marquee): little utility used by the demo
549 code, handy in general.
555 code, handy in general.
550
556
551 * IPython/demo.py (Demo.__init__): new class for interactive
557 * IPython/demo.py (Demo.__init__): new class for interactive
552 demos. Not documented yet, I just wrote it in a hurry for
558 demos. Not documented yet, I just wrote it in a hurry for
553 scipy'05. Will docstring later.
559 scipy'05. Will docstring later.
554
560
555 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
561 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
556
562
557 * IPython/Shell.py (sigint_handler): Drastic simplification which
563 * IPython/Shell.py (sigint_handler): Drastic simplification which
558 also seems to make Ctrl-C work correctly across threads! This is
564 also seems to make Ctrl-C work correctly across threads! This is
559 so simple, that I can't beleive I'd missed it before. Needs more
565 so simple, that I can't beleive I'd missed it before. Needs more
560 testing, though.
566 testing, though.
561 (KBINT): Never mind, revert changes. I'm sure I'd tried something
567 (KBINT): Never mind, revert changes. I'm sure I'd tried something
562 like this before...
568 like this before...
563
569
564 * IPython/genutils.py (get_home_dir): add protection against
570 * IPython/genutils.py (get_home_dir): add protection against
565 non-dirs in win32 registry.
571 non-dirs in win32 registry.
566
572
567 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
573 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
568 bug where dict was mutated while iterating (pysh crash).
574 bug where dict was mutated while iterating (pysh crash).
569
575
570 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
576 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
571
577
572 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
578 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
573 spurious newlines added by this routine. After a report by
579 spurious newlines added by this routine. After a report by
574 F. Mantegazza.
580 F. Mantegazza.
575
581
576 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
582 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
577
583
578 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
584 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
579 calls. These were a leftover from the GTK 1.x days, and can cause
585 calls. These were a leftover from the GTK 1.x days, and can cause
580 problems in certain cases (after a report by John Hunter).
586 problems in certain cases (after a report by John Hunter).
581
587
582 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
588 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
583 os.getcwd() fails at init time. Thanks to patch from David Remahl
589 os.getcwd() fails at init time. Thanks to patch from David Remahl
584 <chmod007-AT-mac.com>.
590 <chmod007-AT-mac.com>.
585 (InteractiveShell.__init__): prevent certain special magics from
591 (InteractiveShell.__init__): prevent certain special magics from
586 being shadowed by aliases. Closes
592 being shadowed by aliases. Closes
587 http://www.scipy.net/roundup/ipython/issue41.
593 http://www.scipy.net/roundup/ipython/issue41.
588
594
589 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
595 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
590
596
591 * IPython/iplib.py (InteractiveShell.complete): Added new
597 * IPython/iplib.py (InteractiveShell.complete): Added new
592 top-level completion method to expose the completion mechanism
598 top-level completion method to expose the completion mechanism
593 beyond readline-based environments.
599 beyond readline-based environments.
594
600
595 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
601 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
596
602
597 * tools/ipsvnc (svnversion): fix svnversion capture.
603 * tools/ipsvnc (svnversion): fix svnversion capture.
598
604
599 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
605 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
600 attribute to self, which was missing. Before, it was set by a
606 attribute to self, which was missing. Before, it was set by a
601 routine which in certain cases wasn't being called, so the
607 routine which in certain cases wasn't being called, so the
602 instance could end up missing the attribute. This caused a crash.
608 instance could end up missing the attribute. This caused a crash.
603 Closes http://www.scipy.net/roundup/ipython/issue40.
609 Closes http://www.scipy.net/roundup/ipython/issue40.
604
610
605 2005-08-16 Fernando Perez <fperez@colorado.edu>
611 2005-08-16 Fernando Perez <fperez@colorado.edu>
606
612
607 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
613 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
608 contains non-string attribute. Closes
614 contains non-string attribute. Closes
609 http://www.scipy.net/roundup/ipython/issue38.
615 http://www.scipy.net/roundup/ipython/issue38.
610
616
611 2005-08-14 Fernando Perez <fperez@colorado.edu>
617 2005-08-14 Fernando Perez <fperez@colorado.edu>
612
618
613 * tools/ipsvnc: Minor improvements, to add changeset info.
619 * tools/ipsvnc: Minor improvements, to add changeset info.
614
620
615 2005-08-12 Fernando Perez <fperez@colorado.edu>
621 2005-08-12 Fernando Perez <fperez@colorado.edu>
616
622
617 * IPython/iplib.py (runsource): remove self.code_to_run_src
623 * IPython/iplib.py (runsource): remove self.code_to_run_src
618 attribute. I realized this is nothing more than
624 attribute. I realized this is nothing more than
619 '\n'.join(self.buffer), and having the same data in two different
625 '\n'.join(self.buffer), and having the same data in two different
620 places is just asking for synchronization bugs. This may impact
626 places is just asking for synchronization bugs. This may impact
621 people who have custom exception handlers, so I need to warn
627 people who have custom exception handlers, so I need to warn
622 ipython-dev about it (F. Mantegazza may use them).
628 ipython-dev about it (F. Mantegazza may use them).
623
629
624 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
630 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
625
631
626 * IPython/genutils.py: fix 2.2 compatibility (generators)
632 * IPython/genutils.py: fix 2.2 compatibility (generators)
627
633
628 2005-07-18 Fernando Perez <fperez@colorado.edu>
634 2005-07-18 Fernando Perez <fperez@colorado.edu>
629
635
630 * IPython/genutils.py (get_home_dir): fix to help users with
636 * IPython/genutils.py (get_home_dir): fix to help users with
631 invalid $HOME under win32.
637 invalid $HOME under win32.
632
638
633 2005-07-17 Fernando Perez <fperez@colorado.edu>
639 2005-07-17 Fernando Perez <fperez@colorado.edu>
634
640
635 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
641 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
636 some old hacks and clean up a bit other routines; code should be
642 some old hacks and clean up a bit other routines; code should be
637 simpler and a bit faster.
643 simpler and a bit faster.
638
644
639 * IPython/iplib.py (interact): removed some last-resort attempts
645 * IPython/iplib.py (interact): removed some last-resort attempts
640 to survive broken stdout/stderr. That code was only making it
646 to survive broken stdout/stderr. That code was only making it
641 harder to abstract out the i/o (necessary for gui integration),
647 harder to abstract out the i/o (necessary for gui integration),
642 and the crashes it could prevent were extremely rare in practice
648 and the crashes it could prevent were extremely rare in practice
643 (besides being fully user-induced in a pretty violent manner).
649 (besides being fully user-induced in a pretty violent manner).
644
650
645 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
651 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
646 Nothing major yet, but the code is simpler to read; this should
652 Nothing major yet, but the code is simpler to read; this should
647 make it easier to do more serious modifications in the future.
653 make it easier to do more serious modifications in the future.
648
654
649 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
655 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
650 which broke in .15 (thanks to a report by Ville).
656 which broke in .15 (thanks to a report by Ville).
651
657
652 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
658 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
653 be quite correct, I know next to nothing about unicode). This
659 be quite correct, I know next to nothing about unicode). This
654 will allow unicode strings to be used in prompts, amongst other
660 will allow unicode strings to be used in prompts, amongst other
655 cases. It also will prevent ipython from crashing when unicode
661 cases. It also will prevent ipython from crashing when unicode
656 shows up unexpectedly in many places. If ascii encoding fails, we
662 shows up unexpectedly in many places. If ascii encoding fails, we
657 assume utf_8. Currently the encoding is not a user-visible
663 assume utf_8. Currently the encoding is not a user-visible
658 setting, though it could be made so if there is demand for it.
664 setting, though it could be made so if there is demand for it.
659
665
660 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
666 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
661
667
662 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
668 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
663
669
664 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
670 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
665
671
666 * IPython/genutils.py: Add 2.2 compatibility here, so all other
672 * IPython/genutils.py: Add 2.2 compatibility here, so all other
667 code can work transparently for 2.2/2.3.
673 code can work transparently for 2.2/2.3.
668
674
669 2005-07-16 Fernando Perez <fperez@colorado.edu>
675 2005-07-16 Fernando Perez <fperez@colorado.edu>
670
676
671 * IPython/ultraTB.py (ExceptionColors): Make a global variable
677 * IPython/ultraTB.py (ExceptionColors): Make a global variable
672 out of the color scheme table used for coloring exception
678 out of the color scheme table used for coloring exception
673 tracebacks. This allows user code to add new schemes at runtime.
679 tracebacks. This allows user code to add new schemes at runtime.
674 This is a minimally modified version of the patch at
680 This is a minimally modified version of the patch at
675 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
681 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
676 for the contribution.
682 for the contribution.
677
683
678 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
684 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
679 slightly modified version of the patch in
685 slightly modified version of the patch in
680 http://www.scipy.net/roundup/ipython/issue34, which also allows me
686 http://www.scipy.net/roundup/ipython/issue34, which also allows me
681 to remove the previous try/except solution (which was costlier).
687 to remove the previous try/except solution (which was costlier).
682 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
688 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
683
689
684 2005-06-08 Fernando Perez <fperez@colorado.edu>
690 2005-06-08 Fernando Perez <fperez@colorado.edu>
685
691
686 * IPython/iplib.py (write/write_err): Add methods to abstract all
692 * IPython/iplib.py (write/write_err): Add methods to abstract all
687 I/O a bit more.
693 I/O a bit more.
688
694
689 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
695 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
690 warning, reported by Aric Hagberg, fix by JD Hunter.
696 warning, reported by Aric Hagberg, fix by JD Hunter.
691
697
692 2005-06-02 *** Released version 0.6.15
698 2005-06-02 *** Released version 0.6.15
693
699
694 2005-06-01 Fernando Perez <fperez@colorado.edu>
700 2005-06-01 Fernando Perez <fperez@colorado.edu>
695
701
696 * IPython/iplib.py (MagicCompleter.file_matches): Fix
702 * IPython/iplib.py (MagicCompleter.file_matches): Fix
697 tab-completion of filenames within open-quoted strings. Note that
703 tab-completion of filenames within open-quoted strings. Note that
698 this requires that in ~/.ipython/ipythonrc, users change the
704 this requires that in ~/.ipython/ipythonrc, users change the
699 readline delimiters configuration to read:
705 readline delimiters configuration to read:
700
706
701 readline_remove_delims -/~
707 readline_remove_delims -/~
702
708
703
709
704 2005-05-31 *** Released version 0.6.14
710 2005-05-31 *** Released version 0.6.14
705
711
706 2005-05-29 Fernando Perez <fperez@colorado.edu>
712 2005-05-29 Fernando Perez <fperez@colorado.edu>
707
713
708 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
714 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
709 with files not on the filesystem. Reported by Eliyahu Sandler
715 with files not on the filesystem. Reported by Eliyahu Sandler
710 <eli@gondolin.net>
716 <eli@gondolin.net>
711
717
712 2005-05-22 Fernando Perez <fperez@colorado.edu>
718 2005-05-22 Fernando Perez <fperez@colorado.edu>
713
719
714 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
720 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
715 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
721 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
716
722
717 2005-05-19 Fernando Perez <fperez@colorado.edu>
723 2005-05-19 Fernando Perez <fperez@colorado.edu>
718
724
719 * IPython/iplib.py (safe_execfile): close a file which could be
725 * IPython/iplib.py (safe_execfile): close a file which could be
720 left open (causing problems in win32, which locks open files).
726 left open (causing problems in win32, which locks open files).
721 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
727 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
722
728
723 2005-05-18 Fernando Perez <fperez@colorado.edu>
729 2005-05-18 Fernando Perez <fperez@colorado.edu>
724
730
725 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
731 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
726 keyword arguments correctly to safe_execfile().
732 keyword arguments correctly to safe_execfile().
727
733
728 2005-05-13 Fernando Perez <fperez@colorado.edu>
734 2005-05-13 Fernando Perez <fperez@colorado.edu>
729
735
730 * ipython.1: Added info about Qt to manpage, and threads warning
736 * ipython.1: Added info about Qt to manpage, and threads warning
731 to usage page (invoked with --help).
737 to usage page (invoked with --help).
732
738
733 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
739 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
734 new matcher (it goes at the end of the priority list) to do
740 new matcher (it goes at the end of the priority list) to do
735 tab-completion on named function arguments. Submitted by George
741 tab-completion on named function arguments. Submitted by George
736 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
742 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
737 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
743 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
738 for more details.
744 for more details.
739
745
740 * IPython/Magic.py (magic_run): Added new -e flag to ignore
746 * IPython/Magic.py (magic_run): Added new -e flag to ignore
741 SystemExit exceptions in the script being run. Thanks to a report
747 SystemExit exceptions in the script being run. Thanks to a report
742 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
748 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
743 producing very annoying behavior when running unit tests.
749 producing very annoying behavior when running unit tests.
744
750
745 2005-05-12 Fernando Perez <fperez@colorado.edu>
751 2005-05-12 Fernando Perez <fperez@colorado.edu>
746
752
747 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
753 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
748 which I'd broken (again) due to a changed regexp. In the process,
754 which I'd broken (again) due to a changed regexp. In the process,
749 added ';' as an escape to auto-quote the whole line without
755 added ';' as an escape to auto-quote the whole line without
750 splitting its arguments. Thanks to a report by Jerry McRae
756 splitting its arguments. Thanks to a report by Jerry McRae
751 <qrs0xyc02-AT-sneakemail.com>.
757 <qrs0xyc02-AT-sneakemail.com>.
752
758
753 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
759 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
754 possible crashes caused by a TokenError. Reported by Ed Schofield
760 possible crashes caused by a TokenError. Reported by Ed Schofield
755 <schofield-AT-ftw.at>.
761 <schofield-AT-ftw.at>.
756
762
757 2005-05-06 Fernando Perez <fperez@colorado.edu>
763 2005-05-06 Fernando Perez <fperez@colorado.edu>
758
764
759 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
765 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
760
766
761 2005-04-29 Fernando Perez <fperez@colorado.edu>
767 2005-04-29 Fernando Perez <fperez@colorado.edu>
762
768
763 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
769 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
764 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
770 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
765 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
771 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
766 which provides support for Qt interactive usage (similar to the
772 which provides support for Qt interactive usage (similar to the
767 existing one for WX and GTK). This had been often requested.
773 existing one for WX and GTK). This had been often requested.
768
774
769 2005-04-14 *** Released version 0.6.13
775 2005-04-14 *** Released version 0.6.13
770
776
771 2005-04-08 Fernando Perez <fperez@colorado.edu>
777 2005-04-08 Fernando Perez <fperez@colorado.edu>
772
778
773 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
779 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
774 from _ofind, which gets called on almost every input line. Now,
780 from _ofind, which gets called on almost every input line. Now,
775 we only try to get docstrings if they are actually going to be
781 we only try to get docstrings if they are actually going to be
776 used (the overhead of fetching unnecessary docstrings can be
782 used (the overhead of fetching unnecessary docstrings can be
777 noticeable for certain objects, such as Pyro proxies).
783 noticeable for certain objects, such as Pyro proxies).
778
784
779 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
785 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
780 for completers. For some reason I had been passing them the state
786 for completers. For some reason I had been passing them the state
781 variable, which completers never actually need, and was in
787 variable, which completers never actually need, and was in
782 conflict with the rlcompleter API. Custom completers ONLY need to
788 conflict with the rlcompleter API. Custom completers ONLY need to
783 take the text parameter.
789 take the text parameter.
784
790
785 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
791 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
786 work correctly in pysh. I've also moved all the logic which used
792 work correctly in pysh. I've also moved all the logic which used
787 to be in pysh.py here, which will prevent problems with future
793 to be in pysh.py here, which will prevent problems with future
788 upgrades. However, this time I must warn users to update their
794 upgrades. However, this time I must warn users to update their
789 pysh profile to include the line
795 pysh profile to include the line
790
796
791 import_all IPython.Extensions.InterpreterExec
797 import_all IPython.Extensions.InterpreterExec
792
798
793 because otherwise things won't work for them. They MUST also
799 because otherwise things won't work for them. They MUST also
794 delete pysh.py and the line
800 delete pysh.py and the line
795
801
796 execfile pysh.py
802 execfile pysh.py
797
803
798 from their ipythonrc-pysh.
804 from their ipythonrc-pysh.
799
805
800 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
806 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
801 robust in the face of objects whose dir() returns non-strings
807 robust in the face of objects whose dir() returns non-strings
802 (which it shouldn't, but some broken libs like ITK do). Thanks to
808 (which it shouldn't, but some broken libs like ITK do). Thanks to
803 a patch by John Hunter (implemented differently, though). Also
809 a patch by John Hunter (implemented differently, though). Also
804 minor improvements by using .extend instead of + on lists.
810 minor improvements by using .extend instead of + on lists.
805
811
806 * pysh.py:
812 * pysh.py:
807
813
808 2005-04-06 Fernando Perez <fperez@colorado.edu>
814 2005-04-06 Fernando Perez <fperez@colorado.edu>
809
815
810 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
816 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
811 by default, so that all users benefit from it. Those who don't
817 by default, so that all users benefit from it. Those who don't
812 want it can still turn it off.
818 want it can still turn it off.
813
819
814 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
820 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
815 config file, I'd forgotten about this, so users were getting it
821 config file, I'd forgotten about this, so users were getting it
816 off by default.
822 off by default.
817
823
818 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
824 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
819 consistency. Now magics can be called in multiline statements,
825 consistency. Now magics can be called in multiline statements,
820 and python variables can be expanded in magic calls via $var.
826 and python variables can be expanded in magic calls via $var.
821 This makes the magic system behave just like aliases or !system
827 This makes the magic system behave just like aliases or !system
822 calls.
828 calls.
823
829
824 2005-03-28 Fernando Perez <fperez@colorado.edu>
830 2005-03-28 Fernando Perez <fperez@colorado.edu>
825
831
826 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
832 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
827 expensive string additions for building command. Add support for
833 expensive string additions for building command. Add support for
828 trailing ';' when autocall is used.
834 trailing ';' when autocall is used.
829
835
830 2005-03-26 Fernando Perez <fperez@colorado.edu>
836 2005-03-26 Fernando Perez <fperez@colorado.edu>
831
837
832 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
838 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
833 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
839 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
834 ipython.el robust against prompts with any number of spaces
840 ipython.el robust against prompts with any number of spaces
835 (including 0) after the ':' character.
841 (including 0) after the ':' character.
836
842
837 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
843 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
838 continuation prompt, which misled users to think the line was
844 continuation prompt, which misled users to think the line was
839 already indented. Closes debian Bug#300847, reported to me by
845 already indented. Closes debian Bug#300847, reported to me by
840 Norbert Tretkowski <tretkowski-AT-inittab.de>.
846 Norbert Tretkowski <tretkowski-AT-inittab.de>.
841
847
842 2005-03-23 Fernando Perez <fperez@colorado.edu>
848 2005-03-23 Fernando Perez <fperez@colorado.edu>
843
849
844 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
850 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
845 properly aligned if they have embedded newlines.
851 properly aligned if they have embedded newlines.
846
852
847 * IPython/iplib.py (runlines): Add a public method to expose
853 * IPython/iplib.py (runlines): Add a public method to expose
848 IPython's code execution machinery, so that users can run strings
854 IPython's code execution machinery, so that users can run strings
849 as if they had been typed at the prompt interactively.
855 as if they had been typed at the prompt interactively.
850 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
856 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
851 methods which can call the system shell, but with python variable
857 methods which can call the system shell, but with python variable
852 expansion. The three such methods are: __IPYTHON__.system,
858 expansion. The three such methods are: __IPYTHON__.system,
853 .getoutput and .getoutputerror. These need to be documented in a
859 .getoutput and .getoutputerror. These need to be documented in a
854 'public API' section (to be written) of the manual.
860 'public API' section (to be written) of the manual.
855
861
856 2005-03-20 Fernando Perez <fperez@colorado.edu>
862 2005-03-20 Fernando Perez <fperez@colorado.edu>
857
863
858 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
864 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
859 for custom exception handling. This is quite powerful, and it
865 for custom exception handling. This is quite powerful, and it
860 allows for user-installable exception handlers which can trap
866 allows for user-installable exception handlers which can trap
861 custom exceptions at runtime and treat them separately from
867 custom exceptions at runtime and treat them separately from
862 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
868 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
863 Mantegazza <mantegazza-AT-ill.fr>.
869 Mantegazza <mantegazza-AT-ill.fr>.
864 (InteractiveShell.set_custom_completer): public API function to
870 (InteractiveShell.set_custom_completer): public API function to
865 add new completers at runtime.
871 add new completers at runtime.
866
872
867 2005-03-19 Fernando Perez <fperez@colorado.edu>
873 2005-03-19 Fernando Perez <fperez@colorado.edu>
868
874
869 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
875 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
870 allow objects which provide their docstrings via non-standard
876 allow objects which provide their docstrings via non-standard
871 mechanisms (like Pyro proxies) to still be inspected by ipython's
877 mechanisms (like Pyro proxies) to still be inspected by ipython's
872 ? system.
878 ? system.
873
879
874 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
880 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
875 automatic capture system. I tried quite hard to make it work
881 automatic capture system. I tried quite hard to make it work
876 reliably, and simply failed. I tried many combinations with the
882 reliably, and simply failed. I tried many combinations with the
877 subprocess module, but eventually nothing worked in all needed
883 subprocess module, but eventually nothing worked in all needed
878 cases (not blocking stdin for the child, duplicating stdout
884 cases (not blocking stdin for the child, duplicating stdout
879 without blocking, etc). The new %sc/%sx still do capture to these
885 without blocking, etc). The new %sc/%sx still do capture to these
880 magical list/string objects which make shell use much more
886 magical list/string objects which make shell use much more
881 conveninent, so not all is lost.
887 conveninent, so not all is lost.
882
888
883 XXX - FIX MANUAL for the change above!
889 XXX - FIX MANUAL for the change above!
884
890
885 (runsource): I copied code.py's runsource() into ipython to modify
891 (runsource): I copied code.py's runsource() into ipython to modify
886 it a bit. Now the code object and source to be executed are
892 it a bit. Now the code object and source to be executed are
887 stored in ipython. This makes this info accessible to third-party
893 stored in ipython. This makes this info accessible to third-party
888 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
894 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
889 Mantegazza <mantegazza-AT-ill.fr>.
895 Mantegazza <mantegazza-AT-ill.fr>.
890
896
891 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
897 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
892 history-search via readline (like C-p/C-n). I'd wanted this for a
898 history-search via readline (like C-p/C-n). I'd wanted this for a
893 long time, but only recently found out how to do it. For users
899 long time, but only recently found out how to do it. For users
894 who already have their ipythonrc files made and want this, just
900 who already have their ipythonrc files made and want this, just
895 add:
901 add:
896
902
897 readline_parse_and_bind "\e[A": history-search-backward
903 readline_parse_and_bind "\e[A": history-search-backward
898 readline_parse_and_bind "\e[B": history-search-forward
904 readline_parse_and_bind "\e[B": history-search-forward
899
905
900 2005-03-18 Fernando Perez <fperez@colorado.edu>
906 2005-03-18 Fernando Perez <fperez@colorado.edu>
901
907
902 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
908 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
903 LSString and SList classes which allow transparent conversions
909 LSString and SList classes which allow transparent conversions
904 between list mode and whitespace-separated string.
910 between list mode and whitespace-separated string.
905 (magic_r): Fix recursion problem in %r.
911 (magic_r): Fix recursion problem in %r.
906
912
907 * IPython/genutils.py (LSString): New class to be used for
913 * IPython/genutils.py (LSString): New class to be used for
908 automatic storage of the results of all alias/system calls in _o
914 automatic storage of the results of all alias/system calls in _o
909 and _e (stdout/err). These provide a .l/.list attribute which
915 and _e (stdout/err). These provide a .l/.list attribute which
910 does automatic splitting on newlines. This means that for most
916 does automatic splitting on newlines. This means that for most
911 uses, you'll never need to do capturing of output with %sc/%sx
917 uses, you'll never need to do capturing of output with %sc/%sx
912 anymore, since ipython keeps this always done for you. Note that
918 anymore, since ipython keeps this always done for you. Note that
913 only the LAST results are stored, the _o/e variables are
919 only the LAST results are stored, the _o/e variables are
914 overwritten on each call. If you need to save their contents
920 overwritten on each call. If you need to save their contents
915 further, simply bind them to any other name.
921 further, simply bind them to any other name.
916
922
917 2005-03-17 Fernando Perez <fperez@colorado.edu>
923 2005-03-17 Fernando Perez <fperez@colorado.edu>
918
924
919 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
925 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
920 prompt namespace handling.
926 prompt namespace handling.
921
927
922 2005-03-16 Fernando Perez <fperez@colorado.edu>
928 2005-03-16 Fernando Perez <fperez@colorado.edu>
923
929
924 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
930 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
925 classic prompts to be '>>> ' (final space was missing, and it
931 classic prompts to be '>>> ' (final space was missing, and it
926 trips the emacs python mode).
932 trips the emacs python mode).
927 (BasePrompt.__str__): Added safe support for dynamic prompt
933 (BasePrompt.__str__): Added safe support for dynamic prompt
928 strings. Now you can set your prompt string to be '$x', and the
934 strings. Now you can set your prompt string to be '$x', and the
929 value of x will be printed from your interactive namespace. The
935 value of x will be printed from your interactive namespace. The
930 interpolation syntax includes the full Itpl support, so
936 interpolation syntax includes the full Itpl support, so
931 ${foo()+x+bar()} is a valid prompt string now, and the function
937 ${foo()+x+bar()} is a valid prompt string now, and the function
932 calls will be made at runtime.
938 calls will be made at runtime.
933
939
934 2005-03-15 Fernando Perez <fperez@colorado.edu>
940 2005-03-15 Fernando Perez <fperez@colorado.edu>
935
941
936 * IPython/Magic.py (magic_history): renamed %hist to %history, to
942 * IPython/Magic.py (magic_history): renamed %hist to %history, to
937 avoid name clashes in pylab. %hist still works, it just forwards
943 avoid name clashes in pylab. %hist still works, it just forwards
938 the call to %history.
944 the call to %history.
939
945
940 2005-03-02 *** Released version 0.6.12
946 2005-03-02 *** Released version 0.6.12
941
947
942 2005-03-02 Fernando Perez <fperez@colorado.edu>
948 2005-03-02 Fernando Perez <fperez@colorado.edu>
943
949
944 * IPython/iplib.py (handle_magic): log magic calls properly as
950 * IPython/iplib.py (handle_magic): log magic calls properly as
945 ipmagic() function calls.
951 ipmagic() function calls.
946
952
947 * IPython/Magic.py (magic_time): Improved %time to support
953 * IPython/Magic.py (magic_time): Improved %time to support
948 statements and provide wall-clock as well as CPU time.
954 statements and provide wall-clock as well as CPU time.
949
955
950 2005-02-27 Fernando Perez <fperez@colorado.edu>
956 2005-02-27 Fernando Perez <fperez@colorado.edu>
951
957
952 * IPython/hooks.py: New hooks module, to expose user-modifiable
958 * IPython/hooks.py: New hooks module, to expose user-modifiable
953 IPython functionality in a clean manner. For now only the editor
959 IPython functionality in a clean manner. For now only the editor
954 hook is actually written, and other thigns which I intend to turn
960 hook is actually written, and other thigns which I intend to turn
955 into proper hooks aren't yet there. The display and prefilter
961 into proper hooks aren't yet there. The display and prefilter
956 stuff, for example, should be hooks. But at least now the
962 stuff, for example, should be hooks. But at least now the
957 framework is in place, and the rest can be moved here with more
963 framework is in place, and the rest can be moved here with more
958 time later. IPython had had a .hooks variable for a long time for
964 time later. IPython had had a .hooks variable for a long time for
959 this purpose, but I'd never actually used it for anything.
965 this purpose, but I'd never actually used it for anything.
960
966
961 2005-02-26 Fernando Perez <fperez@colorado.edu>
967 2005-02-26 Fernando Perez <fperez@colorado.edu>
962
968
963 * IPython/ipmaker.py (make_IPython): make the default ipython
969 * IPython/ipmaker.py (make_IPython): make the default ipython
964 directory be called _ipython under win32, to follow more the
970 directory be called _ipython under win32, to follow more the
965 naming peculiarities of that platform (where buggy software like
971 naming peculiarities of that platform (where buggy software like
966 Visual Sourcesafe breaks with .named directories). Reported by
972 Visual Sourcesafe breaks with .named directories). Reported by
967 Ville Vainio.
973 Ville Vainio.
968
974
969 2005-02-23 Fernando Perez <fperez@colorado.edu>
975 2005-02-23 Fernando Perez <fperez@colorado.edu>
970
976
971 * IPython/iplib.py (InteractiveShell.__init__): removed a few
977 * IPython/iplib.py (InteractiveShell.__init__): removed a few
972 auto_aliases for win32 which were causing problems. Users can
978 auto_aliases for win32 which were causing problems. Users can
973 define the ones they personally like.
979 define the ones they personally like.
974
980
975 2005-02-21 Fernando Perez <fperez@colorado.edu>
981 2005-02-21 Fernando Perez <fperez@colorado.edu>
976
982
977 * IPython/Magic.py (magic_time): new magic to time execution of
983 * IPython/Magic.py (magic_time): new magic to time execution of
978 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
984 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
979
985
980 2005-02-19 Fernando Perez <fperez@colorado.edu>
986 2005-02-19 Fernando Perez <fperez@colorado.edu>
981
987
982 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
988 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
983 into keys (for prompts, for example).
989 into keys (for prompts, for example).
984
990
985 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
991 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
986 prompts in case users want them. This introduces a small behavior
992 prompts in case users want them. This introduces a small behavior
987 change: ipython does not automatically add a space to all prompts
993 change: ipython does not automatically add a space to all prompts
988 anymore. To get the old prompts with a space, users should add it
994 anymore. To get the old prompts with a space, users should add it
989 manually to their ipythonrc file, so for example prompt_in1 should
995 manually to their ipythonrc file, so for example prompt_in1 should
990 now read 'In [\#]: ' instead of 'In [\#]:'.
996 now read 'In [\#]: ' instead of 'In [\#]:'.
991 (BasePrompt.__init__): New option prompts_pad_left (only in rc
997 (BasePrompt.__init__): New option prompts_pad_left (only in rc
992 file) to control left-padding of secondary prompts.
998 file) to control left-padding of secondary prompts.
993
999
994 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1000 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
995 the profiler can't be imported. Fix for Debian, which removed
1001 the profiler can't be imported. Fix for Debian, which removed
996 profile.py because of License issues. I applied a slightly
1002 profile.py because of License issues. I applied a slightly
997 modified version of the original Debian patch at
1003 modified version of the original Debian patch at
998 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1004 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
999
1005
1000 2005-02-17 Fernando Perez <fperez@colorado.edu>
1006 2005-02-17 Fernando Perez <fperez@colorado.edu>
1001
1007
1002 * IPython/genutils.py (native_line_ends): Fix bug which would
1008 * IPython/genutils.py (native_line_ends): Fix bug which would
1003 cause improper line-ends under win32 b/c I was not opening files
1009 cause improper line-ends under win32 b/c I was not opening files
1004 in binary mode. Bug report and fix thanks to Ville.
1010 in binary mode. Bug report and fix thanks to Ville.
1005
1011
1006 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1012 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1007 trying to catch spurious foo[1] autocalls. My fix actually broke
1013 trying to catch spurious foo[1] autocalls. My fix actually broke
1008 ',/' autoquote/call with explicit escape (bad regexp).
1014 ',/' autoquote/call with explicit escape (bad regexp).
1009
1015
1010 2005-02-15 *** Released version 0.6.11
1016 2005-02-15 *** Released version 0.6.11
1011
1017
1012 2005-02-14 Fernando Perez <fperez@colorado.edu>
1018 2005-02-14 Fernando Perez <fperez@colorado.edu>
1013
1019
1014 * IPython/background_jobs.py: New background job management
1020 * IPython/background_jobs.py: New background job management
1015 subsystem. This is implemented via a new set of classes, and
1021 subsystem. This is implemented via a new set of classes, and
1016 IPython now provides a builtin 'jobs' object for background job
1022 IPython now provides a builtin 'jobs' object for background job
1017 execution. A convenience %bg magic serves as a lightweight
1023 execution. A convenience %bg magic serves as a lightweight
1018 frontend for starting the more common type of calls. This was
1024 frontend for starting the more common type of calls. This was
1019 inspired by discussions with B. Granger and the BackgroundCommand
1025 inspired by discussions with B. Granger and the BackgroundCommand
1020 class described in the book Python Scripting for Computational
1026 class described in the book Python Scripting for Computational
1021 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1027 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1022 (although ultimately no code from this text was used, as IPython's
1028 (although ultimately no code from this text was used, as IPython's
1023 system is a separate implementation).
1029 system is a separate implementation).
1024
1030
1025 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1031 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1026 to control the completion of single/double underscore names
1032 to control the completion of single/double underscore names
1027 separately. As documented in the example ipytonrc file, the
1033 separately. As documented in the example ipytonrc file, the
1028 readline_omit__names variable can now be set to 2, to omit even
1034 readline_omit__names variable can now be set to 2, to omit even
1029 single underscore names. Thanks to a patch by Brian Wong
1035 single underscore names. Thanks to a patch by Brian Wong
1030 <BrianWong-AT-AirgoNetworks.Com>.
1036 <BrianWong-AT-AirgoNetworks.Com>.
1031 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1037 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1032 be autocalled as foo([1]) if foo were callable. A problem for
1038 be autocalled as foo([1]) if foo were callable. A problem for
1033 things which are both callable and implement __getitem__.
1039 things which are both callable and implement __getitem__.
1034 (init_readline): Fix autoindentation for win32. Thanks to a patch
1040 (init_readline): Fix autoindentation for win32. Thanks to a patch
1035 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1041 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1036
1042
1037 2005-02-12 Fernando Perez <fperez@colorado.edu>
1043 2005-02-12 Fernando Perez <fperez@colorado.edu>
1038
1044
1039 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1045 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1040 which I had written long ago to sort out user error messages which
1046 which I had written long ago to sort out user error messages which
1041 may occur during startup. This seemed like a good idea initially,
1047 may occur during startup. This seemed like a good idea initially,
1042 but it has proven a disaster in retrospect. I don't want to
1048 but it has proven a disaster in retrospect. I don't want to
1043 change much code for now, so my fix is to set the internal 'debug'
1049 change much code for now, so my fix is to set the internal 'debug'
1044 flag to true everywhere, whose only job was precisely to control
1050 flag to true everywhere, whose only job was precisely to control
1045 this subsystem. This closes issue 28 (as well as avoiding all
1051 this subsystem. This closes issue 28 (as well as avoiding all
1046 sorts of strange hangups which occur from time to time).
1052 sorts of strange hangups which occur from time to time).
1047
1053
1048 2005-02-07 Fernando Perez <fperez@colorado.edu>
1054 2005-02-07 Fernando Perez <fperez@colorado.edu>
1049
1055
1050 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1056 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1051 previous call produced a syntax error.
1057 previous call produced a syntax error.
1052
1058
1053 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1059 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1054 classes without constructor.
1060 classes without constructor.
1055
1061
1056 2005-02-06 Fernando Perez <fperez@colorado.edu>
1062 2005-02-06 Fernando Perez <fperez@colorado.edu>
1057
1063
1058 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1064 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1059 completions with the results of each matcher, so we return results
1065 completions with the results of each matcher, so we return results
1060 to the user from all namespaces. This breaks with ipython
1066 to the user from all namespaces. This breaks with ipython
1061 tradition, but I think it's a nicer behavior. Now you get all
1067 tradition, but I think it's a nicer behavior. Now you get all
1062 possible completions listed, from all possible namespaces (python,
1068 possible completions listed, from all possible namespaces (python,
1063 filesystem, magics...) After a request by John Hunter
1069 filesystem, magics...) After a request by John Hunter
1064 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1070 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1065
1071
1066 2005-02-05 Fernando Perez <fperez@colorado.edu>
1072 2005-02-05 Fernando Perez <fperez@colorado.edu>
1067
1073
1068 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1074 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1069 the call had quote characters in it (the quotes were stripped).
1075 the call had quote characters in it (the quotes were stripped).
1070
1076
1071 2005-01-31 Fernando Perez <fperez@colorado.edu>
1077 2005-01-31 Fernando Perez <fperez@colorado.edu>
1072
1078
1073 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1079 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1074 Itpl.itpl() to make the code more robust against psyco
1080 Itpl.itpl() to make the code more robust against psyco
1075 optimizations.
1081 optimizations.
1076
1082
1077 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1083 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1078 of causing an exception. Quicker, cleaner.
1084 of causing an exception. Quicker, cleaner.
1079
1085
1080 2005-01-28 Fernando Perez <fperez@colorado.edu>
1086 2005-01-28 Fernando Perez <fperez@colorado.edu>
1081
1087
1082 * scripts/ipython_win_post_install.py (install): hardcode
1088 * scripts/ipython_win_post_install.py (install): hardcode
1083 sys.prefix+'python.exe' as the executable path. It turns out that
1089 sys.prefix+'python.exe' as the executable path. It turns out that
1084 during the post-installation run, sys.executable resolves to the
1090 during the post-installation run, sys.executable resolves to the
1085 name of the binary installer! I should report this as a distutils
1091 name of the binary installer! I should report this as a distutils
1086 bug, I think. I updated the .10 release with this tiny fix, to
1092 bug, I think. I updated the .10 release with this tiny fix, to
1087 avoid annoying the lists further.
1093 avoid annoying the lists further.
1088
1094
1089 2005-01-27 *** Released version 0.6.10
1095 2005-01-27 *** Released version 0.6.10
1090
1096
1091 2005-01-27 Fernando Perez <fperez@colorado.edu>
1097 2005-01-27 Fernando Perez <fperez@colorado.edu>
1092
1098
1093 * IPython/numutils.py (norm): Added 'inf' as optional name for
1099 * IPython/numutils.py (norm): Added 'inf' as optional name for
1094 L-infinity norm, included references to mathworld.com for vector
1100 L-infinity norm, included references to mathworld.com for vector
1095 norm definitions.
1101 norm definitions.
1096 (amin/amax): added amin/amax for array min/max. Similar to what
1102 (amin/amax): added amin/amax for array min/max. Similar to what
1097 pylab ships with after the recent reorganization of names.
1103 pylab ships with after the recent reorganization of names.
1098 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1104 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1099
1105
1100 * ipython.el: committed Alex's recent fixes and improvements.
1106 * ipython.el: committed Alex's recent fixes and improvements.
1101 Tested with python-mode from CVS, and it looks excellent. Since
1107 Tested with python-mode from CVS, and it looks excellent. Since
1102 python-mode hasn't released anything in a while, I'm temporarily
1108 python-mode hasn't released anything in a while, I'm temporarily
1103 putting a copy of today's CVS (v 4.70) of python-mode in:
1109 putting a copy of today's CVS (v 4.70) of python-mode in:
1104 http://ipython.scipy.org/tmp/python-mode.el
1110 http://ipython.scipy.org/tmp/python-mode.el
1105
1111
1106 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1112 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1107 sys.executable for the executable name, instead of assuming it's
1113 sys.executable for the executable name, instead of assuming it's
1108 called 'python.exe' (the post-installer would have produced broken
1114 called 'python.exe' (the post-installer would have produced broken
1109 setups on systems with a differently named python binary).
1115 setups on systems with a differently named python binary).
1110
1116
1111 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1117 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1112 references to os.linesep, to make the code more
1118 references to os.linesep, to make the code more
1113 platform-independent. This is also part of the win32 coloring
1119 platform-independent. This is also part of the win32 coloring
1114 fixes.
1120 fixes.
1115
1121
1116 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1122 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1117 lines, which actually cause coloring bugs because the length of
1123 lines, which actually cause coloring bugs because the length of
1118 the line is very difficult to correctly compute with embedded
1124 the line is very difficult to correctly compute with embedded
1119 escapes. This was the source of all the coloring problems under
1125 escapes. This was the source of all the coloring problems under
1120 Win32. I think that _finally_, Win32 users have a properly
1126 Win32. I think that _finally_, Win32 users have a properly
1121 working ipython in all respects. This would never have happened
1127 working ipython in all respects. This would never have happened
1122 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1128 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1123
1129
1124 2005-01-26 *** Released version 0.6.9
1130 2005-01-26 *** Released version 0.6.9
1125
1131
1126 2005-01-25 Fernando Perez <fperez@colorado.edu>
1132 2005-01-25 Fernando Perez <fperez@colorado.edu>
1127
1133
1128 * setup.py: finally, we have a true Windows installer, thanks to
1134 * setup.py: finally, we have a true Windows installer, thanks to
1129 the excellent work of Viktor Ransmayr
1135 the excellent work of Viktor Ransmayr
1130 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1136 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1131 Windows users. The setup routine is quite a bit cleaner thanks to
1137 Windows users. The setup routine is quite a bit cleaner thanks to
1132 this, and the post-install script uses the proper functions to
1138 this, and the post-install script uses the proper functions to
1133 allow a clean de-installation using the standard Windows Control
1139 allow a clean de-installation using the standard Windows Control
1134 Panel.
1140 Panel.
1135
1141
1136 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1142 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1137 environment variable under all OSes (including win32) if
1143 environment variable under all OSes (including win32) if
1138 available. This will give consistency to win32 users who have set
1144 available. This will give consistency to win32 users who have set
1139 this variable for any reason. If os.environ['HOME'] fails, the
1145 this variable for any reason. If os.environ['HOME'] fails, the
1140 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1146 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1141
1147
1142 2005-01-24 Fernando Perez <fperez@colorado.edu>
1148 2005-01-24 Fernando Perez <fperez@colorado.edu>
1143
1149
1144 * IPython/numutils.py (empty_like): add empty_like(), similar to
1150 * IPython/numutils.py (empty_like): add empty_like(), similar to
1145 zeros_like() but taking advantage of the new empty() Numeric routine.
1151 zeros_like() but taking advantage of the new empty() Numeric routine.
1146
1152
1147 2005-01-23 *** Released version 0.6.8
1153 2005-01-23 *** Released version 0.6.8
1148
1154
1149 2005-01-22 Fernando Perez <fperez@colorado.edu>
1155 2005-01-22 Fernando Perez <fperez@colorado.edu>
1150
1156
1151 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1157 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1152 automatic show() calls. After discussing things with JDH, it
1158 automatic show() calls. After discussing things with JDH, it
1153 turns out there are too many corner cases where this can go wrong.
1159 turns out there are too many corner cases where this can go wrong.
1154 It's best not to try to be 'too smart', and simply have ipython
1160 It's best not to try to be 'too smart', and simply have ipython
1155 reproduce as much as possible the default behavior of a normal
1161 reproduce as much as possible the default behavior of a normal
1156 python shell.
1162 python shell.
1157
1163
1158 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1164 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1159 line-splitting regexp and _prefilter() to avoid calling getattr()
1165 line-splitting regexp and _prefilter() to avoid calling getattr()
1160 on assignments. This closes
1166 on assignments. This closes
1161 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1167 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1162 readline uses getattr(), so a simple <TAB> keypress is still
1168 readline uses getattr(), so a simple <TAB> keypress is still
1163 enough to trigger getattr() calls on an object.
1169 enough to trigger getattr() calls on an object.
1164
1170
1165 2005-01-21 Fernando Perez <fperez@colorado.edu>
1171 2005-01-21 Fernando Perez <fperez@colorado.edu>
1166
1172
1167 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1173 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1168 docstring under pylab so it doesn't mask the original.
1174 docstring under pylab so it doesn't mask the original.
1169
1175
1170 2005-01-21 *** Released version 0.6.7
1176 2005-01-21 *** Released version 0.6.7
1171
1177
1172 2005-01-21 Fernando Perez <fperez@colorado.edu>
1178 2005-01-21 Fernando Perez <fperez@colorado.edu>
1173
1179
1174 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1180 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1175 signal handling for win32 users in multithreaded mode.
1181 signal handling for win32 users in multithreaded mode.
1176
1182
1177 2005-01-17 Fernando Perez <fperez@colorado.edu>
1183 2005-01-17 Fernando Perez <fperez@colorado.edu>
1178
1184
1179 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1185 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1180 instances with no __init__. After a crash report by Norbert Nemec
1186 instances with no __init__. After a crash report by Norbert Nemec
1181 <Norbert-AT-nemec-online.de>.
1187 <Norbert-AT-nemec-online.de>.
1182
1188
1183 2005-01-14 Fernando Perez <fperez@colorado.edu>
1189 2005-01-14 Fernando Perez <fperez@colorado.edu>
1184
1190
1185 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1191 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1186 names for verbose exceptions, when multiple dotted names and the
1192 names for verbose exceptions, when multiple dotted names and the
1187 'parent' object were present on the same line.
1193 'parent' object were present on the same line.
1188
1194
1189 2005-01-11 Fernando Perez <fperez@colorado.edu>
1195 2005-01-11 Fernando Perez <fperez@colorado.edu>
1190
1196
1191 * IPython/genutils.py (flag_calls): new utility to trap and flag
1197 * IPython/genutils.py (flag_calls): new utility to trap and flag
1192 calls in functions. I need it to clean up matplotlib support.
1198 calls in functions. I need it to clean up matplotlib support.
1193 Also removed some deprecated code in genutils.
1199 Also removed some deprecated code in genutils.
1194
1200
1195 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1201 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1196 that matplotlib scripts called with %run, which don't call show()
1202 that matplotlib scripts called with %run, which don't call show()
1197 themselves, still have their plotting windows open.
1203 themselves, still have their plotting windows open.
1198
1204
1199 2005-01-05 Fernando Perez <fperez@colorado.edu>
1205 2005-01-05 Fernando Perez <fperez@colorado.edu>
1200
1206
1201 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1207 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1202 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1208 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1203
1209
1204 2004-12-19 Fernando Perez <fperez@colorado.edu>
1210 2004-12-19 Fernando Perez <fperez@colorado.edu>
1205
1211
1206 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1212 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1207 parent_runcode, which was an eyesore. The same result can be
1213 parent_runcode, which was an eyesore. The same result can be
1208 obtained with Python's regular superclass mechanisms.
1214 obtained with Python's regular superclass mechanisms.
1209
1215
1210 2004-12-17 Fernando Perez <fperez@colorado.edu>
1216 2004-12-17 Fernando Perez <fperez@colorado.edu>
1211
1217
1212 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1218 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1213 reported by Prabhu.
1219 reported by Prabhu.
1214 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1220 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1215 sys.stderr) instead of explicitly calling sys.stderr. This helps
1221 sys.stderr) instead of explicitly calling sys.stderr. This helps
1216 maintain our I/O abstractions clean, for future GUI embeddings.
1222 maintain our I/O abstractions clean, for future GUI embeddings.
1217
1223
1218 * IPython/genutils.py (info): added new utility for sys.stderr
1224 * IPython/genutils.py (info): added new utility for sys.stderr
1219 unified info message handling (thin wrapper around warn()).
1225 unified info message handling (thin wrapper around warn()).
1220
1226
1221 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1227 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1222 composite (dotted) names on verbose exceptions.
1228 composite (dotted) names on verbose exceptions.
1223 (VerboseTB.nullrepr): harden against another kind of errors which
1229 (VerboseTB.nullrepr): harden against another kind of errors which
1224 Python's inspect module can trigger, and which were crashing
1230 Python's inspect module can trigger, and which were crashing
1225 IPython. Thanks to a report by Marco Lombardi
1231 IPython. Thanks to a report by Marco Lombardi
1226 <mlombard-AT-ma010192.hq.eso.org>.
1232 <mlombard-AT-ma010192.hq.eso.org>.
1227
1233
1228 2004-12-13 *** Released version 0.6.6
1234 2004-12-13 *** Released version 0.6.6
1229
1235
1230 2004-12-12 Fernando Perez <fperez@colorado.edu>
1236 2004-12-12 Fernando Perez <fperez@colorado.edu>
1231
1237
1232 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1238 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1233 generated by pygtk upon initialization if it was built without
1239 generated by pygtk upon initialization if it was built without
1234 threads (for matplotlib users). After a crash reported by
1240 threads (for matplotlib users). After a crash reported by
1235 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1241 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1236
1242
1237 * IPython/ipmaker.py (make_IPython): fix small bug in the
1243 * IPython/ipmaker.py (make_IPython): fix small bug in the
1238 import_some parameter for multiple imports.
1244 import_some parameter for multiple imports.
1239
1245
1240 * IPython/iplib.py (ipmagic): simplified the interface of
1246 * IPython/iplib.py (ipmagic): simplified the interface of
1241 ipmagic() to take a single string argument, just as it would be
1247 ipmagic() to take a single string argument, just as it would be
1242 typed at the IPython cmd line.
1248 typed at the IPython cmd line.
1243 (ipalias): Added new ipalias() with an interface identical to
1249 (ipalias): Added new ipalias() with an interface identical to
1244 ipmagic(). This completes exposing a pure python interface to the
1250 ipmagic(). This completes exposing a pure python interface to the
1245 alias and magic system, which can be used in loops or more complex
1251 alias and magic system, which can be used in loops or more complex
1246 code where IPython's automatic line mangling is not active.
1252 code where IPython's automatic line mangling is not active.
1247
1253
1248 * IPython/genutils.py (timing): changed interface of timing to
1254 * IPython/genutils.py (timing): changed interface of timing to
1249 simply run code once, which is the most common case. timings()
1255 simply run code once, which is the most common case. timings()
1250 remains unchanged, for the cases where you want multiple runs.
1256 remains unchanged, for the cases where you want multiple runs.
1251
1257
1252 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1258 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1253 bug where Python2.2 crashes with exec'ing code which does not end
1259 bug where Python2.2 crashes with exec'ing code which does not end
1254 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1260 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1255 before.
1261 before.
1256
1262
1257 2004-12-10 Fernando Perez <fperez@colorado.edu>
1263 2004-12-10 Fernando Perez <fperez@colorado.edu>
1258
1264
1259 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1265 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1260 -t to -T, to accomodate the new -t flag in %run (the %run and
1266 -t to -T, to accomodate the new -t flag in %run (the %run and
1261 %prun options are kind of intermixed, and it's not easy to change
1267 %prun options are kind of intermixed, and it's not easy to change
1262 this with the limitations of python's getopt).
1268 this with the limitations of python's getopt).
1263
1269
1264 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1270 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1265 the execution of scripts. It's not as fine-tuned as timeit.py,
1271 the execution of scripts. It's not as fine-tuned as timeit.py,
1266 but it works from inside ipython (and under 2.2, which lacks
1272 but it works from inside ipython (and under 2.2, which lacks
1267 timeit.py). Optionally a number of runs > 1 can be given for
1273 timeit.py). Optionally a number of runs > 1 can be given for
1268 timing very short-running code.
1274 timing very short-running code.
1269
1275
1270 * IPython/genutils.py (uniq_stable): new routine which returns a
1276 * IPython/genutils.py (uniq_stable): new routine which returns a
1271 list of unique elements in any iterable, but in stable order of
1277 list of unique elements in any iterable, but in stable order of
1272 appearance. I needed this for the ultraTB fixes, and it's a handy
1278 appearance. I needed this for the ultraTB fixes, and it's a handy
1273 utility.
1279 utility.
1274
1280
1275 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1281 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1276 dotted names in Verbose exceptions. This had been broken since
1282 dotted names in Verbose exceptions. This had been broken since
1277 the very start, now x.y will properly be printed in a Verbose
1283 the very start, now x.y will properly be printed in a Verbose
1278 traceback, instead of x being shown and y appearing always as an
1284 traceback, instead of x being shown and y appearing always as an
1279 'undefined global'. Getting this to work was a bit tricky,
1285 'undefined global'. Getting this to work was a bit tricky,
1280 because by default python tokenizers are stateless. Saved by
1286 because by default python tokenizers are stateless. Saved by
1281 python's ability to easily add a bit of state to an arbitrary
1287 python's ability to easily add a bit of state to an arbitrary
1282 function (without needing to build a full-blown callable object).
1288 function (without needing to build a full-blown callable object).
1283
1289
1284 Also big cleanup of this code, which had horrendous runtime
1290 Also big cleanup of this code, which had horrendous runtime
1285 lookups of zillions of attributes for colorization. Moved all
1291 lookups of zillions of attributes for colorization. Moved all
1286 this code into a few templates, which make it cleaner and quicker.
1292 this code into a few templates, which make it cleaner and quicker.
1287
1293
1288 Printout quality was also improved for Verbose exceptions: one
1294 Printout quality was also improved for Verbose exceptions: one
1289 variable per line, and memory addresses are printed (this can be
1295 variable per line, and memory addresses are printed (this can be
1290 quite handy in nasty debugging situations, which is what Verbose
1296 quite handy in nasty debugging situations, which is what Verbose
1291 is for).
1297 is for).
1292
1298
1293 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1299 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1294 the command line as scripts to be loaded by embedded instances.
1300 the command line as scripts to be loaded by embedded instances.
1295 Doing so has the potential for an infinite recursion if there are
1301 Doing so has the potential for an infinite recursion if there are
1296 exceptions thrown in the process. This fixes a strange crash
1302 exceptions thrown in the process. This fixes a strange crash
1297 reported by Philippe MULLER <muller-AT-irit.fr>.
1303 reported by Philippe MULLER <muller-AT-irit.fr>.
1298
1304
1299 2004-12-09 Fernando Perez <fperez@colorado.edu>
1305 2004-12-09 Fernando Perez <fperez@colorado.edu>
1300
1306
1301 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1307 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1302 to reflect new names in matplotlib, which now expose the
1308 to reflect new names in matplotlib, which now expose the
1303 matlab-compatible interface via a pylab module instead of the
1309 matlab-compatible interface via a pylab module instead of the
1304 'matlab' name. The new code is backwards compatible, so users of
1310 'matlab' name. The new code is backwards compatible, so users of
1305 all matplotlib versions are OK. Patch by J. Hunter.
1311 all matplotlib versions are OK. Patch by J. Hunter.
1306
1312
1307 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1313 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1308 of __init__ docstrings for instances (class docstrings are already
1314 of __init__ docstrings for instances (class docstrings are already
1309 automatically printed). Instances with customized docstrings
1315 automatically printed). Instances with customized docstrings
1310 (indep. of the class) are also recognized and all 3 separate
1316 (indep. of the class) are also recognized and all 3 separate
1311 docstrings are printed (instance, class, constructor). After some
1317 docstrings are printed (instance, class, constructor). After some
1312 comments/suggestions by J. Hunter.
1318 comments/suggestions by J. Hunter.
1313
1319
1314 2004-12-05 Fernando Perez <fperez@colorado.edu>
1320 2004-12-05 Fernando Perez <fperez@colorado.edu>
1315
1321
1316 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1322 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1317 warnings when tab-completion fails and triggers an exception.
1323 warnings when tab-completion fails and triggers an exception.
1318
1324
1319 2004-12-03 Fernando Perez <fperez@colorado.edu>
1325 2004-12-03 Fernando Perez <fperez@colorado.edu>
1320
1326
1321 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1327 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1322 be triggered when using 'run -p'. An incorrect option flag was
1328 be triggered when using 'run -p'. An incorrect option flag was
1323 being set ('d' instead of 'D').
1329 being set ('d' instead of 'D').
1324 (manpage): fix missing escaped \- sign.
1330 (manpage): fix missing escaped \- sign.
1325
1331
1326 2004-11-30 *** Released version 0.6.5
1332 2004-11-30 *** Released version 0.6.5
1327
1333
1328 2004-11-30 Fernando Perez <fperez@colorado.edu>
1334 2004-11-30 Fernando Perez <fperez@colorado.edu>
1329
1335
1330 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1336 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1331 setting with -d option.
1337 setting with -d option.
1332
1338
1333 * setup.py (docfiles): Fix problem where the doc glob I was using
1339 * setup.py (docfiles): Fix problem where the doc glob I was using
1334 was COMPLETELY BROKEN. It was giving the right files by pure
1340 was COMPLETELY BROKEN. It was giving the right files by pure
1335 accident, but failed once I tried to include ipython.el. Note:
1341 accident, but failed once I tried to include ipython.el. Note:
1336 glob() does NOT allow you to do exclusion on multiple endings!
1342 glob() does NOT allow you to do exclusion on multiple endings!
1337
1343
1338 2004-11-29 Fernando Perez <fperez@colorado.edu>
1344 2004-11-29 Fernando Perez <fperez@colorado.edu>
1339
1345
1340 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1346 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1341 the manpage as the source. Better formatting & consistency.
1347 the manpage as the source. Better formatting & consistency.
1342
1348
1343 * IPython/Magic.py (magic_run): Added new -d option, to run
1349 * IPython/Magic.py (magic_run): Added new -d option, to run
1344 scripts under the control of the python pdb debugger. Note that
1350 scripts under the control of the python pdb debugger. Note that
1345 this required changing the %prun option -d to -D, to avoid a clash
1351 this required changing the %prun option -d to -D, to avoid a clash
1346 (since %run must pass options to %prun, and getopt is too dumb to
1352 (since %run must pass options to %prun, and getopt is too dumb to
1347 handle options with string values with embedded spaces). Thanks
1353 handle options with string values with embedded spaces). Thanks
1348 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1354 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1349 (magic_who_ls): added type matching to %who and %whos, so that one
1355 (magic_who_ls): added type matching to %who and %whos, so that one
1350 can filter their output to only include variables of certain
1356 can filter their output to only include variables of certain
1351 types. Another suggestion by Matthew.
1357 types. Another suggestion by Matthew.
1352 (magic_whos): Added memory summaries in kb and Mb for arrays.
1358 (magic_whos): Added memory summaries in kb and Mb for arrays.
1353 (magic_who): Improve formatting (break lines every 9 vars).
1359 (magic_who): Improve formatting (break lines every 9 vars).
1354
1360
1355 2004-11-28 Fernando Perez <fperez@colorado.edu>
1361 2004-11-28 Fernando Perez <fperez@colorado.edu>
1356
1362
1357 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1363 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1358 cache when empty lines were present.
1364 cache when empty lines were present.
1359
1365
1360 2004-11-24 Fernando Perez <fperez@colorado.edu>
1366 2004-11-24 Fernando Perez <fperez@colorado.edu>
1361
1367
1362 * IPython/usage.py (__doc__): document the re-activated threading
1368 * IPython/usage.py (__doc__): document the re-activated threading
1363 options for WX and GTK.
1369 options for WX and GTK.
1364
1370
1365 2004-11-23 Fernando Perez <fperez@colorado.edu>
1371 2004-11-23 Fernando Perez <fperez@colorado.edu>
1366
1372
1367 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1373 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1368 the -wthread and -gthread options, along with a new -tk one to try
1374 the -wthread and -gthread options, along with a new -tk one to try
1369 and coordinate Tk threading with wx/gtk. The tk support is very
1375 and coordinate Tk threading with wx/gtk. The tk support is very
1370 platform dependent, since it seems to require Tcl and Tk to be
1376 platform dependent, since it seems to require Tcl and Tk to be
1371 built with threads (Fedora1/2 appears NOT to have it, but in
1377 built with threads (Fedora1/2 appears NOT to have it, but in
1372 Prabhu's Debian boxes it works OK). But even with some Tk
1378 Prabhu's Debian boxes it works OK). But even with some Tk
1373 limitations, this is a great improvement.
1379 limitations, this is a great improvement.
1374
1380
1375 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1381 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1376 info in user prompts. Patch by Prabhu.
1382 info in user prompts. Patch by Prabhu.
1377
1383
1378 2004-11-18 Fernando Perez <fperez@colorado.edu>
1384 2004-11-18 Fernando Perez <fperez@colorado.edu>
1379
1385
1380 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1386 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1381 EOFErrors and bail, to avoid infinite loops if a non-terminating
1387 EOFErrors and bail, to avoid infinite loops if a non-terminating
1382 file is fed into ipython. Patch submitted in issue 19 by user,
1388 file is fed into ipython. Patch submitted in issue 19 by user,
1383 many thanks.
1389 many thanks.
1384
1390
1385 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1391 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1386 autoquote/parens in continuation prompts, which can cause lots of
1392 autoquote/parens in continuation prompts, which can cause lots of
1387 problems. Closes roundup issue 20.
1393 problems. Closes roundup issue 20.
1388
1394
1389 2004-11-17 Fernando Perez <fperez@colorado.edu>
1395 2004-11-17 Fernando Perez <fperez@colorado.edu>
1390
1396
1391 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1397 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1392 reported as debian bug #280505. I'm not sure my local changelog
1398 reported as debian bug #280505. I'm not sure my local changelog
1393 entry has the proper debian format (Jack?).
1399 entry has the proper debian format (Jack?).
1394
1400
1395 2004-11-08 *** Released version 0.6.4
1401 2004-11-08 *** Released version 0.6.4
1396
1402
1397 2004-11-08 Fernando Perez <fperez@colorado.edu>
1403 2004-11-08 Fernando Perez <fperez@colorado.edu>
1398
1404
1399 * IPython/iplib.py (init_readline): Fix exit message for Windows
1405 * IPython/iplib.py (init_readline): Fix exit message for Windows
1400 when readline is active. Thanks to a report by Eric Jones
1406 when readline is active. Thanks to a report by Eric Jones
1401 <eric-AT-enthought.com>.
1407 <eric-AT-enthought.com>.
1402
1408
1403 2004-11-07 Fernando Perez <fperez@colorado.edu>
1409 2004-11-07 Fernando Perez <fperez@colorado.edu>
1404
1410
1405 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1411 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1406 sometimes seen by win2k/cygwin users.
1412 sometimes seen by win2k/cygwin users.
1407
1413
1408 2004-11-06 Fernando Perez <fperez@colorado.edu>
1414 2004-11-06 Fernando Perez <fperez@colorado.edu>
1409
1415
1410 * IPython/iplib.py (interact): Change the handling of %Exit from
1416 * IPython/iplib.py (interact): Change the handling of %Exit from
1411 trying to propagate a SystemExit to an internal ipython flag.
1417 trying to propagate a SystemExit to an internal ipython flag.
1412 This is less elegant than using Python's exception mechanism, but
1418 This is less elegant than using Python's exception mechanism, but
1413 I can't get that to work reliably with threads, so under -pylab
1419 I can't get that to work reliably with threads, so under -pylab
1414 %Exit was hanging IPython. Cross-thread exception handling is
1420 %Exit was hanging IPython. Cross-thread exception handling is
1415 really a bitch. Thaks to a bug report by Stephen Walton
1421 really a bitch. Thaks to a bug report by Stephen Walton
1416 <stephen.walton-AT-csun.edu>.
1422 <stephen.walton-AT-csun.edu>.
1417
1423
1418 2004-11-04 Fernando Perez <fperez@colorado.edu>
1424 2004-11-04 Fernando Perez <fperez@colorado.edu>
1419
1425
1420 * IPython/iplib.py (raw_input_original): store a pointer to the
1426 * IPython/iplib.py (raw_input_original): store a pointer to the
1421 true raw_input to harden against code which can modify it
1427 true raw_input to harden against code which can modify it
1422 (wx.py.PyShell does this and would otherwise crash ipython).
1428 (wx.py.PyShell does this and would otherwise crash ipython).
1423 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1429 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1424
1430
1425 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1431 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1426 Ctrl-C problem, which does not mess up the input line.
1432 Ctrl-C problem, which does not mess up the input line.
1427
1433
1428 2004-11-03 Fernando Perez <fperez@colorado.edu>
1434 2004-11-03 Fernando Perez <fperez@colorado.edu>
1429
1435
1430 * IPython/Release.py: Changed licensing to BSD, in all files.
1436 * IPython/Release.py: Changed licensing to BSD, in all files.
1431 (name): lowercase name for tarball/RPM release.
1437 (name): lowercase name for tarball/RPM release.
1432
1438
1433 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1439 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1434 use throughout ipython.
1440 use throughout ipython.
1435
1441
1436 * IPython/Magic.py (Magic._ofind): Switch to using the new
1442 * IPython/Magic.py (Magic._ofind): Switch to using the new
1437 OInspect.getdoc() function.
1443 OInspect.getdoc() function.
1438
1444
1439 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1445 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1440 of the line currently being canceled via Ctrl-C. It's extremely
1446 of the line currently being canceled via Ctrl-C. It's extremely
1441 ugly, but I don't know how to do it better (the problem is one of
1447 ugly, but I don't know how to do it better (the problem is one of
1442 handling cross-thread exceptions).
1448 handling cross-thread exceptions).
1443
1449
1444 2004-10-28 Fernando Perez <fperez@colorado.edu>
1450 2004-10-28 Fernando Perez <fperez@colorado.edu>
1445
1451
1446 * IPython/Shell.py (signal_handler): add signal handlers to trap
1452 * IPython/Shell.py (signal_handler): add signal handlers to trap
1447 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1453 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1448 report by Francesc Alted.
1454 report by Francesc Alted.
1449
1455
1450 2004-10-21 Fernando Perez <fperez@colorado.edu>
1456 2004-10-21 Fernando Perez <fperez@colorado.edu>
1451
1457
1452 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1458 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1453 to % for pysh syntax extensions.
1459 to % for pysh syntax extensions.
1454
1460
1455 2004-10-09 Fernando Perez <fperez@colorado.edu>
1461 2004-10-09 Fernando Perez <fperez@colorado.edu>
1456
1462
1457 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1463 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1458 arrays to print a more useful summary, without calling str(arr).
1464 arrays to print a more useful summary, without calling str(arr).
1459 This avoids the problem of extremely lengthy computations which
1465 This avoids the problem of extremely lengthy computations which
1460 occur if arr is large, and appear to the user as a system lockup
1466 occur if arr is large, and appear to the user as a system lockup
1461 with 100% cpu activity. After a suggestion by Kristian Sandberg
1467 with 100% cpu activity. After a suggestion by Kristian Sandberg
1462 <Kristian.Sandberg@colorado.edu>.
1468 <Kristian.Sandberg@colorado.edu>.
1463 (Magic.__init__): fix bug in global magic escapes not being
1469 (Magic.__init__): fix bug in global magic escapes not being
1464 correctly set.
1470 correctly set.
1465
1471
1466 2004-10-08 Fernando Perez <fperez@colorado.edu>
1472 2004-10-08 Fernando Perez <fperez@colorado.edu>
1467
1473
1468 * IPython/Magic.py (__license__): change to absolute imports of
1474 * IPython/Magic.py (__license__): change to absolute imports of
1469 ipython's own internal packages, to start adapting to the absolute
1475 ipython's own internal packages, to start adapting to the absolute
1470 import requirement of PEP-328.
1476 import requirement of PEP-328.
1471
1477
1472 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1478 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1473 files, and standardize author/license marks through the Release
1479 files, and standardize author/license marks through the Release
1474 module instead of having per/file stuff (except for files with
1480 module instead of having per/file stuff (except for files with
1475 particular licenses, like the MIT/PSF-licensed codes).
1481 particular licenses, like the MIT/PSF-licensed codes).
1476
1482
1477 * IPython/Debugger.py: remove dead code for python 2.1
1483 * IPython/Debugger.py: remove dead code for python 2.1
1478
1484
1479 2004-10-04 Fernando Perez <fperez@colorado.edu>
1485 2004-10-04 Fernando Perez <fperez@colorado.edu>
1480
1486
1481 * IPython/iplib.py (ipmagic): New function for accessing magics
1487 * IPython/iplib.py (ipmagic): New function for accessing magics
1482 via a normal python function call.
1488 via a normal python function call.
1483
1489
1484 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1490 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1485 from '@' to '%', to accomodate the new @decorator syntax of python
1491 from '@' to '%', to accomodate the new @decorator syntax of python
1486 2.4.
1492 2.4.
1487
1493
1488 2004-09-29 Fernando Perez <fperez@colorado.edu>
1494 2004-09-29 Fernando Perez <fperez@colorado.edu>
1489
1495
1490 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1496 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1491 matplotlib.use to prevent running scripts which try to switch
1497 matplotlib.use to prevent running scripts which try to switch
1492 interactive backends from within ipython. This will just crash
1498 interactive backends from within ipython. This will just crash
1493 the python interpreter, so we can't allow it (but a detailed error
1499 the python interpreter, so we can't allow it (but a detailed error
1494 is given to the user).
1500 is given to the user).
1495
1501
1496 2004-09-28 Fernando Perez <fperez@colorado.edu>
1502 2004-09-28 Fernando Perez <fperez@colorado.edu>
1497
1503
1498 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1504 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1499 matplotlib-related fixes so that using @run with non-matplotlib
1505 matplotlib-related fixes so that using @run with non-matplotlib
1500 scripts doesn't pop up spurious plot windows. This requires
1506 scripts doesn't pop up spurious plot windows. This requires
1501 matplotlib >= 0.63, where I had to make some changes as well.
1507 matplotlib >= 0.63, where I had to make some changes as well.
1502
1508
1503 * IPython/ipmaker.py (make_IPython): update version requirement to
1509 * IPython/ipmaker.py (make_IPython): update version requirement to
1504 python 2.2.
1510 python 2.2.
1505
1511
1506 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1512 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1507 banner arg for embedded customization.
1513 banner arg for embedded customization.
1508
1514
1509 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1515 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1510 explicit uses of __IP as the IPython's instance name. Now things
1516 explicit uses of __IP as the IPython's instance name. Now things
1511 are properly handled via the shell.name value. The actual code
1517 are properly handled via the shell.name value. The actual code
1512 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1518 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1513 is much better than before. I'll clean things completely when the
1519 is much better than before. I'll clean things completely when the
1514 magic stuff gets a real overhaul.
1520 magic stuff gets a real overhaul.
1515
1521
1516 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1522 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1517 minor changes to debian dir.
1523 minor changes to debian dir.
1518
1524
1519 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1525 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1520 pointer to the shell itself in the interactive namespace even when
1526 pointer to the shell itself in the interactive namespace even when
1521 a user-supplied dict is provided. This is needed for embedding
1527 a user-supplied dict is provided. This is needed for embedding
1522 purposes (found by tests with Michel Sanner).
1528 purposes (found by tests with Michel Sanner).
1523
1529
1524 2004-09-27 Fernando Perez <fperez@colorado.edu>
1530 2004-09-27 Fernando Perez <fperez@colorado.edu>
1525
1531
1526 * IPython/UserConfig/ipythonrc: remove []{} from
1532 * IPython/UserConfig/ipythonrc: remove []{} from
1527 readline_remove_delims, so that things like [modname.<TAB> do
1533 readline_remove_delims, so that things like [modname.<TAB> do
1528 proper completion. This disables [].TAB, but that's a less common
1534 proper completion. This disables [].TAB, but that's a less common
1529 case than module names in list comprehensions, for example.
1535 case than module names in list comprehensions, for example.
1530 Thanks to a report by Andrea Riciputi.
1536 Thanks to a report by Andrea Riciputi.
1531
1537
1532 2004-09-09 Fernando Perez <fperez@colorado.edu>
1538 2004-09-09 Fernando Perez <fperez@colorado.edu>
1533
1539
1534 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1540 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1535 blocking problems in win32 and osx. Fix by John.
1541 blocking problems in win32 and osx. Fix by John.
1536
1542
1537 2004-09-08 Fernando Perez <fperez@colorado.edu>
1543 2004-09-08 Fernando Perez <fperez@colorado.edu>
1538
1544
1539 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1545 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1540 for Win32 and OSX. Fix by John Hunter.
1546 for Win32 and OSX. Fix by John Hunter.
1541
1547
1542 2004-08-30 *** Released version 0.6.3
1548 2004-08-30 *** Released version 0.6.3
1543
1549
1544 2004-08-30 Fernando Perez <fperez@colorado.edu>
1550 2004-08-30 Fernando Perez <fperez@colorado.edu>
1545
1551
1546 * setup.py (isfile): Add manpages to list of dependent files to be
1552 * setup.py (isfile): Add manpages to list of dependent files to be
1547 updated.
1553 updated.
1548
1554
1549 2004-08-27 Fernando Perez <fperez@colorado.edu>
1555 2004-08-27 Fernando Perez <fperez@colorado.edu>
1550
1556
1551 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1557 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1552 for now. They don't really work with standalone WX/GTK code
1558 for now. They don't really work with standalone WX/GTK code
1553 (though matplotlib IS working fine with both of those backends).
1559 (though matplotlib IS working fine with both of those backends).
1554 This will neeed much more testing. I disabled most things with
1560 This will neeed much more testing. I disabled most things with
1555 comments, so turning it back on later should be pretty easy.
1561 comments, so turning it back on later should be pretty easy.
1556
1562
1557 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1563 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1558 autocalling of expressions like r'foo', by modifying the line
1564 autocalling of expressions like r'foo', by modifying the line
1559 split regexp. Closes
1565 split regexp. Closes
1560 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1566 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1561 Riley <ipythonbugs-AT-sabi.net>.
1567 Riley <ipythonbugs-AT-sabi.net>.
1562 (InteractiveShell.mainloop): honor --nobanner with banner
1568 (InteractiveShell.mainloop): honor --nobanner with banner
1563 extensions.
1569 extensions.
1564
1570
1565 * IPython/Shell.py: Significant refactoring of all classes, so
1571 * IPython/Shell.py: Significant refactoring of all classes, so
1566 that we can really support ALL matplotlib backends and threading
1572 that we can really support ALL matplotlib backends and threading
1567 models (John spotted a bug with Tk which required this). Now we
1573 models (John spotted a bug with Tk which required this). Now we
1568 should support single-threaded, WX-threads and GTK-threads, both
1574 should support single-threaded, WX-threads and GTK-threads, both
1569 for generic code and for matplotlib.
1575 for generic code and for matplotlib.
1570
1576
1571 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1577 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1572 -pylab, to simplify things for users. Will also remove the pylab
1578 -pylab, to simplify things for users. Will also remove the pylab
1573 profile, since now all of matplotlib configuration is directly
1579 profile, since now all of matplotlib configuration is directly
1574 handled here. This also reduces startup time.
1580 handled here. This also reduces startup time.
1575
1581
1576 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1582 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1577 shell wasn't being correctly called. Also in IPShellWX.
1583 shell wasn't being correctly called. Also in IPShellWX.
1578
1584
1579 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1585 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1580 fine-tune banner.
1586 fine-tune banner.
1581
1587
1582 * IPython/numutils.py (spike): Deprecate these spike functions,
1588 * IPython/numutils.py (spike): Deprecate these spike functions,
1583 delete (long deprecated) gnuplot_exec handler.
1589 delete (long deprecated) gnuplot_exec handler.
1584
1590
1585 2004-08-26 Fernando Perez <fperez@colorado.edu>
1591 2004-08-26 Fernando Perez <fperez@colorado.edu>
1586
1592
1587 * ipython.1: Update for threading options, plus some others which
1593 * ipython.1: Update for threading options, plus some others which
1588 were missing.
1594 were missing.
1589
1595
1590 * IPython/ipmaker.py (__call__): Added -wthread option for
1596 * IPython/ipmaker.py (__call__): Added -wthread option for
1591 wxpython thread handling. Make sure threading options are only
1597 wxpython thread handling. Make sure threading options are only
1592 valid at the command line.
1598 valid at the command line.
1593
1599
1594 * scripts/ipython: moved shell selection into a factory function
1600 * scripts/ipython: moved shell selection into a factory function
1595 in Shell.py, to keep the starter script to a minimum.
1601 in Shell.py, to keep the starter script to a minimum.
1596
1602
1597 2004-08-25 Fernando Perez <fperez@colorado.edu>
1603 2004-08-25 Fernando Perez <fperez@colorado.edu>
1598
1604
1599 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1605 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1600 John. Along with some recent changes he made to matplotlib, the
1606 John. Along with some recent changes he made to matplotlib, the
1601 next versions of both systems should work very well together.
1607 next versions of both systems should work very well together.
1602
1608
1603 2004-08-24 Fernando Perez <fperez@colorado.edu>
1609 2004-08-24 Fernando Perez <fperez@colorado.edu>
1604
1610
1605 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1611 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1606 tried to switch the profiling to using hotshot, but I'm getting
1612 tried to switch the profiling to using hotshot, but I'm getting
1607 strange errors from prof.runctx() there. I may be misreading the
1613 strange errors from prof.runctx() there. I may be misreading the
1608 docs, but it looks weird. For now the profiling code will
1614 docs, but it looks weird. For now the profiling code will
1609 continue to use the standard profiler.
1615 continue to use the standard profiler.
1610
1616
1611 2004-08-23 Fernando Perez <fperez@colorado.edu>
1617 2004-08-23 Fernando Perez <fperez@colorado.edu>
1612
1618
1613 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1619 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1614 threaded shell, by John Hunter. It's not quite ready yet, but
1620 threaded shell, by John Hunter. It's not quite ready yet, but
1615 close.
1621 close.
1616
1622
1617 2004-08-22 Fernando Perez <fperez@colorado.edu>
1623 2004-08-22 Fernando Perez <fperez@colorado.edu>
1618
1624
1619 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1625 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1620 in Magic and ultraTB.
1626 in Magic and ultraTB.
1621
1627
1622 * ipython.1: document threading options in manpage.
1628 * ipython.1: document threading options in manpage.
1623
1629
1624 * scripts/ipython: Changed name of -thread option to -gthread,
1630 * scripts/ipython: Changed name of -thread option to -gthread,
1625 since this is GTK specific. I want to leave the door open for a
1631 since this is GTK specific. I want to leave the door open for a
1626 -wthread option for WX, which will most likely be necessary. This
1632 -wthread option for WX, which will most likely be necessary. This
1627 change affects usage and ipmaker as well.
1633 change affects usage and ipmaker as well.
1628
1634
1629 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1635 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1630 handle the matplotlib shell issues. Code by John Hunter
1636 handle the matplotlib shell issues. Code by John Hunter
1631 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1637 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1632 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1638 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1633 broken (and disabled for end users) for now, but it puts the
1639 broken (and disabled for end users) for now, but it puts the
1634 infrastructure in place.
1640 infrastructure in place.
1635
1641
1636 2004-08-21 Fernando Perez <fperez@colorado.edu>
1642 2004-08-21 Fernando Perez <fperez@colorado.edu>
1637
1643
1638 * ipythonrc-pylab: Add matplotlib support.
1644 * ipythonrc-pylab: Add matplotlib support.
1639
1645
1640 * matplotlib_config.py: new files for matplotlib support, part of
1646 * matplotlib_config.py: new files for matplotlib support, part of
1641 the pylab profile.
1647 the pylab profile.
1642
1648
1643 * IPython/usage.py (__doc__): documented the threading options.
1649 * IPython/usage.py (__doc__): documented the threading options.
1644
1650
1645 2004-08-20 Fernando Perez <fperez@colorado.edu>
1651 2004-08-20 Fernando Perez <fperez@colorado.edu>
1646
1652
1647 * ipython: Modified the main calling routine to handle the -thread
1653 * ipython: Modified the main calling routine to handle the -thread
1648 and -mpthread options. This needs to be done as a top-level hack,
1654 and -mpthread options. This needs to be done as a top-level hack,
1649 because it determines which class to instantiate for IPython
1655 because it determines which class to instantiate for IPython
1650 itself.
1656 itself.
1651
1657
1652 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1658 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1653 classes to support multithreaded GTK operation without blocking,
1659 classes to support multithreaded GTK operation without blocking,
1654 and matplotlib with all backends. This is a lot of still very
1660 and matplotlib with all backends. This is a lot of still very
1655 experimental code, and threads are tricky. So it may still have a
1661 experimental code, and threads are tricky. So it may still have a
1656 few rough edges... This code owes a lot to
1662 few rough edges... This code owes a lot to
1657 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1663 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1658 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1664 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1659 to John Hunter for all the matplotlib work.
1665 to John Hunter for all the matplotlib work.
1660
1666
1661 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1667 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1662 options for gtk thread and matplotlib support.
1668 options for gtk thread and matplotlib support.
1663
1669
1664 2004-08-16 Fernando Perez <fperez@colorado.edu>
1670 2004-08-16 Fernando Perez <fperez@colorado.edu>
1665
1671
1666 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1672 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1667 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1673 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1668 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1674 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1669
1675
1670 2004-08-11 Fernando Perez <fperez@colorado.edu>
1676 2004-08-11 Fernando Perez <fperez@colorado.edu>
1671
1677
1672 * setup.py (isfile): Fix build so documentation gets updated for
1678 * setup.py (isfile): Fix build so documentation gets updated for
1673 rpms (it was only done for .tgz builds).
1679 rpms (it was only done for .tgz builds).
1674
1680
1675 2004-08-10 Fernando Perez <fperez@colorado.edu>
1681 2004-08-10 Fernando Perez <fperez@colorado.edu>
1676
1682
1677 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1683 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1678
1684
1679 * iplib.py : Silence syntax error exceptions in tab-completion.
1685 * iplib.py : Silence syntax error exceptions in tab-completion.
1680
1686
1681 2004-08-05 Fernando Perez <fperez@colorado.edu>
1687 2004-08-05 Fernando Perez <fperez@colorado.edu>
1682
1688
1683 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1689 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1684 'color off' mark for continuation prompts. This was causing long
1690 'color off' mark for continuation prompts. This was causing long
1685 continuation lines to mis-wrap.
1691 continuation lines to mis-wrap.
1686
1692
1687 2004-08-01 Fernando Perez <fperez@colorado.edu>
1693 2004-08-01 Fernando Perez <fperez@colorado.edu>
1688
1694
1689 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1695 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1690 for building ipython to be a parameter. All this is necessary
1696 for building ipython to be a parameter. All this is necessary
1691 right now to have a multithreaded version, but this insane
1697 right now to have a multithreaded version, but this insane
1692 non-design will be cleaned up soon. For now, it's a hack that
1698 non-design will be cleaned up soon. For now, it's a hack that
1693 works.
1699 works.
1694
1700
1695 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1701 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1696 args in various places. No bugs so far, but it's a dangerous
1702 args in various places. No bugs so far, but it's a dangerous
1697 practice.
1703 practice.
1698
1704
1699 2004-07-31 Fernando Perez <fperez@colorado.edu>
1705 2004-07-31 Fernando Perez <fperez@colorado.edu>
1700
1706
1701 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1707 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1702 fix completion of files with dots in their names under most
1708 fix completion of files with dots in their names under most
1703 profiles (pysh was OK because the completion order is different).
1709 profiles (pysh was OK because the completion order is different).
1704
1710
1705 2004-07-27 Fernando Perez <fperez@colorado.edu>
1711 2004-07-27 Fernando Perez <fperez@colorado.edu>
1706
1712
1707 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1713 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1708 keywords manually, b/c the one in keyword.py was removed in python
1714 keywords manually, b/c the one in keyword.py was removed in python
1709 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1715 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1710 This is NOT a bug under python 2.3 and earlier.
1716 This is NOT a bug under python 2.3 and earlier.
1711
1717
1712 2004-07-26 Fernando Perez <fperez@colorado.edu>
1718 2004-07-26 Fernando Perez <fperez@colorado.edu>
1713
1719
1714 * IPython/ultraTB.py (VerboseTB.text): Add another
1720 * IPython/ultraTB.py (VerboseTB.text): Add another
1715 linecache.checkcache() call to try to prevent inspect.py from
1721 linecache.checkcache() call to try to prevent inspect.py from
1716 crashing under python 2.3. I think this fixes
1722 crashing under python 2.3. I think this fixes
1717 http://www.scipy.net/roundup/ipython/issue17.
1723 http://www.scipy.net/roundup/ipython/issue17.
1718
1724
1719 2004-07-26 *** Released version 0.6.2
1725 2004-07-26 *** Released version 0.6.2
1720
1726
1721 2004-07-26 Fernando Perez <fperez@colorado.edu>
1727 2004-07-26 Fernando Perez <fperez@colorado.edu>
1722
1728
1723 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1729 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1724 fail for any number.
1730 fail for any number.
1725 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1731 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1726 empty bookmarks.
1732 empty bookmarks.
1727
1733
1728 2004-07-26 *** Released version 0.6.1
1734 2004-07-26 *** Released version 0.6.1
1729
1735
1730 2004-07-26 Fernando Perez <fperez@colorado.edu>
1736 2004-07-26 Fernando Perez <fperez@colorado.edu>
1731
1737
1732 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1738 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1733
1739
1734 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1740 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1735 escaping '()[]{}' in filenames.
1741 escaping '()[]{}' in filenames.
1736
1742
1737 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1743 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1738 Python 2.2 users who lack a proper shlex.split.
1744 Python 2.2 users who lack a proper shlex.split.
1739
1745
1740 2004-07-19 Fernando Perez <fperez@colorado.edu>
1746 2004-07-19 Fernando Perez <fperez@colorado.edu>
1741
1747
1742 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1748 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1743 for reading readline's init file. I follow the normal chain:
1749 for reading readline's init file. I follow the normal chain:
1744 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1750 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1745 report by Mike Heeter. This closes
1751 report by Mike Heeter. This closes
1746 http://www.scipy.net/roundup/ipython/issue16.
1752 http://www.scipy.net/roundup/ipython/issue16.
1747
1753
1748 2004-07-18 Fernando Perez <fperez@colorado.edu>
1754 2004-07-18 Fernando Perez <fperez@colorado.edu>
1749
1755
1750 * IPython/iplib.py (__init__): Add better handling of '\' under
1756 * IPython/iplib.py (__init__): Add better handling of '\' under
1751 Win32 for filenames. After a patch by Ville.
1757 Win32 for filenames. After a patch by Ville.
1752
1758
1753 2004-07-17 Fernando Perez <fperez@colorado.edu>
1759 2004-07-17 Fernando Perez <fperez@colorado.edu>
1754
1760
1755 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1761 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1756 autocalling would be triggered for 'foo is bar' if foo is
1762 autocalling would be triggered for 'foo is bar' if foo is
1757 callable. I also cleaned up the autocall detection code to use a
1763 callable. I also cleaned up the autocall detection code to use a
1758 regexp, which is faster. Bug reported by Alexander Schmolck.
1764 regexp, which is faster. Bug reported by Alexander Schmolck.
1759
1765
1760 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1766 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1761 '?' in them would confuse the help system. Reported by Alex
1767 '?' in them would confuse the help system. Reported by Alex
1762 Schmolck.
1768 Schmolck.
1763
1769
1764 2004-07-16 Fernando Perez <fperez@colorado.edu>
1770 2004-07-16 Fernando Perez <fperez@colorado.edu>
1765
1771
1766 * IPython/GnuplotInteractive.py (__all__): added plot2.
1772 * IPython/GnuplotInteractive.py (__all__): added plot2.
1767
1773
1768 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1774 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1769 plotting dictionaries, lists or tuples of 1d arrays.
1775 plotting dictionaries, lists or tuples of 1d arrays.
1770
1776
1771 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1777 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1772 optimizations.
1778 optimizations.
1773
1779
1774 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1780 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1775 the information which was there from Janko's original IPP code:
1781 the information which was there from Janko's original IPP code:
1776
1782
1777 03.05.99 20:53 porto.ifm.uni-kiel.de
1783 03.05.99 20:53 porto.ifm.uni-kiel.de
1778 --Started changelog.
1784 --Started changelog.
1779 --make clear do what it say it does
1785 --make clear do what it say it does
1780 --added pretty output of lines from inputcache
1786 --added pretty output of lines from inputcache
1781 --Made Logger a mixin class, simplifies handling of switches
1787 --Made Logger a mixin class, simplifies handling of switches
1782 --Added own completer class. .string<TAB> expands to last history
1788 --Added own completer class. .string<TAB> expands to last history
1783 line which starts with string. The new expansion is also present
1789 line which starts with string. The new expansion is also present
1784 with Ctrl-r from the readline library. But this shows, who this
1790 with Ctrl-r from the readline library. But this shows, who this
1785 can be done for other cases.
1791 can be done for other cases.
1786 --Added convention that all shell functions should accept a
1792 --Added convention that all shell functions should accept a
1787 parameter_string This opens the door for different behaviour for
1793 parameter_string This opens the door for different behaviour for
1788 each function. @cd is a good example of this.
1794 each function. @cd is a good example of this.
1789
1795
1790 04.05.99 12:12 porto.ifm.uni-kiel.de
1796 04.05.99 12:12 porto.ifm.uni-kiel.de
1791 --added logfile rotation
1797 --added logfile rotation
1792 --added new mainloop method which freezes first the namespace
1798 --added new mainloop method which freezes first the namespace
1793
1799
1794 07.05.99 21:24 porto.ifm.uni-kiel.de
1800 07.05.99 21:24 porto.ifm.uni-kiel.de
1795 --added the docreader classes. Now there is a help system.
1801 --added the docreader classes. Now there is a help system.
1796 -This is only a first try. Currently it's not easy to put new
1802 -This is only a first try. Currently it's not easy to put new
1797 stuff in the indices. But this is the way to go. Info would be
1803 stuff in the indices. But this is the way to go. Info would be
1798 better, but HTML is every where and not everybody has an info
1804 better, but HTML is every where and not everybody has an info
1799 system installed and it's not so easy to change html-docs to info.
1805 system installed and it's not so easy to change html-docs to info.
1800 --added global logfile option
1806 --added global logfile option
1801 --there is now a hook for object inspection method pinfo needs to
1807 --there is now a hook for object inspection method pinfo needs to
1802 be provided for this. Can be reached by two '??'.
1808 be provided for this. Can be reached by two '??'.
1803
1809
1804 08.05.99 20:51 porto.ifm.uni-kiel.de
1810 08.05.99 20:51 porto.ifm.uni-kiel.de
1805 --added a README
1811 --added a README
1806 --bug in rc file. Something has changed so functions in the rc
1812 --bug in rc file. Something has changed so functions in the rc
1807 file need to reference the shell and not self. Not clear if it's a
1813 file need to reference the shell and not self. Not clear if it's a
1808 bug or feature.
1814 bug or feature.
1809 --changed rc file for new behavior
1815 --changed rc file for new behavior
1810
1816
1811 2004-07-15 Fernando Perez <fperez@colorado.edu>
1817 2004-07-15 Fernando Perez <fperez@colorado.edu>
1812
1818
1813 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1819 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1814 cache was falling out of sync in bizarre manners when multi-line
1820 cache was falling out of sync in bizarre manners when multi-line
1815 input was present. Minor optimizations and cleanup.
1821 input was present. Minor optimizations and cleanup.
1816
1822
1817 (Logger): Remove old Changelog info for cleanup. This is the
1823 (Logger): Remove old Changelog info for cleanup. This is the
1818 information which was there from Janko's original code:
1824 information which was there from Janko's original code:
1819
1825
1820 Changes to Logger: - made the default log filename a parameter
1826 Changes to Logger: - made the default log filename a parameter
1821
1827
1822 - put a check for lines beginning with !@? in log(). Needed
1828 - put a check for lines beginning with !@? in log(). Needed
1823 (even if the handlers properly log their lines) for mid-session
1829 (even if the handlers properly log their lines) for mid-session
1824 logging activation to work properly. Without this, lines logged
1830 logging activation to work properly. Without this, lines logged
1825 in mid session, which get read from the cache, would end up
1831 in mid session, which get read from the cache, would end up
1826 'bare' (with !@? in the open) in the log. Now they are caught
1832 'bare' (with !@? in the open) in the log. Now they are caught
1827 and prepended with a #.
1833 and prepended with a #.
1828
1834
1829 * IPython/iplib.py (InteractiveShell.init_readline): added check
1835 * IPython/iplib.py (InteractiveShell.init_readline): added check
1830 in case MagicCompleter fails to be defined, so we don't crash.
1836 in case MagicCompleter fails to be defined, so we don't crash.
1831
1837
1832 2004-07-13 Fernando Perez <fperez@colorado.edu>
1838 2004-07-13 Fernando Perez <fperez@colorado.edu>
1833
1839
1834 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1840 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1835 of EPS if the requested filename ends in '.eps'.
1841 of EPS if the requested filename ends in '.eps'.
1836
1842
1837 2004-07-04 Fernando Perez <fperez@colorado.edu>
1843 2004-07-04 Fernando Perez <fperez@colorado.edu>
1838
1844
1839 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1845 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1840 escaping of quotes when calling the shell.
1846 escaping of quotes when calling the shell.
1841
1847
1842 2004-07-02 Fernando Perez <fperez@colorado.edu>
1848 2004-07-02 Fernando Perez <fperez@colorado.edu>
1843
1849
1844 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1850 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1845 gettext not working because we were clobbering '_'. Fixes
1851 gettext not working because we were clobbering '_'. Fixes
1846 http://www.scipy.net/roundup/ipython/issue6.
1852 http://www.scipy.net/roundup/ipython/issue6.
1847
1853
1848 2004-07-01 Fernando Perez <fperez@colorado.edu>
1854 2004-07-01 Fernando Perez <fperez@colorado.edu>
1849
1855
1850 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1856 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1851 into @cd. Patch by Ville.
1857 into @cd. Patch by Ville.
1852
1858
1853 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1859 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1854 new function to store things after ipmaker runs. Patch by Ville.
1860 new function to store things after ipmaker runs. Patch by Ville.
1855 Eventually this will go away once ipmaker is removed and the class
1861 Eventually this will go away once ipmaker is removed and the class
1856 gets cleaned up, but for now it's ok. Key functionality here is
1862 gets cleaned up, but for now it's ok. Key functionality here is
1857 the addition of the persistent storage mechanism, a dict for
1863 the addition of the persistent storage mechanism, a dict for
1858 keeping data across sessions (for now just bookmarks, but more can
1864 keeping data across sessions (for now just bookmarks, but more can
1859 be implemented later).
1865 be implemented later).
1860
1866
1861 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1867 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1862 persistent across sections. Patch by Ville, I modified it
1868 persistent across sections. Patch by Ville, I modified it
1863 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1869 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1864 added a '-l' option to list all bookmarks.
1870 added a '-l' option to list all bookmarks.
1865
1871
1866 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1872 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1867 center for cleanup. Registered with atexit.register(). I moved
1873 center for cleanup. Registered with atexit.register(). I moved
1868 here the old exit_cleanup(). After a patch by Ville.
1874 here the old exit_cleanup(). After a patch by Ville.
1869
1875
1870 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1876 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1871 characters in the hacked shlex_split for python 2.2.
1877 characters in the hacked shlex_split for python 2.2.
1872
1878
1873 * IPython/iplib.py (file_matches): more fixes to filenames with
1879 * IPython/iplib.py (file_matches): more fixes to filenames with
1874 whitespace in them. It's not perfect, but limitations in python's
1880 whitespace in them. It's not perfect, but limitations in python's
1875 readline make it impossible to go further.
1881 readline make it impossible to go further.
1876
1882
1877 2004-06-29 Fernando Perez <fperez@colorado.edu>
1883 2004-06-29 Fernando Perez <fperez@colorado.edu>
1878
1884
1879 * IPython/iplib.py (file_matches): escape whitespace correctly in
1885 * IPython/iplib.py (file_matches): escape whitespace correctly in
1880 filename completions. Bug reported by Ville.
1886 filename completions. Bug reported by Ville.
1881
1887
1882 2004-06-28 Fernando Perez <fperez@colorado.edu>
1888 2004-06-28 Fernando Perez <fperez@colorado.edu>
1883
1889
1884 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1890 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1885 the history file will be called 'history-PROFNAME' (or just
1891 the history file will be called 'history-PROFNAME' (or just
1886 'history' if no profile is loaded). I was getting annoyed at
1892 'history' if no profile is loaded). I was getting annoyed at
1887 getting my Numerical work history clobbered by pysh sessions.
1893 getting my Numerical work history clobbered by pysh sessions.
1888
1894
1889 * IPython/iplib.py (InteractiveShell.__init__): Internal
1895 * IPython/iplib.py (InteractiveShell.__init__): Internal
1890 getoutputerror() function so that we can honor the system_verbose
1896 getoutputerror() function so that we can honor the system_verbose
1891 flag for _all_ system calls. I also added escaping of #
1897 flag for _all_ system calls. I also added escaping of #
1892 characters here to avoid confusing Itpl.
1898 characters here to avoid confusing Itpl.
1893
1899
1894 * IPython/Magic.py (shlex_split): removed call to shell in
1900 * IPython/Magic.py (shlex_split): removed call to shell in
1895 parse_options and replaced it with shlex.split(). The annoying
1901 parse_options and replaced it with shlex.split(). The annoying
1896 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1902 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1897 to backport it from 2.3, with several frail hacks (the shlex
1903 to backport it from 2.3, with several frail hacks (the shlex
1898 module is rather limited in 2.2). Thanks to a suggestion by Ville
1904 module is rather limited in 2.2). Thanks to a suggestion by Ville
1899 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1905 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1900 problem.
1906 problem.
1901
1907
1902 (Magic.magic_system_verbose): new toggle to print the actual
1908 (Magic.magic_system_verbose): new toggle to print the actual
1903 system calls made by ipython. Mainly for debugging purposes.
1909 system calls made by ipython. Mainly for debugging purposes.
1904
1910
1905 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1911 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1906 doesn't support persistence. Reported (and fix suggested) by
1912 doesn't support persistence. Reported (and fix suggested) by
1907 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1913 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1908
1914
1909 2004-06-26 Fernando Perez <fperez@colorado.edu>
1915 2004-06-26 Fernando Perez <fperez@colorado.edu>
1910
1916
1911 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1917 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1912 continue prompts.
1918 continue prompts.
1913
1919
1914 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1920 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1915 function (basically a big docstring) and a few more things here to
1921 function (basically a big docstring) and a few more things here to
1916 speedup startup. pysh.py is now very lightweight. We want because
1922 speedup startup. pysh.py is now very lightweight. We want because
1917 it gets execfile'd, while InterpreterExec gets imported, so
1923 it gets execfile'd, while InterpreterExec gets imported, so
1918 byte-compilation saves time.
1924 byte-compilation saves time.
1919
1925
1920 2004-06-25 Fernando Perez <fperez@colorado.edu>
1926 2004-06-25 Fernando Perez <fperez@colorado.edu>
1921
1927
1922 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1928 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1923 -NUM', which was recently broken.
1929 -NUM', which was recently broken.
1924
1930
1925 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1931 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1926 in multi-line input (but not !!, which doesn't make sense there).
1932 in multi-line input (but not !!, which doesn't make sense there).
1927
1933
1928 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1934 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1929 It's just too useful, and people can turn it off in the less
1935 It's just too useful, and people can turn it off in the less
1930 common cases where it's a problem.
1936 common cases where it's a problem.
1931
1937
1932 2004-06-24 Fernando Perez <fperez@colorado.edu>
1938 2004-06-24 Fernando Perez <fperez@colorado.edu>
1933
1939
1934 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1940 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1935 special syntaxes (like alias calling) is now allied in multi-line
1941 special syntaxes (like alias calling) is now allied in multi-line
1936 input. This is still _very_ experimental, but it's necessary for
1942 input. This is still _very_ experimental, but it's necessary for
1937 efficient shell usage combining python looping syntax with system
1943 efficient shell usage combining python looping syntax with system
1938 calls. For now it's restricted to aliases, I don't think it
1944 calls. For now it's restricted to aliases, I don't think it
1939 really even makes sense to have this for magics.
1945 really even makes sense to have this for magics.
1940
1946
1941 2004-06-23 Fernando Perez <fperez@colorado.edu>
1947 2004-06-23 Fernando Perez <fperez@colorado.edu>
1942
1948
1943 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1949 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1944 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1950 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1945
1951
1946 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1952 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1947 extensions under Windows (after code sent by Gary Bishop). The
1953 extensions under Windows (after code sent by Gary Bishop). The
1948 extensions considered 'executable' are stored in IPython's rc
1954 extensions considered 'executable' are stored in IPython's rc
1949 structure as win_exec_ext.
1955 structure as win_exec_ext.
1950
1956
1951 * IPython/genutils.py (shell): new function, like system() but
1957 * IPython/genutils.py (shell): new function, like system() but
1952 without return value. Very useful for interactive shell work.
1958 without return value. Very useful for interactive shell work.
1953
1959
1954 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1960 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1955 delete aliases.
1961 delete aliases.
1956
1962
1957 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1963 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1958 sure that the alias table doesn't contain python keywords.
1964 sure that the alias table doesn't contain python keywords.
1959
1965
1960 2004-06-21 Fernando Perez <fperez@colorado.edu>
1966 2004-06-21 Fernando Perez <fperez@colorado.edu>
1961
1967
1962 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1968 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1963 non-existent items are found in $PATH. Reported by Thorsten.
1969 non-existent items are found in $PATH. Reported by Thorsten.
1964
1970
1965 2004-06-20 Fernando Perez <fperez@colorado.edu>
1971 2004-06-20 Fernando Perez <fperez@colorado.edu>
1966
1972
1967 * IPython/iplib.py (complete): modified the completer so that the
1973 * IPython/iplib.py (complete): modified the completer so that the
1968 order of priorities can be easily changed at runtime.
1974 order of priorities can be easily changed at runtime.
1969
1975
1970 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1976 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1971 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1977 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1972
1978
1973 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1979 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1974 expand Python variables prepended with $ in all system calls. The
1980 expand Python variables prepended with $ in all system calls. The
1975 same was done to InteractiveShell.handle_shell_escape. Now all
1981 same was done to InteractiveShell.handle_shell_escape. Now all
1976 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1982 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1977 expansion of python variables and expressions according to the
1983 expansion of python variables and expressions according to the
1978 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1984 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1979
1985
1980 Though PEP-215 has been rejected, a similar (but simpler) one
1986 Though PEP-215 has been rejected, a similar (but simpler) one
1981 seems like it will go into Python 2.4, PEP-292 -
1987 seems like it will go into Python 2.4, PEP-292 -
1982 http://www.python.org/peps/pep-0292.html.
1988 http://www.python.org/peps/pep-0292.html.
1983
1989
1984 I'll keep the full syntax of PEP-215, since IPython has since the
1990 I'll keep the full syntax of PEP-215, since IPython has since the
1985 start used Ka-Ping Yee's reference implementation discussed there
1991 start used Ka-Ping Yee's reference implementation discussed there
1986 (Itpl), and I actually like the powerful semantics it offers.
1992 (Itpl), and I actually like the powerful semantics it offers.
1987
1993
1988 In order to access normal shell variables, the $ has to be escaped
1994 In order to access normal shell variables, the $ has to be escaped
1989 via an extra $. For example:
1995 via an extra $. For example:
1990
1996
1991 In [7]: PATH='a python variable'
1997 In [7]: PATH='a python variable'
1992
1998
1993 In [8]: !echo $PATH
1999 In [8]: !echo $PATH
1994 a python variable
2000 a python variable
1995
2001
1996 In [9]: !echo $$PATH
2002 In [9]: !echo $$PATH
1997 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2003 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1998
2004
1999 (Magic.parse_options): escape $ so the shell doesn't evaluate
2005 (Magic.parse_options): escape $ so the shell doesn't evaluate
2000 things prematurely.
2006 things prematurely.
2001
2007
2002 * IPython/iplib.py (InteractiveShell.call_alias): added the
2008 * IPython/iplib.py (InteractiveShell.call_alias): added the
2003 ability for aliases to expand python variables via $.
2009 ability for aliases to expand python variables via $.
2004
2010
2005 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2011 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2006 system, now there's a @rehash/@rehashx pair of magics. These work
2012 system, now there's a @rehash/@rehashx pair of magics. These work
2007 like the csh rehash command, and can be invoked at any time. They
2013 like the csh rehash command, and can be invoked at any time. They
2008 build a table of aliases to everything in the user's $PATH
2014 build a table of aliases to everything in the user's $PATH
2009 (@rehash uses everything, @rehashx is slower but only adds
2015 (@rehash uses everything, @rehashx is slower but only adds
2010 executable files). With this, the pysh.py-based shell profile can
2016 executable files). With this, the pysh.py-based shell profile can
2011 now simply call rehash upon startup, and full access to all
2017 now simply call rehash upon startup, and full access to all
2012 programs in the user's path is obtained.
2018 programs in the user's path is obtained.
2013
2019
2014 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2020 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2015 functionality is now fully in place. I removed the old dynamic
2021 functionality is now fully in place. I removed the old dynamic
2016 code generation based approach, in favor of a much lighter one
2022 code generation based approach, in favor of a much lighter one
2017 based on a simple dict. The advantage is that this allows me to
2023 based on a simple dict. The advantage is that this allows me to
2018 now have thousands of aliases with negligible cost (unthinkable
2024 now have thousands of aliases with negligible cost (unthinkable
2019 with the old system).
2025 with the old system).
2020
2026
2021 2004-06-19 Fernando Perez <fperez@colorado.edu>
2027 2004-06-19 Fernando Perez <fperez@colorado.edu>
2022
2028
2023 * IPython/iplib.py (__init__): extended MagicCompleter class to
2029 * IPython/iplib.py (__init__): extended MagicCompleter class to
2024 also complete (last in priority) on user aliases.
2030 also complete (last in priority) on user aliases.
2025
2031
2026 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2032 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2027 call to eval.
2033 call to eval.
2028 (ItplNS.__init__): Added a new class which functions like Itpl,
2034 (ItplNS.__init__): Added a new class which functions like Itpl,
2029 but allows configuring the namespace for the evaluation to occur
2035 but allows configuring the namespace for the evaluation to occur
2030 in.
2036 in.
2031
2037
2032 2004-06-18 Fernando Perez <fperez@colorado.edu>
2038 2004-06-18 Fernando Perez <fperez@colorado.edu>
2033
2039
2034 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2040 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2035 better message when 'exit' or 'quit' are typed (a common newbie
2041 better message when 'exit' or 'quit' are typed (a common newbie
2036 confusion).
2042 confusion).
2037
2043
2038 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2044 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2039 check for Windows users.
2045 check for Windows users.
2040
2046
2041 * IPython/iplib.py (InteractiveShell.user_setup): removed
2047 * IPython/iplib.py (InteractiveShell.user_setup): removed
2042 disabling of colors for Windows. I'll test at runtime and issue a
2048 disabling of colors for Windows. I'll test at runtime and issue a
2043 warning if Gary's readline isn't found, as to nudge users to
2049 warning if Gary's readline isn't found, as to nudge users to
2044 download it.
2050 download it.
2045
2051
2046 2004-06-16 Fernando Perez <fperez@colorado.edu>
2052 2004-06-16 Fernando Perez <fperez@colorado.edu>
2047
2053
2048 * IPython/genutils.py (Stream.__init__): changed to print errors
2054 * IPython/genutils.py (Stream.__init__): changed to print errors
2049 to sys.stderr. I had a circular dependency here. Now it's
2055 to sys.stderr. I had a circular dependency here. Now it's
2050 possible to run ipython as IDLE's shell (consider this pre-alpha,
2056 possible to run ipython as IDLE's shell (consider this pre-alpha,
2051 since true stdout things end up in the starting terminal instead
2057 since true stdout things end up in the starting terminal instead
2052 of IDLE's out).
2058 of IDLE's out).
2053
2059
2054 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2060 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2055 users who haven't # updated their prompt_in2 definitions. Remove
2061 users who haven't # updated their prompt_in2 definitions. Remove
2056 eventually.
2062 eventually.
2057 (multiple_replace): added credit to original ASPN recipe.
2063 (multiple_replace): added credit to original ASPN recipe.
2058
2064
2059 2004-06-15 Fernando Perez <fperez@colorado.edu>
2065 2004-06-15 Fernando Perez <fperez@colorado.edu>
2060
2066
2061 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2067 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2062 list of auto-defined aliases.
2068 list of auto-defined aliases.
2063
2069
2064 2004-06-13 Fernando Perez <fperez@colorado.edu>
2070 2004-06-13 Fernando Perez <fperez@colorado.edu>
2065
2071
2066 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2072 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2067 install was really requested (so setup.py can be used for other
2073 install was really requested (so setup.py can be used for other
2068 things under Windows).
2074 things under Windows).
2069
2075
2070 2004-06-10 Fernando Perez <fperez@colorado.edu>
2076 2004-06-10 Fernando Perez <fperez@colorado.edu>
2071
2077
2072 * IPython/Logger.py (Logger.create_log): Manually remove any old
2078 * IPython/Logger.py (Logger.create_log): Manually remove any old
2073 backup, since os.remove may fail under Windows. Fixes bug
2079 backup, since os.remove may fail under Windows. Fixes bug
2074 reported by Thorsten.
2080 reported by Thorsten.
2075
2081
2076 2004-06-09 Fernando Perez <fperez@colorado.edu>
2082 2004-06-09 Fernando Perez <fperez@colorado.edu>
2077
2083
2078 * examples/example-embed.py: fixed all references to %n (replaced
2084 * examples/example-embed.py: fixed all references to %n (replaced
2079 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2085 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2080 for all examples and the manual as well.
2086 for all examples and the manual as well.
2081
2087
2082 2004-06-08 Fernando Perez <fperez@colorado.edu>
2088 2004-06-08 Fernando Perez <fperez@colorado.edu>
2083
2089
2084 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2090 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2085 alignment and color management. All 3 prompt subsystems now
2091 alignment and color management. All 3 prompt subsystems now
2086 inherit from BasePrompt.
2092 inherit from BasePrompt.
2087
2093
2088 * tools/release: updates for windows installer build and tag rpms
2094 * tools/release: updates for windows installer build and tag rpms
2089 with python version (since paths are fixed).
2095 with python version (since paths are fixed).
2090
2096
2091 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2097 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2092 which will become eventually obsolete. Also fixed the default
2098 which will become eventually obsolete. Also fixed the default
2093 prompt_in2 to use \D, so at least new users start with the correct
2099 prompt_in2 to use \D, so at least new users start with the correct
2094 defaults.
2100 defaults.
2095 WARNING: Users with existing ipythonrc files will need to apply
2101 WARNING: Users with existing ipythonrc files will need to apply
2096 this fix manually!
2102 this fix manually!
2097
2103
2098 * setup.py: make windows installer (.exe). This is finally the
2104 * setup.py: make windows installer (.exe). This is finally the
2099 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2105 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2100 which I hadn't included because it required Python 2.3 (or recent
2106 which I hadn't included because it required Python 2.3 (or recent
2101 distutils).
2107 distutils).
2102
2108
2103 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2109 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2104 usage of new '\D' escape.
2110 usage of new '\D' escape.
2105
2111
2106 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2112 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2107 lacks os.getuid())
2113 lacks os.getuid())
2108 (CachedOutput.set_colors): Added the ability to turn coloring
2114 (CachedOutput.set_colors): Added the ability to turn coloring
2109 on/off with @colors even for manually defined prompt colors. It
2115 on/off with @colors even for manually defined prompt colors. It
2110 uses a nasty global, but it works safely and via the generic color
2116 uses a nasty global, but it works safely and via the generic color
2111 handling mechanism.
2117 handling mechanism.
2112 (Prompt2.__init__): Introduced new escape '\D' for continuation
2118 (Prompt2.__init__): Introduced new escape '\D' for continuation
2113 prompts. It represents the counter ('\#') as dots.
2119 prompts. It represents the counter ('\#') as dots.
2114 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2120 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2115 need to update their ipythonrc files and replace '%n' with '\D' in
2121 need to update their ipythonrc files and replace '%n' with '\D' in
2116 their prompt_in2 settings everywhere. Sorry, but there's
2122 their prompt_in2 settings everywhere. Sorry, but there's
2117 otherwise no clean way to get all prompts to properly align. The
2123 otherwise no clean way to get all prompts to properly align. The
2118 ipythonrc shipped with IPython has been updated.
2124 ipythonrc shipped with IPython has been updated.
2119
2125
2120 2004-06-07 Fernando Perez <fperez@colorado.edu>
2126 2004-06-07 Fernando Perez <fperez@colorado.edu>
2121
2127
2122 * setup.py (isfile): Pass local_icons option to latex2html, so the
2128 * setup.py (isfile): Pass local_icons option to latex2html, so the
2123 resulting HTML file is self-contained. Thanks to
2129 resulting HTML file is self-contained. Thanks to
2124 dryice-AT-liu.com.cn for the tip.
2130 dryice-AT-liu.com.cn for the tip.
2125
2131
2126 * pysh.py: I created a new profile 'shell', which implements a
2132 * pysh.py: I created a new profile 'shell', which implements a
2127 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2133 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2128 system shell, nor will it become one anytime soon. It's mainly
2134 system shell, nor will it become one anytime soon. It's mainly
2129 meant to illustrate the use of the new flexible bash-like prompts.
2135 meant to illustrate the use of the new flexible bash-like prompts.
2130 I guess it could be used by hardy souls for true shell management,
2136 I guess it could be used by hardy souls for true shell management,
2131 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2137 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2132 profile. This uses the InterpreterExec extension provided by
2138 profile. This uses the InterpreterExec extension provided by
2133 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2139 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2134
2140
2135 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2141 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2136 auto-align itself with the length of the previous input prompt
2142 auto-align itself with the length of the previous input prompt
2137 (taking into account the invisible color escapes).
2143 (taking into account the invisible color escapes).
2138 (CachedOutput.__init__): Large restructuring of this class. Now
2144 (CachedOutput.__init__): Large restructuring of this class. Now
2139 all three prompts (primary1, primary2, output) are proper objects,
2145 all three prompts (primary1, primary2, output) are proper objects,
2140 managed by the 'parent' CachedOutput class. The code is still a
2146 managed by the 'parent' CachedOutput class. The code is still a
2141 bit hackish (all prompts share state via a pointer to the cache),
2147 bit hackish (all prompts share state via a pointer to the cache),
2142 but it's overall far cleaner than before.
2148 but it's overall far cleaner than before.
2143
2149
2144 * IPython/genutils.py (getoutputerror): modified to add verbose,
2150 * IPython/genutils.py (getoutputerror): modified to add verbose,
2145 debug and header options. This makes the interface of all getout*
2151 debug and header options. This makes the interface of all getout*
2146 functions uniform.
2152 functions uniform.
2147 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2153 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2148
2154
2149 * IPython/Magic.py (Magic.default_option): added a function to
2155 * IPython/Magic.py (Magic.default_option): added a function to
2150 allow registering default options for any magic command. This
2156 allow registering default options for any magic command. This
2151 makes it easy to have profiles which customize the magics globally
2157 makes it easy to have profiles which customize the magics globally
2152 for a certain use. The values set through this function are
2158 for a certain use. The values set through this function are
2153 picked up by the parse_options() method, which all magics should
2159 picked up by the parse_options() method, which all magics should
2154 use to parse their options.
2160 use to parse their options.
2155
2161
2156 * IPython/genutils.py (warn): modified the warnings framework to
2162 * IPython/genutils.py (warn): modified the warnings framework to
2157 use the Term I/O class. I'm trying to slowly unify all of
2163 use the Term I/O class. I'm trying to slowly unify all of
2158 IPython's I/O operations to pass through Term.
2164 IPython's I/O operations to pass through Term.
2159
2165
2160 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2166 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2161 the secondary prompt to correctly match the length of the primary
2167 the secondary prompt to correctly match the length of the primary
2162 one for any prompt. Now multi-line code will properly line up
2168 one for any prompt. Now multi-line code will properly line up
2163 even for path dependent prompts, such as the new ones available
2169 even for path dependent prompts, such as the new ones available
2164 via the prompt_specials.
2170 via the prompt_specials.
2165
2171
2166 2004-06-06 Fernando Perez <fperez@colorado.edu>
2172 2004-06-06 Fernando Perez <fperez@colorado.edu>
2167
2173
2168 * IPython/Prompts.py (prompt_specials): Added the ability to have
2174 * IPython/Prompts.py (prompt_specials): Added the ability to have
2169 bash-like special sequences in the prompts, which get
2175 bash-like special sequences in the prompts, which get
2170 automatically expanded. Things like hostname, current working
2176 automatically expanded. Things like hostname, current working
2171 directory and username are implemented already, but it's easy to
2177 directory and username are implemented already, but it's easy to
2172 add more in the future. Thanks to a patch by W.J. van der Laan
2178 add more in the future. Thanks to a patch by W.J. van der Laan
2173 <gnufnork-AT-hetdigitalegat.nl>
2179 <gnufnork-AT-hetdigitalegat.nl>
2174 (prompt_specials): Added color support for prompt strings, so
2180 (prompt_specials): Added color support for prompt strings, so
2175 users can define arbitrary color setups for their prompts.
2181 users can define arbitrary color setups for their prompts.
2176
2182
2177 2004-06-05 Fernando Perez <fperez@colorado.edu>
2183 2004-06-05 Fernando Perez <fperez@colorado.edu>
2178
2184
2179 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2185 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2180 code to load Gary Bishop's readline and configure it
2186 code to load Gary Bishop's readline and configure it
2181 automatically. Thanks to Gary for help on this.
2187 automatically. Thanks to Gary for help on this.
2182
2188
2183 2004-06-01 Fernando Perez <fperez@colorado.edu>
2189 2004-06-01 Fernando Perez <fperez@colorado.edu>
2184
2190
2185 * IPython/Logger.py (Logger.create_log): fix bug for logging
2191 * IPython/Logger.py (Logger.create_log): fix bug for logging
2186 with no filename (previous fix was incomplete).
2192 with no filename (previous fix was incomplete).
2187
2193
2188 2004-05-25 Fernando Perez <fperez@colorado.edu>
2194 2004-05-25 Fernando Perez <fperez@colorado.edu>
2189
2195
2190 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2196 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2191 parens would get passed to the shell.
2197 parens would get passed to the shell.
2192
2198
2193 2004-05-20 Fernando Perez <fperez@colorado.edu>
2199 2004-05-20 Fernando Perez <fperez@colorado.edu>
2194
2200
2195 * IPython/Magic.py (Magic.magic_prun): changed default profile
2201 * IPython/Magic.py (Magic.magic_prun): changed default profile
2196 sort order to 'time' (the more common profiling need).
2202 sort order to 'time' (the more common profiling need).
2197
2203
2198 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2204 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2199 so that source code shown is guaranteed in sync with the file on
2205 so that source code shown is guaranteed in sync with the file on
2200 disk (also changed in psource). Similar fix to the one for
2206 disk (also changed in psource). Similar fix to the one for
2201 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2207 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2202 <yann.ledu-AT-noos.fr>.
2208 <yann.ledu-AT-noos.fr>.
2203
2209
2204 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2210 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2205 with a single option would not be correctly parsed. Closes
2211 with a single option would not be correctly parsed. Closes
2206 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2212 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2207 introduced in 0.6.0 (on 2004-05-06).
2213 introduced in 0.6.0 (on 2004-05-06).
2208
2214
2209 2004-05-13 *** Released version 0.6.0
2215 2004-05-13 *** Released version 0.6.0
2210
2216
2211 2004-05-13 Fernando Perez <fperez@colorado.edu>
2217 2004-05-13 Fernando Perez <fperez@colorado.edu>
2212
2218
2213 * debian/: Added debian/ directory to CVS, so that debian support
2219 * debian/: Added debian/ directory to CVS, so that debian support
2214 is publicly accessible. The debian package is maintained by Jack
2220 is publicly accessible. The debian package is maintained by Jack
2215 Moffit <jack-AT-xiph.org>.
2221 Moffit <jack-AT-xiph.org>.
2216
2222
2217 * Documentation: included the notes about an ipython-based system
2223 * Documentation: included the notes about an ipython-based system
2218 shell (the hypothetical 'pysh') into the new_design.pdf document,
2224 shell (the hypothetical 'pysh') into the new_design.pdf document,
2219 so that these ideas get distributed to users along with the
2225 so that these ideas get distributed to users along with the
2220 official documentation.
2226 official documentation.
2221
2227
2222 2004-05-10 Fernando Perez <fperez@colorado.edu>
2228 2004-05-10 Fernando Perez <fperez@colorado.edu>
2223
2229
2224 * IPython/Logger.py (Logger.create_log): fix recently introduced
2230 * IPython/Logger.py (Logger.create_log): fix recently introduced
2225 bug (misindented line) where logstart would fail when not given an
2231 bug (misindented line) where logstart would fail when not given an
2226 explicit filename.
2232 explicit filename.
2227
2233
2228 2004-05-09 Fernando Perez <fperez@colorado.edu>
2234 2004-05-09 Fernando Perez <fperez@colorado.edu>
2229
2235
2230 * IPython/Magic.py (Magic.parse_options): skip system call when
2236 * IPython/Magic.py (Magic.parse_options): skip system call when
2231 there are no options to look for. Faster, cleaner for the common
2237 there are no options to look for. Faster, cleaner for the common
2232 case.
2238 case.
2233
2239
2234 * Documentation: many updates to the manual: describing Windows
2240 * Documentation: many updates to the manual: describing Windows
2235 support better, Gnuplot updates, credits, misc small stuff. Also
2241 support better, Gnuplot updates, credits, misc small stuff. Also
2236 updated the new_design doc a bit.
2242 updated the new_design doc a bit.
2237
2243
2238 2004-05-06 *** Released version 0.6.0.rc1
2244 2004-05-06 *** Released version 0.6.0.rc1
2239
2245
2240 2004-05-06 Fernando Perez <fperez@colorado.edu>
2246 2004-05-06 Fernando Perez <fperez@colorado.edu>
2241
2247
2242 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2248 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2243 operations to use the vastly more efficient list/''.join() method.
2249 operations to use the vastly more efficient list/''.join() method.
2244 (FormattedTB.text): Fix
2250 (FormattedTB.text): Fix
2245 http://www.scipy.net/roundup/ipython/issue12 - exception source
2251 http://www.scipy.net/roundup/ipython/issue12 - exception source
2246 extract not updated after reload. Thanks to Mike Salib
2252 extract not updated after reload. Thanks to Mike Salib
2247 <msalib-AT-mit.edu> for pinning the source of the problem.
2253 <msalib-AT-mit.edu> for pinning the source of the problem.
2248 Fortunately, the solution works inside ipython and doesn't require
2254 Fortunately, the solution works inside ipython and doesn't require
2249 any changes to python proper.
2255 any changes to python proper.
2250
2256
2251 * IPython/Magic.py (Magic.parse_options): Improved to process the
2257 * IPython/Magic.py (Magic.parse_options): Improved to process the
2252 argument list as a true shell would (by actually using the
2258 argument list as a true shell would (by actually using the
2253 underlying system shell). This way, all @magics automatically get
2259 underlying system shell). This way, all @magics automatically get
2254 shell expansion for variables. Thanks to a comment by Alex
2260 shell expansion for variables. Thanks to a comment by Alex
2255 Schmolck.
2261 Schmolck.
2256
2262
2257 2004-04-04 Fernando Perez <fperez@colorado.edu>
2263 2004-04-04 Fernando Perez <fperez@colorado.edu>
2258
2264
2259 * IPython/iplib.py (InteractiveShell.interact): Added a special
2265 * IPython/iplib.py (InteractiveShell.interact): Added a special
2260 trap for a debugger quit exception, which is basically impossible
2266 trap for a debugger quit exception, which is basically impossible
2261 to handle by normal mechanisms, given what pdb does to the stack.
2267 to handle by normal mechanisms, given what pdb does to the stack.
2262 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2268 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2263
2269
2264 2004-04-03 Fernando Perez <fperez@colorado.edu>
2270 2004-04-03 Fernando Perez <fperez@colorado.edu>
2265
2271
2266 * IPython/genutils.py (Term): Standardized the names of the Term
2272 * IPython/genutils.py (Term): Standardized the names of the Term
2267 class streams to cin/cout/cerr, following C++ naming conventions
2273 class streams to cin/cout/cerr, following C++ naming conventions
2268 (I can't use in/out/err because 'in' is not a valid attribute
2274 (I can't use in/out/err because 'in' is not a valid attribute
2269 name).
2275 name).
2270
2276
2271 * IPython/iplib.py (InteractiveShell.interact): don't increment
2277 * IPython/iplib.py (InteractiveShell.interact): don't increment
2272 the prompt if there's no user input. By Daniel 'Dang' Griffith
2278 the prompt if there's no user input. By Daniel 'Dang' Griffith
2273 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2279 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2274 Francois Pinard.
2280 Francois Pinard.
2275
2281
2276 2004-04-02 Fernando Perez <fperez@colorado.edu>
2282 2004-04-02 Fernando Perez <fperez@colorado.edu>
2277
2283
2278 * IPython/genutils.py (Stream.__init__): Modified to survive at
2284 * IPython/genutils.py (Stream.__init__): Modified to survive at
2279 least importing in contexts where stdin/out/err aren't true file
2285 least importing in contexts where stdin/out/err aren't true file
2280 objects, such as PyCrust (they lack fileno() and mode). However,
2286 objects, such as PyCrust (they lack fileno() and mode). However,
2281 the recovery facilities which rely on these things existing will
2287 the recovery facilities which rely on these things existing will
2282 not work.
2288 not work.
2283
2289
2284 2004-04-01 Fernando Perez <fperez@colorado.edu>
2290 2004-04-01 Fernando Perez <fperez@colorado.edu>
2285
2291
2286 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2292 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2287 use the new getoutputerror() function, so it properly
2293 use the new getoutputerror() function, so it properly
2288 distinguishes stdout/err.
2294 distinguishes stdout/err.
2289
2295
2290 * IPython/genutils.py (getoutputerror): added a function to
2296 * IPython/genutils.py (getoutputerror): added a function to
2291 capture separately the standard output and error of a command.
2297 capture separately the standard output and error of a command.
2292 After a comment from dang on the mailing lists. This code is
2298 After a comment from dang on the mailing lists. This code is
2293 basically a modified version of commands.getstatusoutput(), from
2299 basically a modified version of commands.getstatusoutput(), from
2294 the standard library.
2300 the standard library.
2295
2301
2296 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2302 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2297 '!!' as a special syntax (shorthand) to access @sx.
2303 '!!' as a special syntax (shorthand) to access @sx.
2298
2304
2299 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2305 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2300 command and return its output as a list split on '\n'.
2306 command and return its output as a list split on '\n'.
2301
2307
2302 2004-03-31 Fernando Perez <fperez@colorado.edu>
2308 2004-03-31 Fernando Perez <fperez@colorado.edu>
2303
2309
2304 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2310 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2305 method to dictionaries used as FakeModule instances if they lack
2311 method to dictionaries used as FakeModule instances if they lack
2306 it. At least pydoc in python2.3 breaks for runtime-defined
2312 it. At least pydoc in python2.3 breaks for runtime-defined
2307 functions without this hack. At some point I need to _really_
2313 functions without this hack. At some point I need to _really_
2308 understand what FakeModule is doing, because it's a gross hack.
2314 understand what FakeModule is doing, because it's a gross hack.
2309 But it solves Arnd's problem for now...
2315 But it solves Arnd's problem for now...
2310
2316
2311 2004-02-27 Fernando Perez <fperez@colorado.edu>
2317 2004-02-27 Fernando Perez <fperez@colorado.edu>
2312
2318
2313 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2319 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2314 mode would behave erratically. Also increased the number of
2320 mode would behave erratically. Also increased the number of
2315 possible logs in rotate mod to 999. Thanks to Rod Holland
2321 possible logs in rotate mod to 999. Thanks to Rod Holland
2316 <rhh@StructureLABS.com> for the report and fixes.
2322 <rhh@StructureLABS.com> for the report and fixes.
2317
2323
2318 2004-02-26 Fernando Perez <fperez@colorado.edu>
2324 2004-02-26 Fernando Perez <fperez@colorado.edu>
2319
2325
2320 * IPython/genutils.py (page): Check that the curses module really
2326 * IPython/genutils.py (page): Check that the curses module really
2321 has the initscr attribute before trying to use it. For some
2327 has the initscr attribute before trying to use it. For some
2322 reason, the Solaris curses module is missing this. I think this
2328 reason, the Solaris curses module is missing this. I think this
2323 should be considered a Solaris python bug, but I'm not sure.
2329 should be considered a Solaris python bug, but I'm not sure.
2324
2330
2325 2004-01-17 Fernando Perez <fperez@colorado.edu>
2331 2004-01-17 Fernando Perez <fperez@colorado.edu>
2326
2332
2327 * IPython/genutils.py (Stream.__init__): Changes to try to make
2333 * IPython/genutils.py (Stream.__init__): Changes to try to make
2328 ipython robust against stdin/out/err being closed by the user.
2334 ipython robust against stdin/out/err being closed by the user.
2329 This is 'user error' (and blocks a normal python session, at least
2335 This is 'user error' (and blocks a normal python session, at least
2330 the stdout case). However, Ipython should be able to survive such
2336 the stdout case). However, Ipython should be able to survive such
2331 instances of abuse as gracefully as possible. To simplify the
2337 instances of abuse as gracefully as possible. To simplify the
2332 coding and maintain compatibility with Gary Bishop's Term
2338 coding and maintain compatibility with Gary Bishop's Term
2333 contributions, I've made use of classmethods for this. I think
2339 contributions, I've made use of classmethods for this. I think
2334 this introduces a dependency on python 2.2.
2340 this introduces a dependency on python 2.2.
2335
2341
2336 2004-01-13 Fernando Perez <fperez@colorado.edu>
2342 2004-01-13 Fernando Perez <fperez@colorado.edu>
2337
2343
2338 * IPython/numutils.py (exp_safe): simplified the code a bit and
2344 * IPython/numutils.py (exp_safe): simplified the code a bit and
2339 removed the need for importing the kinds module altogether.
2345 removed the need for importing the kinds module altogether.
2340
2346
2341 2004-01-06 Fernando Perez <fperez@colorado.edu>
2347 2004-01-06 Fernando Perez <fperez@colorado.edu>
2342
2348
2343 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2349 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2344 a magic function instead, after some community feedback. No
2350 a magic function instead, after some community feedback. No
2345 special syntax will exist for it, but its name is deliberately
2351 special syntax will exist for it, but its name is deliberately
2346 very short.
2352 very short.
2347
2353
2348 2003-12-20 Fernando Perez <fperez@colorado.edu>
2354 2003-12-20 Fernando Perez <fperez@colorado.edu>
2349
2355
2350 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2356 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2351 new functionality, to automagically assign the result of a shell
2357 new functionality, to automagically assign the result of a shell
2352 command to a variable. I'll solicit some community feedback on
2358 command to a variable. I'll solicit some community feedback on
2353 this before making it permanent.
2359 this before making it permanent.
2354
2360
2355 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2361 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2356 requested about callables for which inspect couldn't obtain a
2362 requested about callables for which inspect couldn't obtain a
2357 proper argspec. Thanks to a crash report sent by Etienne
2363 proper argspec. Thanks to a crash report sent by Etienne
2358 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2364 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2359
2365
2360 2003-12-09 Fernando Perez <fperez@colorado.edu>
2366 2003-12-09 Fernando Perez <fperez@colorado.edu>
2361
2367
2362 * IPython/genutils.py (page): patch for the pager to work across
2368 * IPython/genutils.py (page): patch for the pager to work across
2363 various versions of Windows. By Gary Bishop.
2369 various versions of Windows. By Gary Bishop.
2364
2370
2365 2003-12-04 Fernando Perez <fperez@colorado.edu>
2371 2003-12-04 Fernando Perez <fperez@colorado.edu>
2366
2372
2367 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2373 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2368 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2374 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2369 While I tested this and it looks ok, there may still be corner
2375 While I tested this and it looks ok, there may still be corner
2370 cases I've missed.
2376 cases I've missed.
2371
2377
2372 2003-12-01 Fernando Perez <fperez@colorado.edu>
2378 2003-12-01 Fernando Perez <fperez@colorado.edu>
2373
2379
2374 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2380 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2375 where a line like 'p,q=1,2' would fail because the automagic
2381 where a line like 'p,q=1,2' would fail because the automagic
2376 system would be triggered for @p.
2382 system would be triggered for @p.
2377
2383
2378 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2384 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2379 cleanups, code unmodified.
2385 cleanups, code unmodified.
2380
2386
2381 * IPython/genutils.py (Term): added a class for IPython to handle
2387 * IPython/genutils.py (Term): added a class for IPython to handle
2382 output. In most cases it will just be a proxy for stdout/err, but
2388 output. In most cases it will just be a proxy for stdout/err, but
2383 having this allows modifications to be made for some platforms,
2389 having this allows modifications to be made for some platforms,
2384 such as handling color escapes under Windows. All of this code
2390 such as handling color escapes under Windows. All of this code
2385 was contributed by Gary Bishop, with minor modifications by me.
2391 was contributed by Gary Bishop, with minor modifications by me.
2386 The actual changes affect many files.
2392 The actual changes affect many files.
2387
2393
2388 2003-11-30 Fernando Perez <fperez@colorado.edu>
2394 2003-11-30 Fernando Perez <fperez@colorado.edu>
2389
2395
2390 * IPython/iplib.py (file_matches): new completion code, courtesy
2396 * IPython/iplib.py (file_matches): new completion code, courtesy
2391 of Jeff Collins. This enables filename completion again under
2397 of Jeff Collins. This enables filename completion again under
2392 python 2.3, which disabled it at the C level.
2398 python 2.3, which disabled it at the C level.
2393
2399
2394 2003-11-11 Fernando Perez <fperez@colorado.edu>
2400 2003-11-11 Fernando Perez <fperez@colorado.edu>
2395
2401
2396 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2402 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2397 for Numeric.array(map(...)), but often convenient.
2403 for Numeric.array(map(...)), but often convenient.
2398
2404
2399 2003-11-05 Fernando Perez <fperez@colorado.edu>
2405 2003-11-05 Fernando Perez <fperez@colorado.edu>
2400
2406
2401 * IPython/numutils.py (frange): Changed a call from int() to
2407 * IPython/numutils.py (frange): Changed a call from int() to
2402 int(round()) to prevent a problem reported with arange() in the
2408 int(round()) to prevent a problem reported with arange() in the
2403 numpy list.
2409 numpy list.
2404
2410
2405 2003-10-06 Fernando Perez <fperez@colorado.edu>
2411 2003-10-06 Fernando Perez <fperez@colorado.edu>
2406
2412
2407 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2413 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2408 prevent crashes if sys lacks an argv attribute (it happens with
2414 prevent crashes if sys lacks an argv attribute (it happens with
2409 embedded interpreters which build a bare-bones sys module).
2415 embedded interpreters which build a bare-bones sys module).
2410 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2416 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2411
2417
2412 2003-09-24 Fernando Perez <fperez@colorado.edu>
2418 2003-09-24 Fernando Perez <fperez@colorado.edu>
2413
2419
2414 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2420 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2415 to protect against poorly written user objects where __getattr__
2421 to protect against poorly written user objects where __getattr__
2416 raises exceptions other than AttributeError. Thanks to a bug
2422 raises exceptions other than AttributeError. Thanks to a bug
2417 report by Oliver Sander <osander-AT-gmx.de>.
2423 report by Oliver Sander <osander-AT-gmx.de>.
2418
2424
2419 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2425 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2420 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2426 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2421
2427
2422 2003-09-09 Fernando Perez <fperez@colorado.edu>
2428 2003-09-09 Fernando Perez <fperez@colorado.edu>
2423
2429
2424 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2430 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2425 unpacking a list whith a callable as first element would
2431 unpacking a list whith a callable as first element would
2426 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2432 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2427 Collins.
2433 Collins.
2428
2434
2429 2003-08-25 *** Released version 0.5.0
2435 2003-08-25 *** Released version 0.5.0
2430
2436
2431 2003-08-22 Fernando Perez <fperez@colorado.edu>
2437 2003-08-22 Fernando Perez <fperez@colorado.edu>
2432
2438
2433 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2439 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2434 improperly defined user exceptions. Thanks to feedback from Mark
2440 improperly defined user exceptions. Thanks to feedback from Mark
2435 Russell <mrussell-AT-verio.net>.
2441 Russell <mrussell-AT-verio.net>.
2436
2442
2437 2003-08-20 Fernando Perez <fperez@colorado.edu>
2443 2003-08-20 Fernando Perez <fperez@colorado.edu>
2438
2444
2439 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2445 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2440 printing so that it would print multi-line string forms starting
2446 printing so that it would print multi-line string forms starting
2441 with a new line. This way the formatting is better respected for
2447 with a new line. This way the formatting is better respected for
2442 objects which work hard to make nice string forms.
2448 objects which work hard to make nice string forms.
2443
2449
2444 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2450 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2445 autocall would overtake data access for objects with both
2451 autocall would overtake data access for objects with both
2446 __getitem__ and __call__.
2452 __getitem__ and __call__.
2447
2453
2448 2003-08-19 *** Released version 0.5.0-rc1
2454 2003-08-19 *** Released version 0.5.0-rc1
2449
2455
2450 2003-08-19 Fernando Perez <fperez@colorado.edu>
2456 2003-08-19 Fernando Perez <fperez@colorado.edu>
2451
2457
2452 * IPython/deep_reload.py (load_tail): single tiny change here
2458 * IPython/deep_reload.py (load_tail): single tiny change here
2453 seems to fix the long-standing bug of dreload() failing to work
2459 seems to fix the long-standing bug of dreload() failing to work
2454 for dotted names. But this module is pretty tricky, so I may have
2460 for dotted names. But this module is pretty tricky, so I may have
2455 missed some subtlety. Needs more testing!.
2461 missed some subtlety. Needs more testing!.
2456
2462
2457 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2463 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2458 exceptions which have badly implemented __str__ methods.
2464 exceptions which have badly implemented __str__ methods.
2459 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2465 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2460 which I've been getting reports about from Python 2.3 users. I
2466 which I've been getting reports about from Python 2.3 users. I
2461 wish I had a simple test case to reproduce the problem, so I could
2467 wish I had a simple test case to reproduce the problem, so I could
2462 either write a cleaner workaround or file a bug report if
2468 either write a cleaner workaround or file a bug report if
2463 necessary.
2469 necessary.
2464
2470
2465 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2471 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2466 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2472 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2467 a bug report by Tjabo Kloppenburg.
2473 a bug report by Tjabo Kloppenburg.
2468
2474
2469 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2475 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2470 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2476 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2471 seems rather unstable. Thanks to a bug report by Tjabo
2477 seems rather unstable. Thanks to a bug report by Tjabo
2472 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2478 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2473
2479
2474 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2480 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2475 this out soon because of the critical fixes in the inner loop for
2481 this out soon because of the critical fixes in the inner loop for
2476 generators.
2482 generators.
2477
2483
2478 * IPython/Magic.py (Magic.getargspec): removed. This (and
2484 * IPython/Magic.py (Magic.getargspec): removed. This (and
2479 _get_def) have been obsoleted by OInspect for a long time, I
2485 _get_def) have been obsoleted by OInspect for a long time, I
2480 hadn't noticed that they were dead code.
2486 hadn't noticed that they were dead code.
2481 (Magic._ofind): restored _ofind functionality for a few literals
2487 (Magic._ofind): restored _ofind functionality for a few literals
2482 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2488 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2483 for things like "hello".capitalize?, since that would require a
2489 for things like "hello".capitalize?, since that would require a
2484 potentially dangerous eval() again.
2490 potentially dangerous eval() again.
2485
2491
2486 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2492 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2487 logic a bit more to clean up the escapes handling and minimize the
2493 logic a bit more to clean up the escapes handling and minimize the
2488 use of _ofind to only necessary cases. The interactive 'feel' of
2494 use of _ofind to only necessary cases. The interactive 'feel' of
2489 IPython should have improved quite a bit with the changes in
2495 IPython should have improved quite a bit with the changes in
2490 _prefilter and _ofind (besides being far safer than before).
2496 _prefilter and _ofind (besides being far safer than before).
2491
2497
2492 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2498 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2493 obscure, never reported). Edit would fail to find the object to
2499 obscure, never reported). Edit would fail to find the object to
2494 edit under some circumstances.
2500 edit under some circumstances.
2495 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2501 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2496 which were causing double-calling of generators. Those eval calls
2502 which were causing double-calling of generators. Those eval calls
2497 were _very_ dangerous, since code with side effects could be
2503 were _very_ dangerous, since code with side effects could be
2498 triggered. As they say, 'eval is evil'... These were the
2504 triggered. As they say, 'eval is evil'... These were the
2499 nastiest evals in IPython. Besides, _ofind is now far simpler,
2505 nastiest evals in IPython. Besides, _ofind is now far simpler,
2500 and it should also be quite a bit faster. Its use of inspect is
2506 and it should also be quite a bit faster. Its use of inspect is
2501 also safer, so perhaps some of the inspect-related crashes I've
2507 also safer, so perhaps some of the inspect-related crashes I've
2502 seen lately with Python 2.3 might be taken care of. That will
2508 seen lately with Python 2.3 might be taken care of. That will
2503 need more testing.
2509 need more testing.
2504
2510
2505 2003-08-17 Fernando Perez <fperez@colorado.edu>
2511 2003-08-17 Fernando Perez <fperez@colorado.edu>
2506
2512
2507 * IPython/iplib.py (InteractiveShell._prefilter): significant
2513 * IPython/iplib.py (InteractiveShell._prefilter): significant
2508 simplifications to the logic for handling user escapes. Faster
2514 simplifications to the logic for handling user escapes. Faster
2509 and simpler code.
2515 and simpler code.
2510
2516
2511 2003-08-14 Fernando Perez <fperez@colorado.edu>
2517 2003-08-14 Fernando Perez <fperez@colorado.edu>
2512
2518
2513 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2519 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2514 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2520 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2515 but it should be quite a bit faster. And the recursive version
2521 but it should be quite a bit faster. And the recursive version
2516 generated O(log N) intermediate storage for all rank>1 arrays,
2522 generated O(log N) intermediate storage for all rank>1 arrays,
2517 even if they were contiguous.
2523 even if they were contiguous.
2518 (l1norm): Added this function.
2524 (l1norm): Added this function.
2519 (norm): Added this function for arbitrary norms (including
2525 (norm): Added this function for arbitrary norms (including
2520 l-infinity). l1 and l2 are still special cases for convenience
2526 l-infinity). l1 and l2 are still special cases for convenience
2521 and speed.
2527 and speed.
2522
2528
2523 2003-08-03 Fernando Perez <fperez@colorado.edu>
2529 2003-08-03 Fernando Perez <fperez@colorado.edu>
2524
2530
2525 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2531 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2526 exceptions, which now raise PendingDeprecationWarnings in Python
2532 exceptions, which now raise PendingDeprecationWarnings in Python
2527 2.3. There were some in Magic and some in Gnuplot2.
2533 2.3. There were some in Magic and some in Gnuplot2.
2528
2534
2529 2003-06-30 Fernando Perez <fperez@colorado.edu>
2535 2003-06-30 Fernando Perez <fperez@colorado.edu>
2530
2536
2531 * IPython/genutils.py (page): modified to call curses only for
2537 * IPython/genutils.py (page): modified to call curses only for
2532 terminals where TERM=='xterm'. After problems under many other
2538 terminals where TERM=='xterm'. After problems under many other
2533 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2539 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2534
2540
2535 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2541 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2536 would be triggered when readline was absent. This was just an old
2542 would be triggered when readline was absent. This was just an old
2537 debugging statement I'd forgotten to take out.
2543 debugging statement I'd forgotten to take out.
2538
2544
2539 2003-06-20 Fernando Perez <fperez@colorado.edu>
2545 2003-06-20 Fernando Perez <fperez@colorado.edu>
2540
2546
2541 * IPython/genutils.py (clock): modified to return only user time
2547 * IPython/genutils.py (clock): modified to return only user time
2542 (not counting system time), after a discussion on scipy. While
2548 (not counting system time), after a discussion on scipy. While
2543 system time may be a useful quantity occasionally, it may much
2549 system time may be a useful quantity occasionally, it may much
2544 more easily be skewed by occasional swapping or other similar
2550 more easily be skewed by occasional swapping or other similar
2545 activity.
2551 activity.
2546
2552
2547 2003-06-05 Fernando Perez <fperez@colorado.edu>
2553 2003-06-05 Fernando Perez <fperez@colorado.edu>
2548
2554
2549 * IPython/numutils.py (identity): new function, for building
2555 * IPython/numutils.py (identity): new function, for building
2550 arbitrary rank Kronecker deltas (mostly backwards compatible with
2556 arbitrary rank Kronecker deltas (mostly backwards compatible with
2551 Numeric.identity)
2557 Numeric.identity)
2552
2558
2553 2003-06-03 Fernando Perez <fperez@colorado.edu>
2559 2003-06-03 Fernando Perez <fperez@colorado.edu>
2554
2560
2555 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2561 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2556 arguments passed to magics with spaces, to allow trailing '\' to
2562 arguments passed to magics with spaces, to allow trailing '\' to
2557 work normally (mainly for Windows users).
2563 work normally (mainly for Windows users).
2558
2564
2559 2003-05-29 Fernando Perez <fperez@colorado.edu>
2565 2003-05-29 Fernando Perez <fperez@colorado.edu>
2560
2566
2561 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2567 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2562 instead of pydoc.help. This fixes a bizarre behavior where
2568 instead of pydoc.help. This fixes a bizarre behavior where
2563 printing '%s' % locals() would trigger the help system. Now
2569 printing '%s' % locals() would trigger the help system. Now
2564 ipython behaves like normal python does.
2570 ipython behaves like normal python does.
2565
2571
2566 Note that if one does 'from pydoc import help', the bizarre
2572 Note that if one does 'from pydoc import help', the bizarre
2567 behavior returns, but this will also happen in normal python, so
2573 behavior returns, but this will also happen in normal python, so
2568 it's not an ipython bug anymore (it has to do with how pydoc.help
2574 it's not an ipython bug anymore (it has to do with how pydoc.help
2569 is implemented).
2575 is implemented).
2570
2576
2571 2003-05-22 Fernando Perez <fperez@colorado.edu>
2577 2003-05-22 Fernando Perez <fperez@colorado.edu>
2572
2578
2573 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2579 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2574 return [] instead of None when nothing matches, also match to end
2580 return [] instead of None when nothing matches, also match to end
2575 of line. Patch by Gary Bishop.
2581 of line. Patch by Gary Bishop.
2576
2582
2577 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2583 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2578 protection as before, for files passed on the command line. This
2584 protection as before, for files passed on the command line. This
2579 prevents the CrashHandler from kicking in if user files call into
2585 prevents the CrashHandler from kicking in if user files call into
2580 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2586 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2581 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2587 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2582
2588
2583 2003-05-20 *** Released version 0.4.0
2589 2003-05-20 *** Released version 0.4.0
2584
2590
2585 2003-05-20 Fernando Perez <fperez@colorado.edu>
2591 2003-05-20 Fernando Perez <fperez@colorado.edu>
2586
2592
2587 * setup.py: added support for manpages. It's a bit hackish b/c of
2593 * setup.py: added support for manpages. It's a bit hackish b/c of
2588 a bug in the way the bdist_rpm distutils target handles gzipped
2594 a bug in the way the bdist_rpm distutils target handles gzipped
2589 manpages, but it works. After a patch by Jack.
2595 manpages, but it works. After a patch by Jack.
2590
2596
2591 2003-05-19 Fernando Perez <fperez@colorado.edu>
2597 2003-05-19 Fernando Perez <fperez@colorado.edu>
2592
2598
2593 * IPython/numutils.py: added a mockup of the kinds module, since
2599 * IPython/numutils.py: added a mockup of the kinds module, since
2594 it was recently removed from Numeric. This way, numutils will
2600 it was recently removed from Numeric. This way, numutils will
2595 work for all users even if they are missing kinds.
2601 work for all users even if they are missing kinds.
2596
2602
2597 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2603 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2598 failure, which can occur with SWIG-wrapped extensions. After a
2604 failure, which can occur with SWIG-wrapped extensions. After a
2599 crash report from Prabhu.
2605 crash report from Prabhu.
2600
2606
2601 2003-05-16 Fernando Perez <fperez@colorado.edu>
2607 2003-05-16 Fernando Perez <fperez@colorado.edu>
2602
2608
2603 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2609 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2604 protect ipython from user code which may call directly
2610 protect ipython from user code which may call directly
2605 sys.excepthook (this looks like an ipython crash to the user, even
2611 sys.excepthook (this looks like an ipython crash to the user, even
2606 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2612 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2607 This is especially important to help users of WxWindows, but may
2613 This is especially important to help users of WxWindows, but may
2608 also be useful in other cases.
2614 also be useful in other cases.
2609
2615
2610 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2616 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2611 an optional tb_offset to be specified, and to preserve exception
2617 an optional tb_offset to be specified, and to preserve exception
2612 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2618 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2613
2619
2614 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2620 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2615
2621
2616 2003-05-15 Fernando Perez <fperez@colorado.edu>
2622 2003-05-15 Fernando Perez <fperez@colorado.edu>
2617
2623
2618 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2624 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2619 installing for a new user under Windows.
2625 installing for a new user under Windows.
2620
2626
2621 2003-05-12 Fernando Perez <fperez@colorado.edu>
2627 2003-05-12 Fernando Perez <fperez@colorado.edu>
2622
2628
2623 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2629 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2624 handler for Emacs comint-based lines. Currently it doesn't do
2630 handler for Emacs comint-based lines. Currently it doesn't do
2625 much (but importantly, it doesn't update the history cache). In
2631 much (but importantly, it doesn't update the history cache). In
2626 the future it may be expanded if Alex needs more functionality
2632 the future it may be expanded if Alex needs more functionality
2627 there.
2633 there.
2628
2634
2629 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2635 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2630 info to crash reports.
2636 info to crash reports.
2631
2637
2632 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2638 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2633 just like Python's -c. Also fixed crash with invalid -color
2639 just like Python's -c. Also fixed crash with invalid -color
2634 option value at startup. Thanks to Will French
2640 option value at startup. Thanks to Will French
2635 <wfrench-AT-bestweb.net> for the bug report.
2641 <wfrench-AT-bestweb.net> for the bug report.
2636
2642
2637 2003-05-09 Fernando Perez <fperez@colorado.edu>
2643 2003-05-09 Fernando Perez <fperez@colorado.edu>
2638
2644
2639 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2645 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2640 to EvalDict (it's a mapping, after all) and simplified its code
2646 to EvalDict (it's a mapping, after all) and simplified its code
2641 quite a bit, after a nice discussion on c.l.py where Gustavo
2647 quite a bit, after a nice discussion on c.l.py where Gustavo
2642 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2648 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2643
2649
2644 2003-04-30 Fernando Perez <fperez@colorado.edu>
2650 2003-04-30 Fernando Perez <fperez@colorado.edu>
2645
2651
2646 * IPython/genutils.py (timings_out): modified it to reduce its
2652 * IPython/genutils.py (timings_out): modified it to reduce its
2647 overhead in the common reps==1 case.
2653 overhead in the common reps==1 case.
2648
2654
2649 2003-04-29 Fernando Perez <fperez@colorado.edu>
2655 2003-04-29 Fernando Perez <fperez@colorado.edu>
2650
2656
2651 * IPython/genutils.py (timings_out): Modified to use the resource
2657 * IPython/genutils.py (timings_out): Modified to use the resource
2652 module, which avoids the wraparound problems of time.clock().
2658 module, which avoids the wraparound problems of time.clock().
2653
2659
2654 2003-04-17 *** Released version 0.2.15pre4
2660 2003-04-17 *** Released version 0.2.15pre4
2655
2661
2656 2003-04-17 Fernando Perez <fperez@colorado.edu>
2662 2003-04-17 Fernando Perez <fperez@colorado.edu>
2657
2663
2658 * setup.py (scriptfiles): Split windows-specific stuff over to a
2664 * setup.py (scriptfiles): Split windows-specific stuff over to a
2659 separate file, in an attempt to have a Windows GUI installer.
2665 separate file, in an attempt to have a Windows GUI installer.
2660 That didn't work, but part of the groundwork is done.
2666 That didn't work, but part of the groundwork is done.
2661
2667
2662 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2668 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2663 indent/unindent with 4 spaces. Particularly useful in combination
2669 indent/unindent with 4 spaces. Particularly useful in combination
2664 with the new auto-indent option.
2670 with the new auto-indent option.
2665
2671
2666 2003-04-16 Fernando Perez <fperez@colorado.edu>
2672 2003-04-16 Fernando Perez <fperez@colorado.edu>
2667
2673
2668 * IPython/Magic.py: various replacements of self.rc for
2674 * IPython/Magic.py: various replacements of self.rc for
2669 self.shell.rc. A lot more remains to be done to fully disentangle
2675 self.shell.rc. A lot more remains to be done to fully disentangle
2670 this class from the main Shell class.
2676 this class from the main Shell class.
2671
2677
2672 * IPython/GnuplotRuntime.py: added checks for mouse support so
2678 * IPython/GnuplotRuntime.py: added checks for mouse support so
2673 that we don't try to enable it if the current gnuplot doesn't
2679 that we don't try to enable it if the current gnuplot doesn't
2674 really support it. Also added checks so that we don't try to
2680 really support it. Also added checks so that we don't try to
2675 enable persist under Windows (where Gnuplot doesn't recognize the
2681 enable persist under Windows (where Gnuplot doesn't recognize the
2676 option).
2682 option).
2677
2683
2678 * IPython/iplib.py (InteractiveShell.interact): Added optional
2684 * IPython/iplib.py (InteractiveShell.interact): Added optional
2679 auto-indenting code, after a patch by King C. Shu
2685 auto-indenting code, after a patch by King C. Shu
2680 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2686 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2681 get along well with pasting indented code. If I ever figure out
2687 get along well with pasting indented code. If I ever figure out
2682 how to make that part go well, it will become on by default.
2688 how to make that part go well, it will become on by default.
2683
2689
2684 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2690 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2685 crash ipython if there was an unmatched '%' in the user's prompt
2691 crash ipython if there was an unmatched '%' in the user's prompt
2686 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2692 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2687
2693
2688 * IPython/iplib.py (InteractiveShell.interact): removed the
2694 * IPython/iplib.py (InteractiveShell.interact): removed the
2689 ability to ask the user whether he wants to crash or not at the
2695 ability to ask the user whether he wants to crash or not at the
2690 'last line' exception handler. Calling functions at that point
2696 'last line' exception handler. Calling functions at that point
2691 changes the stack, and the error reports would have incorrect
2697 changes the stack, and the error reports would have incorrect
2692 tracebacks.
2698 tracebacks.
2693
2699
2694 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2700 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2695 pass through a peger a pretty-printed form of any object. After a
2701 pass through a peger a pretty-printed form of any object. After a
2696 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2702 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2697
2703
2698 2003-04-14 Fernando Perez <fperez@colorado.edu>
2704 2003-04-14 Fernando Perez <fperez@colorado.edu>
2699
2705
2700 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2706 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2701 all files in ~ would be modified at first install (instead of
2707 all files in ~ would be modified at first install (instead of
2702 ~/.ipython). This could be potentially disastrous, as the
2708 ~/.ipython). This could be potentially disastrous, as the
2703 modification (make line-endings native) could damage binary files.
2709 modification (make line-endings native) could damage binary files.
2704
2710
2705 2003-04-10 Fernando Perez <fperez@colorado.edu>
2711 2003-04-10 Fernando Perez <fperez@colorado.edu>
2706
2712
2707 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2713 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2708 handle only lines which are invalid python. This now means that
2714 handle only lines which are invalid python. This now means that
2709 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2715 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2710 for the bug report.
2716 for the bug report.
2711
2717
2712 2003-04-01 Fernando Perez <fperez@colorado.edu>
2718 2003-04-01 Fernando Perez <fperez@colorado.edu>
2713
2719
2714 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2720 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2715 where failing to set sys.last_traceback would crash pdb.pm().
2721 where failing to set sys.last_traceback would crash pdb.pm().
2716 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2722 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2717 report.
2723 report.
2718
2724
2719 2003-03-25 Fernando Perez <fperez@colorado.edu>
2725 2003-03-25 Fernando Perez <fperez@colorado.edu>
2720
2726
2721 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2727 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2722 before printing it (it had a lot of spurious blank lines at the
2728 before printing it (it had a lot of spurious blank lines at the
2723 end).
2729 end).
2724
2730
2725 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2731 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2726 output would be sent 21 times! Obviously people don't use this
2732 output would be sent 21 times! Obviously people don't use this
2727 too often, or I would have heard about it.
2733 too often, or I would have heard about it.
2728
2734
2729 2003-03-24 Fernando Perez <fperez@colorado.edu>
2735 2003-03-24 Fernando Perez <fperez@colorado.edu>
2730
2736
2731 * setup.py (scriptfiles): renamed the data_files parameter from
2737 * setup.py (scriptfiles): renamed the data_files parameter from
2732 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2738 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2733 for the patch.
2739 for the patch.
2734
2740
2735 2003-03-20 Fernando Perez <fperez@colorado.edu>
2741 2003-03-20 Fernando Perez <fperez@colorado.edu>
2736
2742
2737 * IPython/genutils.py (error): added error() and fatal()
2743 * IPython/genutils.py (error): added error() and fatal()
2738 functions.
2744 functions.
2739
2745
2740 2003-03-18 *** Released version 0.2.15pre3
2746 2003-03-18 *** Released version 0.2.15pre3
2741
2747
2742 2003-03-18 Fernando Perez <fperez@colorado.edu>
2748 2003-03-18 Fernando Perez <fperez@colorado.edu>
2743
2749
2744 * setupext/install_data_ext.py
2750 * setupext/install_data_ext.py
2745 (install_data_ext.initialize_options): Class contributed by Jack
2751 (install_data_ext.initialize_options): Class contributed by Jack
2746 Moffit for fixing the old distutils hack. He is sending this to
2752 Moffit for fixing the old distutils hack. He is sending this to
2747 the distutils folks so in the future we may not need it as a
2753 the distutils folks so in the future we may not need it as a
2748 private fix.
2754 private fix.
2749
2755
2750 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2756 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2751 changes for Debian packaging. See his patch for full details.
2757 changes for Debian packaging. See his patch for full details.
2752 The old distutils hack of making the ipythonrc* files carry a
2758 The old distutils hack of making the ipythonrc* files carry a
2753 bogus .py extension is gone, at last. Examples were moved to a
2759 bogus .py extension is gone, at last. Examples were moved to a
2754 separate subdir under doc/, and the separate executable scripts
2760 separate subdir under doc/, and the separate executable scripts
2755 now live in their own directory. Overall a great cleanup. The
2761 now live in their own directory. Overall a great cleanup. The
2756 manual was updated to use the new files, and setup.py has been
2762 manual was updated to use the new files, and setup.py has been
2757 fixed for this setup.
2763 fixed for this setup.
2758
2764
2759 * IPython/PyColorize.py (Parser.usage): made non-executable and
2765 * IPython/PyColorize.py (Parser.usage): made non-executable and
2760 created a pycolor wrapper around it to be included as a script.
2766 created a pycolor wrapper around it to be included as a script.
2761
2767
2762 2003-03-12 *** Released version 0.2.15pre2
2768 2003-03-12 *** Released version 0.2.15pre2
2763
2769
2764 2003-03-12 Fernando Perez <fperez@colorado.edu>
2770 2003-03-12 Fernando Perez <fperez@colorado.edu>
2765
2771
2766 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2772 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2767 long-standing problem with garbage characters in some terminals.
2773 long-standing problem with garbage characters in some terminals.
2768 The issue was really that the \001 and \002 escapes must _only_ be
2774 The issue was really that the \001 and \002 escapes must _only_ be
2769 passed to input prompts (which call readline), but _never_ to
2775 passed to input prompts (which call readline), but _never_ to
2770 normal text to be printed on screen. I changed ColorANSI to have
2776 normal text to be printed on screen. I changed ColorANSI to have
2771 two classes: TermColors and InputTermColors, each with the
2777 two classes: TermColors and InputTermColors, each with the
2772 appropriate escapes for input prompts or normal text. The code in
2778 appropriate escapes for input prompts or normal text. The code in
2773 Prompts.py got slightly more complicated, but this very old and
2779 Prompts.py got slightly more complicated, but this very old and
2774 annoying bug is finally fixed.
2780 annoying bug is finally fixed.
2775
2781
2776 All the credit for nailing down the real origin of this problem
2782 All the credit for nailing down the real origin of this problem
2777 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2783 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2778 *Many* thanks to him for spending quite a bit of effort on this.
2784 *Many* thanks to him for spending quite a bit of effort on this.
2779
2785
2780 2003-03-05 *** Released version 0.2.15pre1
2786 2003-03-05 *** Released version 0.2.15pre1
2781
2787
2782 2003-03-03 Fernando Perez <fperez@colorado.edu>
2788 2003-03-03 Fernando Perez <fperez@colorado.edu>
2783
2789
2784 * IPython/FakeModule.py: Moved the former _FakeModule to a
2790 * IPython/FakeModule.py: Moved the former _FakeModule to a
2785 separate file, because it's also needed by Magic (to fix a similar
2791 separate file, because it's also needed by Magic (to fix a similar
2786 pickle-related issue in @run).
2792 pickle-related issue in @run).
2787
2793
2788 2003-03-02 Fernando Perez <fperez@colorado.edu>
2794 2003-03-02 Fernando Perez <fperez@colorado.edu>
2789
2795
2790 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2796 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2791 the autocall option at runtime.
2797 the autocall option at runtime.
2792 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2798 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2793 across Magic.py to start separating Magic from InteractiveShell.
2799 across Magic.py to start separating Magic from InteractiveShell.
2794 (Magic._ofind): Fixed to return proper namespace for dotted
2800 (Magic._ofind): Fixed to return proper namespace for dotted
2795 names. Before, a dotted name would always return 'not currently
2801 names. Before, a dotted name would always return 'not currently
2796 defined', because it would find the 'parent'. s.x would be found,
2802 defined', because it would find the 'parent'. s.x would be found,
2797 but since 'x' isn't defined by itself, it would get confused.
2803 but since 'x' isn't defined by itself, it would get confused.
2798 (Magic.magic_run): Fixed pickling problems reported by Ralf
2804 (Magic.magic_run): Fixed pickling problems reported by Ralf
2799 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2805 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2800 that I'd used when Mike Heeter reported similar issues at the
2806 that I'd used when Mike Heeter reported similar issues at the
2801 top-level, but now for @run. It boils down to injecting the
2807 top-level, but now for @run. It boils down to injecting the
2802 namespace where code is being executed with something that looks
2808 namespace where code is being executed with something that looks
2803 enough like a module to fool pickle.dump(). Since a pickle stores
2809 enough like a module to fool pickle.dump(). Since a pickle stores
2804 a named reference to the importing module, we need this for
2810 a named reference to the importing module, we need this for
2805 pickles to save something sensible.
2811 pickles to save something sensible.
2806
2812
2807 * IPython/ipmaker.py (make_IPython): added an autocall option.
2813 * IPython/ipmaker.py (make_IPython): added an autocall option.
2808
2814
2809 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2815 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2810 the auto-eval code. Now autocalling is an option, and the code is
2816 the auto-eval code. Now autocalling is an option, and the code is
2811 also vastly safer. There is no more eval() involved at all.
2817 also vastly safer. There is no more eval() involved at all.
2812
2818
2813 2003-03-01 Fernando Perez <fperez@colorado.edu>
2819 2003-03-01 Fernando Perez <fperez@colorado.edu>
2814
2820
2815 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2821 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2816 dict with named keys instead of a tuple.
2822 dict with named keys instead of a tuple.
2817
2823
2818 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2824 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2819
2825
2820 * setup.py (make_shortcut): Fixed message about directories
2826 * setup.py (make_shortcut): Fixed message about directories
2821 created during Windows installation (the directories were ok, just
2827 created during Windows installation (the directories were ok, just
2822 the printed message was misleading). Thanks to Chris Liechti
2828 the printed message was misleading). Thanks to Chris Liechti
2823 <cliechti-AT-gmx.net> for the heads up.
2829 <cliechti-AT-gmx.net> for the heads up.
2824
2830
2825 2003-02-21 Fernando Perez <fperez@colorado.edu>
2831 2003-02-21 Fernando Perez <fperez@colorado.edu>
2826
2832
2827 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2833 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2828 of ValueError exception when checking for auto-execution. This
2834 of ValueError exception when checking for auto-execution. This
2829 one is raised by things like Numeric arrays arr.flat when the
2835 one is raised by things like Numeric arrays arr.flat when the
2830 array is non-contiguous.
2836 array is non-contiguous.
2831
2837
2832 2003-01-31 Fernando Perez <fperez@colorado.edu>
2838 2003-01-31 Fernando Perez <fperez@colorado.edu>
2833
2839
2834 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2840 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2835 not return any value at all (even though the command would get
2841 not return any value at all (even though the command would get
2836 executed).
2842 executed).
2837 (xsys): Flush stdout right after printing the command to ensure
2843 (xsys): Flush stdout right after printing the command to ensure
2838 proper ordering of commands and command output in the total
2844 proper ordering of commands and command output in the total
2839 output.
2845 output.
2840 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2846 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2841 system/getoutput as defaults. The old ones are kept for
2847 system/getoutput as defaults. The old ones are kept for
2842 compatibility reasons, so no code which uses this library needs
2848 compatibility reasons, so no code which uses this library needs
2843 changing.
2849 changing.
2844
2850
2845 2003-01-27 *** Released version 0.2.14
2851 2003-01-27 *** Released version 0.2.14
2846
2852
2847 2003-01-25 Fernando Perez <fperez@colorado.edu>
2853 2003-01-25 Fernando Perez <fperez@colorado.edu>
2848
2854
2849 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2855 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2850 functions defined in previous edit sessions could not be re-edited
2856 functions defined in previous edit sessions could not be re-edited
2851 (because the temp files were immediately removed). Now temp files
2857 (because the temp files were immediately removed). Now temp files
2852 are removed only at IPython's exit.
2858 are removed only at IPython's exit.
2853 (Magic.magic_run): Improved @run to perform shell-like expansions
2859 (Magic.magic_run): Improved @run to perform shell-like expansions
2854 on its arguments (~users and $VARS). With this, @run becomes more
2860 on its arguments (~users and $VARS). With this, @run becomes more
2855 like a normal command-line.
2861 like a normal command-line.
2856
2862
2857 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2863 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2858 bugs related to embedding and cleaned up that code. A fairly
2864 bugs related to embedding and cleaned up that code. A fairly
2859 important one was the impossibility to access the global namespace
2865 important one was the impossibility to access the global namespace
2860 through the embedded IPython (only local variables were visible).
2866 through the embedded IPython (only local variables were visible).
2861
2867
2862 2003-01-14 Fernando Perez <fperez@colorado.edu>
2868 2003-01-14 Fernando Perez <fperez@colorado.edu>
2863
2869
2864 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2870 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2865 auto-calling to be a bit more conservative. Now it doesn't get
2871 auto-calling to be a bit more conservative. Now it doesn't get
2866 triggered if any of '!=()<>' are in the rest of the input line, to
2872 triggered if any of '!=()<>' are in the rest of the input line, to
2867 allow comparing callables. Thanks to Alex for the heads up.
2873 allow comparing callables. Thanks to Alex for the heads up.
2868
2874
2869 2003-01-07 Fernando Perez <fperez@colorado.edu>
2875 2003-01-07 Fernando Perez <fperez@colorado.edu>
2870
2876
2871 * IPython/genutils.py (page): fixed estimation of the number of
2877 * IPython/genutils.py (page): fixed estimation of the number of
2872 lines in a string to be paged to simply count newlines. This
2878 lines in a string to be paged to simply count newlines. This
2873 prevents over-guessing due to embedded escape sequences. A better
2879 prevents over-guessing due to embedded escape sequences. A better
2874 long-term solution would involve stripping out the control chars
2880 long-term solution would involve stripping out the control chars
2875 for the count, but it's potentially so expensive I just don't
2881 for the count, but it's potentially so expensive I just don't
2876 think it's worth doing.
2882 think it's worth doing.
2877
2883
2878 2002-12-19 *** Released version 0.2.14pre50
2884 2002-12-19 *** Released version 0.2.14pre50
2879
2885
2880 2002-12-19 Fernando Perez <fperez@colorado.edu>
2886 2002-12-19 Fernando Perez <fperez@colorado.edu>
2881
2887
2882 * tools/release (version): Changed release scripts to inform
2888 * tools/release (version): Changed release scripts to inform
2883 Andrea and build a NEWS file with a list of recent changes.
2889 Andrea and build a NEWS file with a list of recent changes.
2884
2890
2885 * IPython/ColorANSI.py (__all__): changed terminal detection
2891 * IPython/ColorANSI.py (__all__): changed terminal detection
2886 code. Seems to work better for xterms without breaking
2892 code. Seems to work better for xterms without breaking
2887 konsole. Will need more testing to determine if WinXP and Mac OSX
2893 konsole. Will need more testing to determine if WinXP and Mac OSX
2888 also work ok.
2894 also work ok.
2889
2895
2890 2002-12-18 *** Released version 0.2.14pre49
2896 2002-12-18 *** Released version 0.2.14pre49
2891
2897
2892 2002-12-18 Fernando Perez <fperez@colorado.edu>
2898 2002-12-18 Fernando Perez <fperez@colorado.edu>
2893
2899
2894 * Docs: added new info about Mac OSX, from Andrea.
2900 * Docs: added new info about Mac OSX, from Andrea.
2895
2901
2896 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2902 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2897 allow direct plotting of python strings whose format is the same
2903 allow direct plotting of python strings whose format is the same
2898 of gnuplot data files.
2904 of gnuplot data files.
2899
2905
2900 2002-12-16 Fernando Perez <fperez@colorado.edu>
2906 2002-12-16 Fernando Perez <fperez@colorado.edu>
2901
2907
2902 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2908 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2903 value of exit question to be acknowledged.
2909 value of exit question to be acknowledged.
2904
2910
2905 2002-12-03 Fernando Perez <fperez@colorado.edu>
2911 2002-12-03 Fernando Perez <fperez@colorado.edu>
2906
2912
2907 * IPython/ipmaker.py: removed generators, which had been added
2913 * IPython/ipmaker.py: removed generators, which had been added
2908 by mistake in an earlier debugging run. This was causing trouble
2914 by mistake in an earlier debugging run. This was causing trouble
2909 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2915 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2910 for pointing this out.
2916 for pointing this out.
2911
2917
2912 2002-11-17 Fernando Perez <fperez@colorado.edu>
2918 2002-11-17 Fernando Perez <fperez@colorado.edu>
2913
2919
2914 * Manual: updated the Gnuplot section.
2920 * Manual: updated the Gnuplot section.
2915
2921
2916 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2922 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2917 a much better split of what goes in Runtime and what goes in
2923 a much better split of what goes in Runtime and what goes in
2918 Interactive.
2924 Interactive.
2919
2925
2920 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2926 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2921 being imported from iplib.
2927 being imported from iplib.
2922
2928
2923 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2929 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2924 for command-passing. Now the global Gnuplot instance is called
2930 for command-passing. Now the global Gnuplot instance is called
2925 'gp' instead of 'g', which was really a far too fragile and
2931 'gp' instead of 'g', which was really a far too fragile and
2926 common name.
2932 common name.
2927
2933
2928 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2934 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2929 bounding boxes generated by Gnuplot for square plots.
2935 bounding boxes generated by Gnuplot for square plots.
2930
2936
2931 * IPython/genutils.py (popkey): new function added. I should
2937 * IPython/genutils.py (popkey): new function added. I should
2932 suggest this on c.l.py as a dict method, it seems useful.
2938 suggest this on c.l.py as a dict method, it seems useful.
2933
2939
2934 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2940 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2935 to transparently handle PostScript generation. MUCH better than
2941 to transparently handle PostScript generation. MUCH better than
2936 the previous plot_eps/replot_eps (which I removed now). The code
2942 the previous plot_eps/replot_eps (which I removed now). The code
2937 is also fairly clean and well documented now (including
2943 is also fairly clean and well documented now (including
2938 docstrings).
2944 docstrings).
2939
2945
2940 2002-11-13 Fernando Perez <fperez@colorado.edu>
2946 2002-11-13 Fernando Perez <fperez@colorado.edu>
2941
2947
2942 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2948 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2943 (inconsistent with options).
2949 (inconsistent with options).
2944
2950
2945 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2951 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2946 manually disabled, I don't know why. Fixed it.
2952 manually disabled, I don't know why. Fixed it.
2947 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2953 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2948 eps output.
2954 eps output.
2949
2955
2950 2002-11-12 Fernando Perez <fperez@colorado.edu>
2956 2002-11-12 Fernando Perez <fperez@colorado.edu>
2951
2957
2952 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2958 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2953 don't propagate up to caller. Fixes crash reported by François
2959 don't propagate up to caller. Fixes crash reported by François
2954 Pinard.
2960 Pinard.
2955
2961
2956 2002-11-09 Fernando Perez <fperez@colorado.edu>
2962 2002-11-09 Fernando Perez <fperez@colorado.edu>
2957
2963
2958 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2964 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2959 history file for new users.
2965 history file for new users.
2960 (make_IPython): fixed bug where initial install would leave the
2966 (make_IPython): fixed bug where initial install would leave the
2961 user running in the .ipython dir.
2967 user running in the .ipython dir.
2962 (make_IPython): fixed bug where config dir .ipython would be
2968 (make_IPython): fixed bug where config dir .ipython would be
2963 created regardless of the given -ipythondir option. Thanks to Cory
2969 created regardless of the given -ipythondir option. Thanks to Cory
2964 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2970 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2965
2971
2966 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2972 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2967 type confirmations. Will need to use it in all of IPython's code
2973 type confirmations. Will need to use it in all of IPython's code
2968 consistently.
2974 consistently.
2969
2975
2970 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2976 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2971 context to print 31 lines instead of the default 5. This will make
2977 context to print 31 lines instead of the default 5. This will make
2972 the crash reports extremely detailed in case the problem is in
2978 the crash reports extremely detailed in case the problem is in
2973 libraries I don't have access to.
2979 libraries I don't have access to.
2974
2980
2975 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2981 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2976 line of defense' code to still crash, but giving users fair
2982 line of defense' code to still crash, but giving users fair
2977 warning. I don't want internal errors to go unreported: if there's
2983 warning. I don't want internal errors to go unreported: if there's
2978 an internal problem, IPython should crash and generate a full
2984 an internal problem, IPython should crash and generate a full
2979 report.
2985 report.
2980
2986
2981 2002-11-08 Fernando Perez <fperez@colorado.edu>
2987 2002-11-08 Fernando Perez <fperez@colorado.edu>
2982
2988
2983 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2989 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2984 otherwise uncaught exceptions which can appear if people set
2990 otherwise uncaught exceptions which can appear if people set
2985 sys.stdout to something badly broken. Thanks to a crash report
2991 sys.stdout to something badly broken. Thanks to a crash report
2986 from henni-AT-mail.brainbot.com.
2992 from henni-AT-mail.brainbot.com.
2987
2993
2988 2002-11-04 Fernando Perez <fperez@colorado.edu>
2994 2002-11-04 Fernando Perez <fperez@colorado.edu>
2989
2995
2990 * IPython/iplib.py (InteractiveShell.interact): added
2996 * IPython/iplib.py (InteractiveShell.interact): added
2991 __IPYTHON__active to the builtins. It's a flag which goes on when
2997 __IPYTHON__active to the builtins. It's a flag which goes on when
2992 the interaction starts and goes off again when it stops. This
2998 the interaction starts and goes off again when it stops. This
2993 allows embedding code to detect being inside IPython. Before this
2999 allows embedding code to detect being inside IPython. Before this
2994 was done via __IPYTHON__, but that only shows that an IPython
3000 was done via __IPYTHON__, but that only shows that an IPython
2995 instance has been created.
3001 instance has been created.
2996
3002
2997 * IPython/Magic.py (Magic.magic_env): I realized that in a
3003 * IPython/Magic.py (Magic.magic_env): I realized that in a
2998 UserDict, instance.data holds the data as a normal dict. So I
3004 UserDict, instance.data holds the data as a normal dict. So I
2999 modified @env to return os.environ.data instead of rebuilding a
3005 modified @env to return os.environ.data instead of rebuilding a
3000 dict by hand.
3006 dict by hand.
3001
3007
3002 2002-11-02 Fernando Perez <fperez@colorado.edu>
3008 2002-11-02 Fernando Perez <fperez@colorado.edu>
3003
3009
3004 * IPython/genutils.py (warn): changed so that level 1 prints no
3010 * IPython/genutils.py (warn): changed so that level 1 prints no
3005 header. Level 2 is now the default (with 'WARNING' header, as
3011 header. Level 2 is now the default (with 'WARNING' header, as
3006 before). I think I tracked all places where changes were needed in
3012 before). I think I tracked all places where changes were needed in
3007 IPython, but outside code using the old level numbering may have
3013 IPython, but outside code using the old level numbering may have
3008 broken.
3014 broken.
3009
3015
3010 * IPython/iplib.py (InteractiveShell.runcode): added this to
3016 * IPython/iplib.py (InteractiveShell.runcode): added this to
3011 handle the tracebacks in SystemExit traps correctly. The previous
3017 handle the tracebacks in SystemExit traps correctly. The previous
3012 code (through interact) was printing more of the stack than
3018 code (through interact) was printing more of the stack than
3013 necessary, showing IPython internal code to the user.
3019 necessary, showing IPython internal code to the user.
3014
3020
3015 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3021 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3016 default. Now that the default at the confirmation prompt is yes,
3022 default. Now that the default at the confirmation prompt is yes,
3017 it's not so intrusive. François' argument that ipython sessions
3023 it's not so intrusive. François' argument that ipython sessions
3018 tend to be complex enough not to lose them from an accidental C-d,
3024 tend to be complex enough not to lose them from an accidental C-d,
3019 is a valid one.
3025 is a valid one.
3020
3026
3021 * IPython/iplib.py (InteractiveShell.interact): added a
3027 * IPython/iplib.py (InteractiveShell.interact): added a
3022 showtraceback() call to the SystemExit trap, and modified the exit
3028 showtraceback() call to the SystemExit trap, and modified the exit
3023 confirmation to have yes as the default.
3029 confirmation to have yes as the default.
3024
3030
3025 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3031 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3026 this file. It's been gone from the code for a long time, this was
3032 this file. It's been gone from the code for a long time, this was
3027 simply leftover junk.
3033 simply leftover junk.
3028
3034
3029 2002-11-01 Fernando Perez <fperez@colorado.edu>
3035 2002-11-01 Fernando Perez <fperez@colorado.edu>
3030
3036
3031 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3037 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3032 added. If set, IPython now traps EOF and asks for
3038 added. If set, IPython now traps EOF and asks for
3033 confirmation. After a request by François Pinard.
3039 confirmation. After a request by François Pinard.
3034
3040
3035 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3041 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3036 of @abort, and with a new (better) mechanism for handling the
3042 of @abort, and with a new (better) mechanism for handling the
3037 exceptions.
3043 exceptions.
3038
3044
3039 2002-10-27 Fernando Perez <fperez@colorado.edu>
3045 2002-10-27 Fernando Perez <fperez@colorado.edu>
3040
3046
3041 * IPython/usage.py (__doc__): updated the --help information and
3047 * IPython/usage.py (__doc__): updated the --help information and
3042 the ipythonrc file to indicate that -log generates
3048 the ipythonrc file to indicate that -log generates
3043 ./ipython.log. Also fixed the corresponding info in @logstart.
3049 ./ipython.log. Also fixed the corresponding info in @logstart.
3044 This and several other fixes in the manuals thanks to reports by
3050 This and several other fixes in the manuals thanks to reports by
3045 François Pinard <pinard-AT-iro.umontreal.ca>.
3051 François Pinard <pinard-AT-iro.umontreal.ca>.
3046
3052
3047 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3053 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3048 refer to @logstart (instead of @log, which doesn't exist).
3054 refer to @logstart (instead of @log, which doesn't exist).
3049
3055
3050 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3056 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3051 AttributeError crash. Thanks to Christopher Armstrong
3057 AttributeError crash. Thanks to Christopher Armstrong
3052 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3058 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3053 introduced recently (in 0.2.14pre37) with the fix to the eval
3059 introduced recently (in 0.2.14pre37) with the fix to the eval
3054 problem mentioned below.
3060 problem mentioned below.
3055
3061
3056 2002-10-17 Fernando Perez <fperez@colorado.edu>
3062 2002-10-17 Fernando Perez <fperez@colorado.edu>
3057
3063
3058 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3064 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3059 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3065 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3060
3066
3061 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3067 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3062 this function to fix a problem reported by Alex Schmolck. He saw
3068 this function to fix a problem reported by Alex Schmolck. He saw
3063 it with list comprehensions and generators, which were getting
3069 it with list comprehensions and generators, which were getting
3064 called twice. The real problem was an 'eval' call in testing for
3070 called twice. The real problem was an 'eval' call in testing for
3065 automagic which was evaluating the input line silently.
3071 automagic which was evaluating the input line silently.
3066
3072
3067 This is a potentially very nasty bug, if the input has side
3073 This is a potentially very nasty bug, if the input has side
3068 effects which must not be repeated. The code is much cleaner now,
3074 effects which must not be repeated. The code is much cleaner now,
3069 without any blanket 'except' left and with a regexp test for
3075 without any blanket 'except' left and with a regexp test for
3070 actual function names.
3076 actual function names.
3071
3077
3072 But an eval remains, which I'm not fully comfortable with. I just
3078 But an eval remains, which I'm not fully comfortable with. I just
3073 don't know how to find out if an expression could be a callable in
3079 don't know how to find out if an expression could be a callable in
3074 the user's namespace without doing an eval on the string. However
3080 the user's namespace without doing an eval on the string. However
3075 that string is now much more strictly checked so that no code
3081 that string is now much more strictly checked so that no code
3076 slips by, so the eval should only happen for things that can
3082 slips by, so the eval should only happen for things that can
3077 really be only function/method names.
3083 really be only function/method names.
3078
3084
3079 2002-10-15 Fernando Perez <fperez@colorado.edu>
3085 2002-10-15 Fernando Perez <fperez@colorado.edu>
3080
3086
3081 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3087 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3082 OSX information to main manual, removed README_Mac_OSX file from
3088 OSX information to main manual, removed README_Mac_OSX file from
3083 distribution. Also updated credits for recent additions.
3089 distribution. Also updated credits for recent additions.
3084
3090
3085 2002-10-10 Fernando Perez <fperez@colorado.edu>
3091 2002-10-10 Fernando Perez <fperez@colorado.edu>
3086
3092
3087 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3093 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3088 terminal-related issues. Many thanks to Andrea Riciputi
3094 terminal-related issues. Many thanks to Andrea Riciputi
3089 <andrea.riciputi-AT-libero.it> for writing it.
3095 <andrea.riciputi-AT-libero.it> for writing it.
3090
3096
3091 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3097 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3092 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3098 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3093
3099
3094 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3100 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3095 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3101 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3096 <syver-en-AT-online.no> who both submitted patches for this problem.
3102 <syver-en-AT-online.no> who both submitted patches for this problem.
3097
3103
3098 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3104 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3099 global embedding to make sure that things don't overwrite user
3105 global embedding to make sure that things don't overwrite user
3100 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3106 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3101
3107
3102 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3108 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3103 compatibility. Thanks to Hayden Callow
3109 compatibility. Thanks to Hayden Callow
3104 <h.callow-AT-elec.canterbury.ac.nz>
3110 <h.callow-AT-elec.canterbury.ac.nz>
3105
3111
3106 2002-10-04 Fernando Perez <fperez@colorado.edu>
3112 2002-10-04 Fernando Perez <fperez@colorado.edu>
3107
3113
3108 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3114 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3109 Gnuplot.File objects.
3115 Gnuplot.File objects.
3110
3116
3111 2002-07-23 Fernando Perez <fperez@colorado.edu>
3117 2002-07-23 Fernando Perez <fperez@colorado.edu>
3112
3118
3113 * IPython/genutils.py (timing): Added timings() and timing() for
3119 * IPython/genutils.py (timing): Added timings() and timing() for
3114 quick access to the most commonly needed data, the execution
3120 quick access to the most commonly needed data, the execution
3115 times. Old timing() renamed to timings_out().
3121 times. Old timing() renamed to timings_out().
3116
3122
3117 2002-07-18 Fernando Perez <fperez@colorado.edu>
3123 2002-07-18 Fernando Perez <fperez@colorado.edu>
3118
3124
3119 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3125 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3120 bug with nested instances disrupting the parent's tab completion.
3126 bug with nested instances disrupting the parent's tab completion.
3121
3127
3122 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3128 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3123 all_completions code to begin the emacs integration.
3129 all_completions code to begin the emacs integration.
3124
3130
3125 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3131 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3126 argument to allow titling individual arrays when plotting.
3132 argument to allow titling individual arrays when plotting.
3127
3133
3128 2002-07-15 Fernando Perez <fperez@colorado.edu>
3134 2002-07-15 Fernando Perez <fperez@colorado.edu>
3129
3135
3130 * setup.py (make_shortcut): changed to retrieve the value of
3136 * setup.py (make_shortcut): changed to retrieve the value of
3131 'Program Files' directory from the registry (this value changes in
3137 'Program Files' directory from the registry (this value changes in
3132 non-english versions of Windows). Thanks to Thomas Fanslau
3138 non-english versions of Windows). Thanks to Thomas Fanslau
3133 <tfanslau-AT-gmx.de> for the report.
3139 <tfanslau-AT-gmx.de> for the report.
3134
3140
3135 2002-07-10 Fernando Perez <fperez@colorado.edu>
3141 2002-07-10 Fernando Perez <fperez@colorado.edu>
3136
3142
3137 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3143 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3138 a bug in pdb, which crashes if a line with only whitespace is
3144 a bug in pdb, which crashes if a line with only whitespace is
3139 entered. Bug report submitted to sourceforge.
3145 entered. Bug report submitted to sourceforge.
3140
3146
3141 2002-07-09 Fernando Perez <fperez@colorado.edu>
3147 2002-07-09 Fernando Perez <fperez@colorado.edu>
3142
3148
3143 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3149 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3144 reporting exceptions (it's a bug in inspect.py, I just set a
3150 reporting exceptions (it's a bug in inspect.py, I just set a
3145 workaround).
3151 workaround).
3146
3152
3147 2002-07-08 Fernando Perez <fperez@colorado.edu>
3153 2002-07-08 Fernando Perez <fperez@colorado.edu>
3148
3154
3149 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3155 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3150 __IPYTHON__ in __builtins__ to show up in user_ns.
3156 __IPYTHON__ in __builtins__ to show up in user_ns.
3151
3157
3152 2002-07-03 Fernando Perez <fperez@colorado.edu>
3158 2002-07-03 Fernando Perez <fperez@colorado.edu>
3153
3159
3154 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3160 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3155 name from @gp_set_instance to @gp_set_default.
3161 name from @gp_set_instance to @gp_set_default.
3156
3162
3157 * IPython/ipmaker.py (make_IPython): default editor value set to
3163 * IPython/ipmaker.py (make_IPython): default editor value set to
3158 '0' (a string), to match the rc file. Otherwise will crash when
3164 '0' (a string), to match the rc file. Otherwise will crash when
3159 .strip() is called on it.
3165 .strip() is called on it.
3160
3166
3161
3167
3162 2002-06-28 Fernando Perez <fperez@colorado.edu>
3168 2002-06-28 Fernando Perez <fperez@colorado.edu>
3163
3169
3164 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3170 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3165 of files in current directory when a file is executed via
3171 of files in current directory when a file is executed via
3166 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3172 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3167
3173
3168 * setup.py (manfiles): fix for rpm builds, submitted by RA
3174 * setup.py (manfiles): fix for rpm builds, submitted by RA
3169 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3175 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3170
3176
3171 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3177 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3172 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3178 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3173 string!). A. Schmolck caught this one.
3179 string!). A. Schmolck caught this one.
3174
3180
3175 2002-06-27 Fernando Perez <fperez@colorado.edu>
3181 2002-06-27 Fernando Perez <fperez@colorado.edu>
3176
3182
3177 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3183 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3178 defined files at the cmd line. __name__ wasn't being set to
3184 defined files at the cmd line. __name__ wasn't being set to
3179 __main__.
3185 __main__.
3180
3186
3181 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3187 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3182 regular lists and tuples besides Numeric arrays.
3188 regular lists and tuples besides Numeric arrays.
3183
3189
3184 * IPython/Prompts.py (CachedOutput.__call__): Added output
3190 * IPython/Prompts.py (CachedOutput.__call__): Added output
3185 supression for input ending with ';'. Similar to Mathematica and
3191 supression for input ending with ';'. Similar to Mathematica and
3186 Matlab. The _* vars and Out[] list are still updated, just like
3192 Matlab. The _* vars and Out[] list are still updated, just like
3187 Mathematica behaves.
3193 Mathematica behaves.
3188
3194
3189 2002-06-25 Fernando Perez <fperez@colorado.edu>
3195 2002-06-25 Fernando Perez <fperez@colorado.edu>
3190
3196
3191 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3197 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3192 .ini extensions for profiels under Windows.
3198 .ini extensions for profiels under Windows.
3193
3199
3194 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3200 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3195 string form. Fix contributed by Alexander Schmolck
3201 string form. Fix contributed by Alexander Schmolck
3196 <a.schmolck-AT-gmx.net>
3202 <a.schmolck-AT-gmx.net>
3197
3203
3198 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3204 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3199 pre-configured Gnuplot instance.
3205 pre-configured Gnuplot instance.
3200
3206
3201 2002-06-21 Fernando Perez <fperez@colorado.edu>
3207 2002-06-21 Fernando Perez <fperez@colorado.edu>
3202
3208
3203 * IPython/numutils.py (exp_safe): new function, works around the
3209 * IPython/numutils.py (exp_safe): new function, works around the
3204 underflow problems in Numeric.
3210 underflow problems in Numeric.
3205 (log2): New fn. Safe log in base 2: returns exact integer answer
3211 (log2): New fn. Safe log in base 2: returns exact integer answer
3206 for exact integer powers of 2.
3212 for exact integer powers of 2.
3207
3213
3208 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3214 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3209 properly.
3215 properly.
3210
3216
3211 2002-06-20 Fernando Perez <fperez@colorado.edu>
3217 2002-06-20 Fernando Perez <fperez@colorado.edu>
3212
3218
3213 * IPython/genutils.py (timing): new function like
3219 * IPython/genutils.py (timing): new function like
3214 Mathematica's. Similar to time_test, but returns more info.
3220 Mathematica's. Similar to time_test, but returns more info.
3215
3221
3216 2002-06-18 Fernando Perez <fperez@colorado.edu>
3222 2002-06-18 Fernando Perez <fperez@colorado.edu>
3217
3223
3218 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3224 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3219 according to Mike Heeter's suggestions.
3225 according to Mike Heeter's suggestions.
3220
3226
3221 2002-06-16 Fernando Perez <fperez@colorado.edu>
3227 2002-06-16 Fernando Perez <fperez@colorado.edu>
3222
3228
3223 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3229 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3224 system. GnuplotMagic is gone as a user-directory option. New files
3230 system. GnuplotMagic is gone as a user-directory option. New files
3225 make it easier to use all the gnuplot stuff both from external
3231 make it easier to use all the gnuplot stuff both from external
3226 programs as well as from IPython. Had to rewrite part of
3232 programs as well as from IPython. Had to rewrite part of
3227 hardcopy() b/c of a strange bug: often the ps files simply don't
3233 hardcopy() b/c of a strange bug: often the ps files simply don't
3228 get created, and require a repeat of the command (often several
3234 get created, and require a repeat of the command (often several
3229 times).
3235 times).
3230
3236
3231 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3237 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3232 resolve output channel at call time, so that if sys.stderr has
3238 resolve output channel at call time, so that if sys.stderr has
3233 been redirected by user this gets honored.
3239 been redirected by user this gets honored.
3234
3240
3235 2002-06-13 Fernando Perez <fperez@colorado.edu>
3241 2002-06-13 Fernando Perez <fperez@colorado.edu>
3236
3242
3237 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3243 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3238 IPShell. Kept a copy with the old names to avoid breaking people's
3244 IPShell. Kept a copy with the old names to avoid breaking people's
3239 embedded code.
3245 embedded code.
3240
3246
3241 * IPython/ipython: simplified it to the bare minimum after
3247 * IPython/ipython: simplified it to the bare minimum after
3242 Holger's suggestions. Added info about how to use it in
3248 Holger's suggestions. Added info about how to use it in
3243 PYTHONSTARTUP.
3249 PYTHONSTARTUP.
3244
3250
3245 * IPython/Shell.py (IPythonShell): changed the options passing
3251 * IPython/Shell.py (IPythonShell): changed the options passing
3246 from a string with funky %s replacements to a straight list. Maybe
3252 from a string with funky %s replacements to a straight list. Maybe
3247 a bit more typing, but it follows sys.argv conventions, so there's
3253 a bit more typing, but it follows sys.argv conventions, so there's
3248 less special-casing to remember.
3254 less special-casing to remember.
3249
3255
3250 2002-06-12 Fernando Perez <fperez@colorado.edu>
3256 2002-06-12 Fernando Perez <fperez@colorado.edu>
3251
3257
3252 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3258 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3253 command. Thanks to a suggestion by Mike Heeter.
3259 command. Thanks to a suggestion by Mike Heeter.
3254 (Magic.magic_pfile): added behavior to look at filenames if given
3260 (Magic.magic_pfile): added behavior to look at filenames if given
3255 arg is not a defined object.
3261 arg is not a defined object.
3256 (Magic.magic_save): New @save function to save code snippets. Also
3262 (Magic.magic_save): New @save function to save code snippets. Also
3257 a Mike Heeter idea.
3263 a Mike Heeter idea.
3258
3264
3259 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3265 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3260 plot() and replot(). Much more convenient now, especially for
3266 plot() and replot(). Much more convenient now, especially for
3261 interactive use.
3267 interactive use.
3262
3268
3263 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3269 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3264 filenames.
3270 filenames.
3265
3271
3266 2002-06-02 Fernando Perez <fperez@colorado.edu>
3272 2002-06-02 Fernando Perez <fperez@colorado.edu>
3267
3273
3268 * IPython/Struct.py (Struct.__init__): modified to admit
3274 * IPython/Struct.py (Struct.__init__): modified to admit
3269 initialization via another struct.
3275 initialization via another struct.
3270
3276
3271 * IPython/genutils.py (SystemExec.__init__): New stateful
3277 * IPython/genutils.py (SystemExec.__init__): New stateful
3272 interface to xsys and bq. Useful for writing system scripts.
3278 interface to xsys and bq. Useful for writing system scripts.
3273
3279
3274 2002-05-30 Fernando Perez <fperez@colorado.edu>
3280 2002-05-30 Fernando Perez <fperez@colorado.edu>
3275
3281
3276 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3282 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3277 documents. This will make the user download smaller (it's getting
3283 documents. This will make the user download smaller (it's getting
3278 too big).
3284 too big).
3279
3285
3280 2002-05-29 Fernando Perez <fperez@colorado.edu>
3286 2002-05-29 Fernando Perez <fperez@colorado.edu>
3281
3287
3282 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3288 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3283 fix problems with shelve and pickle. Seems to work, but I don't
3289 fix problems with shelve and pickle. Seems to work, but I don't
3284 know if corner cases break it. Thanks to Mike Heeter
3290 know if corner cases break it. Thanks to Mike Heeter
3285 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3291 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3286
3292
3287 2002-05-24 Fernando Perez <fperez@colorado.edu>
3293 2002-05-24 Fernando Perez <fperez@colorado.edu>
3288
3294
3289 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3295 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3290 macros having broken.
3296 macros having broken.
3291
3297
3292 2002-05-21 Fernando Perez <fperez@colorado.edu>
3298 2002-05-21 Fernando Perez <fperez@colorado.edu>
3293
3299
3294 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3300 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3295 introduced logging bug: all history before logging started was
3301 introduced logging bug: all history before logging started was
3296 being written one character per line! This came from the redesign
3302 being written one character per line! This came from the redesign
3297 of the input history as a special list which slices to strings,
3303 of the input history as a special list which slices to strings,
3298 not to lists.
3304 not to lists.
3299
3305
3300 2002-05-20 Fernando Perez <fperez@colorado.edu>
3306 2002-05-20 Fernando Perez <fperez@colorado.edu>
3301
3307
3302 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3308 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3303 be an attribute of all classes in this module. The design of these
3309 be an attribute of all classes in this module. The design of these
3304 classes needs some serious overhauling.
3310 classes needs some serious overhauling.
3305
3311
3306 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3312 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3307 which was ignoring '_' in option names.
3313 which was ignoring '_' in option names.
3308
3314
3309 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3315 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3310 'Verbose_novars' to 'Context' and made it the new default. It's a
3316 'Verbose_novars' to 'Context' and made it the new default. It's a
3311 bit more readable and also safer than verbose.
3317 bit more readable and also safer than verbose.
3312
3318
3313 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3319 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3314 triple-quoted strings.
3320 triple-quoted strings.
3315
3321
3316 * IPython/OInspect.py (__all__): new module exposing the object
3322 * IPython/OInspect.py (__all__): new module exposing the object
3317 introspection facilities. Now the corresponding magics are dummy
3323 introspection facilities. Now the corresponding magics are dummy
3318 wrappers around this. Having this module will make it much easier
3324 wrappers around this. Having this module will make it much easier
3319 to put these functions into our modified pdb.
3325 to put these functions into our modified pdb.
3320 This new object inspector system uses the new colorizing module,
3326 This new object inspector system uses the new colorizing module,
3321 so source code and other things are nicely syntax highlighted.
3327 so source code and other things are nicely syntax highlighted.
3322
3328
3323 2002-05-18 Fernando Perez <fperez@colorado.edu>
3329 2002-05-18 Fernando Perez <fperez@colorado.edu>
3324
3330
3325 * IPython/ColorANSI.py: Split the coloring tools into a separate
3331 * IPython/ColorANSI.py: Split the coloring tools into a separate
3326 module so I can use them in other code easier (they were part of
3332 module so I can use them in other code easier (they were part of
3327 ultraTB).
3333 ultraTB).
3328
3334
3329 2002-05-17 Fernando Perez <fperez@colorado.edu>
3335 2002-05-17 Fernando Perez <fperez@colorado.edu>
3330
3336
3331 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3337 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3332 fixed it to set the global 'g' also to the called instance, as
3338 fixed it to set the global 'g' also to the called instance, as
3333 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3339 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3334 user's 'g' variables).
3340 user's 'g' variables).
3335
3341
3336 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3342 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3337 global variables (aliases to _ih,_oh) so that users which expect
3343 global variables (aliases to _ih,_oh) so that users which expect
3338 In[5] or Out[7] to work aren't unpleasantly surprised.
3344 In[5] or Out[7] to work aren't unpleasantly surprised.
3339 (InputList.__getslice__): new class to allow executing slices of
3345 (InputList.__getslice__): new class to allow executing slices of
3340 input history directly. Very simple class, complements the use of
3346 input history directly. Very simple class, complements the use of
3341 macros.
3347 macros.
3342
3348
3343 2002-05-16 Fernando Perez <fperez@colorado.edu>
3349 2002-05-16 Fernando Perez <fperez@colorado.edu>
3344
3350
3345 * setup.py (docdirbase): make doc directory be just doc/IPython
3351 * setup.py (docdirbase): make doc directory be just doc/IPython
3346 without version numbers, it will reduce clutter for users.
3352 without version numbers, it will reduce clutter for users.
3347
3353
3348 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3354 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3349 execfile call to prevent possible memory leak. See for details:
3355 execfile call to prevent possible memory leak. See for details:
3350 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3356 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3351
3357
3352 2002-05-15 Fernando Perez <fperez@colorado.edu>
3358 2002-05-15 Fernando Perez <fperez@colorado.edu>
3353
3359
3354 * IPython/Magic.py (Magic.magic_psource): made the object
3360 * IPython/Magic.py (Magic.magic_psource): made the object
3355 introspection names be more standard: pdoc, pdef, pfile and
3361 introspection names be more standard: pdoc, pdef, pfile and
3356 psource. They all print/page their output, and it makes
3362 psource. They all print/page their output, and it makes
3357 remembering them easier. Kept old names for compatibility as
3363 remembering them easier. Kept old names for compatibility as
3358 aliases.
3364 aliases.
3359
3365
3360 2002-05-14 Fernando Perez <fperez@colorado.edu>
3366 2002-05-14 Fernando Perez <fperez@colorado.edu>
3361
3367
3362 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3368 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3363 what the mouse problem was. The trick is to use gnuplot with temp
3369 what the mouse problem was. The trick is to use gnuplot with temp
3364 files and NOT with pipes (for data communication), because having
3370 files and NOT with pipes (for data communication), because having
3365 both pipes and the mouse on is bad news.
3371 both pipes and the mouse on is bad news.
3366
3372
3367 2002-05-13 Fernando Perez <fperez@colorado.edu>
3373 2002-05-13 Fernando Perez <fperez@colorado.edu>
3368
3374
3369 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3375 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3370 bug. Information would be reported about builtins even when
3376 bug. Information would be reported about builtins even when
3371 user-defined functions overrode them.
3377 user-defined functions overrode them.
3372
3378
3373 2002-05-11 Fernando Perez <fperez@colorado.edu>
3379 2002-05-11 Fernando Perez <fperez@colorado.edu>
3374
3380
3375 * IPython/__init__.py (__all__): removed FlexCompleter from
3381 * IPython/__init__.py (__all__): removed FlexCompleter from
3376 __all__ so that things don't fail in platforms without readline.
3382 __all__ so that things don't fail in platforms without readline.
3377
3383
3378 2002-05-10 Fernando Perez <fperez@colorado.edu>
3384 2002-05-10 Fernando Perez <fperez@colorado.edu>
3379
3385
3380 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3386 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3381 it requires Numeric, effectively making Numeric a dependency for
3387 it requires Numeric, effectively making Numeric a dependency for
3382 IPython.
3388 IPython.
3383
3389
3384 * Released 0.2.13
3390 * Released 0.2.13
3385
3391
3386 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3392 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3387 profiler interface. Now all the major options from the profiler
3393 profiler interface. Now all the major options from the profiler
3388 module are directly supported in IPython, both for single
3394 module are directly supported in IPython, both for single
3389 expressions (@prun) and for full programs (@run -p).
3395 expressions (@prun) and for full programs (@run -p).
3390
3396
3391 2002-05-09 Fernando Perez <fperez@colorado.edu>
3397 2002-05-09 Fernando Perez <fperez@colorado.edu>
3392
3398
3393 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3399 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3394 magic properly formatted for screen.
3400 magic properly formatted for screen.
3395
3401
3396 * setup.py (make_shortcut): Changed things to put pdf version in
3402 * setup.py (make_shortcut): Changed things to put pdf version in
3397 doc/ instead of doc/manual (had to change lyxport a bit).
3403 doc/ instead of doc/manual (had to change lyxport a bit).
3398
3404
3399 * IPython/Magic.py (Profile.string_stats): made profile runs go
3405 * IPython/Magic.py (Profile.string_stats): made profile runs go
3400 through pager (they are long and a pager allows searching, saving,
3406 through pager (they are long and a pager allows searching, saving,
3401 etc.)
3407 etc.)
3402
3408
3403 2002-05-08 Fernando Perez <fperez@colorado.edu>
3409 2002-05-08 Fernando Perez <fperez@colorado.edu>
3404
3410
3405 * Released 0.2.12
3411 * Released 0.2.12
3406
3412
3407 2002-05-06 Fernando Perez <fperez@colorado.edu>
3413 2002-05-06 Fernando Perez <fperez@colorado.edu>
3408
3414
3409 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3415 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3410 introduced); 'hist n1 n2' was broken.
3416 introduced); 'hist n1 n2' was broken.
3411 (Magic.magic_pdb): added optional on/off arguments to @pdb
3417 (Magic.magic_pdb): added optional on/off arguments to @pdb
3412 (Magic.magic_run): added option -i to @run, which executes code in
3418 (Magic.magic_run): added option -i to @run, which executes code in
3413 the IPython namespace instead of a clean one. Also added @irun as
3419 the IPython namespace instead of a clean one. Also added @irun as
3414 an alias to @run -i.
3420 an alias to @run -i.
3415
3421
3416 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3422 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3417 fixed (it didn't really do anything, the namespaces were wrong).
3423 fixed (it didn't really do anything, the namespaces were wrong).
3418
3424
3419 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3425 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3420
3426
3421 * IPython/__init__.py (__all__): Fixed package namespace, now
3427 * IPython/__init__.py (__all__): Fixed package namespace, now
3422 'import IPython' does give access to IPython.<all> as
3428 'import IPython' does give access to IPython.<all> as
3423 expected. Also renamed __release__ to Release.
3429 expected. Also renamed __release__ to Release.
3424
3430
3425 * IPython/Debugger.py (__license__): created new Pdb class which
3431 * IPython/Debugger.py (__license__): created new Pdb class which
3426 functions like a drop-in for the normal pdb.Pdb but does NOT
3432 functions like a drop-in for the normal pdb.Pdb but does NOT
3427 import readline by default. This way it doesn't muck up IPython's
3433 import readline by default. This way it doesn't muck up IPython's
3428 readline handling, and now tab-completion finally works in the
3434 readline handling, and now tab-completion finally works in the
3429 debugger -- sort of. It completes things globally visible, but the
3435 debugger -- sort of. It completes things globally visible, but the
3430 completer doesn't track the stack as pdb walks it. That's a bit
3436 completer doesn't track the stack as pdb walks it. That's a bit
3431 tricky, and I'll have to implement it later.
3437 tricky, and I'll have to implement it later.
3432
3438
3433 2002-05-05 Fernando Perez <fperez@colorado.edu>
3439 2002-05-05 Fernando Perez <fperez@colorado.edu>
3434
3440
3435 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3441 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3436 magic docstrings when printed via ? (explicit \'s were being
3442 magic docstrings when printed via ? (explicit \'s were being
3437 printed).
3443 printed).
3438
3444
3439 * IPython/ipmaker.py (make_IPython): fixed namespace
3445 * IPython/ipmaker.py (make_IPython): fixed namespace
3440 identification bug. Now variables loaded via logs or command-line
3446 identification bug. Now variables loaded via logs or command-line
3441 files are recognized in the interactive namespace by @who.
3447 files are recognized in the interactive namespace by @who.
3442
3448
3443 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3449 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3444 log replay system stemming from the string form of Structs.
3450 log replay system stemming from the string form of Structs.
3445
3451
3446 * IPython/Magic.py (Macro.__init__): improved macros to properly
3452 * IPython/Magic.py (Macro.__init__): improved macros to properly
3447 handle magic commands in them.
3453 handle magic commands in them.
3448 (Magic.magic_logstart): usernames are now expanded so 'logstart
3454 (Magic.magic_logstart): usernames are now expanded so 'logstart
3449 ~/mylog' now works.
3455 ~/mylog' now works.
3450
3456
3451 * IPython/iplib.py (complete): fixed bug where paths starting with
3457 * IPython/iplib.py (complete): fixed bug where paths starting with
3452 '/' would be completed as magic names.
3458 '/' would be completed as magic names.
3453
3459
3454 2002-05-04 Fernando Perez <fperez@colorado.edu>
3460 2002-05-04 Fernando Perez <fperez@colorado.edu>
3455
3461
3456 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3462 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3457 allow running full programs under the profiler's control.
3463 allow running full programs under the profiler's control.
3458
3464
3459 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3465 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3460 mode to report exceptions verbosely but without formatting
3466 mode to report exceptions verbosely but without formatting
3461 variables. This addresses the issue of ipython 'freezing' (it's
3467 variables. This addresses the issue of ipython 'freezing' (it's
3462 not frozen, but caught in an expensive formatting loop) when huge
3468 not frozen, but caught in an expensive formatting loop) when huge
3463 variables are in the context of an exception.
3469 variables are in the context of an exception.
3464 (VerboseTB.text): Added '--->' markers at line where exception was
3470 (VerboseTB.text): Added '--->' markers at line where exception was
3465 triggered. Much clearer to read, especially in NoColor modes.
3471 triggered. Much clearer to read, especially in NoColor modes.
3466
3472
3467 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3473 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3468 implemented in reverse when changing to the new parse_options().
3474 implemented in reverse when changing to the new parse_options().
3469
3475
3470 2002-05-03 Fernando Perez <fperez@colorado.edu>
3476 2002-05-03 Fernando Perez <fperez@colorado.edu>
3471
3477
3472 * IPython/Magic.py (Magic.parse_options): new function so that
3478 * IPython/Magic.py (Magic.parse_options): new function so that
3473 magics can parse options easier.
3479 magics can parse options easier.
3474 (Magic.magic_prun): new function similar to profile.run(),
3480 (Magic.magic_prun): new function similar to profile.run(),
3475 suggested by Chris Hart.
3481 suggested by Chris Hart.
3476 (Magic.magic_cd): fixed behavior so that it only changes if
3482 (Magic.magic_cd): fixed behavior so that it only changes if
3477 directory actually is in history.
3483 directory actually is in history.
3478
3484
3479 * IPython/usage.py (__doc__): added information about potential
3485 * IPython/usage.py (__doc__): added information about potential
3480 slowness of Verbose exception mode when there are huge data
3486 slowness of Verbose exception mode when there are huge data
3481 structures to be formatted (thanks to Archie Paulson).
3487 structures to be formatted (thanks to Archie Paulson).
3482
3488
3483 * IPython/ipmaker.py (make_IPython): Changed default logging
3489 * IPython/ipmaker.py (make_IPython): Changed default logging
3484 (when simply called with -log) to use curr_dir/ipython.log in
3490 (when simply called with -log) to use curr_dir/ipython.log in
3485 rotate mode. Fixed crash which was occuring with -log before
3491 rotate mode. Fixed crash which was occuring with -log before
3486 (thanks to Jim Boyle).
3492 (thanks to Jim Boyle).
3487
3493
3488 2002-05-01 Fernando Perez <fperez@colorado.edu>
3494 2002-05-01 Fernando Perez <fperez@colorado.edu>
3489
3495
3490 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3496 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3491 was nasty -- though somewhat of a corner case).
3497 was nasty -- though somewhat of a corner case).
3492
3498
3493 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3499 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3494 text (was a bug).
3500 text (was a bug).
3495
3501
3496 2002-04-30 Fernando Perez <fperez@colorado.edu>
3502 2002-04-30 Fernando Perez <fperez@colorado.edu>
3497
3503
3498 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3504 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3499 a print after ^D or ^C from the user so that the In[] prompt
3505 a print after ^D or ^C from the user so that the In[] prompt
3500 doesn't over-run the gnuplot one.
3506 doesn't over-run the gnuplot one.
3501
3507
3502 2002-04-29 Fernando Perez <fperez@colorado.edu>
3508 2002-04-29 Fernando Perez <fperez@colorado.edu>
3503
3509
3504 * Released 0.2.10
3510 * Released 0.2.10
3505
3511
3506 * IPython/__release__.py (version): get date dynamically.
3512 * IPython/__release__.py (version): get date dynamically.
3507
3513
3508 * Misc. documentation updates thanks to Arnd's comments. Also ran
3514 * Misc. documentation updates thanks to Arnd's comments. Also ran
3509 a full spellcheck on the manual (hadn't been done in a while).
3515 a full spellcheck on the manual (hadn't been done in a while).
3510
3516
3511 2002-04-27 Fernando Perez <fperez@colorado.edu>
3517 2002-04-27 Fernando Perez <fperez@colorado.edu>
3512
3518
3513 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3519 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3514 starting a log in mid-session would reset the input history list.
3520 starting a log in mid-session would reset the input history list.
3515
3521
3516 2002-04-26 Fernando Perez <fperez@colorado.edu>
3522 2002-04-26 Fernando Perez <fperez@colorado.edu>
3517
3523
3518 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3524 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3519 all files were being included in an update. Now anything in
3525 all files were being included in an update. Now anything in
3520 UserConfig that matches [A-Za-z]*.py will go (this excludes
3526 UserConfig that matches [A-Za-z]*.py will go (this excludes
3521 __init__.py)
3527 __init__.py)
3522
3528
3523 2002-04-25 Fernando Perez <fperez@colorado.edu>
3529 2002-04-25 Fernando Perez <fperez@colorado.edu>
3524
3530
3525 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3531 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3526 to __builtins__ so that any form of embedded or imported code can
3532 to __builtins__ so that any form of embedded or imported code can
3527 test for being inside IPython.
3533 test for being inside IPython.
3528
3534
3529 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3535 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3530 changed to GnuplotMagic because it's now an importable module,
3536 changed to GnuplotMagic because it's now an importable module,
3531 this makes the name follow that of the standard Gnuplot module.
3537 this makes the name follow that of the standard Gnuplot module.
3532 GnuplotMagic can now be loaded at any time in mid-session.
3538 GnuplotMagic can now be loaded at any time in mid-session.
3533
3539
3534 2002-04-24 Fernando Perez <fperez@colorado.edu>
3540 2002-04-24 Fernando Perez <fperez@colorado.edu>
3535
3541
3536 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3542 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3537 the globals (IPython has its own namespace) and the
3543 the globals (IPython has its own namespace) and the
3538 PhysicalQuantity stuff is much better anyway.
3544 PhysicalQuantity stuff is much better anyway.
3539
3545
3540 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3546 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3541 embedding example to standard user directory for
3547 embedding example to standard user directory for
3542 distribution. Also put it in the manual.
3548 distribution. Also put it in the manual.
3543
3549
3544 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3550 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3545 instance as first argument (so it doesn't rely on some obscure
3551 instance as first argument (so it doesn't rely on some obscure
3546 hidden global).
3552 hidden global).
3547
3553
3548 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3554 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3549 delimiters. While it prevents ().TAB from working, it allows
3555 delimiters. While it prevents ().TAB from working, it allows
3550 completions in open (... expressions. This is by far a more common
3556 completions in open (... expressions. This is by far a more common
3551 case.
3557 case.
3552
3558
3553 2002-04-23 Fernando Perez <fperez@colorado.edu>
3559 2002-04-23 Fernando Perez <fperez@colorado.edu>
3554
3560
3555 * IPython/Extensions/InterpreterPasteInput.py: new
3561 * IPython/Extensions/InterpreterPasteInput.py: new
3556 syntax-processing module for pasting lines with >>> or ... at the
3562 syntax-processing module for pasting lines with >>> or ... at the
3557 start.
3563 start.
3558
3564
3559 * IPython/Extensions/PhysicalQ_Interactive.py
3565 * IPython/Extensions/PhysicalQ_Interactive.py
3560 (PhysicalQuantityInteractive.__int__): fixed to work with either
3566 (PhysicalQuantityInteractive.__int__): fixed to work with either
3561 Numeric or math.
3567 Numeric or math.
3562
3568
3563 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3569 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3564 provided profiles. Now we have:
3570 provided profiles. Now we have:
3565 -math -> math module as * and cmath with its own namespace.
3571 -math -> math module as * and cmath with its own namespace.
3566 -numeric -> Numeric as *, plus gnuplot & grace
3572 -numeric -> Numeric as *, plus gnuplot & grace
3567 -physics -> same as before
3573 -physics -> same as before
3568
3574
3569 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3575 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3570 user-defined magics wouldn't be found by @magic if they were
3576 user-defined magics wouldn't be found by @magic if they were
3571 defined as class methods. Also cleaned up the namespace search
3577 defined as class methods. Also cleaned up the namespace search
3572 logic and the string building (to use %s instead of many repeated
3578 logic and the string building (to use %s instead of many repeated
3573 string adds).
3579 string adds).
3574
3580
3575 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3581 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3576 of user-defined magics to operate with class methods (cleaner, in
3582 of user-defined magics to operate with class methods (cleaner, in
3577 line with the gnuplot code).
3583 line with the gnuplot code).
3578
3584
3579 2002-04-22 Fernando Perez <fperez@colorado.edu>
3585 2002-04-22 Fernando Perez <fperez@colorado.edu>
3580
3586
3581 * setup.py: updated dependency list so that manual is updated when
3587 * setup.py: updated dependency list so that manual is updated when
3582 all included files change.
3588 all included files change.
3583
3589
3584 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3590 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3585 the delimiter removal option (the fix is ugly right now).
3591 the delimiter removal option (the fix is ugly right now).
3586
3592
3587 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3593 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3588 all of the math profile (quicker loading, no conflict between
3594 all of the math profile (quicker loading, no conflict between
3589 g-9.8 and g-gnuplot).
3595 g-9.8 and g-gnuplot).
3590
3596
3591 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3597 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3592 name of post-mortem files to IPython_crash_report.txt.
3598 name of post-mortem files to IPython_crash_report.txt.
3593
3599
3594 * Cleanup/update of the docs. Added all the new readline info and
3600 * Cleanup/update of the docs. Added all the new readline info and
3595 formatted all lists as 'real lists'.
3601 formatted all lists as 'real lists'.
3596
3602
3597 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3603 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3598 tab-completion options, since the full readline parse_and_bind is
3604 tab-completion options, since the full readline parse_and_bind is
3599 now accessible.
3605 now accessible.
3600
3606
3601 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3607 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3602 handling of readline options. Now users can specify any string to
3608 handling of readline options. Now users can specify any string to
3603 be passed to parse_and_bind(), as well as the delimiters to be
3609 be passed to parse_and_bind(), as well as the delimiters to be
3604 removed.
3610 removed.
3605 (InteractiveShell.__init__): Added __name__ to the global
3611 (InteractiveShell.__init__): Added __name__ to the global
3606 namespace so that things like Itpl which rely on its existence
3612 namespace so that things like Itpl which rely on its existence
3607 don't crash.
3613 don't crash.
3608 (InteractiveShell._prefilter): Defined the default with a _ so
3614 (InteractiveShell._prefilter): Defined the default with a _ so
3609 that prefilter() is easier to override, while the default one
3615 that prefilter() is easier to override, while the default one
3610 remains available.
3616 remains available.
3611
3617
3612 2002-04-18 Fernando Perez <fperez@colorado.edu>
3618 2002-04-18 Fernando Perez <fperez@colorado.edu>
3613
3619
3614 * Added information about pdb in the docs.
3620 * Added information about pdb in the docs.
3615
3621
3616 2002-04-17 Fernando Perez <fperez@colorado.edu>
3622 2002-04-17 Fernando Perez <fperez@colorado.edu>
3617
3623
3618 * IPython/ipmaker.py (make_IPython): added rc_override option to
3624 * IPython/ipmaker.py (make_IPython): added rc_override option to
3619 allow passing config options at creation time which may override
3625 allow passing config options at creation time which may override
3620 anything set in the config files or command line. This is
3626 anything set in the config files or command line. This is
3621 particularly useful for configuring embedded instances.
3627 particularly useful for configuring embedded instances.
3622
3628
3623 2002-04-15 Fernando Perez <fperez@colorado.edu>
3629 2002-04-15 Fernando Perez <fperez@colorado.edu>
3624
3630
3625 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3631 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3626 crash embedded instances because of the input cache falling out of
3632 crash embedded instances because of the input cache falling out of
3627 sync with the output counter.
3633 sync with the output counter.
3628
3634
3629 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3635 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3630 mode which calls pdb after an uncaught exception in IPython itself.
3636 mode which calls pdb after an uncaught exception in IPython itself.
3631
3637
3632 2002-04-14 Fernando Perez <fperez@colorado.edu>
3638 2002-04-14 Fernando Perez <fperez@colorado.edu>
3633
3639
3634 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3640 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3635 readline, fix it back after each call.
3641 readline, fix it back after each call.
3636
3642
3637 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3643 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3638 method to force all access via __call__(), which guarantees that
3644 method to force all access via __call__(), which guarantees that
3639 traceback references are properly deleted.
3645 traceback references are properly deleted.
3640
3646
3641 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3647 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3642 improve printing when pprint is in use.
3648 improve printing when pprint is in use.
3643
3649
3644 2002-04-13 Fernando Perez <fperez@colorado.edu>
3650 2002-04-13 Fernando Perez <fperez@colorado.edu>
3645
3651
3646 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3652 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3647 exceptions aren't caught anymore. If the user triggers one, he
3653 exceptions aren't caught anymore. If the user triggers one, he
3648 should know why he's doing it and it should go all the way up,
3654 should know why he's doing it and it should go all the way up,
3649 just like any other exception. So now @abort will fully kill the
3655 just like any other exception. So now @abort will fully kill the
3650 embedded interpreter and the embedding code (unless that happens
3656 embedded interpreter and the embedding code (unless that happens
3651 to catch SystemExit).
3657 to catch SystemExit).
3652
3658
3653 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3659 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3654 and a debugger() method to invoke the interactive pdb debugger
3660 and a debugger() method to invoke the interactive pdb debugger
3655 after printing exception information. Also added the corresponding
3661 after printing exception information. Also added the corresponding
3656 -pdb option and @pdb magic to control this feature, and updated
3662 -pdb option and @pdb magic to control this feature, and updated
3657 the docs. After a suggestion from Christopher Hart
3663 the docs. After a suggestion from Christopher Hart
3658 (hart-AT-caltech.edu).
3664 (hart-AT-caltech.edu).
3659
3665
3660 2002-04-12 Fernando Perez <fperez@colorado.edu>
3666 2002-04-12 Fernando Perez <fperez@colorado.edu>
3661
3667
3662 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3668 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3663 the exception handlers defined by the user (not the CrashHandler)
3669 the exception handlers defined by the user (not the CrashHandler)
3664 so that user exceptions don't trigger an ipython bug report.
3670 so that user exceptions don't trigger an ipython bug report.
3665
3671
3666 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3672 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3667 configurable (it should have always been so).
3673 configurable (it should have always been so).
3668
3674
3669 2002-03-26 Fernando Perez <fperez@colorado.edu>
3675 2002-03-26 Fernando Perez <fperez@colorado.edu>
3670
3676
3671 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3677 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3672 and there to fix embedding namespace issues. This should all be
3678 and there to fix embedding namespace issues. This should all be
3673 done in a more elegant way.
3679 done in a more elegant way.
3674
3680
3675 2002-03-25 Fernando Perez <fperez@colorado.edu>
3681 2002-03-25 Fernando Perez <fperez@colorado.edu>
3676
3682
3677 * IPython/genutils.py (get_home_dir): Try to make it work under
3683 * IPython/genutils.py (get_home_dir): Try to make it work under
3678 win9x also.
3684 win9x also.
3679
3685
3680 2002-03-20 Fernando Perez <fperez@colorado.edu>
3686 2002-03-20 Fernando Perez <fperez@colorado.edu>
3681
3687
3682 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3688 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3683 sys.displayhook untouched upon __init__.
3689 sys.displayhook untouched upon __init__.
3684
3690
3685 2002-03-19 Fernando Perez <fperez@colorado.edu>
3691 2002-03-19 Fernando Perez <fperez@colorado.edu>
3686
3692
3687 * Released 0.2.9 (for embedding bug, basically).
3693 * Released 0.2.9 (for embedding bug, basically).
3688
3694
3689 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3695 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3690 exceptions so that enclosing shell's state can be restored.
3696 exceptions so that enclosing shell's state can be restored.
3691
3697
3692 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3698 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3693 naming conventions in the .ipython/ dir.
3699 naming conventions in the .ipython/ dir.
3694
3700
3695 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3701 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3696 from delimiters list so filenames with - in them get expanded.
3702 from delimiters list so filenames with - in them get expanded.
3697
3703
3698 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3704 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3699 sys.displayhook not being properly restored after an embedded call.
3705 sys.displayhook not being properly restored after an embedded call.
3700
3706
3701 2002-03-18 Fernando Perez <fperez@colorado.edu>
3707 2002-03-18 Fernando Perez <fperez@colorado.edu>
3702
3708
3703 * Released 0.2.8
3709 * Released 0.2.8
3704
3710
3705 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3711 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3706 some files weren't being included in a -upgrade.
3712 some files weren't being included in a -upgrade.
3707 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3713 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3708 on' so that the first tab completes.
3714 on' so that the first tab completes.
3709 (InteractiveShell.handle_magic): fixed bug with spaces around
3715 (InteractiveShell.handle_magic): fixed bug with spaces around
3710 quotes breaking many magic commands.
3716 quotes breaking many magic commands.
3711
3717
3712 * setup.py: added note about ignoring the syntax error messages at
3718 * setup.py: added note about ignoring the syntax error messages at
3713 installation.
3719 installation.
3714
3720
3715 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3721 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3716 streamlining the gnuplot interface, now there's only one magic @gp.
3722 streamlining the gnuplot interface, now there's only one magic @gp.
3717
3723
3718 2002-03-17 Fernando Perez <fperez@colorado.edu>
3724 2002-03-17 Fernando Perez <fperez@colorado.edu>
3719
3725
3720 * IPython/UserConfig/magic_gnuplot.py: new name for the
3726 * IPython/UserConfig/magic_gnuplot.py: new name for the
3721 example-magic_pm.py file. Much enhanced system, now with a shell
3727 example-magic_pm.py file. Much enhanced system, now with a shell
3722 for communicating directly with gnuplot, one command at a time.
3728 for communicating directly with gnuplot, one command at a time.
3723
3729
3724 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3730 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3725 setting __name__=='__main__'.
3731 setting __name__=='__main__'.
3726
3732
3727 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3733 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3728 mini-shell for accessing gnuplot from inside ipython. Should
3734 mini-shell for accessing gnuplot from inside ipython. Should
3729 extend it later for grace access too. Inspired by Arnd's
3735 extend it later for grace access too. Inspired by Arnd's
3730 suggestion.
3736 suggestion.
3731
3737
3732 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3738 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3733 calling magic functions with () in their arguments. Thanks to Arnd
3739 calling magic functions with () in their arguments. Thanks to Arnd
3734 Baecker for pointing this to me.
3740 Baecker for pointing this to me.
3735
3741
3736 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3742 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3737 infinitely for integer or complex arrays (only worked with floats).
3743 infinitely for integer or complex arrays (only worked with floats).
3738
3744
3739 2002-03-16 Fernando Perez <fperez@colorado.edu>
3745 2002-03-16 Fernando Perez <fperez@colorado.edu>
3740
3746
3741 * setup.py: Merged setup and setup_windows into a single script
3747 * setup.py: Merged setup and setup_windows into a single script
3742 which properly handles things for windows users.
3748 which properly handles things for windows users.
3743
3749
3744 2002-03-15 Fernando Perez <fperez@colorado.edu>
3750 2002-03-15 Fernando Perez <fperez@colorado.edu>
3745
3751
3746 * Big change to the manual: now the magics are all automatically
3752 * Big change to the manual: now the magics are all automatically
3747 documented. This information is generated from their docstrings
3753 documented. This information is generated from their docstrings
3748 and put in a latex file included by the manual lyx file. This way
3754 and put in a latex file included by the manual lyx file. This way
3749 we get always up to date information for the magics. The manual
3755 we get always up to date information for the magics. The manual
3750 now also has proper version information, also auto-synced.
3756 now also has proper version information, also auto-synced.
3751
3757
3752 For this to work, an undocumented --magic_docstrings option was added.
3758 For this to work, an undocumented --magic_docstrings option was added.
3753
3759
3754 2002-03-13 Fernando Perez <fperez@colorado.edu>
3760 2002-03-13 Fernando Perez <fperez@colorado.edu>
3755
3761
3756 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3762 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3757 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3763 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3758
3764
3759 2002-03-12 Fernando Perez <fperez@colorado.edu>
3765 2002-03-12 Fernando Perez <fperez@colorado.edu>
3760
3766
3761 * IPython/ultraTB.py (TermColors): changed color escapes again to
3767 * IPython/ultraTB.py (TermColors): changed color escapes again to
3762 fix the (old, reintroduced) line-wrapping bug. Basically, if
3768 fix the (old, reintroduced) line-wrapping bug. Basically, if
3763 \001..\002 aren't given in the color escapes, lines get wrapped
3769 \001..\002 aren't given in the color escapes, lines get wrapped
3764 weirdly. But giving those screws up old xterms and emacs terms. So
3770 weirdly. But giving those screws up old xterms and emacs terms. So
3765 I added some logic for emacs terms to be ok, but I can't identify old
3771 I added some logic for emacs terms to be ok, but I can't identify old
3766 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3772 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3767
3773
3768 2002-03-10 Fernando Perez <fperez@colorado.edu>
3774 2002-03-10 Fernando Perez <fperez@colorado.edu>
3769
3775
3770 * IPython/usage.py (__doc__): Various documentation cleanups and
3776 * IPython/usage.py (__doc__): Various documentation cleanups and
3771 updates, both in usage docstrings and in the manual.
3777 updates, both in usage docstrings and in the manual.
3772
3778
3773 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3779 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3774 handling of caching. Set minimum acceptabe value for having a
3780 handling of caching. Set minimum acceptabe value for having a
3775 cache at 20 values.
3781 cache at 20 values.
3776
3782
3777 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3783 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3778 install_first_time function to a method, renamed it and added an
3784 install_first_time function to a method, renamed it and added an
3779 'upgrade' mode. Now people can update their config directory with
3785 'upgrade' mode. Now people can update their config directory with
3780 a simple command line switch (-upgrade, also new).
3786 a simple command line switch (-upgrade, also new).
3781
3787
3782 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3788 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3783 @file (convenient for automagic users under Python >= 2.2).
3789 @file (convenient for automagic users under Python >= 2.2).
3784 Removed @files (it seemed more like a plural than an abbrev. of
3790 Removed @files (it seemed more like a plural than an abbrev. of
3785 'file show').
3791 'file show').
3786
3792
3787 * IPython/iplib.py (install_first_time): Fixed crash if there were
3793 * IPython/iplib.py (install_first_time): Fixed crash if there were
3788 backup files ('~') in .ipython/ install directory.
3794 backup files ('~') in .ipython/ install directory.
3789
3795
3790 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3796 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3791 system. Things look fine, but these changes are fairly
3797 system. Things look fine, but these changes are fairly
3792 intrusive. Test them for a few days.
3798 intrusive. Test them for a few days.
3793
3799
3794 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3800 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3795 the prompts system. Now all in/out prompt strings are user
3801 the prompts system. Now all in/out prompt strings are user
3796 controllable. This is particularly useful for embedding, as one
3802 controllable. This is particularly useful for embedding, as one
3797 can tag embedded instances with particular prompts.
3803 can tag embedded instances with particular prompts.
3798
3804
3799 Also removed global use of sys.ps1/2, which now allows nested
3805 Also removed global use of sys.ps1/2, which now allows nested
3800 embeddings without any problems. Added command-line options for
3806 embeddings without any problems. Added command-line options for
3801 the prompt strings.
3807 the prompt strings.
3802
3808
3803 2002-03-08 Fernando Perez <fperez@colorado.edu>
3809 2002-03-08 Fernando Perez <fperez@colorado.edu>
3804
3810
3805 * IPython/UserConfig/example-embed-short.py (ipshell): added
3811 * IPython/UserConfig/example-embed-short.py (ipshell): added
3806 example file with the bare minimum code for embedding.
3812 example file with the bare minimum code for embedding.
3807
3813
3808 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3814 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3809 functionality for the embeddable shell to be activated/deactivated
3815 functionality for the embeddable shell to be activated/deactivated
3810 either globally or at each call.
3816 either globally or at each call.
3811
3817
3812 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3818 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3813 rewriting the prompt with '--->' for auto-inputs with proper
3819 rewriting the prompt with '--->' for auto-inputs with proper
3814 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3820 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3815 this is handled by the prompts class itself, as it should.
3821 this is handled by the prompts class itself, as it should.
3816
3822
3817 2002-03-05 Fernando Perez <fperez@colorado.edu>
3823 2002-03-05 Fernando Perez <fperez@colorado.edu>
3818
3824
3819 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3825 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3820 @logstart to avoid name clashes with the math log function.
3826 @logstart to avoid name clashes with the math log function.
3821
3827
3822 * Big updates to X/Emacs section of the manual.
3828 * Big updates to X/Emacs section of the manual.
3823
3829
3824 * Removed ipython_emacs. Milan explained to me how to pass
3830 * Removed ipython_emacs. Milan explained to me how to pass
3825 arguments to ipython through Emacs. Some day I'm going to end up
3831 arguments to ipython through Emacs. Some day I'm going to end up
3826 learning some lisp...
3832 learning some lisp...
3827
3833
3828 2002-03-04 Fernando Perez <fperez@colorado.edu>
3834 2002-03-04 Fernando Perez <fperez@colorado.edu>
3829
3835
3830 * IPython/ipython_emacs: Created script to be used as the
3836 * IPython/ipython_emacs: Created script to be used as the
3831 py-python-command Emacs variable so we can pass IPython
3837 py-python-command Emacs variable so we can pass IPython
3832 parameters. I can't figure out how to tell Emacs directly to pass
3838 parameters. I can't figure out how to tell Emacs directly to pass
3833 parameters to IPython, so a dummy shell script will do it.
3839 parameters to IPython, so a dummy shell script will do it.
3834
3840
3835 Other enhancements made for things to work better under Emacs'
3841 Other enhancements made for things to work better under Emacs'
3836 various types of terminals. Many thanks to Milan Zamazal
3842 various types of terminals. Many thanks to Milan Zamazal
3837 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3843 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3838
3844
3839 2002-03-01 Fernando Perez <fperez@colorado.edu>
3845 2002-03-01 Fernando Perez <fperez@colorado.edu>
3840
3846
3841 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3847 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3842 that loading of readline is now optional. This gives better
3848 that loading of readline is now optional. This gives better
3843 control to emacs users.
3849 control to emacs users.
3844
3850
3845 * IPython/ultraTB.py (__date__): Modified color escape sequences
3851 * IPython/ultraTB.py (__date__): Modified color escape sequences
3846 and now things work fine under xterm and in Emacs' term buffers
3852 and now things work fine under xterm and in Emacs' term buffers
3847 (though not shell ones). Well, in emacs you get colors, but all
3853 (though not shell ones). Well, in emacs you get colors, but all
3848 seem to be 'light' colors (no difference between dark and light
3854 seem to be 'light' colors (no difference between dark and light
3849 ones). But the garbage chars are gone, and also in xterms. It
3855 ones). But the garbage chars are gone, and also in xterms. It
3850 seems that now I'm using 'cleaner' ansi sequences.
3856 seems that now I'm using 'cleaner' ansi sequences.
3851
3857
3852 2002-02-21 Fernando Perez <fperez@colorado.edu>
3858 2002-02-21 Fernando Perez <fperez@colorado.edu>
3853
3859
3854 * Released 0.2.7 (mainly to publish the scoping fix).
3860 * Released 0.2.7 (mainly to publish the scoping fix).
3855
3861
3856 * IPython/Logger.py (Logger.logstate): added. A corresponding
3862 * IPython/Logger.py (Logger.logstate): added. A corresponding
3857 @logstate magic was created.
3863 @logstate magic was created.
3858
3864
3859 * IPython/Magic.py: fixed nested scoping problem under Python
3865 * IPython/Magic.py: fixed nested scoping problem under Python
3860 2.1.x (automagic wasn't working).
3866 2.1.x (automagic wasn't working).
3861
3867
3862 2002-02-20 Fernando Perez <fperez@colorado.edu>
3868 2002-02-20 Fernando Perez <fperez@colorado.edu>
3863
3869
3864 * Released 0.2.6.
3870 * Released 0.2.6.
3865
3871
3866 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3872 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3867 option so that logs can come out without any headers at all.
3873 option so that logs can come out without any headers at all.
3868
3874
3869 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3875 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3870 SciPy.
3876 SciPy.
3871
3877
3872 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3878 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3873 that embedded IPython calls don't require vars() to be explicitly
3879 that embedded IPython calls don't require vars() to be explicitly
3874 passed. Now they are extracted from the caller's frame (code
3880 passed. Now they are extracted from the caller's frame (code
3875 snatched from Eric Jones' weave). Added better documentation to
3881 snatched from Eric Jones' weave). Added better documentation to
3876 the section on embedding and the example file.
3882 the section on embedding and the example file.
3877
3883
3878 * IPython/genutils.py (page): Changed so that under emacs, it just
3884 * IPython/genutils.py (page): Changed so that under emacs, it just
3879 prints the string. You can then page up and down in the emacs
3885 prints the string. You can then page up and down in the emacs
3880 buffer itself. This is how the builtin help() works.
3886 buffer itself. This is how the builtin help() works.
3881
3887
3882 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3888 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3883 macro scoping: macros need to be executed in the user's namespace
3889 macro scoping: macros need to be executed in the user's namespace
3884 to work as if they had been typed by the user.
3890 to work as if they had been typed by the user.
3885
3891
3886 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3892 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3887 execute automatically (no need to type 'exec...'). They then
3893 execute automatically (no need to type 'exec...'). They then
3888 behave like 'true macros'. The printing system was also modified
3894 behave like 'true macros'. The printing system was also modified
3889 for this to work.
3895 for this to work.
3890
3896
3891 2002-02-19 Fernando Perez <fperez@colorado.edu>
3897 2002-02-19 Fernando Perez <fperez@colorado.edu>
3892
3898
3893 * IPython/genutils.py (page_file): new function for paging files
3899 * IPython/genutils.py (page_file): new function for paging files
3894 in an OS-independent way. Also necessary for file viewing to work
3900 in an OS-independent way. Also necessary for file viewing to work
3895 well inside Emacs buffers.
3901 well inside Emacs buffers.
3896 (page): Added checks for being in an emacs buffer.
3902 (page): Added checks for being in an emacs buffer.
3897 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3903 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3898 same bug in iplib.
3904 same bug in iplib.
3899
3905
3900 2002-02-18 Fernando Perez <fperez@colorado.edu>
3906 2002-02-18 Fernando Perez <fperez@colorado.edu>
3901
3907
3902 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3908 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3903 of readline so that IPython can work inside an Emacs buffer.
3909 of readline so that IPython can work inside an Emacs buffer.
3904
3910
3905 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3911 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3906 method signatures (they weren't really bugs, but it looks cleaner
3912 method signatures (they weren't really bugs, but it looks cleaner
3907 and keeps PyChecker happy).
3913 and keeps PyChecker happy).
3908
3914
3909 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3915 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3910 for implementing various user-defined hooks. Currently only
3916 for implementing various user-defined hooks. Currently only
3911 display is done.
3917 display is done.
3912
3918
3913 * IPython/Prompts.py (CachedOutput._display): changed display
3919 * IPython/Prompts.py (CachedOutput._display): changed display
3914 functions so that they can be dynamically changed by users easily.
3920 functions so that they can be dynamically changed by users easily.
3915
3921
3916 * IPython/Extensions/numeric_formats.py (num_display): added an
3922 * IPython/Extensions/numeric_formats.py (num_display): added an
3917 extension for printing NumPy arrays in flexible manners. It
3923 extension for printing NumPy arrays in flexible manners. It
3918 doesn't do anything yet, but all the structure is in
3924 doesn't do anything yet, but all the structure is in
3919 place. Ultimately the plan is to implement output format control
3925 place. Ultimately the plan is to implement output format control
3920 like in Octave.
3926 like in Octave.
3921
3927
3922 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3928 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3923 methods are found at run-time by all the automatic machinery.
3929 methods are found at run-time by all the automatic machinery.
3924
3930
3925 2002-02-17 Fernando Perez <fperez@colorado.edu>
3931 2002-02-17 Fernando Perez <fperez@colorado.edu>
3926
3932
3927 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3933 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3928 whole file a little.
3934 whole file a little.
3929
3935
3930 * ToDo: closed this document. Now there's a new_design.lyx
3936 * ToDo: closed this document. Now there's a new_design.lyx
3931 document for all new ideas. Added making a pdf of it for the
3937 document for all new ideas. Added making a pdf of it for the
3932 end-user distro.
3938 end-user distro.
3933
3939
3934 * IPython/Logger.py (Logger.switch_log): Created this to replace
3940 * IPython/Logger.py (Logger.switch_log): Created this to replace
3935 logon() and logoff(). It also fixes a nasty crash reported by
3941 logon() and logoff(). It also fixes a nasty crash reported by
3936 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3942 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3937
3943
3938 * IPython/iplib.py (complete): got auto-completion to work with
3944 * IPython/iplib.py (complete): got auto-completion to work with
3939 automagic (I had wanted this for a long time).
3945 automagic (I had wanted this for a long time).
3940
3946
3941 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3947 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3942 to @file, since file() is now a builtin and clashes with automagic
3948 to @file, since file() is now a builtin and clashes with automagic
3943 for @file.
3949 for @file.
3944
3950
3945 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3951 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3946 of this was previously in iplib, which had grown to more than 2000
3952 of this was previously in iplib, which had grown to more than 2000
3947 lines, way too long. No new functionality, but it makes managing
3953 lines, way too long. No new functionality, but it makes managing
3948 the code a bit easier.
3954 the code a bit easier.
3949
3955
3950 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3956 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3951 information to crash reports.
3957 information to crash reports.
3952
3958
3953 2002-02-12 Fernando Perez <fperez@colorado.edu>
3959 2002-02-12 Fernando Perez <fperez@colorado.edu>
3954
3960
3955 * Released 0.2.5.
3961 * Released 0.2.5.
3956
3962
3957 2002-02-11 Fernando Perez <fperez@colorado.edu>
3963 2002-02-11 Fernando Perez <fperez@colorado.edu>
3958
3964
3959 * Wrote a relatively complete Windows installer. It puts
3965 * Wrote a relatively complete Windows installer. It puts
3960 everything in place, creates Start Menu entries and fixes the
3966 everything in place, creates Start Menu entries and fixes the
3961 color issues. Nothing fancy, but it works.
3967 color issues. Nothing fancy, but it works.
3962
3968
3963 2002-02-10 Fernando Perez <fperez@colorado.edu>
3969 2002-02-10 Fernando Perez <fperez@colorado.edu>
3964
3970
3965 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3971 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3966 os.path.expanduser() call so that we can type @run ~/myfile.py and
3972 os.path.expanduser() call so that we can type @run ~/myfile.py and
3967 have thigs work as expected.
3973 have thigs work as expected.
3968
3974
3969 * IPython/genutils.py (page): fixed exception handling so things
3975 * IPython/genutils.py (page): fixed exception handling so things
3970 work both in Unix and Windows correctly. Quitting a pager triggers
3976 work both in Unix and Windows correctly. Quitting a pager triggers
3971 an IOError/broken pipe in Unix, and in windows not finding a pager
3977 an IOError/broken pipe in Unix, and in windows not finding a pager
3972 is also an IOError, so I had to actually look at the return value
3978 is also an IOError, so I had to actually look at the return value
3973 of the exception, not just the exception itself. Should be ok now.
3979 of the exception, not just the exception itself. Should be ok now.
3974
3980
3975 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3981 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3976 modified to allow case-insensitive color scheme changes.
3982 modified to allow case-insensitive color scheme changes.
3977
3983
3978 2002-02-09 Fernando Perez <fperez@colorado.edu>
3984 2002-02-09 Fernando Perez <fperez@colorado.edu>
3979
3985
3980 * IPython/genutils.py (native_line_ends): new function to leave
3986 * IPython/genutils.py (native_line_ends): new function to leave
3981 user config files with os-native line-endings.
3987 user config files with os-native line-endings.
3982
3988
3983 * README and manual updates.
3989 * README and manual updates.
3984
3990
3985 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3991 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3986 instead of StringType to catch Unicode strings.
3992 instead of StringType to catch Unicode strings.
3987
3993
3988 * IPython/genutils.py (filefind): fixed bug for paths with
3994 * IPython/genutils.py (filefind): fixed bug for paths with
3989 embedded spaces (very common in Windows).
3995 embedded spaces (very common in Windows).
3990
3996
3991 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3997 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3992 files under Windows, so that they get automatically associated
3998 files under Windows, so that they get automatically associated
3993 with a text editor. Windows makes it a pain to handle
3999 with a text editor. Windows makes it a pain to handle
3994 extension-less files.
4000 extension-less files.
3995
4001
3996 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4002 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3997 warning about readline only occur for Posix. In Windows there's no
4003 warning about readline only occur for Posix. In Windows there's no
3998 way to get readline, so why bother with the warning.
4004 way to get readline, so why bother with the warning.
3999
4005
4000 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4006 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4001 for __str__ instead of dir(self), since dir() changed in 2.2.
4007 for __str__ instead of dir(self), since dir() changed in 2.2.
4002
4008
4003 * Ported to Windows! Tested on XP, I suspect it should work fine
4009 * Ported to Windows! Tested on XP, I suspect it should work fine
4004 on NT/2000, but I don't think it will work on 98 et al. That
4010 on NT/2000, but I don't think it will work on 98 et al. That
4005 series of Windows is such a piece of junk anyway that I won't try
4011 series of Windows is such a piece of junk anyway that I won't try
4006 porting it there. The XP port was straightforward, showed a few
4012 porting it there. The XP port was straightforward, showed a few
4007 bugs here and there (fixed all), in particular some string
4013 bugs here and there (fixed all), in particular some string
4008 handling stuff which required considering Unicode strings (which
4014 handling stuff which required considering Unicode strings (which
4009 Windows uses). This is good, but hasn't been too tested :) No
4015 Windows uses). This is good, but hasn't been too tested :) No
4010 fancy installer yet, I'll put a note in the manual so people at
4016 fancy installer yet, I'll put a note in the manual so people at
4011 least make manually a shortcut.
4017 least make manually a shortcut.
4012
4018
4013 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4019 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4014 into a single one, "colors". This now controls both prompt and
4020 into a single one, "colors". This now controls both prompt and
4015 exception color schemes, and can be changed both at startup
4021 exception color schemes, and can be changed both at startup
4016 (either via command-line switches or via ipythonrc files) and at
4022 (either via command-line switches or via ipythonrc files) and at
4017 runtime, with @colors.
4023 runtime, with @colors.
4018 (Magic.magic_run): renamed @prun to @run and removed the old
4024 (Magic.magic_run): renamed @prun to @run and removed the old
4019 @run. The two were too similar to warrant keeping both.
4025 @run. The two were too similar to warrant keeping both.
4020
4026
4021 2002-02-03 Fernando Perez <fperez@colorado.edu>
4027 2002-02-03 Fernando Perez <fperez@colorado.edu>
4022
4028
4023 * IPython/iplib.py (install_first_time): Added comment on how to
4029 * IPython/iplib.py (install_first_time): Added comment on how to
4024 configure the color options for first-time users. Put a <return>
4030 configure the color options for first-time users. Put a <return>
4025 request at the end so that small-terminal users get a chance to
4031 request at the end so that small-terminal users get a chance to
4026 read the startup info.
4032 read the startup info.
4027
4033
4028 2002-01-23 Fernando Perez <fperez@colorado.edu>
4034 2002-01-23 Fernando Perez <fperez@colorado.edu>
4029
4035
4030 * IPython/iplib.py (CachedOutput.update): Changed output memory
4036 * IPython/iplib.py (CachedOutput.update): Changed output memory
4031 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4037 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4032 input history we still use _i. Did this b/c these variable are
4038 input history we still use _i. Did this b/c these variable are
4033 very commonly used in interactive work, so the less we need to
4039 very commonly used in interactive work, so the less we need to
4034 type the better off we are.
4040 type the better off we are.
4035 (Magic.magic_prun): updated @prun to better handle the namespaces
4041 (Magic.magic_prun): updated @prun to better handle the namespaces
4036 the file will run in, including a fix for __name__ not being set
4042 the file will run in, including a fix for __name__ not being set
4037 before.
4043 before.
4038
4044
4039 2002-01-20 Fernando Perez <fperez@colorado.edu>
4045 2002-01-20 Fernando Perez <fperez@colorado.edu>
4040
4046
4041 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4047 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4042 extra garbage for Python 2.2. Need to look more carefully into
4048 extra garbage for Python 2.2. Need to look more carefully into
4043 this later.
4049 this later.
4044
4050
4045 2002-01-19 Fernando Perez <fperez@colorado.edu>
4051 2002-01-19 Fernando Perez <fperez@colorado.edu>
4046
4052
4047 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4053 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4048 display SyntaxError exceptions properly formatted when they occur
4054 display SyntaxError exceptions properly formatted when they occur
4049 (they can be triggered by imported code).
4055 (they can be triggered by imported code).
4050
4056
4051 2002-01-18 Fernando Perez <fperez@colorado.edu>
4057 2002-01-18 Fernando Perez <fperez@colorado.edu>
4052
4058
4053 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4059 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4054 SyntaxError exceptions are reported nicely formatted, instead of
4060 SyntaxError exceptions are reported nicely formatted, instead of
4055 spitting out only offset information as before.
4061 spitting out only offset information as before.
4056 (Magic.magic_prun): Added the @prun function for executing
4062 (Magic.magic_prun): Added the @prun function for executing
4057 programs with command line args inside IPython.
4063 programs with command line args inside IPython.
4058
4064
4059 2002-01-16 Fernando Perez <fperez@colorado.edu>
4065 2002-01-16 Fernando Perez <fperez@colorado.edu>
4060
4066
4061 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4067 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4062 to *not* include the last item given in a range. This brings their
4068 to *not* include the last item given in a range. This brings their
4063 behavior in line with Python's slicing:
4069 behavior in line with Python's slicing:
4064 a[n1:n2] -> a[n1]...a[n2-1]
4070 a[n1:n2] -> a[n1]...a[n2-1]
4065 It may be a bit less convenient, but I prefer to stick to Python's
4071 It may be a bit less convenient, but I prefer to stick to Python's
4066 conventions *everywhere*, so users never have to wonder.
4072 conventions *everywhere*, so users never have to wonder.
4067 (Magic.magic_macro): Added @macro function to ease the creation of
4073 (Magic.magic_macro): Added @macro function to ease the creation of
4068 macros.
4074 macros.
4069
4075
4070 2002-01-05 Fernando Perez <fperez@colorado.edu>
4076 2002-01-05 Fernando Perez <fperez@colorado.edu>
4071
4077
4072 * Released 0.2.4.
4078 * Released 0.2.4.
4073
4079
4074 * IPython/iplib.py (Magic.magic_pdef):
4080 * IPython/iplib.py (Magic.magic_pdef):
4075 (InteractiveShell.safe_execfile): report magic lines and error
4081 (InteractiveShell.safe_execfile): report magic lines and error
4076 lines without line numbers so one can easily copy/paste them for
4082 lines without line numbers so one can easily copy/paste them for
4077 re-execution.
4083 re-execution.
4078
4084
4079 * Updated manual with recent changes.
4085 * Updated manual with recent changes.
4080
4086
4081 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4087 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4082 docstring printing when class? is called. Very handy for knowing
4088 docstring printing when class? is called. Very handy for knowing
4083 how to create class instances (as long as __init__ is well
4089 how to create class instances (as long as __init__ is well
4084 documented, of course :)
4090 documented, of course :)
4085 (Magic.magic_doc): print both class and constructor docstrings.
4091 (Magic.magic_doc): print both class and constructor docstrings.
4086 (Magic.magic_pdef): give constructor info if passed a class and
4092 (Magic.magic_pdef): give constructor info if passed a class and
4087 __call__ info for callable object instances.
4093 __call__ info for callable object instances.
4088
4094
4089 2002-01-04 Fernando Perez <fperez@colorado.edu>
4095 2002-01-04 Fernando Perez <fperez@colorado.edu>
4090
4096
4091 * Made deep_reload() off by default. It doesn't always work
4097 * Made deep_reload() off by default. It doesn't always work
4092 exactly as intended, so it's probably safer to have it off. It's
4098 exactly as intended, so it's probably safer to have it off. It's
4093 still available as dreload() anyway, so nothing is lost.
4099 still available as dreload() anyway, so nothing is lost.
4094
4100
4095 2002-01-02 Fernando Perez <fperez@colorado.edu>
4101 2002-01-02 Fernando Perez <fperez@colorado.edu>
4096
4102
4097 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4103 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4098 so I wanted an updated release).
4104 so I wanted an updated release).
4099
4105
4100 2001-12-27 Fernando Perez <fperez@colorado.edu>
4106 2001-12-27 Fernando Perez <fperez@colorado.edu>
4101
4107
4102 * IPython/iplib.py (InteractiveShell.interact): Added the original
4108 * IPython/iplib.py (InteractiveShell.interact): Added the original
4103 code from 'code.py' for this module in order to change the
4109 code from 'code.py' for this module in order to change the
4104 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4110 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4105 the history cache would break when the user hit Ctrl-C, and
4111 the history cache would break when the user hit Ctrl-C, and
4106 interact() offers no way to add any hooks to it.
4112 interact() offers no way to add any hooks to it.
4107
4113
4108 2001-12-23 Fernando Perez <fperez@colorado.edu>
4114 2001-12-23 Fernando Perez <fperez@colorado.edu>
4109
4115
4110 * setup.py: added check for 'MANIFEST' before trying to remove
4116 * setup.py: added check for 'MANIFEST' before trying to remove
4111 it. Thanks to Sean Reifschneider.
4117 it. Thanks to Sean Reifschneider.
4112
4118
4113 2001-12-22 Fernando Perez <fperez@colorado.edu>
4119 2001-12-22 Fernando Perez <fperez@colorado.edu>
4114
4120
4115 * Released 0.2.2.
4121 * Released 0.2.2.
4116
4122
4117 * Finished (reasonably) writing the manual. Later will add the
4123 * Finished (reasonably) writing the manual. Later will add the
4118 python-standard navigation stylesheets, but for the time being
4124 python-standard navigation stylesheets, but for the time being
4119 it's fairly complete. Distribution will include html and pdf
4125 it's fairly complete. Distribution will include html and pdf
4120 versions.
4126 versions.
4121
4127
4122 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4128 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4123 (MayaVi author).
4129 (MayaVi author).
4124
4130
4125 2001-12-21 Fernando Perez <fperez@colorado.edu>
4131 2001-12-21 Fernando Perez <fperez@colorado.edu>
4126
4132
4127 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4133 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4128 good public release, I think (with the manual and the distutils
4134 good public release, I think (with the manual and the distutils
4129 installer). The manual can use some work, but that can go
4135 installer). The manual can use some work, but that can go
4130 slowly. Otherwise I think it's quite nice for end users. Next
4136 slowly. Otherwise I think it's quite nice for end users. Next
4131 summer, rewrite the guts of it...
4137 summer, rewrite the guts of it...
4132
4138
4133 * Changed format of ipythonrc files to use whitespace as the
4139 * Changed format of ipythonrc files to use whitespace as the
4134 separator instead of an explicit '='. Cleaner.
4140 separator instead of an explicit '='. Cleaner.
4135
4141
4136 2001-12-20 Fernando Perez <fperez@colorado.edu>
4142 2001-12-20 Fernando Perez <fperez@colorado.edu>
4137
4143
4138 * Started a manual in LyX. For now it's just a quick merge of the
4144 * Started a manual in LyX. For now it's just a quick merge of the
4139 various internal docstrings and READMEs. Later it may grow into a
4145 various internal docstrings and READMEs. Later it may grow into a
4140 nice, full-blown manual.
4146 nice, full-blown manual.
4141
4147
4142 * Set up a distutils based installer. Installation should now be
4148 * Set up a distutils based installer. Installation should now be
4143 trivially simple for end-users.
4149 trivially simple for end-users.
4144
4150
4145 2001-12-11 Fernando Perez <fperez@colorado.edu>
4151 2001-12-11 Fernando Perez <fperez@colorado.edu>
4146
4152
4147 * Released 0.2.0. First public release, announced it at
4153 * Released 0.2.0. First public release, announced it at
4148 comp.lang.python. From now on, just bugfixes...
4154 comp.lang.python. From now on, just bugfixes...
4149
4155
4150 * Went through all the files, set copyright/license notices and
4156 * Went through all the files, set copyright/license notices and
4151 cleaned up things. Ready for release.
4157 cleaned up things. Ready for release.
4152
4158
4153 2001-12-10 Fernando Perez <fperez@colorado.edu>
4159 2001-12-10 Fernando Perez <fperez@colorado.edu>
4154
4160
4155 * Changed the first-time installer not to use tarfiles. It's more
4161 * Changed the first-time installer not to use tarfiles. It's more
4156 robust now and less unix-dependent. Also makes it easier for
4162 robust now and less unix-dependent. Also makes it easier for
4157 people to later upgrade versions.
4163 people to later upgrade versions.
4158
4164
4159 * Changed @exit to @abort to reflect the fact that it's pretty
4165 * Changed @exit to @abort to reflect the fact that it's pretty
4160 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4166 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4161 becomes significant only when IPyhton is embedded: in that case,
4167 becomes significant only when IPyhton is embedded: in that case,
4162 C-D closes IPython only, but @abort kills the enclosing program
4168 C-D closes IPython only, but @abort kills the enclosing program
4163 too (unless it had called IPython inside a try catching
4169 too (unless it had called IPython inside a try catching
4164 SystemExit).
4170 SystemExit).
4165
4171
4166 * Created Shell module which exposes the actuall IPython Shell
4172 * Created Shell module which exposes the actuall IPython Shell
4167 classes, currently the normal and the embeddable one. This at
4173 classes, currently the normal and the embeddable one. This at
4168 least offers a stable interface we won't need to change when
4174 least offers a stable interface we won't need to change when
4169 (later) the internals are rewritten. That rewrite will be confined
4175 (later) the internals are rewritten. That rewrite will be confined
4170 to iplib and ipmaker, but the Shell interface should remain as is.
4176 to iplib and ipmaker, but the Shell interface should remain as is.
4171
4177
4172 * Added embed module which offers an embeddable IPShell object,
4178 * Added embed module which offers an embeddable IPShell object,
4173 useful to fire up IPython *inside* a running program. Great for
4179 useful to fire up IPython *inside* a running program. Great for
4174 debugging or dynamical data analysis.
4180 debugging or dynamical data analysis.
4175
4181
4176 2001-12-08 Fernando Perez <fperez@colorado.edu>
4182 2001-12-08 Fernando Perez <fperez@colorado.edu>
4177
4183
4178 * Fixed small bug preventing seeing info from methods of defined
4184 * Fixed small bug preventing seeing info from methods of defined
4179 objects (incorrect namespace in _ofind()).
4185 objects (incorrect namespace in _ofind()).
4180
4186
4181 * Documentation cleanup. Moved the main usage docstrings to a
4187 * Documentation cleanup. Moved the main usage docstrings to a
4182 separate file, usage.py (cleaner to maintain, and hopefully in the
4188 separate file, usage.py (cleaner to maintain, and hopefully in the
4183 future some perlpod-like way of producing interactive, man and
4189 future some perlpod-like way of producing interactive, man and
4184 html docs out of it will be found).
4190 html docs out of it will be found).
4185
4191
4186 * Added @profile to see your profile at any time.
4192 * Added @profile to see your profile at any time.
4187
4193
4188 * Added @p as an alias for 'print'. It's especially convenient if
4194 * Added @p as an alias for 'print'. It's especially convenient if
4189 using automagic ('p x' prints x).
4195 using automagic ('p x' prints x).
4190
4196
4191 * Small cleanups and fixes after a pychecker run.
4197 * Small cleanups and fixes after a pychecker run.
4192
4198
4193 * Changed the @cd command to handle @cd - and @cd -<n> for
4199 * Changed the @cd command to handle @cd - and @cd -<n> for
4194 visiting any directory in _dh.
4200 visiting any directory in _dh.
4195
4201
4196 * Introduced _dh, a history of visited directories. @dhist prints
4202 * Introduced _dh, a history of visited directories. @dhist prints
4197 it out with numbers.
4203 it out with numbers.
4198
4204
4199 2001-12-07 Fernando Perez <fperez@colorado.edu>
4205 2001-12-07 Fernando Perez <fperez@colorado.edu>
4200
4206
4201 * Released 0.1.22
4207 * Released 0.1.22
4202
4208
4203 * Made initialization a bit more robust against invalid color
4209 * Made initialization a bit more robust against invalid color
4204 options in user input (exit, not traceback-crash).
4210 options in user input (exit, not traceback-crash).
4205
4211
4206 * Changed the bug crash reporter to write the report only in the
4212 * Changed the bug crash reporter to write the report only in the
4207 user's .ipython directory. That way IPython won't litter people's
4213 user's .ipython directory. That way IPython won't litter people's
4208 hard disks with crash files all over the place. Also print on
4214 hard disks with crash files all over the place. Also print on
4209 screen the necessary mail command.
4215 screen the necessary mail command.
4210
4216
4211 * With the new ultraTB, implemented LightBG color scheme for light
4217 * With the new ultraTB, implemented LightBG color scheme for light
4212 background terminals. A lot of people like white backgrounds, so I
4218 background terminals. A lot of people like white backgrounds, so I
4213 guess we should at least give them something readable.
4219 guess we should at least give them something readable.
4214
4220
4215 2001-12-06 Fernando Perez <fperez@colorado.edu>
4221 2001-12-06 Fernando Perez <fperez@colorado.edu>
4216
4222
4217 * Modified the structure of ultraTB. Now there's a proper class
4223 * Modified the structure of ultraTB. Now there's a proper class
4218 for tables of color schemes which allow adding schemes easily and
4224 for tables of color schemes which allow adding schemes easily and
4219 switching the active scheme without creating a new instance every
4225 switching the active scheme without creating a new instance every
4220 time (which was ridiculous). The syntax for creating new schemes
4226 time (which was ridiculous). The syntax for creating new schemes
4221 is also cleaner. I think ultraTB is finally done, with a clean
4227 is also cleaner. I think ultraTB is finally done, with a clean
4222 class structure. Names are also much cleaner (now there's proper
4228 class structure. Names are also much cleaner (now there's proper
4223 color tables, no need for every variable to also have 'color' in
4229 color tables, no need for every variable to also have 'color' in
4224 its name).
4230 its name).
4225
4231
4226 * Broke down genutils into separate files. Now genutils only
4232 * Broke down genutils into separate files. Now genutils only
4227 contains utility functions, and classes have been moved to their
4233 contains utility functions, and classes have been moved to their
4228 own files (they had enough independent functionality to warrant
4234 own files (they had enough independent functionality to warrant
4229 it): ConfigLoader, OutputTrap, Struct.
4235 it): ConfigLoader, OutputTrap, Struct.
4230
4236
4231 2001-12-05 Fernando Perez <fperez@colorado.edu>
4237 2001-12-05 Fernando Perez <fperez@colorado.edu>
4232
4238
4233 * IPython turns 21! Released version 0.1.21, as a candidate for
4239 * IPython turns 21! Released version 0.1.21, as a candidate for
4234 public consumption. If all goes well, release in a few days.
4240 public consumption. If all goes well, release in a few days.
4235
4241
4236 * Fixed path bug (files in Extensions/ directory wouldn't be found
4242 * Fixed path bug (files in Extensions/ directory wouldn't be found
4237 unless IPython/ was explicitly in sys.path).
4243 unless IPython/ was explicitly in sys.path).
4238
4244
4239 * Extended the FlexCompleter class as MagicCompleter to allow
4245 * Extended the FlexCompleter class as MagicCompleter to allow
4240 completion of @-starting lines.
4246 completion of @-starting lines.
4241
4247
4242 * Created __release__.py file as a central repository for release
4248 * Created __release__.py file as a central repository for release
4243 info that other files can read from.
4249 info that other files can read from.
4244
4250
4245 * Fixed small bug in logging: when logging was turned on in
4251 * Fixed small bug in logging: when logging was turned on in
4246 mid-session, old lines with special meanings (!@?) were being
4252 mid-session, old lines with special meanings (!@?) were being
4247 logged without the prepended comment, which is necessary since
4253 logged without the prepended comment, which is necessary since
4248 they are not truly valid python syntax. This should make session
4254 they are not truly valid python syntax. This should make session
4249 restores produce less errors.
4255 restores produce less errors.
4250
4256
4251 * The namespace cleanup forced me to make a FlexCompleter class
4257 * The namespace cleanup forced me to make a FlexCompleter class
4252 which is nothing but a ripoff of rlcompleter, but with selectable
4258 which is nothing but a ripoff of rlcompleter, but with selectable
4253 namespace (rlcompleter only works in __main__.__dict__). I'll try
4259 namespace (rlcompleter only works in __main__.__dict__). I'll try
4254 to submit a note to the authors to see if this change can be
4260 to submit a note to the authors to see if this change can be
4255 incorporated in future rlcompleter releases (Dec.6: done)
4261 incorporated in future rlcompleter releases (Dec.6: done)
4256
4262
4257 * More fixes to namespace handling. It was a mess! Now all
4263 * More fixes to namespace handling. It was a mess! Now all
4258 explicit references to __main__.__dict__ are gone (except when
4264 explicit references to __main__.__dict__ are gone (except when
4259 really needed) and everything is handled through the namespace
4265 really needed) and everything is handled through the namespace
4260 dicts in the IPython instance. We seem to be getting somewhere
4266 dicts in the IPython instance. We seem to be getting somewhere
4261 with this, finally...
4267 with this, finally...
4262
4268
4263 * Small documentation updates.
4269 * Small documentation updates.
4264
4270
4265 * Created the Extensions directory under IPython (with an
4271 * Created the Extensions directory under IPython (with an
4266 __init__.py). Put the PhysicalQ stuff there. This directory should
4272 __init__.py). Put the PhysicalQ stuff there. This directory should
4267 be used for all special-purpose extensions.
4273 be used for all special-purpose extensions.
4268
4274
4269 * File renaming:
4275 * File renaming:
4270 ipythonlib --> ipmaker
4276 ipythonlib --> ipmaker
4271 ipplib --> iplib
4277 ipplib --> iplib
4272 This makes a bit more sense in terms of what these files actually do.
4278 This makes a bit more sense in terms of what these files actually do.
4273
4279
4274 * Moved all the classes and functions in ipythonlib to ipplib, so
4280 * Moved all the classes and functions in ipythonlib to ipplib, so
4275 now ipythonlib only has make_IPython(). This will ease up its
4281 now ipythonlib only has make_IPython(). This will ease up its
4276 splitting in smaller functional chunks later.
4282 splitting in smaller functional chunks later.
4277
4283
4278 * Cleaned up (done, I think) output of @whos. Better column
4284 * Cleaned up (done, I think) output of @whos. Better column
4279 formatting, and now shows str(var) for as much as it can, which is
4285 formatting, and now shows str(var) for as much as it can, which is
4280 typically what one gets with a 'print var'.
4286 typically what one gets with a 'print var'.
4281
4287
4282 2001-12-04 Fernando Perez <fperez@colorado.edu>
4288 2001-12-04 Fernando Perez <fperez@colorado.edu>
4283
4289
4284 * Fixed namespace problems. Now builtin/IPyhton/user names get
4290 * Fixed namespace problems. Now builtin/IPyhton/user names get
4285 properly reported in their namespace. Internal namespace handling
4291 properly reported in their namespace. Internal namespace handling
4286 is finally getting decent (not perfect yet, but much better than
4292 is finally getting decent (not perfect yet, but much better than
4287 the ad-hoc mess we had).
4293 the ad-hoc mess we had).
4288
4294
4289 * Removed -exit option. If people just want to run a python
4295 * Removed -exit option. If people just want to run a python
4290 script, that's what the normal interpreter is for. Less
4296 script, that's what the normal interpreter is for. Less
4291 unnecessary options, less chances for bugs.
4297 unnecessary options, less chances for bugs.
4292
4298
4293 * Added a crash handler which generates a complete post-mortem if
4299 * Added a crash handler which generates a complete post-mortem if
4294 IPython crashes. This will help a lot in tracking bugs down the
4300 IPython crashes. This will help a lot in tracking bugs down the
4295 road.
4301 road.
4296
4302
4297 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4303 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4298 which were boud to functions being reassigned would bypass the
4304 which were boud to functions being reassigned would bypass the
4299 logger, breaking the sync of _il with the prompt counter. This
4305 logger, breaking the sync of _il with the prompt counter. This
4300 would then crash IPython later when a new line was logged.
4306 would then crash IPython later when a new line was logged.
4301
4307
4302 2001-12-02 Fernando Perez <fperez@colorado.edu>
4308 2001-12-02 Fernando Perez <fperez@colorado.edu>
4303
4309
4304 * Made IPython a package. This means people don't have to clutter
4310 * Made IPython a package. This means people don't have to clutter
4305 their sys.path with yet another directory. Changed the INSTALL
4311 their sys.path with yet another directory. Changed the INSTALL
4306 file accordingly.
4312 file accordingly.
4307
4313
4308 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4314 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4309 sorts its output (so @who shows it sorted) and @whos formats the
4315 sorts its output (so @who shows it sorted) and @whos formats the
4310 table according to the width of the first column. Nicer, easier to
4316 table according to the width of the first column. Nicer, easier to
4311 read. Todo: write a generic table_format() which takes a list of
4317 read. Todo: write a generic table_format() which takes a list of
4312 lists and prints it nicely formatted, with optional row/column
4318 lists and prints it nicely formatted, with optional row/column
4313 separators and proper padding and justification.
4319 separators and proper padding and justification.
4314
4320
4315 * Released 0.1.20
4321 * Released 0.1.20
4316
4322
4317 * Fixed bug in @log which would reverse the inputcache list (a
4323 * Fixed bug in @log which would reverse the inputcache list (a
4318 copy operation was missing).
4324 copy operation was missing).
4319
4325
4320 * Code cleanup. @config was changed to use page(). Better, since
4326 * Code cleanup. @config was changed to use page(). Better, since
4321 its output is always quite long.
4327 its output is always quite long.
4322
4328
4323 * Itpl is back as a dependency. I was having too many problems
4329 * Itpl is back as a dependency. I was having too many problems
4324 getting the parametric aliases to work reliably, and it's just
4330 getting the parametric aliases to work reliably, and it's just
4325 easier to code weird string operations with it than playing %()s
4331 easier to code weird string operations with it than playing %()s
4326 games. It's only ~6k, so I don't think it's too big a deal.
4332 games. It's only ~6k, so I don't think it's too big a deal.
4327
4333
4328 * Found (and fixed) a very nasty bug with history. !lines weren't
4334 * Found (and fixed) a very nasty bug with history. !lines weren't
4329 getting cached, and the out of sync caches would crash
4335 getting cached, and the out of sync caches would crash
4330 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4336 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4331 division of labor a bit better. Bug fixed, cleaner structure.
4337 division of labor a bit better. Bug fixed, cleaner structure.
4332
4338
4333 2001-12-01 Fernando Perez <fperez@colorado.edu>
4339 2001-12-01 Fernando Perez <fperez@colorado.edu>
4334
4340
4335 * Released 0.1.19
4341 * Released 0.1.19
4336
4342
4337 * Added option -n to @hist to prevent line number printing. Much
4343 * Added option -n to @hist to prevent line number printing. Much
4338 easier to copy/paste code this way.
4344 easier to copy/paste code this way.
4339
4345
4340 * Created global _il to hold the input list. Allows easy
4346 * Created global _il to hold the input list. Allows easy
4341 re-execution of blocks of code by slicing it (inspired by Janko's
4347 re-execution of blocks of code by slicing it (inspired by Janko's
4342 comment on 'macros').
4348 comment on 'macros').
4343
4349
4344 * Small fixes and doc updates.
4350 * Small fixes and doc updates.
4345
4351
4346 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4352 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4347 much too fragile with automagic. Handles properly multi-line
4353 much too fragile with automagic. Handles properly multi-line
4348 statements and takes parameters.
4354 statements and takes parameters.
4349
4355
4350 2001-11-30 Fernando Perez <fperez@colorado.edu>
4356 2001-11-30 Fernando Perez <fperez@colorado.edu>
4351
4357
4352 * Version 0.1.18 released.
4358 * Version 0.1.18 released.
4353
4359
4354 * Fixed nasty namespace bug in initial module imports.
4360 * Fixed nasty namespace bug in initial module imports.
4355
4361
4356 * Added copyright/license notes to all code files (except
4362 * Added copyright/license notes to all code files (except
4357 DPyGetOpt). For the time being, LGPL. That could change.
4363 DPyGetOpt). For the time being, LGPL. That could change.
4358
4364
4359 * Rewrote a much nicer README, updated INSTALL, cleaned up
4365 * Rewrote a much nicer README, updated INSTALL, cleaned up
4360 ipythonrc-* samples.
4366 ipythonrc-* samples.
4361
4367
4362 * Overall code/documentation cleanup. Basically ready for
4368 * Overall code/documentation cleanup. Basically ready for
4363 release. Only remaining thing: licence decision (LGPL?).
4369 release. Only remaining thing: licence decision (LGPL?).
4364
4370
4365 * Converted load_config to a class, ConfigLoader. Now recursion
4371 * Converted load_config to a class, ConfigLoader. Now recursion
4366 control is better organized. Doesn't include the same file twice.
4372 control is better organized. Doesn't include the same file twice.
4367
4373
4368 2001-11-29 Fernando Perez <fperez@colorado.edu>
4374 2001-11-29 Fernando Perez <fperez@colorado.edu>
4369
4375
4370 * Got input history working. Changed output history variables from
4376 * Got input history working. Changed output history variables from
4371 _p to _o so that _i is for input and _o for output. Just cleaner
4377 _p to _o so that _i is for input and _o for output. Just cleaner
4372 convention.
4378 convention.
4373
4379
4374 * Implemented parametric aliases. This pretty much allows the
4380 * Implemented parametric aliases. This pretty much allows the
4375 alias system to offer full-blown shell convenience, I think.
4381 alias system to offer full-blown shell convenience, I think.
4376
4382
4377 * Version 0.1.17 released, 0.1.18 opened.
4383 * Version 0.1.17 released, 0.1.18 opened.
4378
4384
4379 * dot_ipython/ipythonrc (alias): added documentation.
4385 * dot_ipython/ipythonrc (alias): added documentation.
4380 (xcolor): Fixed small bug (xcolors -> xcolor)
4386 (xcolor): Fixed small bug (xcolors -> xcolor)
4381
4387
4382 * Changed the alias system. Now alias is a magic command to define
4388 * Changed the alias system. Now alias is a magic command to define
4383 aliases just like the shell. Rationale: the builtin magics should
4389 aliases just like the shell. Rationale: the builtin magics should
4384 be there for things deeply connected to IPython's
4390 be there for things deeply connected to IPython's
4385 architecture. And this is a much lighter system for what I think
4391 architecture. And this is a much lighter system for what I think
4386 is the really important feature: allowing users to define quickly
4392 is the really important feature: allowing users to define quickly
4387 magics that will do shell things for them, so they can customize
4393 magics that will do shell things for them, so they can customize
4388 IPython easily to match their work habits. If someone is really
4394 IPython easily to match their work habits. If someone is really
4389 desperate to have another name for a builtin alias, they can
4395 desperate to have another name for a builtin alias, they can
4390 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4396 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4391 works.
4397 works.
4392
4398
4393 2001-11-28 Fernando Perez <fperez@colorado.edu>
4399 2001-11-28 Fernando Perez <fperez@colorado.edu>
4394
4400
4395 * Changed @file so that it opens the source file at the proper
4401 * Changed @file so that it opens the source file at the proper
4396 line. Since it uses less, if your EDITOR environment is
4402 line. Since it uses less, if your EDITOR environment is
4397 configured, typing v will immediately open your editor of choice
4403 configured, typing v will immediately open your editor of choice
4398 right at the line where the object is defined. Not as quick as
4404 right at the line where the object is defined. Not as quick as
4399 having a direct @edit command, but for all intents and purposes it
4405 having a direct @edit command, but for all intents and purposes it
4400 works. And I don't have to worry about writing @edit to deal with
4406 works. And I don't have to worry about writing @edit to deal with
4401 all the editors, less does that.
4407 all the editors, less does that.
4402
4408
4403 * Version 0.1.16 released, 0.1.17 opened.
4409 * Version 0.1.16 released, 0.1.17 opened.
4404
4410
4405 * Fixed some nasty bugs in the page/page_dumb combo that could
4411 * Fixed some nasty bugs in the page/page_dumb combo that could
4406 crash IPython.
4412 crash IPython.
4407
4413
4408 2001-11-27 Fernando Perez <fperez@colorado.edu>
4414 2001-11-27 Fernando Perez <fperez@colorado.edu>
4409
4415
4410 * Version 0.1.15 released, 0.1.16 opened.
4416 * Version 0.1.15 released, 0.1.16 opened.
4411
4417
4412 * Finally got ? and ?? to work for undefined things: now it's
4418 * Finally got ? and ?? to work for undefined things: now it's
4413 possible to type {}.get? and get information about the get method
4419 possible to type {}.get? and get information about the get method
4414 of dicts, or os.path? even if only os is defined (so technically
4420 of dicts, or os.path? even if only os is defined (so technically
4415 os.path isn't). Works at any level. For example, after import os,
4421 os.path isn't). Works at any level. For example, after import os,
4416 os?, os.path?, os.path.abspath? all work. This is great, took some
4422 os?, os.path?, os.path.abspath? all work. This is great, took some
4417 work in _ofind.
4423 work in _ofind.
4418
4424
4419 * Fixed more bugs with logging. The sanest way to do it was to add
4425 * Fixed more bugs with logging. The sanest way to do it was to add
4420 to @log a 'mode' parameter. Killed two in one shot (this mode
4426 to @log a 'mode' parameter. Killed two in one shot (this mode
4421 option was a request of Janko's). I think it's finally clean
4427 option was a request of Janko's). I think it's finally clean
4422 (famous last words).
4428 (famous last words).
4423
4429
4424 * Added a page_dumb() pager which does a decent job of paging on
4430 * Added a page_dumb() pager which does a decent job of paging on
4425 screen, if better things (like less) aren't available. One less
4431 screen, if better things (like less) aren't available. One less
4426 unix dependency (someday maybe somebody will port this to
4432 unix dependency (someday maybe somebody will port this to
4427 windows).
4433 windows).
4428
4434
4429 * Fixed problem in magic_log: would lock of logging out if log
4435 * Fixed problem in magic_log: would lock of logging out if log
4430 creation failed (because it would still think it had succeeded).
4436 creation failed (because it would still think it had succeeded).
4431
4437
4432 * Improved the page() function using curses to auto-detect screen
4438 * Improved the page() function using curses to auto-detect screen
4433 size. Now it can make a much better decision on whether to print
4439 size. Now it can make a much better decision on whether to print
4434 or page a string. Option screen_length was modified: a value 0
4440 or page a string. Option screen_length was modified: a value 0
4435 means auto-detect, and that's the default now.
4441 means auto-detect, and that's the default now.
4436
4442
4437 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4443 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4438 go out. I'll test it for a few days, then talk to Janko about
4444 go out. I'll test it for a few days, then talk to Janko about
4439 licences and announce it.
4445 licences and announce it.
4440
4446
4441 * Fixed the length of the auto-generated ---> prompt which appears
4447 * Fixed the length of the auto-generated ---> prompt which appears
4442 for auto-parens and auto-quotes. Getting this right isn't trivial,
4448 for auto-parens and auto-quotes. Getting this right isn't trivial,
4443 with all the color escapes, different prompt types and optional
4449 with all the color escapes, different prompt types and optional
4444 separators. But it seems to be working in all the combinations.
4450 separators. But it seems to be working in all the combinations.
4445
4451
4446 2001-11-26 Fernando Perez <fperez@colorado.edu>
4452 2001-11-26 Fernando Perez <fperez@colorado.edu>
4447
4453
4448 * Wrote a regexp filter to get option types from the option names
4454 * Wrote a regexp filter to get option types from the option names
4449 string. This eliminates the need to manually keep two duplicate
4455 string. This eliminates the need to manually keep two duplicate
4450 lists.
4456 lists.
4451
4457
4452 * Removed the unneeded check_option_names. Now options are handled
4458 * Removed the unneeded check_option_names. Now options are handled
4453 in a much saner manner and it's easy to visually check that things
4459 in a much saner manner and it's easy to visually check that things
4454 are ok.
4460 are ok.
4455
4461
4456 * Updated version numbers on all files I modified to carry a
4462 * Updated version numbers on all files I modified to carry a
4457 notice so Janko and Nathan have clear version markers.
4463 notice so Janko and Nathan have clear version markers.
4458
4464
4459 * Updated docstring for ultraTB with my changes. I should send
4465 * Updated docstring for ultraTB with my changes. I should send
4460 this to Nathan.
4466 this to Nathan.
4461
4467
4462 * Lots of small fixes. Ran everything through pychecker again.
4468 * Lots of small fixes. Ran everything through pychecker again.
4463
4469
4464 * Made loading of deep_reload an cmd line option. If it's not too
4470 * Made loading of deep_reload an cmd line option. If it's not too
4465 kosher, now people can just disable it. With -nodeep_reload it's
4471 kosher, now people can just disable it. With -nodeep_reload it's
4466 still available as dreload(), it just won't overwrite reload().
4472 still available as dreload(), it just won't overwrite reload().
4467
4473
4468 * Moved many options to the no| form (-opt and -noopt
4474 * Moved many options to the no| form (-opt and -noopt
4469 accepted). Cleaner.
4475 accepted). Cleaner.
4470
4476
4471 * Changed magic_log so that if called with no parameters, it uses
4477 * Changed magic_log so that if called with no parameters, it uses
4472 'rotate' mode. That way auto-generated logs aren't automatically
4478 'rotate' mode. That way auto-generated logs aren't automatically
4473 over-written. For normal logs, now a backup is made if it exists
4479 over-written. For normal logs, now a backup is made if it exists
4474 (only 1 level of backups). A new 'backup' mode was added to the
4480 (only 1 level of backups). A new 'backup' mode was added to the
4475 Logger class to support this. This was a request by Janko.
4481 Logger class to support this. This was a request by Janko.
4476
4482
4477 * Added @logoff/@logon to stop/restart an active log.
4483 * Added @logoff/@logon to stop/restart an active log.
4478
4484
4479 * Fixed a lot of bugs in log saving/replay. It was pretty
4485 * Fixed a lot of bugs in log saving/replay. It was pretty
4480 broken. Now special lines (!@,/) appear properly in the command
4486 broken. Now special lines (!@,/) appear properly in the command
4481 history after a log replay.
4487 history after a log replay.
4482
4488
4483 * Tried and failed to implement full session saving via pickle. My
4489 * Tried and failed to implement full session saving via pickle. My
4484 idea was to pickle __main__.__dict__, but modules can't be
4490 idea was to pickle __main__.__dict__, but modules can't be
4485 pickled. This would be a better alternative to replaying logs, but
4491 pickled. This would be a better alternative to replaying logs, but
4486 seems quite tricky to get to work. Changed -session to be called
4492 seems quite tricky to get to work. Changed -session to be called
4487 -logplay, which more accurately reflects what it does. And if we
4493 -logplay, which more accurately reflects what it does. And if we
4488 ever get real session saving working, -session is now available.
4494 ever get real session saving working, -session is now available.
4489
4495
4490 * Implemented color schemes for prompts also. As for tracebacks,
4496 * Implemented color schemes for prompts also. As for tracebacks,
4491 currently only NoColor and Linux are supported. But now the
4497 currently only NoColor and Linux are supported. But now the
4492 infrastructure is in place, based on a generic ColorScheme
4498 infrastructure is in place, based on a generic ColorScheme
4493 class. So writing and activating new schemes both for the prompts
4499 class. So writing and activating new schemes both for the prompts
4494 and the tracebacks should be straightforward.
4500 and the tracebacks should be straightforward.
4495
4501
4496 * Version 0.1.13 released, 0.1.14 opened.
4502 * Version 0.1.13 released, 0.1.14 opened.
4497
4503
4498 * Changed handling of options for output cache. Now counter is
4504 * Changed handling of options for output cache. Now counter is
4499 hardwired starting at 1 and one specifies the maximum number of
4505 hardwired starting at 1 and one specifies the maximum number of
4500 entries *in the outcache* (not the max prompt counter). This is
4506 entries *in the outcache* (not the max prompt counter). This is
4501 much better, since many statements won't increase the cache
4507 much better, since many statements won't increase the cache
4502 count. It also eliminated some confusing options, now there's only
4508 count. It also eliminated some confusing options, now there's only
4503 one: cache_size.
4509 one: cache_size.
4504
4510
4505 * Added 'alias' magic function and magic_alias option in the
4511 * Added 'alias' magic function and magic_alias option in the
4506 ipythonrc file. Now the user can easily define whatever names he
4512 ipythonrc file. Now the user can easily define whatever names he
4507 wants for the magic functions without having to play weird
4513 wants for the magic functions without having to play weird
4508 namespace games. This gives IPython a real shell-like feel.
4514 namespace games. This gives IPython a real shell-like feel.
4509
4515
4510 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4516 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4511 @ or not).
4517 @ or not).
4512
4518
4513 This was one of the last remaining 'visible' bugs (that I know
4519 This was one of the last remaining 'visible' bugs (that I know
4514 of). I think if I can clean up the session loading so it works
4520 of). I think if I can clean up the session loading so it works
4515 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4521 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4516 about licensing).
4522 about licensing).
4517
4523
4518 2001-11-25 Fernando Perez <fperez@colorado.edu>
4524 2001-11-25 Fernando Perez <fperez@colorado.edu>
4519
4525
4520 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4526 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4521 there's a cleaner distinction between what ? and ?? show.
4527 there's a cleaner distinction between what ? and ?? show.
4522
4528
4523 * Added screen_length option. Now the user can define his own
4529 * Added screen_length option. Now the user can define his own
4524 screen size for page() operations.
4530 screen size for page() operations.
4525
4531
4526 * Implemented magic shell-like functions with automatic code
4532 * Implemented magic shell-like functions with automatic code
4527 generation. Now adding another function is just a matter of adding
4533 generation. Now adding another function is just a matter of adding
4528 an entry to a dict, and the function is dynamically generated at
4534 an entry to a dict, and the function is dynamically generated at
4529 run-time. Python has some really cool features!
4535 run-time. Python has some really cool features!
4530
4536
4531 * Renamed many options to cleanup conventions a little. Now all
4537 * Renamed many options to cleanup conventions a little. Now all
4532 are lowercase, and only underscores where needed. Also in the code
4538 are lowercase, and only underscores where needed. Also in the code
4533 option name tables are clearer.
4539 option name tables are clearer.
4534
4540
4535 * Changed prompts a little. Now input is 'In [n]:' instead of
4541 * Changed prompts a little. Now input is 'In [n]:' instead of
4536 'In[n]:='. This allows it the numbers to be aligned with the
4542 'In[n]:='. This allows it the numbers to be aligned with the
4537 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4543 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4538 Python (it was a Mathematica thing). The '...' continuation prompt
4544 Python (it was a Mathematica thing). The '...' continuation prompt
4539 was also changed a little to align better.
4545 was also changed a little to align better.
4540
4546
4541 * Fixed bug when flushing output cache. Not all _p<n> variables
4547 * Fixed bug when flushing output cache. Not all _p<n> variables
4542 exist, so their deletion needs to be wrapped in a try:
4548 exist, so their deletion needs to be wrapped in a try:
4543
4549
4544 * Figured out how to properly use inspect.formatargspec() (it
4550 * Figured out how to properly use inspect.formatargspec() (it
4545 requires the args preceded by *). So I removed all the code from
4551 requires the args preceded by *). So I removed all the code from
4546 _get_pdef in Magic, which was just replicating that.
4552 _get_pdef in Magic, which was just replicating that.
4547
4553
4548 * Added test to prefilter to allow redefining magic function names
4554 * Added test to prefilter to allow redefining magic function names
4549 as variables. This is ok, since the @ form is always available,
4555 as variables. This is ok, since the @ form is always available,
4550 but whe should allow the user to define a variable called 'ls' if
4556 but whe should allow the user to define a variable called 'ls' if
4551 he needs it.
4557 he needs it.
4552
4558
4553 * Moved the ToDo information from README into a separate ToDo.
4559 * Moved the ToDo information from README into a separate ToDo.
4554
4560
4555 * General code cleanup and small bugfixes. I think it's close to a
4561 * General code cleanup and small bugfixes. I think it's close to a
4556 state where it can be released, obviously with a big 'beta'
4562 state where it can be released, obviously with a big 'beta'
4557 warning on it.
4563 warning on it.
4558
4564
4559 * Got the magic function split to work. Now all magics are defined
4565 * Got the magic function split to work. Now all magics are defined
4560 in a separate class. It just organizes things a bit, and now
4566 in a separate class. It just organizes things a bit, and now
4561 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4567 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4562 was too long).
4568 was too long).
4563
4569
4564 * Changed @clear to @reset to avoid potential confusions with
4570 * Changed @clear to @reset to avoid potential confusions with
4565 the shell command clear. Also renamed @cl to @clear, which does
4571 the shell command clear. Also renamed @cl to @clear, which does
4566 exactly what people expect it to from their shell experience.
4572 exactly what people expect it to from their shell experience.
4567
4573
4568 Added a check to the @reset command (since it's so
4574 Added a check to the @reset command (since it's so
4569 destructive, it's probably a good idea to ask for confirmation).
4575 destructive, it's probably a good idea to ask for confirmation).
4570 But now reset only works for full namespace resetting. Since the
4576 But now reset only works for full namespace resetting. Since the
4571 del keyword is already there for deleting a few specific
4577 del keyword is already there for deleting a few specific
4572 variables, I don't see the point of having a redundant magic
4578 variables, I don't see the point of having a redundant magic
4573 function for the same task.
4579 function for the same task.
4574
4580
4575 2001-11-24 Fernando Perez <fperez@colorado.edu>
4581 2001-11-24 Fernando Perez <fperez@colorado.edu>
4576
4582
4577 * Updated the builtin docs (esp. the ? ones).
4583 * Updated the builtin docs (esp. the ? ones).
4578
4584
4579 * Ran all the code through pychecker. Not terribly impressed with
4585 * Ran all the code through pychecker. Not terribly impressed with
4580 it: lots of spurious warnings and didn't really find anything of
4586 it: lots of spurious warnings and didn't really find anything of
4581 substance (just a few modules being imported and not used).
4587 substance (just a few modules being imported and not used).
4582
4588
4583 * Implemented the new ultraTB functionality into IPython. New
4589 * Implemented the new ultraTB functionality into IPython. New
4584 option: xcolors. This chooses color scheme. xmode now only selects
4590 option: xcolors. This chooses color scheme. xmode now only selects
4585 between Plain and Verbose. Better orthogonality.
4591 between Plain and Verbose. Better orthogonality.
4586
4592
4587 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4593 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4588 mode and color scheme for the exception handlers. Now it's
4594 mode and color scheme for the exception handlers. Now it's
4589 possible to have the verbose traceback with no coloring.
4595 possible to have the verbose traceback with no coloring.
4590
4596
4591 2001-11-23 Fernando Perez <fperez@colorado.edu>
4597 2001-11-23 Fernando Perez <fperez@colorado.edu>
4592
4598
4593 * Version 0.1.12 released, 0.1.13 opened.
4599 * Version 0.1.12 released, 0.1.13 opened.
4594
4600
4595 * Removed option to set auto-quote and auto-paren escapes by
4601 * Removed option to set auto-quote and auto-paren escapes by
4596 user. The chances of breaking valid syntax are just too high. If
4602 user. The chances of breaking valid syntax are just too high. If
4597 someone *really* wants, they can always dig into the code.
4603 someone *really* wants, they can always dig into the code.
4598
4604
4599 * Made prompt separators configurable.
4605 * Made prompt separators configurable.
4600
4606
4601 2001-11-22 Fernando Perez <fperez@colorado.edu>
4607 2001-11-22 Fernando Perez <fperez@colorado.edu>
4602
4608
4603 * Small bugfixes in many places.
4609 * Small bugfixes in many places.
4604
4610
4605 * Removed the MyCompleter class from ipplib. It seemed redundant
4611 * Removed the MyCompleter class from ipplib. It seemed redundant
4606 with the C-p,C-n history search functionality. Less code to
4612 with the C-p,C-n history search functionality. Less code to
4607 maintain.
4613 maintain.
4608
4614
4609 * Moved all the original ipython.py code into ipythonlib.py. Right
4615 * Moved all the original ipython.py code into ipythonlib.py. Right
4610 now it's just one big dump into a function called make_IPython, so
4616 now it's just one big dump into a function called make_IPython, so
4611 no real modularity has been gained. But at least it makes the
4617 no real modularity has been gained. But at least it makes the
4612 wrapper script tiny, and since ipythonlib is a module, it gets
4618 wrapper script tiny, and since ipythonlib is a module, it gets
4613 compiled and startup is much faster.
4619 compiled and startup is much faster.
4614
4620
4615 This is a reasobably 'deep' change, so we should test it for a
4621 This is a reasobably 'deep' change, so we should test it for a
4616 while without messing too much more with the code.
4622 while without messing too much more with the code.
4617
4623
4618 2001-11-21 Fernando Perez <fperez@colorado.edu>
4624 2001-11-21 Fernando Perez <fperez@colorado.edu>
4619
4625
4620 * Version 0.1.11 released, 0.1.12 opened for further work.
4626 * Version 0.1.11 released, 0.1.12 opened for further work.
4621
4627
4622 * Removed dependency on Itpl. It was only needed in one place. It
4628 * Removed dependency on Itpl. It was only needed in one place. It
4623 would be nice if this became part of python, though. It makes life
4629 would be nice if this became part of python, though. It makes life
4624 *a lot* easier in some cases.
4630 *a lot* easier in some cases.
4625
4631
4626 * Simplified the prefilter code a bit. Now all handlers are
4632 * Simplified the prefilter code a bit. Now all handlers are
4627 expected to explicitly return a value (at least a blank string).
4633 expected to explicitly return a value (at least a blank string).
4628
4634
4629 * Heavy edits in ipplib. Removed the help system altogether. Now
4635 * Heavy edits in ipplib. Removed the help system altogether. Now
4630 obj?/?? is used for inspecting objects, a magic @doc prints
4636 obj?/?? is used for inspecting objects, a magic @doc prints
4631 docstrings, and full-blown Python help is accessed via the 'help'
4637 docstrings, and full-blown Python help is accessed via the 'help'
4632 keyword. This cleans up a lot of code (less to maintain) and does
4638 keyword. This cleans up a lot of code (less to maintain) and does
4633 the job. Since 'help' is now a standard Python component, might as
4639 the job. Since 'help' is now a standard Python component, might as
4634 well use it and remove duplicate functionality.
4640 well use it and remove duplicate functionality.
4635
4641
4636 Also removed the option to use ipplib as a standalone program. By
4642 Also removed the option to use ipplib as a standalone program. By
4637 now it's too dependent on other parts of IPython to function alone.
4643 now it's too dependent on other parts of IPython to function alone.
4638
4644
4639 * Fixed bug in genutils.pager. It would crash if the pager was
4645 * Fixed bug in genutils.pager. It would crash if the pager was
4640 exited immediately after opening (broken pipe).
4646 exited immediately after opening (broken pipe).
4641
4647
4642 * Trimmed down the VerboseTB reporting a little. The header is
4648 * Trimmed down the VerboseTB reporting a little. The header is
4643 much shorter now and the repeated exception arguments at the end
4649 much shorter now and the repeated exception arguments at the end
4644 have been removed. For interactive use the old header seemed a bit
4650 have been removed. For interactive use the old header seemed a bit
4645 excessive.
4651 excessive.
4646
4652
4647 * Fixed small bug in output of @whos for variables with multi-word
4653 * Fixed small bug in output of @whos for variables with multi-word
4648 types (only first word was displayed).
4654 types (only first word was displayed).
4649
4655
4650 2001-11-17 Fernando Perez <fperez@colorado.edu>
4656 2001-11-17 Fernando Perez <fperez@colorado.edu>
4651
4657
4652 * Version 0.1.10 released, 0.1.11 opened for further work.
4658 * Version 0.1.10 released, 0.1.11 opened for further work.
4653
4659
4654 * Modified dirs and friends. dirs now *returns* the stack (not
4660 * Modified dirs and friends. dirs now *returns* the stack (not
4655 prints), so one can manipulate it as a variable. Convenient to
4661 prints), so one can manipulate it as a variable. Convenient to
4656 travel along many directories.
4662 travel along many directories.
4657
4663
4658 * Fixed bug in magic_pdef: would only work with functions with
4664 * Fixed bug in magic_pdef: would only work with functions with
4659 arguments with default values.
4665 arguments with default values.
4660
4666
4661 2001-11-14 Fernando Perez <fperez@colorado.edu>
4667 2001-11-14 Fernando Perez <fperez@colorado.edu>
4662
4668
4663 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4669 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4664 example with IPython. Various other minor fixes and cleanups.
4670 example with IPython. Various other minor fixes and cleanups.
4665
4671
4666 * Version 0.1.9 released, 0.1.10 opened for further work.
4672 * Version 0.1.9 released, 0.1.10 opened for further work.
4667
4673
4668 * Added sys.path to the list of directories searched in the
4674 * Added sys.path to the list of directories searched in the
4669 execfile= option. It used to be the current directory and the
4675 execfile= option. It used to be the current directory and the
4670 user's IPYTHONDIR only.
4676 user's IPYTHONDIR only.
4671
4677
4672 2001-11-13 Fernando Perez <fperez@colorado.edu>
4678 2001-11-13 Fernando Perez <fperez@colorado.edu>
4673
4679
4674 * Reinstated the raw_input/prefilter separation that Janko had
4680 * Reinstated the raw_input/prefilter separation that Janko had
4675 initially. This gives a more convenient setup for extending the
4681 initially. This gives a more convenient setup for extending the
4676 pre-processor from the outside: raw_input always gets a string,
4682 pre-processor from the outside: raw_input always gets a string,
4677 and prefilter has to process it. We can then redefine prefilter
4683 and prefilter has to process it. We can then redefine prefilter
4678 from the outside and implement extensions for special
4684 from the outside and implement extensions for special
4679 purposes.
4685 purposes.
4680
4686
4681 Today I got one for inputting PhysicalQuantity objects
4687 Today I got one for inputting PhysicalQuantity objects
4682 (from Scientific) without needing any function calls at
4688 (from Scientific) without needing any function calls at
4683 all. Extremely convenient, and it's all done as a user-level
4689 all. Extremely convenient, and it's all done as a user-level
4684 extension (no IPython code was touched). Now instead of:
4690 extension (no IPython code was touched). Now instead of:
4685 a = PhysicalQuantity(4.2,'m/s**2')
4691 a = PhysicalQuantity(4.2,'m/s**2')
4686 one can simply say
4692 one can simply say
4687 a = 4.2 m/s**2
4693 a = 4.2 m/s**2
4688 or even
4694 or even
4689 a = 4.2 m/s^2
4695 a = 4.2 m/s^2
4690
4696
4691 I use this, but it's also a proof of concept: IPython really is
4697 I use this, but it's also a proof of concept: IPython really is
4692 fully user-extensible, even at the level of the parsing of the
4698 fully user-extensible, even at the level of the parsing of the
4693 command line. It's not trivial, but it's perfectly doable.
4699 command line. It's not trivial, but it's perfectly doable.
4694
4700
4695 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4701 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4696 the problem of modules being loaded in the inverse order in which
4702 the problem of modules being loaded in the inverse order in which
4697 they were defined in
4703 they were defined in
4698
4704
4699 * Version 0.1.8 released, 0.1.9 opened for further work.
4705 * Version 0.1.8 released, 0.1.9 opened for further work.
4700
4706
4701 * Added magics pdef, source and file. They respectively show the
4707 * Added magics pdef, source and file. They respectively show the
4702 definition line ('prototype' in C), source code and full python
4708 definition line ('prototype' in C), source code and full python
4703 file for any callable object. The object inspector oinfo uses
4709 file for any callable object. The object inspector oinfo uses
4704 these to show the same information.
4710 these to show the same information.
4705
4711
4706 * Version 0.1.7 released, 0.1.8 opened for further work.
4712 * Version 0.1.7 released, 0.1.8 opened for further work.
4707
4713
4708 * Separated all the magic functions into a class called Magic. The
4714 * Separated all the magic functions into a class called Magic. The
4709 InteractiveShell class was becoming too big for Xemacs to handle
4715 InteractiveShell class was becoming too big for Xemacs to handle
4710 (de-indenting a line would lock it up for 10 seconds while it
4716 (de-indenting a line would lock it up for 10 seconds while it
4711 backtracked on the whole class!)
4717 backtracked on the whole class!)
4712
4718
4713 FIXME: didn't work. It can be done, but right now namespaces are
4719 FIXME: didn't work. It can be done, but right now namespaces are
4714 all messed up. Do it later (reverted it for now, so at least
4720 all messed up. Do it later (reverted it for now, so at least
4715 everything works as before).
4721 everything works as before).
4716
4722
4717 * Got the object introspection system (magic_oinfo) working! I
4723 * Got the object introspection system (magic_oinfo) working! I
4718 think this is pretty much ready for release to Janko, so he can
4724 think this is pretty much ready for release to Janko, so he can
4719 test it for a while and then announce it. Pretty much 100% of what
4725 test it for a while and then announce it. Pretty much 100% of what
4720 I wanted for the 'phase 1' release is ready. Happy, tired.
4726 I wanted for the 'phase 1' release is ready. Happy, tired.
4721
4727
4722 2001-11-12 Fernando Perez <fperez@colorado.edu>
4728 2001-11-12 Fernando Perez <fperez@colorado.edu>
4723
4729
4724 * Version 0.1.6 released, 0.1.7 opened for further work.
4730 * Version 0.1.6 released, 0.1.7 opened for further work.
4725
4731
4726 * Fixed bug in printing: it used to test for truth before
4732 * Fixed bug in printing: it used to test for truth before
4727 printing, so 0 wouldn't print. Now checks for None.
4733 printing, so 0 wouldn't print. Now checks for None.
4728
4734
4729 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4735 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4730 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4736 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4731 reaches by hand into the outputcache. Think of a better way to do
4737 reaches by hand into the outputcache. Think of a better way to do
4732 this later.
4738 this later.
4733
4739
4734 * Various small fixes thanks to Nathan's comments.
4740 * Various small fixes thanks to Nathan's comments.
4735
4741
4736 * Changed magic_pprint to magic_Pprint. This way it doesn't
4742 * Changed magic_pprint to magic_Pprint. This way it doesn't
4737 collide with pprint() and the name is consistent with the command
4743 collide with pprint() and the name is consistent with the command
4738 line option.
4744 line option.
4739
4745
4740 * Changed prompt counter behavior to be fully like
4746 * Changed prompt counter behavior to be fully like
4741 Mathematica's. That is, even input that doesn't return a result
4747 Mathematica's. That is, even input that doesn't return a result
4742 raises the prompt counter. The old behavior was kind of confusing
4748 raises the prompt counter. The old behavior was kind of confusing
4743 (getting the same prompt number several times if the operation
4749 (getting the same prompt number several times if the operation
4744 didn't return a result).
4750 didn't return a result).
4745
4751
4746 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4752 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4747
4753
4748 * Fixed -Classic mode (wasn't working anymore).
4754 * Fixed -Classic mode (wasn't working anymore).
4749
4755
4750 * Added colored prompts using Nathan's new code. Colors are
4756 * Added colored prompts using Nathan's new code. Colors are
4751 currently hardwired, they can be user-configurable. For
4757 currently hardwired, they can be user-configurable. For
4752 developers, they can be chosen in file ipythonlib.py, at the
4758 developers, they can be chosen in file ipythonlib.py, at the
4753 beginning of the CachedOutput class def.
4759 beginning of the CachedOutput class def.
4754
4760
4755 2001-11-11 Fernando Perez <fperez@colorado.edu>
4761 2001-11-11 Fernando Perez <fperez@colorado.edu>
4756
4762
4757 * Version 0.1.5 released, 0.1.6 opened for further work.
4763 * Version 0.1.5 released, 0.1.6 opened for further work.
4758
4764
4759 * Changed magic_env to *return* the environment as a dict (not to
4765 * Changed magic_env to *return* the environment as a dict (not to
4760 print it). This way it prints, but it can also be processed.
4766 print it). This way it prints, but it can also be processed.
4761
4767
4762 * Added Verbose exception reporting to interactive
4768 * Added Verbose exception reporting to interactive
4763 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4769 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4764 traceback. Had to make some changes to the ultraTB file. This is
4770 traceback. Had to make some changes to the ultraTB file. This is
4765 probably the last 'big' thing in my mental todo list. This ties
4771 probably the last 'big' thing in my mental todo list. This ties
4766 in with the next entry:
4772 in with the next entry:
4767
4773
4768 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4774 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4769 has to specify is Plain, Color or Verbose for all exception
4775 has to specify is Plain, Color or Verbose for all exception
4770 handling.
4776 handling.
4771
4777
4772 * Removed ShellServices option. All this can really be done via
4778 * Removed ShellServices option. All this can really be done via
4773 the magic system. It's easier to extend, cleaner and has automatic
4779 the magic system. It's easier to extend, cleaner and has automatic
4774 namespace protection and documentation.
4780 namespace protection and documentation.
4775
4781
4776 2001-11-09 Fernando Perez <fperez@colorado.edu>
4782 2001-11-09 Fernando Perez <fperez@colorado.edu>
4777
4783
4778 * Fixed bug in output cache flushing (missing parameter to
4784 * Fixed bug in output cache flushing (missing parameter to
4779 __init__). Other small bugs fixed (found using pychecker).
4785 __init__). Other small bugs fixed (found using pychecker).
4780
4786
4781 * Version 0.1.4 opened for bugfixing.
4787 * Version 0.1.4 opened for bugfixing.
4782
4788
4783 2001-11-07 Fernando Perez <fperez@colorado.edu>
4789 2001-11-07 Fernando Perez <fperez@colorado.edu>
4784
4790
4785 * Version 0.1.3 released, mainly because of the raw_input bug.
4791 * Version 0.1.3 released, mainly because of the raw_input bug.
4786
4792
4787 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4793 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4788 and when testing for whether things were callable, a call could
4794 and when testing for whether things were callable, a call could
4789 actually be made to certain functions. They would get called again
4795 actually be made to certain functions. They would get called again
4790 once 'really' executed, with a resulting double call. A disaster
4796 once 'really' executed, with a resulting double call. A disaster
4791 in many cases (list.reverse() would never work!).
4797 in many cases (list.reverse() would never work!).
4792
4798
4793 * Removed prefilter() function, moved its code to raw_input (which
4799 * Removed prefilter() function, moved its code to raw_input (which
4794 after all was just a near-empty caller for prefilter). This saves
4800 after all was just a near-empty caller for prefilter). This saves
4795 a function call on every prompt, and simplifies the class a tiny bit.
4801 a function call on every prompt, and simplifies the class a tiny bit.
4796
4802
4797 * Fix _ip to __ip name in magic example file.
4803 * Fix _ip to __ip name in magic example file.
4798
4804
4799 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4805 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4800 work with non-gnu versions of tar.
4806 work with non-gnu versions of tar.
4801
4807
4802 2001-11-06 Fernando Perez <fperez@colorado.edu>
4808 2001-11-06 Fernando Perez <fperez@colorado.edu>
4803
4809
4804 * Version 0.1.2. Just to keep track of the recent changes.
4810 * Version 0.1.2. Just to keep track of the recent changes.
4805
4811
4806 * Fixed nasty bug in output prompt routine. It used to check 'if
4812 * Fixed nasty bug in output prompt routine. It used to check 'if
4807 arg != None...'. Problem is, this fails if arg implements a
4813 arg != None...'. Problem is, this fails if arg implements a
4808 special comparison (__cmp__) which disallows comparing to
4814 special comparison (__cmp__) which disallows comparing to
4809 None. Found it when trying to use the PhysicalQuantity module from
4815 None. Found it when trying to use the PhysicalQuantity module from
4810 ScientificPython.
4816 ScientificPython.
4811
4817
4812 2001-11-05 Fernando Perez <fperez@colorado.edu>
4818 2001-11-05 Fernando Perez <fperez@colorado.edu>
4813
4819
4814 * Also added dirs. Now the pushd/popd/dirs family functions
4820 * Also added dirs. Now the pushd/popd/dirs family functions
4815 basically like the shell, with the added convenience of going home
4821 basically like the shell, with the added convenience of going home
4816 when called with no args.
4822 when called with no args.
4817
4823
4818 * pushd/popd slightly modified to mimic shell behavior more
4824 * pushd/popd slightly modified to mimic shell behavior more
4819 closely.
4825 closely.
4820
4826
4821 * Added env,pushd,popd from ShellServices as magic functions. I
4827 * Added env,pushd,popd from ShellServices as magic functions. I
4822 think the cleanest will be to port all desired functions from
4828 think the cleanest will be to port all desired functions from
4823 ShellServices as magics and remove ShellServices altogether. This
4829 ShellServices as magics and remove ShellServices altogether. This
4824 will provide a single, clean way of adding functionality
4830 will provide a single, clean way of adding functionality
4825 (shell-type or otherwise) to IP.
4831 (shell-type or otherwise) to IP.
4826
4832
4827 2001-11-04 Fernando Perez <fperez@colorado.edu>
4833 2001-11-04 Fernando Perez <fperez@colorado.edu>
4828
4834
4829 * Added .ipython/ directory to sys.path. This way users can keep
4835 * Added .ipython/ directory to sys.path. This way users can keep
4830 customizations there and access them via import.
4836 customizations there and access them via import.
4831
4837
4832 2001-11-03 Fernando Perez <fperez@colorado.edu>
4838 2001-11-03 Fernando Perez <fperez@colorado.edu>
4833
4839
4834 * Opened version 0.1.1 for new changes.
4840 * Opened version 0.1.1 for new changes.
4835
4841
4836 * Changed version number to 0.1.0: first 'public' release, sent to
4842 * Changed version number to 0.1.0: first 'public' release, sent to
4837 Nathan and Janko.
4843 Nathan and Janko.
4838
4844
4839 * Lots of small fixes and tweaks.
4845 * Lots of small fixes and tweaks.
4840
4846
4841 * Minor changes to whos format. Now strings are shown, snipped if
4847 * Minor changes to whos format. Now strings are shown, snipped if
4842 too long.
4848 too long.
4843
4849
4844 * Changed ShellServices to work on __main__ so they show up in @who
4850 * Changed ShellServices to work on __main__ so they show up in @who
4845
4851
4846 * Help also works with ? at the end of a line:
4852 * Help also works with ? at the end of a line:
4847 ?sin and sin?
4853 ?sin and sin?
4848 both produce the same effect. This is nice, as often I use the
4854 both produce the same effect. This is nice, as often I use the
4849 tab-complete to find the name of a method, but I used to then have
4855 tab-complete to find the name of a method, but I used to then have
4850 to go to the beginning of the line to put a ? if I wanted more
4856 to go to the beginning of the line to put a ? if I wanted more
4851 info. Now I can just add the ? and hit return. Convenient.
4857 info. Now I can just add the ? and hit return. Convenient.
4852
4858
4853 2001-11-02 Fernando Perez <fperez@colorado.edu>
4859 2001-11-02 Fernando Perez <fperez@colorado.edu>
4854
4860
4855 * Python version check (>=2.1) added.
4861 * Python version check (>=2.1) added.
4856
4862
4857 * Added LazyPython documentation. At this point the docs are quite
4863 * Added LazyPython documentation. At this point the docs are quite
4858 a mess. A cleanup is in order.
4864 a mess. A cleanup is in order.
4859
4865
4860 * Auto-installer created. For some bizarre reason, the zipfiles
4866 * Auto-installer created. For some bizarre reason, the zipfiles
4861 module isn't working on my system. So I made a tar version
4867 module isn't working on my system. So I made a tar version
4862 (hopefully the command line options in various systems won't kill
4868 (hopefully the command line options in various systems won't kill
4863 me).
4869 me).
4864
4870
4865 * Fixes to Struct in genutils. Now all dictionary-like methods are
4871 * Fixes to Struct in genutils. Now all dictionary-like methods are
4866 protected (reasonably).
4872 protected (reasonably).
4867
4873
4868 * Added pager function to genutils and changed ? to print usage
4874 * Added pager function to genutils and changed ? to print usage
4869 note through it (it was too long).
4875 note through it (it was too long).
4870
4876
4871 * Added the LazyPython functionality. Works great! I changed the
4877 * Added the LazyPython functionality. Works great! I changed the
4872 auto-quote escape to ';', it's on home row and next to '. But
4878 auto-quote escape to ';', it's on home row and next to '. But
4873 both auto-quote and auto-paren (still /) escapes are command-line
4879 both auto-quote and auto-paren (still /) escapes are command-line
4874 parameters.
4880 parameters.
4875
4881
4876
4882
4877 2001-11-01 Fernando Perez <fperez@colorado.edu>
4883 2001-11-01 Fernando Perez <fperez@colorado.edu>
4878
4884
4879 * Version changed to 0.0.7. Fairly large change: configuration now
4885 * Version changed to 0.0.7. Fairly large change: configuration now
4880 is all stored in a directory, by default .ipython. There, all
4886 is all stored in a directory, by default .ipython. There, all
4881 config files have normal looking names (not .names)
4887 config files have normal looking names (not .names)
4882
4888
4883 * Version 0.0.6 Released first to Lucas and Archie as a test
4889 * Version 0.0.6 Released first to Lucas and Archie as a test
4884 run. Since it's the first 'semi-public' release, change version to
4890 run. Since it's the first 'semi-public' release, change version to
4885 > 0.0.6 for any changes now.
4891 > 0.0.6 for any changes now.
4886
4892
4887 * Stuff I had put in the ipplib.py changelog:
4893 * Stuff I had put in the ipplib.py changelog:
4888
4894
4889 Changes to InteractiveShell:
4895 Changes to InteractiveShell:
4890
4896
4891 - Made the usage message a parameter.
4897 - Made the usage message a parameter.
4892
4898
4893 - Require the name of the shell variable to be given. It's a bit
4899 - Require the name of the shell variable to be given. It's a bit
4894 of a hack, but allows the name 'shell' not to be hardwire in the
4900 of a hack, but allows the name 'shell' not to be hardwire in the
4895 magic (@) handler, which is problematic b/c it requires
4901 magic (@) handler, which is problematic b/c it requires
4896 polluting the global namespace with 'shell'. This in turn is
4902 polluting the global namespace with 'shell'. This in turn is
4897 fragile: if a user redefines a variable called shell, things
4903 fragile: if a user redefines a variable called shell, things
4898 break.
4904 break.
4899
4905
4900 - magic @: all functions available through @ need to be defined
4906 - magic @: all functions available through @ need to be defined
4901 as magic_<name>, even though they can be called simply as
4907 as magic_<name>, even though they can be called simply as
4902 @<name>. This allows the special command @magic to gather
4908 @<name>. This allows the special command @magic to gather
4903 information automatically about all existing magic functions,
4909 information automatically about all existing magic functions,
4904 even if they are run-time user extensions, by parsing the shell
4910 even if they are run-time user extensions, by parsing the shell
4905 instance __dict__ looking for special magic_ names.
4911 instance __dict__ looking for special magic_ names.
4906
4912
4907 - mainloop: added *two* local namespace parameters. This allows
4913 - mainloop: added *two* local namespace parameters. This allows
4908 the class to differentiate between parameters which were there
4914 the class to differentiate between parameters which were there
4909 before and after command line initialization was processed. This
4915 before and after command line initialization was processed. This
4910 way, later @who can show things loaded at startup by the
4916 way, later @who can show things loaded at startup by the
4911 user. This trick was necessary to make session saving/reloading
4917 user. This trick was necessary to make session saving/reloading
4912 really work: ideally after saving/exiting/reloading a session,
4918 really work: ideally after saving/exiting/reloading a session,
4913 *everythin* should look the same, including the output of @who. I
4919 *everythin* should look the same, including the output of @who. I
4914 was only able to make this work with this double namespace
4920 was only able to make this work with this double namespace
4915 trick.
4921 trick.
4916
4922
4917 - added a header to the logfile which allows (almost) full
4923 - added a header to the logfile which allows (almost) full
4918 session restoring.
4924 session restoring.
4919
4925
4920 - prepend lines beginning with @ or !, with a and log
4926 - prepend lines beginning with @ or !, with a and log
4921 them. Why? !lines: may be useful to know what you did @lines:
4927 them. Why? !lines: may be useful to know what you did @lines:
4922 they may affect session state. So when restoring a session, at
4928 they may affect session state. So when restoring a session, at
4923 least inform the user of their presence. I couldn't quite get
4929 least inform the user of their presence. I couldn't quite get
4924 them to properly re-execute, but at least the user is warned.
4930 them to properly re-execute, but at least the user is warned.
4925
4931
4926 * Started ChangeLog.
4932 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now