##// END OF EJS Templates
Fix quoting of aliases in transform_alias
vivainio -
Show More
@@ -1,2281 +1,2281 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 1227 2006-03-28 13:20:14Z vivainio $
9 $Id: iplib.py 1232 2006-04-01 10:59:41Z 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 import pickleshare
61 import pickleshare
62
62
63 from pprint import pprint, pformat
63 from pprint import pprint, pformat
64
64
65 # IPython's own modules
65 # IPython's own modules
66 import IPython
66 import IPython
67 from IPython import OInspect,PyColorize,ultraTB
67 from IPython import OInspect,PyColorize,ultraTB
68 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
69 from IPython.FakeModule import FakeModule
69 from IPython.FakeModule import FakeModule
70 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
71 from IPython.Logger import Logger
71 from IPython.Logger import Logger
72 from IPython.Magic import Magic
72 from IPython.Magic import Magic
73 from IPython.Prompts import CachedOutput
73 from IPython.Prompts import CachedOutput
74 from IPython.ipstruct import Struct
74 from IPython.ipstruct import Struct
75 from IPython.background_jobs import BackgroundJobManager
75 from IPython.background_jobs import BackgroundJobManager
76 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.usage import cmd_line_usage,interactive_usage
77 from IPython.genutils import *
77 from IPython.genutils import *
78 import IPython.ipapi
78 import IPython.ipapi
79
79
80 # Globals
80 # Globals
81
81
82 # store the builtin raw_input globally, and use this always, in case user code
82 # store the builtin raw_input globally, and use this always, in case user code
83 # overwrites it (like wx.py.PyShell does)
83 # overwrites it (like wx.py.PyShell does)
84 raw_input_original = raw_input
84 raw_input_original = raw_input
85
85
86 # compiled regexps for autoindent management
86 # compiled regexps for autoindent management
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88
88
89
89
90 #****************************************************************************
90 #****************************************************************************
91 # Some utility function definitions
91 # Some utility function definitions
92
92
93 ini_spaces_re = re.compile(r'^(\s+)')
93 ini_spaces_re = re.compile(r'^(\s+)')
94
94
95 def num_ini_spaces(strng):
95 def num_ini_spaces(strng):
96 """Return the number of initial spaces in a string"""
96 """Return the number of initial spaces in a string"""
97
97
98 ini_spaces = ini_spaces_re.match(strng)
98 ini_spaces = ini_spaces_re.match(strng)
99 if ini_spaces:
99 if ini_spaces:
100 return ini_spaces.end()
100 return ini_spaces.end()
101 else:
101 else:
102 return 0
102 return 0
103
103
104 def softspace(file, newvalue):
104 def softspace(file, newvalue):
105 """Copied from code.py, to remove the dependency"""
105 """Copied from code.py, to remove the dependency"""
106
106
107 oldvalue = 0
107 oldvalue = 0
108 try:
108 try:
109 oldvalue = file.softspace
109 oldvalue = file.softspace
110 except AttributeError:
110 except AttributeError:
111 pass
111 pass
112 try:
112 try:
113 file.softspace = newvalue
113 file.softspace = newvalue
114 except (AttributeError, TypeError):
114 except (AttributeError, TypeError):
115 # "attribute-less object" or "read-only attributes"
115 # "attribute-less object" or "read-only attributes"
116 pass
116 pass
117 return oldvalue
117 return oldvalue
118
118
119
119
120 #****************************************************************************
120 #****************************************************************************
121 # Local use exceptions
121 # Local use exceptions
122 class SpaceInInput(exceptions.Exception): pass
122 class SpaceInInput(exceptions.Exception): pass
123
123
124
124
125 #****************************************************************************
125 #****************************************************************************
126 # Local use classes
126 # Local use classes
127 class Bunch: pass
127 class Bunch: pass
128
128
129 class Undefined: pass
129 class Undefined: pass
130
130
131 class InputList(list):
131 class InputList(list):
132 """Class to store user input.
132 """Class to store user input.
133
133
134 It's basically a list, but slices return a string instead of a list, thus
134 It's basically a list, but slices return a string instead of a list, thus
135 allowing things like (assuming 'In' is an instance):
135 allowing things like (assuming 'In' is an instance):
136
136
137 exec In[4:7]
137 exec In[4:7]
138
138
139 or
139 or
140
140
141 exec In[5:9] + In[14] + In[21:25]"""
141 exec In[5:9] + In[14] + In[21:25]"""
142
142
143 def __getslice__(self,i,j):
143 def __getslice__(self,i,j):
144 return ''.join(list.__getslice__(self,i,j))
144 return ''.join(list.__getslice__(self,i,j))
145
145
146 class SyntaxTB(ultraTB.ListTB):
146 class SyntaxTB(ultraTB.ListTB):
147 """Extension which holds some state: the last exception value"""
147 """Extension which holds some state: the last exception value"""
148
148
149 def __init__(self,color_scheme = 'NoColor'):
149 def __init__(self,color_scheme = 'NoColor'):
150 ultraTB.ListTB.__init__(self,color_scheme)
150 ultraTB.ListTB.__init__(self,color_scheme)
151 self.last_syntax_error = None
151 self.last_syntax_error = None
152
152
153 def __call__(self, etype, value, elist):
153 def __call__(self, etype, value, elist):
154 self.last_syntax_error = value
154 self.last_syntax_error = value
155 ultraTB.ListTB.__call__(self,etype,value,elist)
155 ultraTB.ListTB.__call__(self,etype,value,elist)
156
156
157 def clear_err_state(self):
157 def clear_err_state(self):
158 """Return the current error state and clear it"""
158 """Return the current error state and clear it"""
159 e = self.last_syntax_error
159 e = self.last_syntax_error
160 self.last_syntax_error = None
160 self.last_syntax_error = None
161 return e
161 return e
162
162
163 #****************************************************************************
163 #****************************************************************************
164 # Main IPython class
164 # Main IPython class
165
165
166 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
167 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # until a full rewrite is made. I've cleaned all cross-class uses of
168 # attributes and methods, but too much user code out there relies on the
168 # attributes and methods, but too much user code out there relies on the
169 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
170 #
170 #
171 # But at least now, all the pieces have been separated and we could, in
171 # But at least now, all the pieces have been separated and we could, in
172 # principle, stop using the mixin. This will ease the transition to the
172 # principle, stop using the mixin. This will ease the transition to the
173 # chainsaw branch.
173 # chainsaw branch.
174
174
175 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # For reference, the following is the list of 'self.foo' uses in the Magic
176 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
177 # class, to prevent clashes.
177 # class, to prevent clashes.
178
178
179 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
180 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
181 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
182 # 'self.value']
182 # 'self.value']
183
183
184 class InteractiveShell(object,Magic):
184 class InteractiveShell(object,Magic):
185 """An enhanced console for Python."""
185 """An enhanced console for Python."""
186
186
187 # class attribute to indicate whether the class supports threads or not.
187 # class attribute to indicate whether the class supports threads or not.
188 # Subclasses with thread support should override this as needed.
188 # Subclasses with thread support should override this as needed.
189 isthreaded = False
189 isthreaded = False
190
190
191 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
192 user_ns = None,user_global_ns=None,banner2='',
192 user_ns = None,user_global_ns=None,banner2='',
193 custom_exceptions=((),None),embedded=False):
193 custom_exceptions=((),None),embedded=False):
194
194
195
195
196 # log system
196 # log system
197 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
197 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
198
198
199 # Produce a public API instance
199 # Produce a public API instance
200
200
201 self.api = IPython.ipapi.IPApi(self)
201 self.api = IPython.ipapi.IPApi(self)
202
202
203 # some minimal strict typechecks. For some core data structures, I
203 # some minimal strict typechecks. For some core data structures, I
204 # want actual basic python types, not just anything that looks like
204 # want actual basic python types, not just anything that looks like
205 # one. This is especially true for namespaces.
205 # one. This is especially true for namespaces.
206 for ns in (user_ns,user_global_ns):
206 for ns in (user_ns,user_global_ns):
207 if ns is not None and type(ns) != types.DictType:
207 if ns is not None and type(ns) != types.DictType:
208 raise TypeError,'namespace must be a dictionary'
208 raise TypeError,'namespace must be a dictionary'
209
209
210 # Job manager (for jobs run as background threads)
210 # Job manager (for jobs run as background threads)
211 self.jobs = BackgroundJobManager()
211 self.jobs = BackgroundJobManager()
212
212
213 # track which builtins we add, so we can clean up later
213 # track which builtins we add, so we can clean up later
214 self.builtins_added = {}
214 self.builtins_added = {}
215 # This method will add the necessary builtins for operation, but
215 # This method will add the necessary builtins for operation, but
216 # tracking what it did via the builtins_added dict.
216 # tracking what it did via the builtins_added dict.
217 self.add_builtins()
217 self.add_builtins()
218
218
219 # Do the intuitively correct thing for quit/exit: we remove the
219 # Do the intuitively correct thing for quit/exit: we remove the
220 # builtins if they exist, and our own magics will deal with this
220 # builtins if they exist, and our own magics will deal with this
221 try:
221 try:
222 del __builtin__.exit, __builtin__.quit
222 del __builtin__.exit, __builtin__.quit
223 except AttributeError:
223 except AttributeError:
224 pass
224 pass
225
225
226 # Store the actual shell's name
226 # Store the actual shell's name
227 self.name = name
227 self.name = name
228
228
229 # We need to know whether the instance is meant for embedding, since
229 # We need to know whether the instance is meant for embedding, since
230 # global/local namespaces need to be handled differently in that case
230 # global/local namespaces need to be handled differently in that case
231 self.embedded = embedded
231 self.embedded = embedded
232
232
233 # command compiler
233 # command compiler
234 self.compile = codeop.CommandCompiler()
234 self.compile = codeop.CommandCompiler()
235
235
236 # User input buffer
236 # User input buffer
237 self.buffer = []
237 self.buffer = []
238
238
239 # Default name given in compilation of code
239 # Default name given in compilation of code
240 self.filename = '<ipython console>'
240 self.filename = '<ipython console>'
241
241
242 # Make an empty namespace, which extension writers can rely on both
242 # Make an empty namespace, which extension writers can rely on both
243 # existing and NEVER being used by ipython itself. This gives them a
243 # existing and NEVER being used by ipython itself. This gives them a
244 # convenient location for storing additional information and state
244 # convenient location for storing additional information and state
245 # their extensions may require, without fear of collisions with other
245 # their extensions may require, without fear of collisions with other
246 # ipython names that may develop later.
246 # ipython names that may develop later.
247 self.meta = Struct()
247 self.meta = Struct()
248
248
249 # Create the namespace where the user will operate. user_ns is
249 # Create the namespace where the user will operate. user_ns is
250 # normally the only one used, and it is passed to the exec calls as
250 # normally the only one used, and it is passed to the exec calls as
251 # the locals argument. But we do carry a user_global_ns namespace
251 # the locals argument. But we do carry a user_global_ns namespace
252 # given as the exec 'globals' argument, This is useful in embedding
252 # given as the exec 'globals' argument, This is useful in embedding
253 # situations where the ipython shell opens in a context where the
253 # situations where the ipython shell opens in a context where the
254 # distinction between locals and globals is meaningful.
254 # distinction between locals and globals is meaningful.
255
255
256 # FIXME. For some strange reason, __builtins__ is showing up at user
256 # FIXME. For some strange reason, __builtins__ is showing up at user
257 # level as a dict instead of a module. This is a manual fix, but I
257 # level as a dict instead of a module. This is a manual fix, but I
258 # should really track down where the problem is coming from. Alex
258 # should really track down where the problem is coming from. Alex
259 # Schmolck reported this problem first.
259 # Schmolck reported this problem first.
260
260
261 # A useful post by Alex Martelli on this topic:
261 # A useful post by Alex Martelli on this topic:
262 # Re: inconsistent value from __builtins__
262 # Re: inconsistent value from __builtins__
263 # Von: Alex Martelli <aleaxit@yahoo.com>
263 # Von: Alex Martelli <aleaxit@yahoo.com>
264 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
264 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
265 # Gruppen: comp.lang.python
265 # Gruppen: comp.lang.python
266
266
267 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
267 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
268 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
268 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
269 # > <type 'dict'>
269 # > <type 'dict'>
270 # > >>> print type(__builtins__)
270 # > >>> print type(__builtins__)
271 # > <type 'module'>
271 # > <type 'module'>
272 # > Is this difference in return value intentional?
272 # > Is this difference in return value intentional?
273
273
274 # Well, it's documented that '__builtins__' can be either a dictionary
274 # Well, it's documented that '__builtins__' can be either a dictionary
275 # or a module, and it's been that way for a long time. Whether it's
275 # or a module, and it's been that way for a long time. Whether it's
276 # intentional (or sensible), I don't know. In any case, the idea is
276 # intentional (or sensible), I don't know. In any case, the idea is
277 # that if you need to access the built-in namespace directly, you
277 # that if you need to access the built-in namespace directly, you
278 # should start with "import __builtin__" (note, no 's') which will
278 # should start with "import __builtin__" (note, no 's') which will
279 # definitely give you a module. Yeah, it's somewhat confusing:-(.
279 # definitely give you a module. Yeah, it's somewhat confusing:-(.
280
280
281 if user_ns is None:
281 if user_ns is None:
282 # Set __name__ to __main__ to better match the behavior of the
282 # Set __name__ to __main__ to better match the behavior of the
283 # normal interpreter.
283 # normal interpreter.
284 user_ns = {'__name__' :'__main__',
284 user_ns = {'__name__' :'__main__',
285 '__builtins__' : __builtin__,
285 '__builtins__' : __builtin__,
286 }
286 }
287
287
288 if user_global_ns is None:
288 if user_global_ns is None:
289 user_global_ns = {}
289 user_global_ns = {}
290
290
291 # Assign namespaces
291 # Assign namespaces
292 # This is the namespace where all normal user variables live
292 # This is the namespace where all normal user variables live
293 self.user_ns = user_ns
293 self.user_ns = user_ns
294 # Embedded instances require a separate namespace for globals.
294 # Embedded instances require a separate namespace for globals.
295 # Normally this one is unused by non-embedded instances.
295 # Normally this one is unused by non-embedded instances.
296 self.user_global_ns = user_global_ns
296 self.user_global_ns = user_global_ns
297 # A namespace to keep track of internal data structures to prevent
297 # A namespace to keep track of internal data structures to prevent
298 # them from cluttering user-visible stuff. Will be updated later
298 # them from cluttering user-visible stuff. Will be updated later
299 self.internal_ns = {}
299 self.internal_ns = {}
300
300
301 # Namespace of system aliases. Each entry in the alias
301 # Namespace of system aliases. Each entry in the alias
302 # table must be a 2-tuple of the form (N,name), where N is the number
302 # table must be a 2-tuple of the form (N,name), where N is the number
303 # of positional arguments of the alias.
303 # of positional arguments of the alias.
304 self.alias_table = {}
304 self.alias_table = {}
305
305
306 # A table holding all the namespaces IPython deals with, so that
306 # A table holding all the namespaces IPython deals with, so that
307 # introspection facilities can search easily.
307 # introspection facilities can search easily.
308 self.ns_table = {'user':user_ns,
308 self.ns_table = {'user':user_ns,
309 'user_global':user_global_ns,
309 'user_global':user_global_ns,
310 'alias':self.alias_table,
310 'alias':self.alias_table,
311 'internal':self.internal_ns,
311 'internal':self.internal_ns,
312 'builtin':__builtin__.__dict__
312 'builtin':__builtin__.__dict__
313 }
313 }
314
314
315 # The user namespace MUST have a pointer to the shell itself.
315 # The user namespace MUST have a pointer to the shell itself.
316 self.user_ns[name] = self
316 self.user_ns[name] = self
317
317
318 # We need to insert into sys.modules something that looks like a
318 # We need to insert into sys.modules something that looks like a
319 # module but which accesses the IPython namespace, for shelve and
319 # module but which accesses the IPython namespace, for shelve and
320 # pickle to work interactively. Normally they rely on getting
320 # pickle to work interactively. Normally they rely on getting
321 # everything out of __main__, but for embedding purposes each IPython
321 # everything out of __main__, but for embedding purposes each IPython
322 # instance has its own private namespace, so we can't go shoving
322 # instance has its own private namespace, so we can't go shoving
323 # everything into __main__.
323 # everything into __main__.
324
324
325 # note, however, that we should only do this for non-embedded
325 # note, however, that we should only do this for non-embedded
326 # ipythons, which really mimic the __main__.__dict__ with their own
326 # ipythons, which really mimic the __main__.__dict__ with their own
327 # namespace. Embedded instances, on the other hand, should not do
327 # namespace. Embedded instances, on the other hand, should not do
328 # this because they need to manage the user local/global namespaces
328 # this because they need to manage the user local/global namespaces
329 # only, but they live within a 'normal' __main__ (meaning, they
329 # only, but they live within a 'normal' __main__ (meaning, they
330 # shouldn't overtake the execution environment of the script they're
330 # shouldn't overtake the execution environment of the script they're
331 # embedded in).
331 # embedded in).
332
332
333 if not embedded:
333 if not embedded:
334 try:
334 try:
335 main_name = self.user_ns['__name__']
335 main_name = self.user_ns['__name__']
336 except KeyError:
336 except KeyError:
337 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
337 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
338 else:
338 else:
339 #print "pickle hack in place" # dbg
339 #print "pickle hack in place" # dbg
340 #print 'main_name:',main_name # dbg
340 #print 'main_name:',main_name # dbg
341 sys.modules[main_name] = FakeModule(self.user_ns)
341 sys.modules[main_name] = FakeModule(self.user_ns)
342
342
343 # List of input with multi-line handling.
343 # List of input with multi-line handling.
344 # Fill its zero entry, user counter starts at 1
344 # Fill its zero entry, user counter starts at 1
345 self.input_hist = InputList(['\n'])
345 self.input_hist = InputList(['\n'])
346 # This one will hold the 'raw' input history, without any
346 # This one will hold the 'raw' input history, without any
347 # pre-processing. This will allow users to retrieve the input just as
347 # pre-processing. This will allow users to retrieve the input just as
348 # it was exactly typed in by the user, with %hist -r.
348 # it was exactly typed in by the user, with %hist -r.
349 self.input_hist_raw = InputList(['\n'])
349 self.input_hist_raw = InputList(['\n'])
350
350
351 # list of visited directories
351 # list of visited directories
352 try:
352 try:
353 self.dir_hist = [os.getcwd()]
353 self.dir_hist = [os.getcwd()]
354 except IOError, e:
354 except IOError, e:
355 self.dir_hist = []
355 self.dir_hist = []
356
356
357 # dict of output history
357 # dict of output history
358 self.output_hist = {}
358 self.output_hist = {}
359
359
360 # dict of things NOT to alias (keywords, builtins and some magics)
360 # dict of things NOT to alias (keywords, builtins and some magics)
361 no_alias = {}
361 no_alias = {}
362 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
362 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
363 for key in keyword.kwlist + no_alias_magics:
363 for key in keyword.kwlist + no_alias_magics:
364 no_alias[key] = 1
364 no_alias[key] = 1
365 no_alias.update(__builtin__.__dict__)
365 no_alias.update(__builtin__.__dict__)
366 self.no_alias = no_alias
366 self.no_alias = no_alias
367
367
368 # make global variables for user access to these
368 # make global variables for user access to these
369 self.user_ns['_ih'] = self.input_hist
369 self.user_ns['_ih'] = self.input_hist
370 self.user_ns['_oh'] = self.output_hist
370 self.user_ns['_oh'] = self.output_hist
371 self.user_ns['_dh'] = self.dir_hist
371 self.user_ns['_dh'] = self.dir_hist
372
372
373 # user aliases to input and output histories
373 # user aliases to input and output histories
374 self.user_ns['In'] = self.input_hist
374 self.user_ns['In'] = self.input_hist
375 self.user_ns['Out'] = self.output_hist
375 self.user_ns['Out'] = self.output_hist
376
376
377 # Object variable to store code object waiting execution. This is
377 # Object variable to store code object waiting execution. This is
378 # used mainly by the multithreaded shells, but it can come in handy in
378 # used mainly by the multithreaded shells, but it can come in handy in
379 # other situations. No need to use a Queue here, since it's a single
379 # other situations. No need to use a Queue here, since it's a single
380 # item which gets cleared once run.
380 # item which gets cleared once run.
381 self.code_to_run = None
381 self.code_to_run = None
382
382
383 # escapes for automatic behavior on the command line
383 # escapes for automatic behavior on the command line
384 self.ESC_SHELL = '!'
384 self.ESC_SHELL = '!'
385 self.ESC_HELP = '?'
385 self.ESC_HELP = '?'
386 self.ESC_MAGIC = '%'
386 self.ESC_MAGIC = '%'
387 self.ESC_QUOTE = ','
387 self.ESC_QUOTE = ','
388 self.ESC_QUOTE2 = ';'
388 self.ESC_QUOTE2 = ';'
389 self.ESC_PAREN = '/'
389 self.ESC_PAREN = '/'
390
390
391 # And their associated handlers
391 # And their associated handlers
392 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
392 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
393 self.ESC_QUOTE : self.handle_auto,
393 self.ESC_QUOTE : self.handle_auto,
394 self.ESC_QUOTE2 : self.handle_auto,
394 self.ESC_QUOTE2 : self.handle_auto,
395 self.ESC_MAGIC : self.handle_magic,
395 self.ESC_MAGIC : self.handle_magic,
396 self.ESC_HELP : self.handle_help,
396 self.ESC_HELP : self.handle_help,
397 self.ESC_SHELL : self.handle_shell_escape,
397 self.ESC_SHELL : self.handle_shell_escape,
398 }
398 }
399
399
400 # class initializations
400 # class initializations
401 Magic.__init__(self,self)
401 Magic.__init__(self,self)
402
402
403 # Python source parser/formatter for syntax highlighting
403 # Python source parser/formatter for syntax highlighting
404 pyformat = PyColorize.Parser().format
404 pyformat = PyColorize.Parser().format
405 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
405 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
406
406
407 # hooks holds pointers used for user-side customizations
407 # hooks holds pointers used for user-side customizations
408 self.hooks = Struct()
408 self.hooks = Struct()
409
409
410 # Set all default hooks, defined in the IPython.hooks module.
410 # Set all default hooks, defined in the IPython.hooks module.
411 hooks = IPython.hooks
411 hooks = IPython.hooks
412 for hook_name in hooks.__all__:
412 for hook_name in hooks.__all__:
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
415 #print "bound hook",hook_name
415 #print "bound hook",hook_name
416
416
417 # Flag to mark unconditional exit
417 # Flag to mark unconditional exit
418 self.exit_now = False
418 self.exit_now = False
419
419
420 self.usage_min = """\
420 self.usage_min = """\
421 An enhanced console for Python.
421 An enhanced console for Python.
422 Some of its features are:
422 Some of its features are:
423 - Readline support if the readline library is present.
423 - Readline support if the readline library is present.
424 - Tab completion in the local namespace.
424 - Tab completion in the local namespace.
425 - Logging of input, see command-line options.
425 - Logging of input, see command-line options.
426 - System shell escape via ! , eg !ls.
426 - System shell escape via ! , eg !ls.
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
428 - Keeps track of locally defined variables via %who, %whos.
428 - Keeps track of locally defined variables via %who, %whos.
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
430 """
430 """
431 if usage: self.usage = usage
431 if usage: self.usage = usage
432 else: self.usage = self.usage_min
432 else: self.usage = self.usage_min
433
433
434 # Storage
434 # Storage
435 self.rc = rc # This will hold all configuration information
435 self.rc = rc # This will hold all configuration information
436 self.pager = 'less'
436 self.pager = 'less'
437 # temporary files used for various purposes. Deleted at exit.
437 # temporary files used for various purposes. Deleted at exit.
438 self.tempfiles = []
438 self.tempfiles = []
439
439
440 # Keep track of readline usage (later set by init_readline)
440 # Keep track of readline usage (later set by init_readline)
441 self.has_readline = False
441 self.has_readline = False
442
442
443 # template for logfile headers. It gets resolved at runtime by the
443 # template for logfile headers. It gets resolved at runtime by the
444 # logstart method.
444 # logstart method.
445 self.loghead_tpl = \
445 self.loghead_tpl = \
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
448 #log# opts = %s
448 #log# opts = %s
449 #log# args = %s
449 #log# args = %s
450 #log# It is safe to make manual edits below here.
450 #log# It is safe to make manual edits below here.
451 #log#-----------------------------------------------------------------------
451 #log#-----------------------------------------------------------------------
452 """
452 """
453 # for pushd/popd management
453 # for pushd/popd management
454 try:
454 try:
455 self.home_dir = get_home_dir()
455 self.home_dir = get_home_dir()
456 except HomeDirError,msg:
456 except HomeDirError,msg:
457 fatal(msg)
457 fatal(msg)
458
458
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
460
460
461 # Functions to call the underlying shell.
461 # Functions to call the underlying shell.
462
462
463 # utility to expand user variables via Itpl
463 # utility to expand user variables via Itpl
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
465 self.user_ns))
465 self.user_ns))
466 # The first is similar to os.system, but it doesn't return a value,
466 # The first is similar to os.system, but it doesn't return a value,
467 # and it allows interpolation of variables in the user's namespace.
467 # and it allows interpolation of variables in the user's namespace.
468 self.system = lambda cmd: shell(self.var_expand(cmd),
468 self.system = lambda cmd: shell(self.var_expand(cmd),
469 header='IPython system call: ',
469 header='IPython system call: ',
470 verbose=self.rc.system_verbose)
470 verbose=self.rc.system_verbose)
471 # These are for getoutput and getoutputerror:
471 # These are for getoutput and getoutputerror:
472 self.getoutput = lambda cmd: \
472 self.getoutput = lambda cmd: \
473 getoutput(self.var_expand(cmd),
473 getoutput(self.var_expand(cmd),
474 header='IPython system call: ',
474 header='IPython system call: ',
475 verbose=self.rc.system_verbose)
475 verbose=self.rc.system_verbose)
476 self.getoutputerror = lambda cmd: \
476 self.getoutputerror = lambda cmd: \
477 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
477 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
478 self.user_ns)),
478 self.user_ns)),
479 header='IPython system call: ',
479 header='IPython system call: ',
480 verbose=self.rc.system_verbose)
480 verbose=self.rc.system_verbose)
481
481
482 # RegExp for splitting line contents into pre-char//first
482 # RegExp for splitting line contents into pre-char//first
483 # word-method//rest. For clarity, each group in on one line.
483 # word-method//rest. For clarity, each group in on one line.
484
484
485 # WARNING: update the regexp if the above escapes are changed, as they
485 # WARNING: update the regexp if the above escapes are changed, as they
486 # are hardwired in.
486 # are hardwired in.
487
487
488 # Don't get carried away with trying to make the autocalling catch too
488 # Don't get carried away with trying to make the autocalling catch too
489 # much: it's better to be conservative rather than to trigger hidden
489 # much: it's better to be conservative rather than to trigger hidden
490 # evals() somewhere and end up causing side effects.
490 # evals() somewhere and end up causing side effects.
491
491
492 self.line_split = re.compile(r'^([\s*,;/])'
492 self.line_split = re.compile(r'^([\s*,;/])'
493 r'([\?\w\.]+\w*\s*)'
493 r'([\?\w\.]+\w*\s*)'
494 r'(\(?.*$)')
494 r'(\(?.*$)')
495
495
496 # Original re, keep around for a while in case changes break something
496 # Original re, keep around for a while in case changes break something
497 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
497 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
498 # r'(\s*[\?\w\.]+\w*\s*)'
498 # r'(\s*[\?\w\.]+\w*\s*)'
499 # r'(\(?.*$)')
499 # r'(\(?.*$)')
500
500
501 # RegExp to identify potential function names
501 # RegExp to identify potential function names
502 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
502 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
503
503
504 # RegExp to exclude strings with this start from autocalling. In
504 # RegExp to exclude strings with this start from autocalling. In
505 # particular, all binary operators should be excluded, so that if foo
505 # particular, all binary operators should be excluded, so that if foo
506 # is callable, foo OP bar doesn't become foo(OP bar), which is
506 # is callable, foo OP bar doesn't become foo(OP bar), which is
507 # invalid. The characters '!=()' don't need to be checked for, as the
507 # invalid. The characters '!=()' don't need to be checked for, as the
508 # _prefilter routine explicitely does so, to catch direct calls and
508 # _prefilter routine explicitely does so, to catch direct calls and
509 # rebindings of existing names.
509 # rebindings of existing names.
510
510
511 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
511 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
512 # it affects the rest of the group in square brackets.
512 # it affects the rest of the group in square brackets.
513 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
513 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
514 '|^is |^not |^in |^and |^or ')
514 '|^is |^not |^in |^and |^or ')
515
515
516 # try to catch also methods for stuff in lists/tuples/dicts: off
516 # try to catch also methods for stuff in lists/tuples/dicts: off
517 # (experimental). For this to work, the line_split regexp would need
517 # (experimental). For this to work, the line_split regexp would need
518 # to be modified so it wouldn't break things at '['. That line is
518 # to be modified so it wouldn't break things at '['. That line is
519 # nasty enough that I shouldn't change it until I can test it _well_.
519 # nasty enough that I shouldn't change it until I can test it _well_.
520 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
520 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
521
521
522 # keep track of where we started running (mainly for crash post-mortem)
522 # keep track of where we started running (mainly for crash post-mortem)
523 self.starting_dir = os.getcwd()
523 self.starting_dir = os.getcwd()
524
524
525 # Various switches which can be set
525 # Various switches which can be set
526 self.CACHELENGTH = 5000 # this is cheap, it's just text
526 self.CACHELENGTH = 5000 # this is cheap, it's just text
527 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
527 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
528 self.banner2 = banner2
528 self.banner2 = banner2
529
529
530 # TraceBack handlers:
530 # TraceBack handlers:
531
531
532 # Syntax error handler.
532 # Syntax error handler.
533 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
533 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
534
534
535 # The interactive one is initialized with an offset, meaning we always
535 # The interactive one is initialized with an offset, meaning we always
536 # want to remove the topmost item in the traceback, which is our own
536 # want to remove the topmost item in the traceback, which is our own
537 # internal code. Valid modes: ['Plain','Context','Verbose']
537 # internal code. Valid modes: ['Plain','Context','Verbose']
538 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
538 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
539 color_scheme='NoColor',
539 color_scheme='NoColor',
540 tb_offset = 1)
540 tb_offset = 1)
541
541
542 # IPython itself shouldn't crash. This will produce a detailed
542 # IPython itself shouldn't crash. This will produce a detailed
543 # post-mortem if it does. But we only install the crash handler for
543 # post-mortem if it does. But we only install the crash handler for
544 # non-threaded shells, the threaded ones use a normal verbose reporter
544 # non-threaded shells, the threaded ones use a normal verbose reporter
545 # and lose the crash handler. This is because exceptions in the main
545 # and lose the crash handler. This is because exceptions in the main
546 # thread (such as in GUI code) propagate directly to sys.excepthook,
546 # thread (such as in GUI code) propagate directly to sys.excepthook,
547 # and there's no point in printing crash dumps for every user exception.
547 # and there's no point in printing crash dumps for every user exception.
548 if self.isthreaded:
548 if self.isthreaded:
549 sys.excepthook = ultraTB.FormattedTB()
549 sys.excepthook = ultraTB.FormattedTB()
550 else:
550 else:
551 from IPython import CrashHandler
551 from IPython import CrashHandler
552 sys.excepthook = CrashHandler.CrashHandler(self)
552 sys.excepthook = CrashHandler.CrashHandler(self)
553
553
554 # The instance will store a pointer to this, so that runtime code
554 # The instance will store a pointer to this, so that runtime code
555 # (such as magics) can access it. This is because during the
555 # (such as magics) can access it. This is because during the
556 # read-eval loop, it gets temporarily overwritten (to deal with GUI
556 # read-eval loop, it gets temporarily overwritten (to deal with GUI
557 # frameworks).
557 # frameworks).
558 self.sys_excepthook = sys.excepthook
558 self.sys_excepthook = sys.excepthook
559
559
560 # and add any custom exception handlers the user may have specified
560 # and add any custom exception handlers the user may have specified
561 self.set_custom_exc(*custom_exceptions)
561 self.set_custom_exc(*custom_exceptions)
562
562
563 # Object inspector
563 # Object inspector
564 self.inspector = OInspect.Inspector(OInspect.InspectColors,
564 self.inspector = OInspect.Inspector(OInspect.InspectColors,
565 PyColorize.ANSICodeColors,
565 PyColorize.ANSICodeColors,
566 'NoColor')
566 'NoColor')
567 # indentation management
567 # indentation management
568 self.autoindent = False
568 self.autoindent = False
569 self.indent_current_nsp = 0
569 self.indent_current_nsp = 0
570
570
571 # Make some aliases automatically
571 # Make some aliases automatically
572 # Prepare list of shell aliases to auto-define
572 # Prepare list of shell aliases to auto-define
573 if os.name == 'posix':
573 if os.name == 'posix':
574 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
574 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
575 'mv mv -i','rm rm -i','cp cp -i',
575 'mv mv -i','rm rm -i','cp cp -i',
576 'cat cat','less less','clear clear',
576 'cat cat','less less','clear clear',
577 # a better ls
577 # a better ls
578 'ls ls -F',
578 'ls ls -F',
579 # long ls
579 # long ls
580 'll ls -lF',
580 'll ls -lF',
581 # color ls
581 # color ls
582 'lc ls -F -o --color',
582 'lc ls -F -o --color',
583 # ls normal files only
583 # ls normal files only
584 'lf ls -F -o --color %l | grep ^-',
584 'lf ls -F -o --color %l | grep ^-',
585 # ls symbolic links
585 # ls symbolic links
586 'lk ls -F -o --color %l | grep ^l',
586 'lk ls -F -o --color %l | grep ^l',
587 # directories or links to directories,
587 # directories or links to directories,
588 'ldir ls -F -o --color %l | grep /$',
588 'ldir ls -F -o --color %l | grep /$',
589 # things which are executable
589 # things which are executable
590 'lx ls -F -o --color %l | grep ^-..x',
590 'lx ls -F -o --color %l | grep ^-..x',
591 )
591 )
592 elif os.name in ['nt','dos']:
592 elif os.name in ['nt','dos']:
593 auto_alias = ('dir dir /on', 'ls dir /on',
593 auto_alias = ('dir dir /on', 'ls dir /on',
594 'ddir dir /ad /on', 'ldir dir /ad /on',
594 'ddir dir /ad /on', 'ldir dir /ad /on',
595 'mkdir mkdir','rmdir rmdir','echo echo',
595 'mkdir mkdir','rmdir rmdir','echo echo',
596 'ren ren','cls cls','copy copy')
596 'ren ren','cls cls','copy copy')
597 else:
597 else:
598 auto_alias = ()
598 auto_alias = ()
599 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
599 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
600 # Call the actual (public) initializer
600 # Call the actual (public) initializer
601 self.init_auto_alias()
601 self.init_auto_alias()
602 # end __init__
602 # end __init__
603
603
604 def pre_config_initialization(self):
604 def pre_config_initialization(self):
605 """Pre-configuration init method
605 """Pre-configuration init method
606
606
607 This is called before the configuration files are processed to
607 This is called before the configuration files are processed to
608 prepare the services the config files might need.
608 prepare the services the config files might need.
609
609
610 self.rc already has reasonable default values at this point.
610 self.rc already has reasonable default values at this point.
611 """
611 """
612 rc = self.rc
612 rc = self.rc
613
613
614 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
614 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
615
615
616
616
617 def post_config_initialization(self):
617 def post_config_initialization(self):
618 """Post configuration init method
618 """Post configuration init method
619
619
620 This is called after the configuration files have been processed to
620 This is called after the configuration files have been processed to
621 'finalize' the initialization."""
621 'finalize' the initialization."""
622
622
623 rc = self.rc
623 rc = self.rc
624
624
625 # Load readline proper
625 # Load readline proper
626 if rc.readline:
626 if rc.readline:
627 self.init_readline()
627 self.init_readline()
628
628
629 # local shortcut, this is used a LOT
629 # local shortcut, this is used a LOT
630 self.log = self.logger.log
630 self.log = self.logger.log
631
631
632 # Initialize cache, set in/out prompts and printing system
632 # Initialize cache, set in/out prompts and printing system
633 self.outputcache = CachedOutput(self,
633 self.outputcache = CachedOutput(self,
634 rc.cache_size,
634 rc.cache_size,
635 rc.pprint,
635 rc.pprint,
636 input_sep = rc.separate_in,
636 input_sep = rc.separate_in,
637 output_sep = rc.separate_out,
637 output_sep = rc.separate_out,
638 output_sep2 = rc.separate_out2,
638 output_sep2 = rc.separate_out2,
639 ps1 = rc.prompt_in1,
639 ps1 = rc.prompt_in1,
640 ps2 = rc.prompt_in2,
640 ps2 = rc.prompt_in2,
641 ps_out = rc.prompt_out,
641 ps_out = rc.prompt_out,
642 pad_left = rc.prompts_pad_left)
642 pad_left = rc.prompts_pad_left)
643
643
644 # user may have over-ridden the default print hook:
644 # user may have over-ridden the default print hook:
645 try:
645 try:
646 self.outputcache.__class__.display = self.hooks.display
646 self.outputcache.__class__.display = self.hooks.display
647 except AttributeError:
647 except AttributeError:
648 pass
648 pass
649
649
650 # I don't like assigning globally to sys, because it means when embedding
650 # I don't like assigning globally to sys, because it means when embedding
651 # instances, each embedded instance overrides the previous choice. But
651 # instances, each embedded instance overrides the previous choice. But
652 # sys.displayhook seems to be called internally by exec, so I don't see a
652 # sys.displayhook seems to be called internally by exec, so I don't see a
653 # way around it.
653 # way around it.
654 sys.displayhook = self.outputcache
654 sys.displayhook = self.outputcache
655
655
656 # Set user colors (don't do it in the constructor above so that it
656 # Set user colors (don't do it in the constructor above so that it
657 # doesn't crash if colors option is invalid)
657 # doesn't crash if colors option is invalid)
658 self.magic_colors(rc.colors)
658 self.magic_colors(rc.colors)
659
659
660 # Set calling of pdb on exceptions
660 # Set calling of pdb on exceptions
661 self.call_pdb = rc.pdb
661 self.call_pdb = rc.pdb
662
662
663 # Load user aliases
663 # Load user aliases
664 for alias in rc.alias:
664 for alias in rc.alias:
665 self.magic_alias(alias)
665 self.magic_alias(alias)
666 self.hooks.late_startup_hook()
666 self.hooks.late_startup_hook()
667
667
668
668
669 def add_builtins(self):
669 def add_builtins(self):
670 """Store ipython references into the builtin namespace.
670 """Store ipython references into the builtin namespace.
671
671
672 Some parts of ipython operate via builtins injected here, which hold a
672 Some parts of ipython operate via builtins injected here, which hold a
673 reference to IPython itself."""
673 reference to IPython itself."""
674
674
675 # TODO: deprecate all except _ip; 'jobs' should be installed
675 # TODO: deprecate all except _ip; 'jobs' should be installed
676 # by an extension and the rest are under _ip, ipalias is redundant
676 # by an extension and the rest are under _ip, ipalias is redundant
677 builtins_new = dict(__IPYTHON__ = self,
677 builtins_new = dict(__IPYTHON__ = self,
678 ip_set_hook = self.set_hook,
678 ip_set_hook = self.set_hook,
679 jobs = self.jobs,
679 jobs = self.jobs,
680 ipmagic = self.ipmagic,
680 ipmagic = self.ipmagic,
681 ipalias = self.ipalias,
681 ipalias = self.ipalias,
682 ipsystem = self.ipsystem,
682 ipsystem = self.ipsystem,
683 _ip = self.api
683 _ip = self.api
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 name not in IPython.hooks.__all__:
722 if name not in IPython.hooks.__all__:
723 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
723 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
724 if not dp:
724 if not dp:
725 dp = IPython.hooks.CommandChainDispatcher()
725 dp = IPython.hooks.CommandChainDispatcher()
726
726
727 f = new.instancemethod(hook,self,self.__class__)
727 f = new.instancemethod(hook,self,self.__class__)
728 try:
728 try:
729 dp.add(f,priority)
729 dp.add(f,priority)
730 except AttributeError:
730 except AttributeError:
731 # it was not commandchain, plain old func - replace
731 # it was not commandchain, plain old func - replace
732 dp = f
732 dp = f
733
733
734 setattr(self.hooks,name, dp)
734 setattr(self.hooks,name, dp)
735
735
736
736
737 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
737 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
738
738
739 def set_custom_exc(self,exc_tuple,handler):
739 def set_custom_exc(self,exc_tuple,handler):
740 """set_custom_exc(exc_tuple,handler)
740 """set_custom_exc(exc_tuple,handler)
741
741
742 Set a custom exception handler, which will be called if any of the
742 Set a custom exception handler, which will be called if any of the
743 exceptions in exc_tuple occur in the mainloop (specifically, in the
743 exceptions in exc_tuple occur in the mainloop (specifically, in the
744 runcode() method.
744 runcode() method.
745
745
746 Inputs:
746 Inputs:
747
747
748 - exc_tuple: a *tuple* of valid exceptions to call the defined
748 - exc_tuple: a *tuple* of valid exceptions to call the defined
749 handler for. It is very important that you use a tuple, and NOT A
749 handler for. It is very important that you use a tuple, and NOT A
750 LIST here, because of the way Python's except statement works. If
750 LIST here, because of the way Python's except statement works. If
751 you only want to trap a single exception, use a singleton tuple:
751 you only want to trap a single exception, use a singleton tuple:
752
752
753 exc_tuple == (MyCustomException,)
753 exc_tuple == (MyCustomException,)
754
754
755 - handler: this must be defined as a function with the following
755 - handler: this must be defined as a function with the following
756 basic interface: def my_handler(self,etype,value,tb).
756 basic interface: def my_handler(self,etype,value,tb).
757
757
758 This will be made into an instance method (via new.instancemethod)
758 This will be made into an instance method (via new.instancemethod)
759 of IPython itself, and it will be called if any of the exceptions
759 of IPython itself, and it will be called if any of the exceptions
760 listed in the exc_tuple are caught. If the handler is None, an
760 listed in the exc_tuple are caught. If the handler is None, an
761 internal basic one is used, which just prints basic info.
761 internal basic one is used, which just prints basic info.
762
762
763 WARNING: by putting in your own exception handler into IPython's main
763 WARNING: by putting in your own exception handler into IPython's main
764 execution loop, you run a very good chance of nasty crashes. This
764 execution loop, you run a very good chance of nasty crashes. This
765 facility should only be used if you really know what you are doing."""
765 facility should only be used if you really know what you are doing."""
766
766
767 assert type(exc_tuple)==type(()) , \
767 assert type(exc_tuple)==type(()) , \
768 "The custom exceptions must be given AS A TUPLE."
768 "The custom exceptions must be given AS A TUPLE."
769
769
770 def dummy_handler(self,etype,value,tb):
770 def dummy_handler(self,etype,value,tb):
771 print '*** Simple custom exception handler ***'
771 print '*** Simple custom exception handler ***'
772 print 'Exception type :',etype
772 print 'Exception type :',etype
773 print 'Exception value:',value
773 print 'Exception value:',value
774 print 'Traceback :',tb
774 print 'Traceback :',tb
775 print 'Source code :','\n'.join(self.buffer)
775 print 'Source code :','\n'.join(self.buffer)
776
776
777 if handler is None: handler = dummy_handler
777 if handler is None: handler = dummy_handler
778
778
779 self.CustomTB = new.instancemethod(handler,self,self.__class__)
779 self.CustomTB = new.instancemethod(handler,self,self.__class__)
780 self.custom_exceptions = exc_tuple
780 self.custom_exceptions = exc_tuple
781
781
782 def set_custom_completer(self,completer,pos=0):
782 def set_custom_completer(self,completer,pos=0):
783 """set_custom_completer(completer,pos=0)
783 """set_custom_completer(completer,pos=0)
784
784
785 Adds a new custom completer function.
785 Adds a new custom completer function.
786
786
787 The position argument (defaults to 0) is the index in the completers
787 The position argument (defaults to 0) is the index in the completers
788 list where you want the completer to be inserted."""
788 list where you want the completer to be inserted."""
789
789
790 newcomp = new.instancemethod(completer,self.Completer,
790 newcomp = new.instancemethod(completer,self.Completer,
791 self.Completer.__class__)
791 self.Completer.__class__)
792 self.Completer.matchers.insert(pos,newcomp)
792 self.Completer.matchers.insert(pos,newcomp)
793
793
794 def _get_call_pdb(self):
794 def _get_call_pdb(self):
795 return self._call_pdb
795 return self._call_pdb
796
796
797 def _set_call_pdb(self,val):
797 def _set_call_pdb(self,val):
798
798
799 if val not in (0,1,False,True):
799 if val not in (0,1,False,True):
800 raise ValueError,'new call_pdb value must be boolean'
800 raise ValueError,'new call_pdb value must be boolean'
801
801
802 # store value in instance
802 # store value in instance
803 self._call_pdb = val
803 self._call_pdb = val
804
804
805 # notify the actual exception handlers
805 # notify the actual exception handlers
806 self.InteractiveTB.call_pdb = val
806 self.InteractiveTB.call_pdb = val
807 if self.isthreaded:
807 if self.isthreaded:
808 try:
808 try:
809 self.sys_excepthook.call_pdb = val
809 self.sys_excepthook.call_pdb = val
810 except:
810 except:
811 warn('Failed to activate pdb for threaded exception handler')
811 warn('Failed to activate pdb for threaded exception handler')
812
812
813 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
813 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
814 'Control auto-activation of pdb at exceptions')
814 'Control auto-activation of pdb at exceptions')
815
815
816
816
817 # These special functions get installed in the builtin namespace, to
817 # These special functions get installed in the builtin namespace, to
818 # provide programmatic (pure python) access to magics, aliases and system
818 # provide programmatic (pure python) access to magics, aliases and system
819 # calls. This is important for logging, user scripting, and more.
819 # calls. This is important for logging, user scripting, and more.
820
820
821 # We are basically exposing, via normal python functions, the three
821 # We are basically exposing, via normal python functions, the three
822 # mechanisms in which ipython offers special call modes (magics for
822 # mechanisms in which ipython offers special call modes (magics for
823 # internal control, aliases for direct system access via pre-selected
823 # internal control, aliases for direct system access via pre-selected
824 # names, and !cmd for calling arbitrary system commands).
824 # names, and !cmd for calling arbitrary system commands).
825
825
826 def ipmagic(self,arg_s):
826 def ipmagic(self,arg_s):
827 """Call a magic function by name.
827 """Call a magic function by name.
828
828
829 Input: a string containing the name of the magic function to call and any
829 Input: a string containing the name of the magic function to call and any
830 additional arguments to be passed to the magic.
830 additional arguments to be passed to the magic.
831
831
832 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
832 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
833 prompt:
833 prompt:
834
834
835 In[1]: %name -opt foo bar
835 In[1]: %name -opt foo bar
836
836
837 To call a magic without arguments, simply use ipmagic('name').
837 To call a magic without arguments, simply use ipmagic('name').
838
838
839 This provides a proper Python function to call IPython's magics in any
839 This provides a proper Python function to call IPython's magics in any
840 valid Python code you can type at the interpreter, including loops and
840 valid Python code you can type at the interpreter, including loops and
841 compound statements. It is added by IPython to the Python builtin
841 compound statements. It is added by IPython to the Python builtin
842 namespace upon initialization."""
842 namespace upon initialization."""
843
843
844 args = arg_s.split(' ',1)
844 args = arg_s.split(' ',1)
845 magic_name = args[0]
845 magic_name = args[0]
846 magic_name = magic_name.lstrip(self.ESC_MAGIC)
846 magic_name = magic_name.lstrip(self.ESC_MAGIC)
847
847
848 try:
848 try:
849 magic_args = args[1]
849 magic_args = args[1]
850 except IndexError:
850 except IndexError:
851 magic_args = ''
851 magic_args = ''
852 fn = getattr(self,'magic_'+magic_name,None)
852 fn = getattr(self,'magic_'+magic_name,None)
853 if fn is None:
853 if fn is None:
854 error("Magic function `%s` not found." % magic_name)
854 error("Magic function `%s` not found." % magic_name)
855 else:
855 else:
856 magic_args = self.var_expand(magic_args)
856 magic_args = self.var_expand(magic_args)
857 return fn(magic_args)
857 return fn(magic_args)
858
858
859 def ipalias(self,arg_s):
859 def ipalias(self,arg_s):
860 """Call an alias by name.
860 """Call an alias by name.
861
861
862 Input: a string containing the name of the alias to call and any
862 Input: a string containing the name of the alias to call and any
863 additional arguments to be passed to the magic.
863 additional arguments to be passed to the magic.
864
864
865 ipalias('name -opt foo bar') is equivalent to typing at the ipython
865 ipalias('name -opt foo bar') is equivalent to typing at the ipython
866 prompt:
866 prompt:
867
867
868 In[1]: name -opt foo bar
868 In[1]: name -opt foo bar
869
869
870 To call an alias without arguments, simply use ipalias('name').
870 To call an alias without arguments, simply use ipalias('name').
871
871
872 This provides a proper Python function to call IPython's aliases in any
872 This provides a proper Python function to call IPython's aliases in any
873 valid Python code you can type at the interpreter, including loops and
873 valid Python code you can type at the interpreter, including loops and
874 compound statements. It is added by IPython to the Python builtin
874 compound statements. It is added by IPython to the Python builtin
875 namespace upon initialization."""
875 namespace upon initialization."""
876
876
877 args = arg_s.split(' ',1)
877 args = arg_s.split(' ',1)
878 alias_name = args[0]
878 alias_name = args[0]
879 try:
879 try:
880 alias_args = args[1]
880 alias_args = args[1]
881 except IndexError:
881 except IndexError:
882 alias_args = ''
882 alias_args = ''
883 if alias_name in self.alias_table:
883 if alias_name in self.alias_table:
884 self.call_alias(alias_name,alias_args)
884 self.call_alias(alias_name,alias_args)
885 else:
885 else:
886 error("Alias `%s` not found." % alias_name)
886 error("Alias `%s` not found." % alias_name)
887
887
888 def ipsystem(self,arg_s):
888 def ipsystem(self,arg_s):
889 """Make a system call, using IPython."""
889 """Make a system call, using IPython."""
890
890
891 self.system(arg_s)
891 self.system(arg_s)
892
892
893 def complete(self,text):
893 def complete(self,text):
894 """Return a sorted list of all possible completions on text.
894 """Return a sorted list of all possible completions on text.
895
895
896 Inputs:
896 Inputs:
897
897
898 - text: a string of text to be completed on.
898 - text: a string of text to be completed on.
899
899
900 This is a wrapper around the completion mechanism, similar to what
900 This is a wrapper around the completion mechanism, similar to what
901 readline does at the command line when the TAB key is hit. By
901 readline does at the command line when the TAB key is hit. By
902 exposing it as a method, it can be used by other non-readline
902 exposing it as a method, it can be used by other non-readline
903 environments (such as GUIs) for text completion.
903 environments (such as GUIs) for text completion.
904
904
905 Simple usage example:
905 Simple usage example:
906
906
907 In [1]: x = 'hello'
907 In [1]: x = 'hello'
908
908
909 In [2]: __IP.complete('x.l')
909 In [2]: __IP.complete('x.l')
910 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
910 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
911
911
912 complete = self.Completer.complete
912 complete = self.Completer.complete
913 state = 0
913 state = 0
914 # use a dict so we get unique keys, since ipyhton's multiple
914 # use a dict so we get unique keys, since ipyhton's multiple
915 # completers can return duplicates.
915 # completers can return duplicates.
916 comps = {}
916 comps = {}
917 while True:
917 while True:
918 newcomp = complete(text,state)
918 newcomp = complete(text,state)
919 if newcomp is None:
919 if newcomp is None:
920 break
920 break
921 comps[newcomp] = 1
921 comps[newcomp] = 1
922 state += 1
922 state += 1
923 outcomps = comps.keys()
923 outcomps = comps.keys()
924 outcomps.sort()
924 outcomps.sort()
925 return outcomps
925 return outcomps
926
926
927 def set_completer_frame(self, frame=None):
927 def set_completer_frame(self, frame=None):
928 if frame:
928 if frame:
929 self.Completer.namespace = frame.f_locals
929 self.Completer.namespace = frame.f_locals
930 self.Completer.global_namespace = frame.f_globals
930 self.Completer.global_namespace = frame.f_globals
931 else:
931 else:
932 self.Completer.namespace = self.user_ns
932 self.Completer.namespace = self.user_ns
933 self.Completer.global_namespace = self.user_global_ns
933 self.Completer.global_namespace = self.user_global_ns
934
934
935 def init_auto_alias(self):
935 def init_auto_alias(self):
936 """Define some aliases automatically.
936 """Define some aliases automatically.
937
937
938 These are ALL parameter-less aliases"""
938 These are ALL parameter-less aliases"""
939
939
940 for alias,cmd in self.auto_alias:
940 for alias,cmd in self.auto_alias:
941 self.alias_table[alias] = (0,cmd)
941 self.alias_table[alias] = (0,cmd)
942
942
943 def alias_table_validate(self,verbose=0):
943 def alias_table_validate(self,verbose=0):
944 """Update information about the alias table.
944 """Update information about the alias table.
945
945
946 In particular, make sure no Python keywords/builtins are in it."""
946 In particular, make sure no Python keywords/builtins are in it."""
947
947
948 no_alias = self.no_alias
948 no_alias = self.no_alias
949 for k in self.alias_table.keys():
949 for k in self.alias_table.keys():
950 if k in no_alias:
950 if k in no_alias:
951 del self.alias_table[k]
951 del self.alias_table[k]
952 if verbose:
952 if verbose:
953 print ("Deleting alias <%s>, it's a Python "
953 print ("Deleting alias <%s>, it's a Python "
954 "keyword or builtin." % k)
954 "keyword or builtin." % k)
955
955
956 def set_autoindent(self,value=None):
956 def set_autoindent(self,value=None):
957 """Set the autoindent flag, checking for readline support.
957 """Set the autoindent flag, checking for readline support.
958
958
959 If called with no arguments, it acts as a toggle."""
959 If called with no arguments, it acts as a toggle."""
960
960
961 if not self.has_readline:
961 if not self.has_readline:
962 if os.name == 'posix':
962 if os.name == 'posix':
963 warn("The auto-indent feature requires the readline library")
963 warn("The auto-indent feature requires the readline library")
964 self.autoindent = 0
964 self.autoindent = 0
965 return
965 return
966 if value is None:
966 if value is None:
967 self.autoindent = not self.autoindent
967 self.autoindent = not self.autoindent
968 else:
968 else:
969 self.autoindent = value
969 self.autoindent = value
970
970
971 def rc_set_toggle(self,rc_field,value=None):
971 def rc_set_toggle(self,rc_field,value=None):
972 """Set or toggle a field in IPython's rc config. structure.
972 """Set or toggle a field in IPython's rc config. structure.
973
973
974 If called with no arguments, it acts as a toggle.
974 If called with no arguments, it acts as a toggle.
975
975
976 If called with a non-existent field, the resulting AttributeError
976 If called with a non-existent field, the resulting AttributeError
977 exception will propagate out."""
977 exception will propagate out."""
978
978
979 rc_val = getattr(self.rc,rc_field)
979 rc_val = getattr(self.rc,rc_field)
980 if value is None:
980 if value is None:
981 value = not rc_val
981 value = not rc_val
982 setattr(self.rc,rc_field,value)
982 setattr(self.rc,rc_field,value)
983
983
984 def user_setup(self,ipythondir,rc_suffix,mode='install'):
984 def user_setup(self,ipythondir,rc_suffix,mode='install'):
985 """Install the user configuration directory.
985 """Install the user configuration directory.
986
986
987 Can be called when running for the first time or to upgrade the user's
987 Can be called when running for the first time or to upgrade the user's
988 .ipython/ directory with the mode parameter. Valid modes are 'install'
988 .ipython/ directory with the mode parameter. Valid modes are 'install'
989 and 'upgrade'."""
989 and 'upgrade'."""
990
990
991 def wait():
991 def wait():
992 try:
992 try:
993 raw_input("Please press <RETURN> to start IPython.")
993 raw_input("Please press <RETURN> to start IPython.")
994 except EOFError:
994 except EOFError:
995 print >> Term.cout
995 print >> Term.cout
996 print '*'*70
996 print '*'*70
997
997
998 cwd = os.getcwd() # remember where we started
998 cwd = os.getcwd() # remember where we started
999 glb = glob.glob
999 glb = glob.glob
1000 print '*'*70
1000 print '*'*70
1001 if mode == 'install':
1001 if mode == 'install':
1002 print \
1002 print \
1003 """Welcome to IPython. I will try to create a personal configuration directory
1003 """Welcome to IPython. I will try to create a personal configuration directory
1004 where you can customize many aspects of IPython's functionality in:\n"""
1004 where you can customize many aspects of IPython's functionality in:\n"""
1005 else:
1005 else:
1006 print 'I am going to upgrade your configuration in:'
1006 print 'I am going to upgrade your configuration in:'
1007
1007
1008 print ipythondir
1008 print ipythondir
1009
1009
1010 rcdirend = os.path.join('IPython','UserConfig')
1010 rcdirend = os.path.join('IPython','UserConfig')
1011 cfg = lambda d: os.path.join(d,rcdirend)
1011 cfg = lambda d: os.path.join(d,rcdirend)
1012 try:
1012 try:
1013 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1013 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1014 except IOError:
1014 except IOError:
1015 warning = """
1015 warning = """
1016 Installation error. IPython's directory was not found.
1016 Installation error. IPython's directory was not found.
1017
1017
1018 Check the following:
1018 Check the following:
1019
1019
1020 The ipython/IPython directory should be in a directory belonging to your
1020 The ipython/IPython directory should be in a directory belonging to your
1021 PYTHONPATH environment variable (that is, it should be in a directory
1021 PYTHONPATH environment variable (that is, it should be in a directory
1022 belonging to sys.path). You can copy it explicitly there or just link to it.
1022 belonging to sys.path). You can copy it explicitly there or just link to it.
1023
1023
1024 IPython will proceed with builtin defaults.
1024 IPython will proceed with builtin defaults.
1025 """
1025 """
1026 warn(warning)
1026 warn(warning)
1027 wait()
1027 wait()
1028 return
1028 return
1029
1029
1030 if mode == 'install':
1030 if mode == 'install':
1031 try:
1031 try:
1032 shutil.copytree(rcdir,ipythondir)
1032 shutil.copytree(rcdir,ipythondir)
1033 os.chdir(ipythondir)
1033 os.chdir(ipythondir)
1034 rc_files = glb("ipythonrc*")
1034 rc_files = glb("ipythonrc*")
1035 for rc_file in rc_files:
1035 for rc_file in rc_files:
1036 os.rename(rc_file,rc_file+rc_suffix)
1036 os.rename(rc_file,rc_file+rc_suffix)
1037 except:
1037 except:
1038 warning = """
1038 warning = """
1039
1039
1040 There was a problem with the installation:
1040 There was a problem with the installation:
1041 %s
1041 %s
1042 Try to correct it or contact the developers if you think it's a bug.
1042 Try to correct it or contact the developers if you think it's a bug.
1043 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1043 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1044 warn(warning)
1044 warn(warning)
1045 wait()
1045 wait()
1046 return
1046 return
1047
1047
1048 elif mode == 'upgrade':
1048 elif mode == 'upgrade':
1049 try:
1049 try:
1050 os.chdir(ipythondir)
1050 os.chdir(ipythondir)
1051 except:
1051 except:
1052 print """
1052 print """
1053 Can not upgrade: changing to directory %s failed. Details:
1053 Can not upgrade: changing to directory %s failed. Details:
1054 %s
1054 %s
1055 """ % (ipythondir,sys.exc_info()[1])
1055 """ % (ipythondir,sys.exc_info()[1])
1056 wait()
1056 wait()
1057 return
1057 return
1058 else:
1058 else:
1059 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1059 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1060 for new_full_path in sources:
1060 for new_full_path in sources:
1061 new_filename = os.path.basename(new_full_path)
1061 new_filename = os.path.basename(new_full_path)
1062 if new_filename.startswith('ipythonrc'):
1062 if new_filename.startswith('ipythonrc'):
1063 new_filename = new_filename + rc_suffix
1063 new_filename = new_filename + rc_suffix
1064 # The config directory should only contain files, skip any
1064 # The config directory should only contain files, skip any
1065 # directories which may be there (like CVS)
1065 # directories which may be there (like CVS)
1066 if os.path.isdir(new_full_path):
1066 if os.path.isdir(new_full_path):
1067 continue
1067 continue
1068 if os.path.exists(new_filename):
1068 if os.path.exists(new_filename):
1069 old_file = new_filename+'.old'
1069 old_file = new_filename+'.old'
1070 if os.path.exists(old_file):
1070 if os.path.exists(old_file):
1071 os.remove(old_file)
1071 os.remove(old_file)
1072 os.rename(new_filename,old_file)
1072 os.rename(new_filename,old_file)
1073 shutil.copy(new_full_path,new_filename)
1073 shutil.copy(new_full_path,new_filename)
1074 else:
1074 else:
1075 raise ValueError,'unrecognized mode for install:',`mode`
1075 raise ValueError,'unrecognized mode for install:',`mode`
1076
1076
1077 # Fix line-endings to those native to each platform in the config
1077 # Fix line-endings to those native to each platform in the config
1078 # directory.
1078 # directory.
1079 try:
1079 try:
1080 os.chdir(ipythondir)
1080 os.chdir(ipythondir)
1081 except:
1081 except:
1082 print """
1082 print """
1083 Problem: changing to directory %s failed.
1083 Problem: changing to directory %s failed.
1084 Details:
1084 Details:
1085 %s
1085 %s
1086
1086
1087 Some configuration files may have incorrect line endings. This should not
1087 Some configuration files may have incorrect line endings. This should not
1088 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1088 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1089 wait()
1089 wait()
1090 else:
1090 else:
1091 for fname in glb('ipythonrc*'):
1091 for fname in glb('ipythonrc*'):
1092 try:
1092 try:
1093 native_line_ends(fname,backup=0)
1093 native_line_ends(fname,backup=0)
1094 except IOError:
1094 except IOError:
1095 pass
1095 pass
1096
1096
1097 if mode == 'install':
1097 if mode == 'install':
1098 print """
1098 print """
1099 Successful installation!
1099 Successful installation!
1100
1100
1101 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1101 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1102 IPython manual (there are both HTML and PDF versions supplied with the
1102 IPython manual (there are both HTML and PDF versions supplied with the
1103 distribution) to make sure that your system environment is properly configured
1103 distribution) to make sure that your system environment is properly configured
1104 to take advantage of IPython's features.
1104 to take advantage of IPython's features.
1105
1105
1106 Important note: the configuration system has changed! The old system is
1106 Important note: the configuration system has changed! The old system is
1107 still in place, but its setting may be partly overridden by the settings in
1107 still in place, but its setting may be partly overridden by the settings in
1108 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1108 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1109 if some of the new settings bother you.
1109 if some of the new settings bother you.
1110
1110
1111 """
1111 """
1112 else:
1112 else:
1113 print """
1113 print """
1114 Successful upgrade!
1114 Successful upgrade!
1115
1115
1116 All files in your directory:
1116 All files in your directory:
1117 %(ipythondir)s
1117 %(ipythondir)s
1118 which would have been overwritten by the upgrade were backed up with a .old
1118 which would have been overwritten by the upgrade were backed up with a .old
1119 extension. If you had made particular customizations in those files you may
1119 extension. If you had made particular customizations in those files you may
1120 want to merge them back into the new files.""" % locals()
1120 want to merge them back into the new files.""" % locals()
1121 wait()
1121 wait()
1122 os.chdir(cwd)
1122 os.chdir(cwd)
1123 # end user_setup()
1123 # end user_setup()
1124
1124
1125 def atexit_operations(self):
1125 def atexit_operations(self):
1126 """This will be executed at the time of exit.
1126 """This will be executed at the time of exit.
1127
1127
1128 Saving of persistent data should be performed here. """
1128 Saving of persistent data should be performed here. """
1129
1129
1130 #print '*** IPython exit cleanup ***' # dbg
1130 #print '*** IPython exit cleanup ***' # dbg
1131 # input history
1131 # input history
1132 self.savehist()
1132 self.savehist()
1133
1133
1134 # Cleanup all tempfiles left around
1134 # Cleanup all tempfiles left around
1135 for tfile in self.tempfiles:
1135 for tfile in self.tempfiles:
1136 try:
1136 try:
1137 os.unlink(tfile)
1137 os.unlink(tfile)
1138 except OSError:
1138 except OSError:
1139 pass
1139 pass
1140
1140
1141 # save the "persistent data" catch-all dictionary
1141 # save the "persistent data" catch-all dictionary
1142 self.hooks.shutdown_hook()
1142 self.hooks.shutdown_hook()
1143
1143
1144 def savehist(self):
1144 def savehist(self):
1145 """Save input history to a file (via readline library)."""
1145 """Save input history to a file (via readline library)."""
1146 try:
1146 try:
1147 self.readline.write_history_file(self.histfile)
1147 self.readline.write_history_file(self.histfile)
1148 except:
1148 except:
1149 print 'Unable to save IPython command history to file: ' + \
1149 print 'Unable to save IPython command history to file: ' + \
1150 `self.histfile`
1150 `self.histfile`
1151
1151
1152 def pre_readline(self):
1152 def pre_readline(self):
1153 """readline hook to be used at the start of each line.
1153 """readline hook to be used at the start of each line.
1154
1154
1155 Currently it handles auto-indent only."""
1155 Currently it handles auto-indent only."""
1156
1156
1157 #debugx('self.indent_current_nsp','pre_readline:')
1157 #debugx('self.indent_current_nsp','pre_readline:')
1158 self.readline.insert_text(self.indent_current_str())
1158 self.readline.insert_text(self.indent_current_str())
1159
1159
1160 def init_readline(self):
1160 def init_readline(self):
1161 """Command history completion/saving/reloading."""
1161 """Command history completion/saving/reloading."""
1162
1162
1163 import IPython.rlineimpl as readline
1163 import IPython.rlineimpl as readline
1164 if not readline.have_readline:
1164 if not readline.have_readline:
1165 self.has_readline = 0
1165 self.has_readline = 0
1166 self.readline = None
1166 self.readline = None
1167 # no point in bugging windows users with this every time:
1167 # no point in bugging windows users with this every time:
1168 warn('Readline services not available on this platform.')
1168 warn('Readline services not available on this platform.')
1169 else:
1169 else:
1170 sys.modules['readline'] = readline
1170 sys.modules['readline'] = readline
1171 import atexit
1171 import atexit
1172 from IPython.completer import IPCompleter
1172 from IPython.completer import IPCompleter
1173 self.Completer = IPCompleter(self,
1173 self.Completer = IPCompleter(self,
1174 self.user_ns,
1174 self.user_ns,
1175 self.user_global_ns,
1175 self.user_global_ns,
1176 self.rc.readline_omit__names,
1176 self.rc.readline_omit__names,
1177 self.alias_table)
1177 self.alias_table)
1178
1178
1179 # Platform-specific configuration
1179 # Platform-specific configuration
1180 if os.name == 'nt':
1180 if os.name == 'nt':
1181 self.readline_startup_hook = readline.set_pre_input_hook
1181 self.readline_startup_hook = readline.set_pre_input_hook
1182 else:
1182 else:
1183 self.readline_startup_hook = readline.set_startup_hook
1183 self.readline_startup_hook = readline.set_startup_hook
1184
1184
1185 # Load user's initrc file (readline config)
1185 # Load user's initrc file (readline config)
1186 inputrc_name = os.environ.get('INPUTRC')
1186 inputrc_name = os.environ.get('INPUTRC')
1187 if inputrc_name is None:
1187 if inputrc_name is None:
1188 home_dir = get_home_dir()
1188 home_dir = get_home_dir()
1189 if home_dir is not None:
1189 if home_dir is not None:
1190 inputrc_name = os.path.join(home_dir,'.inputrc')
1190 inputrc_name = os.path.join(home_dir,'.inputrc')
1191 if os.path.isfile(inputrc_name):
1191 if os.path.isfile(inputrc_name):
1192 try:
1192 try:
1193 readline.read_init_file(inputrc_name)
1193 readline.read_init_file(inputrc_name)
1194 except:
1194 except:
1195 warn('Problems reading readline initialization file <%s>'
1195 warn('Problems reading readline initialization file <%s>'
1196 % inputrc_name)
1196 % inputrc_name)
1197
1197
1198 self.has_readline = 1
1198 self.has_readline = 1
1199 self.readline = readline
1199 self.readline = readline
1200 # save this in sys so embedded copies can restore it properly
1200 # save this in sys so embedded copies can restore it properly
1201 sys.ipcompleter = self.Completer.complete
1201 sys.ipcompleter = self.Completer.complete
1202 readline.set_completer(self.Completer.complete)
1202 readline.set_completer(self.Completer.complete)
1203
1203
1204 # Configure readline according to user's prefs
1204 # Configure readline according to user's prefs
1205 for rlcommand in self.rc.readline_parse_and_bind:
1205 for rlcommand in self.rc.readline_parse_and_bind:
1206 readline.parse_and_bind(rlcommand)
1206 readline.parse_and_bind(rlcommand)
1207
1207
1208 # remove some chars from the delimiters list
1208 # remove some chars from the delimiters list
1209 delims = readline.get_completer_delims()
1209 delims = readline.get_completer_delims()
1210 delims = delims.translate(string._idmap,
1210 delims = delims.translate(string._idmap,
1211 self.rc.readline_remove_delims)
1211 self.rc.readline_remove_delims)
1212 readline.set_completer_delims(delims)
1212 readline.set_completer_delims(delims)
1213 # otherwise we end up with a monster history after a while:
1213 # otherwise we end up with a monster history after a while:
1214 readline.set_history_length(1000)
1214 readline.set_history_length(1000)
1215 try:
1215 try:
1216 #print '*** Reading readline history' # dbg
1216 #print '*** Reading readline history' # dbg
1217 readline.read_history_file(self.histfile)
1217 readline.read_history_file(self.histfile)
1218 except IOError:
1218 except IOError:
1219 pass # It doesn't exist yet.
1219 pass # It doesn't exist yet.
1220
1220
1221 atexit.register(self.atexit_operations)
1221 atexit.register(self.atexit_operations)
1222 del atexit
1222 del atexit
1223
1223
1224 # Configure auto-indent for all platforms
1224 # Configure auto-indent for all platforms
1225 self.set_autoindent(self.rc.autoindent)
1225 self.set_autoindent(self.rc.autoindent)
1226
1226
1227 def _should_recompile(self,e):
1227 def _should_recompile(self,e):
1228 """Utility routine for edit_syntax_error"""
1228 """Utility routine for edit_syntax_error"""
1229
1229
1230 if e.filename in ('<ipython console>','<input>','<string>',
1230 if e.filename in ('<ipython console>','<input>','<string>',
1231 '<console>',None):
1231 '<console>',None):
1232
1232
1233 return False
1233 return False
1234 try:
1234 try:
1235 if (self.rc.autoedit_syntax and
1235 if (self.rc.autoedit_syntax and
1236 not ask_yes_no('Return to editor to correct syntax error? '
1236 not ask_yes_no('Return to editor to correct syntax error? '
1237 '[Y/n] ','y')):
1237 '[Y/n] ','y')):
1238 return False
1238 return False
1239 except EOFError:
1239 except EOFError:
1240 return False
1240 return False
1241
1241
1242 def int0(x):
1242 def int0(x):
1243 try:
1243 try:
1244 return int(x)
1244 return int(x)
1245 except TypeError:
1245 except TypeError:
1246 return 0
1246 return 0
1247 # always pass integer line and offset values to editor hook
1247 # always pass integer line and offset values to editor hook
1248 self.hooks.fix_error_editor(e.filename,
1248 self.hooks.fix_error_editor(e.filename,
1249 int0(e.lineno),int0(e.offset),e.msg)
1249 int0(e.lineno),int0(e.offset),e.msg)
1250 return True
1250 return True
1251
1251
1252 def edit_syntax_error(self):
1252 def edit_syntax_error(self):
1253 """The bottom half of the syntax error handler called in the main loop.
1253 """The bottom half of the syntax error handler called in the main loop.
1254
1254
1255 Loop until syntax error is fixed or user cancels.
1255 Loop until syntax error is fixed or user cancels.
1256 """
1256 """
1257
1257
1258 while self.SyntaxTB.last_syntax_error:
1258 while self.SyntaxTB.last_syntax_error:
1259 # copy and clear last_syntax_error
1259 # copy and clear last_syntax_error
1260 err = self.SyntaxTB.clear_err_state()
1260 err = self.SyntaxTB.clear_err_state()
1261 if not self._should_recompile(err):
1261 if not self._should_recompile(err):
1262 return
1262 return
1263 try:
1263 try:
1264 # may set last_syntax_error again if a SyntaxError is raised
1264 # may set last_syntax_error again if a SyntaxError is raised
1265 self.safe_execfile(err.filename,self.shell.user_ns)
1265 self.safe_execfile(err.filename,self.shell.user_ns)
1266 except:
1266 except:
1267 self.showtraceback()
1267 self.showtraceback()
1268 else:
1268 else:
1269 f = file(err.filename)
1269 f = file(err.filename)
1270 try:
1270 try:
1271 sys.displayhook(f.read())
1271 sys.displayhook(f.read())
1272 finally:
1272 finally:
1273 f.close()
1273 f.close()
1274
1274
1275 def showsyntaxerror(self, filename=None):
1275 def showsyntaxerror(self, filename=None):
1276 """Display the syntax error that just occurred.
1276 """Display the syntax error that just occurred.
1277
1277
1278 This doesn't display a stack trace because there isn't one.
1278 This doesn't display a stack trace because there isn't one.
1279
1279
1280 If a filename is given, it is stuffed in the exception instead
1280 If a filename is given, it is stuffed in the exception instead
1281 of what was there before (because Python's parser always uses
1281 of what was there before (because Python's parser always uses
1282 "<string>" when reading from a string).
1282 "<string>" when reading from a string).
1283 """
1283 """
1284 etype, value, last_traceback = sys.exc_info()
1284 etype, value, last_traceback = sys.exc_info()
1285
1285
1286 # See note about these variables in showtraceback() below
1286 # See note about these variables in showtraceback() below
1287 sys.last_type = etype
1287 sys.last_type = etype
1288 sys.last_value = value
1288 sys.last_value = value
1289 sys.last_traceback = last_traceback
1289 sys.last_traceback = last_traceback
1290
1290
1291 if filename and etype is SyntaxError:
1291 if filename and etype is SyntaxError:
1292 # Work hard to stuff the correct filename in the exception
1292 # Work hard to stuff the correct filename in the exception
1293 try:
1293 try:
1294 msg, (dummy_filename, lineno, offset, line) = value
1294 msg, (dummy_filename, lineno, offset, line) = value
1295 except:
1295 except:
1296 # Not the format we expect; leave it alone
1296 # Not the format we expect; leave it alone
1297 pass
1297 pass
1298 else:
1298 else:
1299 # Stuff in the right filename
1299 # Stuff in the right filename
1300 try:
1300 try:
1301 # Assume SyntaxError is a class exception
1301 # Assume SyntaxError is a class exception
1302 value = SyntaxError(msg, (filename, lineno, offset, line))
1302 value = SyntaxError(msg, (filename, lineno, offset, line))
1303 except:
1303 except:
1304 # If that failed, assume SyntaxError is a string
1304 # If that failed, assume SyntaxError is a string
1305 value = msg, (filename, lineno, offset, line)
1305 value = msg, (filename, lineno, offset, line)
1306 self.SyntaxTB(etype,value,[])
1306 self.SyntaxTB(etype,value,[])
1307
1307
1308 def debugger(self):
1308 def debugger(self):
1309 """Call the pdb debugger."""
1309 """Call the pdb debugger."""
1310
1310
1311 if not self.rc.pdb:
1311 if not self.rc.pdb:
1312 return
1312 return
1313 pdb.pm()
1313 pdb.pm()
1314
1314
1315 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1315 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1316 """Display the exception that just occurred."""
1316 """Display the exception that just occurred."""
1317
1317
1318 # Though this won't be called by syntax errors in the input line,
1318 # Though this won't be called by syntax errors in the input line,
1319 # there may be SyntaxError cases whith imported code.
1319 # there may be SyntaxError cases whith imported code.
1320 if exc_tuple is None:
1320 if exc_tuple is None:
1321 etype, value, tb = sys.exc_info()
1321 etype, value, tb = sys.exc_info()
1322 else:
1322 else:
1323 etype, value, tb = exc_tuple
1323 etype, value, tb = exc_tuple
1324 if etype is SyntaxError:
1324 if etype is SyntaxError:
1325 self.showsyntaxerror(filename)
1325 self.showsyntaxerror(filename)
1326 else:
1326 else:
1327 # WARNING: these variables are somewhat deprecated and not
1327 # WARNING: these variables are somewhat deprecated and not
1328 # necessarily safe to use in a threaded environment, but tools
1328 # necessarily safe to use in a threaded environment, but tools
1329 # like pdb depend on their existence, so let's set them. If we
1329 # like pdb depend on their existence, so let's set them. If we
1330 # find problems in the field, we'll need to revisit their use.
1330 # find problems in the field, we'll need to revisit their use.
1331 sys.last_type = etype
1331 sys.last_type = etype
1332 sys.last_value = value
1332 sys.last_value = value
1333 sys.last_traceback = tb
1333 sys.last_traceback = tb
1334
1334
1335 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1335 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1336 if self.InteractiveTB.call_pdb and self.has_readline:
1336 if self.InteractiveTB.call_pdb and self.has_readline:
1337 # pdb mucks up readline, fix it back
1337 # pdb mucks up readline, fix it back
1338 self.readline.set_completer(self.Completer.complete)
1338 self.readline.set_completer(self.Completer.complete)
1339
1339
1340 def mainloop(self,banner=None):
1340 def mainloop(self,banner=None):
1341 """Creates the local namespace and starts the mainloop.
1341 """Creates the local namespace and starts the mainloop.
1342
1342
1343 If an optional banner argument is given, it will override the
1343 If an optional banner argument is given, it will override the
1344 internally created default banner."""
1344 internally created default banner."""
1345
1345
1346 if self.rc.c: # Emulate Python's -c option
1346 if self.rc.c: # Emulate Python's -c option
1347 self.exec_init_cmd()
1347 self.exec_init_cmd()
1348 if banner is None:
1348 if banner is None:
1349 if not self.rc.banner:
1349 if not self.rc.banner:
1350 banner = ''
1350 banner = ''
1351 # banner is string? Use it directly!
1351 # banner is string? Use it directly!
1352 elif isinstance(self.rc.banner,basestring):
1352 elif isinstance(self.rc.banner,basestring):
1353 banner = self.rc.banner
1353 banner = self.rc.banner
1354 else:
1354 else:
1355 banner = self.BANNER+self.banner2
1355 banner = self.BANNER+self.banner2
1356
1356
1357 self.interact(banner)
1357 self.interact(banner)
1358
1358
1359 def exec_init_cmd(self):
1359 def exec_init_cmd(self):
1360 """Execute a command given at the command line.
1360 """Execute a command given at the command line.
1361
1361
1362 This emulates Python's -c option."""
1362 This emulates Python's -c option."""
1363
1363
1364 #sys.argv = ['-c']
1364 #sys.argv = ['-c']
1365 self.push(self.rc.c)
1365 self.push(self.rc.c)
1366
1366
1367 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1367 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1368 """Embeds IPython into a running python program.
1368 """Embeds IPython into a running python program.
1369
1369
1370 Input:
1370 Input:
1371
1371
1372 - header: An optional header message can be specified.
1372 - header: An optional header message can be specified.
1373
1373
1374 - local_ns, global_ns: working namespaces. If given as None, the
1374 - local_ns, global_ns: working namespaces. If given as None, the
1375 IPython-initialized one is updated with __main__.__dict__, so that
1375 IPython-initialized one is updated with __main__.__dict__, so that
1376 program variables become visible but user-specific configuration
1376 program variables become visible but user-specific configuration
1377 remains possible.
1377 remains possible.
1378
1378
1379 - stack_depth: specifies how many levels in the stack to go to
1379 - stack_depth: specifies how many levels in the stack to go to
1380 looking for namespaces (when local_ns and global_ns are None). This
1380 looking for namespaces (when local_ns and global_ns are None). This
1381 allows an intermediate caller to make sure that this function gets
1381 allows an intermediate caller to make sure that this function gets
1382 the namespace from the intended level in the stack. By default (0)
1382 the namespace from the intended level in the stack. By default (0)
1383 it will get its locals and globals from the immediate caller.
1383 it will get its locals and globals from the immediate caller.
1384
1384
1385 Warning: it's possible to use this in a program which is being run by
1385 Warning: it's possible to use this in a program which is being run by
1386 IPython itself (via %run), but some funny things will happen (a few
1386 IPython itself (via %run), but some funny things will happen (a few
1387 globals get overwritten). In the future this will be cleaned up, as
1387 globals get overwritten). In the future this will be cleaned up, as
1388 there is no fundamental reason why it can't work perfectly."""
1388 there is no fundamental reason why it can't work perfectly."""
1389
1389
1390 # Get locals and globals from caller
1390 # Get locals and globals from caller
1391 if local_ns is None or global_ns is None:
1391 if local_ns is None or global_ns is None:
1392 call_frame = sys._getframe(stack_depth).f_back
1392 call_frame = sys._getframe(stack_depth).f_back
1393
1393
1394 if local_ns is None:
1394 if local_ns is None:
1395 local_ns = call_frame.f_locals
1395 local_ns = call_frame.f_locals
1396 if global_ns is None:
1396 if global_ns is None:
1397 global_ns = call_frame.f_globals
1397 global_ns = call_frame.f_globals
1398
1398
1399 # Update namespaces and fire up interpreter
1399 # Update namespaces and fire up interpreter
1400
1400
1401 # The global one is easy, we can just throw it in
1401 # The global one is easy, we can just throw it in
1402 self.user_global_ns = global_ns
1402 self.user_global_ns = global_ns
1403
1403
1404 # but the user/local one is tricky: ipython needs it to store internal
1404 # but the user/local one is tricky: ipython needs it to store internal
1405 # data, but we also need the locals. We'll copy locals in the user
1405 # data, but we also need the locals. We'll copy locals in the user
1406 # one, but will track what got copied so we can delete them at exit.
1406 # one, but will track what got copied so we can delete them at exit.
1407 # This is so that a later embedded call doesn't see locals from a
1407 # This is so that a later embedded call doesn't see locals from a
1408 # previous call (which most likely existed in a separate scope).
1408 # previous call (which most likely existed in a separate scope).
1409 local_varnames = local_ns.keys()
1409 local_varnames = local_ns.keys()
1410 self.user_ns.update(local_ns)
1410 self.user_ns.update(local_ns)
1411
1411
1412 # Patch for global embedding to make sure that things don't overwrite
1412 # Patch for global embedding to make sure that things don't overwrite
1413 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1413 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1414 # FIXME. Test this a bit more carefully (the if.. is new)
1414 # FIXME. Test this a bit more carefully (the if.. is new)
1415 if local_ns is None and global_ns is None:
1415 if local_ns is None and global_ns is None:
1416 self.user_global_ns.update(__main__.__dict__)
1416 self.user_global_ns.update(__main__.__dict__)
1417
1417
1418 # make sure the tab-completer has the correct frame information, so it
1418 # make sure the tab-completer has the correct frame information, so it
1419 # actually completes using the frame's locals/globals
1419 # actually completes using the frame's locals/globals
1420 self.set_completer_frame()
1420 self.set_completer_frame()
1421
1421
1422 # before activating the interactive mode, we need to make sure that
1422 # before activating the interactive mode, we need to make sure that
1423 # all names in the builtin namespace needed by ipython point to
1423 # all names in the builtin namespace needed by ipython point to
1424 # ourselves, and not to other instances.
1424 # ourselves, and not to other instances.
1425 self.add_builtins()
1425 self.add_builtins()
1426
1426
1427 self.interact(header)
1427 self.interact(header)
1428
1428
1429 # now, purge out the user namespace from anything we might have added
1429 # now, purge out the user namespace from anything we might have added
1430 # from the caller's local namespace
1430 # from the caller's local namespace
1431 delvar = self.user_ns.pop
1431 delvar = self.user_ns.pop
1432 for var in local_varnames:
1432 for var in local_varnames:
1433 delvar(var,None)
1433 delvar(var,None)
1434 # and clean builtins we may have overridden
1434 # and clean builtins we may have overridden
1435 self.clean_builtins()
1435 self.clean_builtins()
1436
1436
1437 def interact(self, banner=None):
1437 def interact(self, banner=None):
1438 """Closely emulate the interactive Python console.
1438 """Closely emulate the interactive Python console.
1439
1439
1440 The optional banner argument specify the banner to print
1440 The optional banner argument specify the banner to print
1441 before the first interaction; by default it prints a banner
1441 before the first interaction; by default it prints a banner
1442 similar to the one printed by the real Python interpreter,
1442 similar to the one printed by the real Python interpreter,
1443 followed by the current class name in parentheses (so as not
1443 followed by the current class name in parentheses (so as not
1444 to confuse this with the real interpreter -- since it's so
1444 to confuse this with the real interpreter -- since it's so
1445 close!).
1445 close!).
1446
1446
1447 """
1447 """
1448 cprt = 'Type "copyright", "credits" or "license" for more information.'
1448 cprt = 'Type "copyright", "credits" or "license" for more information.'
1449 if banner is None:
1449 if banner is None:
1450 self.write("Python %s on %s\n%s\n(%s)\n" %
1450 self.write("Python %s on %s\n%s\n(%s)\n" %
1451 (sys.version, sys.platform, cprt,
1451 (sys.version, sys.platform, cprt,
1452 self.__class__.__name__))
1452 self.__class__.__name__))
1453 else:
1453 else:
1454 self.write(banner)
1454 self.write(banner)
1455
1455
1456 more = 0
1456 more = 0
1457
1457
1458 # Mark activity in the builtins
1458 # Mark activity in the builtins
1459 __builtin__.__dict__['__IPYTHON__active'] += 1
1459 __builtin__.__dict__['__IPYTHON__active'] += 1
1460
1460
1461 # exit_now is set by a call to %Exit or %Quit
1461 # exit_now is set by a call to %Exit or %Quit
1462 self.exit_now = False
1462 self.exit_now = False
1463 while not self.exit_now:
1463 while not self.exit_now:
1464 if more:
1464 if more:
1465 prompt = self.outputcache.prompt2
1465 prompt = self.outputcache.prompt2
1466 if self.autoindent:
1466 if self.autoindent:
1467 self.readline_startup_hook(self.pre_readline)
1467 self.readline_startup_hook(self.pre_readline)
1468 else:
1468 else:
1469 prompt = self.outputcache.prompt1
1469 prompt = self.outputcache.prompt1
1470 try:
1470 try:
1471 line = self.raw_input(prompt,more)
1471 line = self.raw_input(prompt,more)
1472 if self.autoindent:
1472 if self.autoindent:
1473 self.readline_startup_hook(None)
1473 self.readline_startup_hook(None)
1474 except KeyboardInterrupt:
1474 except KeyboardInterrupt:
1475 self.write('\nKeyboardInterrupt\n')
1475 self.write('\nKeyboardInterrupt\n')
1476 self.resetbuffer()
1476 self.resetbuffer()
1477 # keep cache in sync with the prompt counter:
1477 # keep cache in sync with the prompt counter:
1478 self.outputcache.prompt_count -= 1
1478 self.outputcache.prompt_count -= 1
1479
1479
1480 if self.autoindent:
1480 if self.autoindent:
1481 self.indent_current_nsp = 0
1481 self.indent_current_nsp = 0
1482 more = 0
1482 more = 0
1483 except EOFError:
1483 except EOFError:
1484 if self.autoindent:
1484 if self.autoindent:
1485 self.readline_startup_hook(None)
1485 self.readline_startup_hook(None)
1486 self.write('\n')
1486 self.write('\n')
1487 self.exit()
1487 self.exit()
1488 except bdb.BdbQuit:
1488 except bdb.BdbQuit:
1489 warn('The Python debugger has exited with a BdbQuit exception.\n'
1489 warn('The Python debugger has exited with a BdbQuit exception.\n'
1490 'Because of how pdb handles the stack, it is impossible\n'
1490 'Because of how pdb handles the stack, it is impossible\n'
1491 'for IPython to properly format this particular exception.\n'
1491 'for IPython to properly format this particular exception.\n'
1492 'IPython will resume normal operation.')
1492 'IPython will resume normal operation.')
1493 except:
1493 except:
1494 # exceptions here are VERY RARE, but they can be triggered
1494 # exceptions here are VERY RARE, but they can be triggered
1495 # asynchronously by signal handlers, for example.
1495 # asynchronously by signal handlers, for example.
1496 self.showtraceback()
1496 self.showtraceback()
1497 else:
1497 else:
1498 more = self.push(line)
1498 more = self.push(line)
1499 if (self.SyntaxTB.last_syntax_error and
1499 if (self.SyntaxTB.last_syntax_error and
1500 self.rc.autoedit_syntax):
1500 self.rc.autoedit_syntax):
1501 self.edit_syntax_error()
1501 self.edit_syntax_error()
1502
1502
1503 # We are off again...
1503 # We are off again...
1504 __builtin__.__dict__['__IPYTHON__active'] -= 1
1504 __builtin__.__dict__['__IPYTHON__active'] -= 1
1505
1505
1506 def excepthook(self, etype, value, tb):
1506 def excepthook(self, etype, value, tb):
1507 """One more defense for GUI apps that call sys.excepthook.
1507 """One more defense for GUI apps that call sys.excepthook.
1508
1508
1509 GUI frameworks like wxPython trap exceptions and call
1509 GUI frameworks like wxPython trap exceptions and call
1510 sys.excepthook themselves. I guess this is a feature that
1510 sys.excepthook themselves. I guess this is a feature that
1511 enables them to keep running after exceptions that would
1511 enables them to keep running after exceptions that would
1512 otherwise kill their mainloop. This is a bother for IPython
1512 otherwise kill their mainloop. This is a bother for IPython
1513 which excepts to catch all of the program exceptions with a try:
1513 which excepts to catch all of the program exceptions with a try:
1514 except: statement.
1514 except: statement.
1515
1515
1516 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1516 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1517 any app directly invokes sys.excepthook, it will look to the user like
1517 any app directly invokes sys.excepthook, it will look to the user like
1518 IPython crashed. In order to work around this, we can disable the
1518 IPython crashed. In order to work around this, we can disable the
1519 CrashHandler and replace it with this excepthook instead, which prints a
1519 CrashHandler and replace it with this excepthook instead, which prints a
1520 regular traceback using our InteractiveTB. In this fashion, apps which
1520 regular traceback using our InteractiveTB. In this fashion, apps which
1521 call sys.excepthook will generate a regular-looking exception from
1521 call sys.excepthook will generate a regular-looking exception from
1522 IPython, and the CrashHandler will only be triggered by real IPython
1522 IPython, and the CrashHandler will only be triggered by real IPython
1523 crashes.
1523 crashes.
1524
1524
1525 This hook should be used sparingly, only in places which are not likely
1525 This hook should be used sparingly, only in places which are not likely
1526 to be true IPython errors.
1526 to be true IPython errors.
1527 """
1527 """
1528 self.showtraceback((etype,value,tb),tb_offset=0)
1528 self.showtraceback((etype,value,tb),tb_offset=0)
1529
1529
1530 def transform_alias(self, alias,rest=''):
1530 def transform_alias(self, alias,rest=''):
1531 """ Transform alias to system command string
1531 """ Transform alias to system command string
1532
1532
1533 """
1533 """
1534 nargs,cmd = self.alias_table[alias]
1534 nargs,cmd = self.alias_table[alias]
1535 if ' ' in cmd:
1535 if ' ' in cmd and os.path.isfile(cmd):
1536 cmd = '"%s"' % cmd
1536 cmd = '"%s"' % cmd
1537
1537
1538 # Expand the %l special to be the user's input line
1538 # Expand the %l special to be the user's input line
1539 if cmd.find('%l') >= 0:
1539 if cmd.find('%l') >= 0:
1540 cmd = cmd.replace('%l',rest)
1540 cmd = cmd.replace('%l',rest)
1541 rest = ''
1541 rest = ''
1542 if nargs==0:
1542 if nargs==0:
1543 # Simple, argument-less aliases
1543 # Simple, argument-less aliases
1544 cmd = '%s %s' % (cmd,rest)
1544 cmd = '%s %s' % (cmd,rest)
1545 else:
1545 else:
1546 # Handle aliases with positional arguments
1546 # Handle aliases with positional arguments
1547 args = rest.split(None,nargs)
1547 args = rest.split(None,nargs)
1548 if len(args)< nargs:
1548 if len(args)< nargs:
1549 error('Alias <%s> requires %s arguments, %s given.' %
1549 error('Alias <%s> requires %s arguments, %s given.' %
1550 (alias,nargs,len(args)))
1550 (alias,nargs,len(args)))
1551 return None
1551 return None
1552 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1552 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1553 # Now call the macro, evaluating in the user's namespace
1553 # Now call the macro, evaluating in the user's namespace
1554
1554
1555 return cmd
1555 return cmd
1556
1556
1557 def call_alias(self,alias,rest=''):
1557 def call_alias(self,alias,rest=''):
1558 """Call an alias given its name and the rest of the line.
1558 """Call an alias given its name and the rest of the line.
1559
1559
1560 This is only used to provide backwards compatibility for users of
1560 This is only used to provide backwards compatibility for users of
1561 ipalias(), use of which is not recommended for anymore."""
1561 ipalias(), use of which is not recommended for anymore."""
1562
1562
1563 # Now call the macro, evaluating in the user's namespace
1563 # Now call the macro, evaluating in the user's namespace
1564 cmd = self.transform_alias(alias, rest)
1564 cmd = self.transform_alias(alias, rest)
1565 try:
1565 try:
1566 self.system(cmd)
1566 self.system(cmd)
1567 except:
1567 except:
1568 self.showtraceback()
1568 self.showtraceback()
1569
1569
1570 def indent_current_str(self):
1570 def indent_current_str(self):
1571 """return the current level of indentation as a string"""
1571 """return the current level of indentation as a string"""
1572 return self.indent_current_nsp * ' '
1572 return self.indent_current_nsp * ' '
1573
1573
1574 def autoindent_update(self,line):
1574 def autoindent_update(self,line):
1575 """Keep track of the indent level."""
1575 """Keep track of the indent level."""
1576
1576
1577 #debugx('line')
1577 #debugx('line')
1578 #debugx('self.indent_current_nsp')
1578 #debugx('self.indent_current_nsp')
1579 if self.autoindent:
1579 if self.autoindent:
1580 if line:
1580 if line:
1581 inisp = num_ini_spaces(line)
1581 inisp = num_ini_spaces(line)
1582 if inisp < self.indent_current_nsp:
1582 if inisp < self.indent_current_nsp:
1583 self.indent_current_nsp = inisp
1583 self.indent_current_nsp = inisp
1584
1584
1585 if line[-1] == ':':
1585 if line[-1] == ':':
1586 self.indent_current_nsp += 4
1586 self.indent_current_nsp += 4
1587 elif dedent_re.match(line):
1587 elif dedent_re.match(line):
1588 self.indent_current_nsp -= 4
1588 self.indent_current_nsp -= 4
1589 else:
1589 else:
1590 self.indent_current_nsp = 0
1590 self.indent_current_nsp = 0
1591
1591
1592 def runlines(self,lines):
1592 def runlines(self,lines):
1593 """Run a string of one or more lines of source.
1593 """Run a string of one or more lines of source.
1594
1594
1595 This method is capable of running a string containing multiple source
1595 This method is capable of running a string containing multiple source
1596 lines, as if they had been entered at the IPython prompt. Since it
1596 lines, as if they had been entered at the IPython prompt. Since it
1597 exposes IPython's processing machinery, the given strings can contain
1597 exposes IPython's processing machinery, the given strings can contain
1598 magic calls (%magic), special shell access (!cmd), etc."""
1598 magic calls (%magic), special shell access (!cmd), etc."""
1599
1599
1600 # We must start with a clean buffer, in case this is run from an
1600 # We must start with a clean buffer, in case this is run from an
1601 # interactive IPython session (via a magic, for example).
1601 # interactive IPython session (via a magic, for example).
1602 self.resetbuffer()
1602 self.resetbuffer()
1603 lines = lines.split('\n')
1603 lines = lines.split('\n')
1604 more = 0
1604 more = 0
1605 for line in lines:
1605 for line in lines:
1606 # skip blank lines so we don't mess up the prompt counter, but do
1606 # skip blank lines so we don't mess up the prompt counter, but do
1607 # NOT skip even a blank line if we are in a code block (more is
1607 # NOT skip even a blank line if we are in a code block (more is
1608 # true)
1608 # true)
1609 if line or more:
1609 if line or more:
1610 more = self.push(self.prefilter(line,more))
1610 more = self.push(self.prefilter(line,more))
1611 # IPython's runsource returns None if there was an error
1611 # IPython's runsource returns None if there was an error
1612 # compiling the code. This allows us to stop processing right
1612 # compiling the code. This allows us to stop processing right
1613 # away, so the user gets the error message at the right place.
1613 # away, so the user gets the error message at the right place.
1614 if more is None:
1614 if more is None:
1615 break
1615 break
1616 # final newline in case the input didn't have it, so that the code
1616 # final newline in case the input didn't have it, so that the code
1617 # actually does get executed
1617 # actually does get executed
1618 if more:
1618 if more:
1619 self.push('\n')
1619 self.push('\n')
1620
1620
1621 def runsource(self, source, filename='<input>', symbol='single'):
1621 def runsource(self, source, filename='<input>', symbol='single'):
1622 """Compile and run some source in the interpreter.
1622 """Compile and run some source in the interpreter.
1623
1623
1624 Arguments are as for compile_command().
1624 Arguments are as for compile_command().
1625
1625
1626 One several things can happen:
1626 One several things can happen:
1627
1627
1628 1) The input is incorrect; compile_command() raised an
1628 1) The input is incorrect; compile_command() raised an
1629 exception (SyntaxError or OverflowError). A syntax traceback
1629 exception (SyntaxError or OverflowError). A syntax traceback
1630 will be printed by calling the showsyntaxerror() method.
1630 will be printed by calling the showsyntaxerror() method.
1631
1631
1632 2) The input is incomplete, and more input is required;
1632 2) The input is incomplete, and more input is required;
1633 compile_command() returned None. Nothing happens.
1633 compile_command() returned None. Nothing happens.
1634
1634
1635 3) The input is complete; compile_command() returned a code
1635 3) The input is complete; compile_command() returned a code
1636 object. The code is executed by calling self.runcode() (which
1636 object. The code is executed by calling self.runcode() (which
1637 also handles run-time exceptions, except for SystemExit).
1637 also handles run-time exceptions, except for SystemExit).
1638
1638
1639 The return value is:
1639 The return value is:
1640
1640
1641 - True in case 2
1641 - True in case 2
1642
1642
1643 - False in the other cases, unless an exception is raised, where
1643 - False in the other cases, unless an exception is raised, where
1644 None is returned instead. This can be used by external callers to
1644 None is returned instead. This can be used by external callers to
1645 know whether to continue feeding input or not.
1645 know whether to continue feeding input or not.
1646
1646
1647 The return value can be used to decide whether to use sys.ps1 or
1647 The return value can be used to decide whether to use sys.ps1 or
1648 sys.ps2 to prompt the next line."""
1648 sys.ps2 to prompt the next line."""
1649
1649
1650 try:
1650 try:
1651 code = self.compile(source,filename,symbol)
1651 code = self.compile(source,filename,symbol)
1652 except (OverflowError, SyntaxError, ValueError):
1652 except (OverflowError, SyntaxError, ValueError):
1653 # Case 1
1653 # Case 1
1654 self.showsyntaxerror(filename)
1654 self.showsyntaxerror(filename)
1655 return None
1655 return None
1656
1656
1657 if code is None:
1657 if code is None:
1658 # Case 2
1658 # Case 2
1659 return True
1659 return True
1660
1660
1661 # Case 3
1661 # Case 3
1662 # We store the code object so that threaded shells and
1662 # We store the code object so that threaded shells and
1663 # custom exception handlers can access all this info if needed.
1663 # custom exception handlers can access all this info if needed.
1664 # The source corresponding to this can be obtained from the
1664 # The source corresponding to this can be obtained from the
1665 # buffer attribute as '\n'.join(self.buffer).
1665 # buffer attribute as '\n'.join(self.buffer).
1666 self.code_to_run = code
1666 self.code_to_run = code
1667 # now actually execute the code object
1667 # now actually execute the code object
1668 if self.runcode(code) == 0:
1668 if self.runcode(code) == 0:
1669 return False
1669 return False
1670 else:
1670 else:
1671 return None
1671 return None
1672
1672
1673 def runcode(self,code_obj):
1673 def runcode(self,code_obj):
1674 """Execute a code object.
1674 """Execute a code object.
1675
1675
1676 When an exception occurs, self.showtraceback() is called to display a
1676 When an exception occurs, self.showtraceback() is called to display a
1677 traceback.
1677 traceback.
1678
1678
1679 Return value: a flag indicating whether the code to be run completed
1679 Return value: a flag indicating whether the code to be run completed
1680 successfully:
1680 successfully:
1681
1681
1682 - 0: successful execution.
1682 - 0: successful execution.
1683 - 1: an error occurred.
1683 - 1: an error occurred.
1684 """
1684 """
1685
1685
1686 # Set our own excepthook in case the user code tries to call it
1686 # Set our own excepthook in case the user code tries to call it
1687 # directly, so that the IPython crash handler doesn't get triggered
1687 # directly, so that the IPython crash handler doesn't get triggered
1688 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1688 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1689
1689
1690 # we save the original sys.excepthook in the instance, in case config
1690 # we save the original sys.excepthook in the instance, in case config
1691 # code (such as magics) needs access to it.
1691 # code (such as magics) needs access to it.
1692 self.sys_excepthook = old_excepthook
1692 self.sys_excepthook = old_excepthook
1693 outflag = 1 # happens in more places, so it's easier as default
1693 outflag = 1 # happens in more places, so it's easier as default
1694 try:
1694 try:
1695 try:
1695 try:
1696 # Embedded instances require separate global/local namespaces
1696 # Embedded instances require separate global/local namespaces
1697 # so they can see both the surrounding (local) namespace and
1697 # so they can see both the surrounding (local) namespace and
1698 # the module-level globals when called inside another function.
1698 # the module-level globals when called inside another function.
1699 if self.embedded:
1699 if self.embedded:
1700 exec code_obj in self.user_global_ns, self.user_ns
1700 exec code_obj in self.user_global_ns, self.user_ns
1701 # Normal (non-embedded) instances should only have a single
1701 # Normal (non-embedded) instances should only have a single
1702 # namespace for user code execution, otherwise functions won't
1702 # namespace for user code execution, otherwise functions won't
1703 # see interactive top-level globals.
1703 # see interactive top-level globals.
1704 else:
1704 else:
1705 exec code_obj in self.user_ns
1705 exec code_obj in self.user_ns
1706 finally:
1706 finally:
1707 # Reset our crash handler in place
1707 # Reset our crash handler in place
1708 sys.excepthook = old_excepthook
1708 sys.excepthook = old_excepthook
1709 except SystemExit:
1709 except SystemExit:
1710 self.resetbuffer()
1710 self.resetbuffer()
1711 self.showtraceback()
1711 self.showtraceback()
1712 warn("Type exit or quit to exit IPython "
1712 warn("Type exit or quit to exit IPython "
1713 "(%Exit or %Quit do so unconditionally).",level=1)
1713 "(%Exit or %Quit do so unconditionally).",level=1)
1714 except self.custom_exceptions:
1714 except self.custom_exceptions:
1715 etype,value,tb = sys.exc_info()
1715 etype,value,tb = sys.exc_info()
1716 self.CustomTB(etype,value,tb)
1716 self.CustomTB(etype,value,tb)
1717 except:
1717 except:
1718 self.showtraceback()
1718 self.showtraceback()
1719 else:
1719 else:
1720 outflag = 0
1720 outflag = 0
1721 if softspace(sys.stdout, 0):
1721 if softspace(sys.stdout, 0):
1722 print
1722 print
1723 # Flush out code object which has been run (and source)
1723 # Flush out code object which has been run (and source)
1724 self.code_to_run = None
1724 self.code_to_run = None
1725 return outflag
1725 return outflag
1726
1726
1727 def push(self, line):
1727 def push(self, line):
1728 """Push a line to the interpreter.
1728 """Push a line to the interpreter.
1729
1729
1730 The line should not have a trailing newline; it may have
1730 The line should not have a trailing newline; it may have
1731 internal newlines. The line is appended to a buffer and the
1731 internal newlines. The line is appended to a buffer and the
1732 interpreter's runsource() method is called with the
1732 interpreter's runsource() method is called with the
1733 concatenated contents of the buffer as source. If this
1733 concatenated contents of the buffer as source. If this
1734 indicates that the command was executed or invalid, the buffer
1734 indicates that the command was executed or invalid, the buffer
1735 is reset; otherwise, the command is incomplete, and the buffer
1735 is reset; otherwise, the command is incomplete, and the buffer
1736 is left as it was after the line was appended. The return
1736 is left as it was after the line was appended. The return
1737 value is 1 if more input is required, 0 if the line was dealt
1737 value is 1 if more input is required, 0 if the line was dealt
1738 with in some way (this is the same as runsource()).
1738 with in some way (this is the same as runsource()).
1739 """
1739 """
1740
1740
1741 # autoindent management should be done here, and not in the
1741 # autoindent management should be done here, and not in the
1742 # interactive loop, since that one is only seen by keyboard input. We
1742 # interactive loop, since that one is only seen by keyboard input. We
1743 # need this done correctly even for code run via runlines (which uses
1743 # need this done correctly even for code run via runlines (which uses
1744 # push).
1744 # push).
1745
1745
1746 #print 'push line: <%s>' % line # dbg
1746 #print 'push line: <%s>' % line # dbg
1747 self.autoindent_update(line)
1747 self.autoindent_update(line)
1748
1748
1749 self.buffer.append(line)
1749 self.buffer.append(line)
1750 more = self.runsource('\n'.join(self.buffer), self.filename)
1750 more = self.runsource('\n'.join(self.buffer), self.filename)
1751 if not more:
1751 if not more:
1752 self.resetbuffer()
1752 self.resetbuffer()
1753 return more
1753 return more
1754
1754
1755 def resetbuffer(self):
1755 def resetbuffer(self):
1756 """Reset the input buffer."""
1756 """Reset the input buffer."""
1757 self.buffer[:] = []
1757 self.buffer[:] = []
1758
1758
1759 def raw_input(self,prompt='',continue_prompt=False):
1759 def raw_input(self,prompt='',continue_prompt=False):
1760 """Write a prompt and read a line.
1760 """Write a prompt and read a line.
1761
1761
1762 The returned line does not include the trailing newline.
1762 The returned line does not include the trailing newline.
1763 When the user enters the EOF key sequence, EOFError is raised.
1763 When the user enters the EOF key sequence, EOFError is raised.
1764
1764
1765 Optional inputs:
1765 Optional inputs:
1766
1766
1767 - prompt(''): a string to be printed to prompt the user.
1767 - prompt(''): a string to be printed to prompt the user.
1768
1768
1769 - continue_prompt(False): whether this line is the first one or a
1769 - continue_prompt(False): whether this line is the first one or a
1770 continuation in a sequence of inputs.
1770 continuation in a sequence of inputs.
1771 """
1771 """
1772
1772
1773 line = raw_input_original(prompt)
1773 line = raw_input_original(prompt)
1774
1774
1775 # Try to be reasonably smart about not re-indenting pasted input more
1775 # Try to be reasonably smart about not re-indenting pasted input more
1776 # than necessary. We do this by trimming out the auto-indent initial
1776 # than necessary. We do this by trimming out the auto-indent initial
1777 # spaces, if the user's actual input started itself with whitespace.
1777 # spaces, if the user's actual input started itself with whitespace.
1778 #debugx('self.buffer[-1]')
1778 #debugx('self.buffer[-1]')
1779
1779
1780 if self.autoindent:
1780 if self.autoindent:
1781 if num_ini_spaces(line) > self.indent_current_nsp:
1781 if num_ini_spaces(line) > self.indent_current_nsp:
1782 line = line[self.indent_current_nsp:]
1782 line = line[self.indent_current_nsp:]
1783 self.indent_current_nsp = 0
1783 self.indent_current_nsp = 0
1784
1784
1785 # store the unfiltered input before the user has any chance to modify
1785 # store the unfiltered input before the user has any chance to modify
1786 # it.
1786 # it.
1787 if line.strip():
1787 if line.strip():
1788 if continue_prompt:
1788 if continue_prompt:
1789 self.input_hist_raw[-1] += '%s\n' % line
1789 self.input_hist_raw[-1] += '%s\n' % line
1790 else:
1790 else:
1791 self.input_hist_raw.append('%s\n' % line)
1791 self.input_hist_raw.append('%s\n' % line)
1792
1792
1793 lineout = self.prefilter(line,continue_prompt)
1793 lineout = self.prefilter(line,continue_prompt)
1794 return lineout
1794 return lineout
1795
1795
1796 def split_user_input(self,line):
1796 def split_user_input(self,line):
1797 """Split user input into pre-char, function part and rest."""
1797 """Split user input into pre-char, function part and rest."""
1798
1798
1799 lsplit = self.line_split.match(line)
1799 lsplit = self.line_split.match(line)
1800 if lsplit is None: # no regexp match returns None
1800 if lsplit is None: # no regexp match returns None
1801 try:
1801 try:
1802 iFun,theRest = line.split(None,1)
1802 iFun,theRest = line.split(None,1)
1803 except ValueError:
1803 except ValueError:
1804 iFun,theRest = line,''
1804 iFun,theRest = line,''
1805 pre = re.match('^(\s*)(.*)',line).groups()[0]
1805 pre = re.match('^(\s*)(.*)',line).groups()[0]
1806 else:
1806 else:
1807 pre,iFun,theRest = lsplit.groups()
1807 pre,iFun,theRest = lsplit.groups()
1808
1808
1809 #print 'line:<%s>' % line # dbg
1809 #print 'line:<%s>' % line # dbg
1810 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1810 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1811 return pre,iFun.strip(),theRest
1811 return pre,iFun.strip(),theRest
1812
1812
1813 def _prefilter(self, line, continue_prompt):
1813 def _prefilter(self, line, continue_prompt):
1814 """Calls different preprocessors, depending on the form of line."""
1814 """Calls different preprocessors, depending on the form of line."""
1815
1815
1816 # All handlers *must* return a value, even if it's blank ('').
1816 # All handlers *must* return a value, even if it's blank ('').
1817
1817
1818 # Lines are NOT logged here. Handlers should process the line as
1818 # Lines are NOT logged here. Handlers should process the line as
1819 # needed, update the cache AND log it (so that the input cache array
1819 # needed, update the cache AND log it (so that the input cache array
1820 # stays synced).
1820 # stays synced).
1821
1821
1822 # This function is _very_ delicate, and since it's also the one which
1822 # This function is _very_ delicate, and since it's also the one which
1823 # determines IPython's response to user input, it must be as efficient
1823 # determines IPython's response to user input, it must be as efficient
1824 # as possible. For this reason it has _many_ returns in it, trying
1824 # as possible. For this reason it has _many_ returns in it, trying
1825 # always to exit as quickly as it can figure out what it needs to do.
1825 # always to exit as quickly as it can figure out what it needs to do.
1826
1826
1827 # This function is the main responsible for maintaining IPython's
1827 # This function is the main responsible for maintaining IPython's
1828 # behavior respectful of Python's semantics. So be _very_ careful if
1828 # behavior respectful of Python's semantics. So be _very_ careful if
1829 # making changes to anything here.
1829 # making changes to anything here.
1830
1830
1831 #.....................................................................
1831 #.....................................................................
1832 # Code begins
1832 # Code begins
1833
1833
1834 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1834 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1835
1835
1836 # save the line away in case we crash, so the post-mortem handler can
1836 # save the line away in case we crash, so the post-mortem handler can
1837 # record it
1837 # record it
1838 self._last_input_line = line
1838 self._last_input_line = line
1839
1839
1840 #print '***line: <%s>' % line # dbg
1840 #print '***line: <%s>' % line # dbg
1841
1841
1842 # the input history needs to track even empty lines
1842 # the input history needs to track even empty lines
1843 stripped = line.strip()
1843 stripped = line.strip()
1844
1844
1845 if not stripped:
1845 if not stripped:
1846 if not continue_prompt:
1846 if not continue_prompt:
1847 self.outputcache.prompt_count -= 1
1847 self.outputcache.prompt_count -= 1
1848 return self.handle_normal(line,continue_prompt)
1848 return self.handle_normal(line,continue_prompt)
1849 #return self.handle_normal('',continue_prompt)
1849 #return self.handle_normal('',continue_prompt)
1850
1850
1851 # print '***cont',continue_prompt # dbg
1851 # print '***cont',continue_prompt # dbg
1852 # special handlers are only allowed for single line statements
1852 # special handlers are only allowed for single line statements
1853 if continue_prompt and not self.rc.multi_line_specials:
1853 if continue_prompt and not self.rc.multi_line_specials:
1854 return self.handle_normal(line,continue_prompt)
1854 return self.handle_normal(line,continue_prompt)
1855
1855
1856
1856
1857 # For the rest, we need the structure of the input
1857 # For the rest, we need the structure of the input
1858 pre,iFun,theRest = self.split_user_input(line)
1858 pre,iFun,theRest = self.split_user_input(line)
1859
1859
1860 # See whether any pre-existing handler can take care of it
1860 # See whether any pre-existing handler can take care of it
1861
1861
1862 rewritten = self.hooks.input_prefilter(stripped)
1862 rewritten = self.hooks.input_prefilter(stripped)
1863 if rewritten != stripped: # ok, some prefilter did something
1863 if rewritten != stripped: # ok, some prefilter did something
1864 rewritten = pre + rewritten # add indentation
1864 rewritten = pre + rewritten # add indentation
1865 return self.handle_normal(rewritten)
1865 return self.handle_normal(rewritten)
1866
1866
1867
1867
1868
1868
1869
1869
1870 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1870 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1871
1871
1872 # First check for explicit escapes in the last/first character
1872 # First check for explicit escapes in the last/first character
1873 handler = None
1873 handler = None
1874 if line[-1] == self.ESC_HELP:
1874 if line[-1] == self.ESC_HELP:
1875 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1875 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1876 if handler is None:
1876 if handler is None:
1877 # look at the first character of iFun, NOT of line, so we skip
1877 # look at the first character of iFun, NOT of line, so we skip
1878 # leading whitespace in multiline input
1878 # leading whitespace in multiline input
1879 handler = self.esc_handlers.get(iFun[0:1])
1879 handler = self.esc_handlers.get(iFun[0:1])
1880 if handler is not None:
1880 if handler is not None:
1881 return handler(line,continue_prompt,pre,iFun,theRest)
1881 return handler(line,continue_prompt,pre,iFun,theRest)
1882 # Emacs ipython-mode tags certain input lines
1882 # Emacs ipython-mode tags certain input lines
1883 if line.endswith('# PYTHON-MODE'):
1883 if line.endswith('# PYTHON-MODE'):
1884 return self.handle_emacs(line,continue_prompt)
1884 return self.handle_emacs(line,continue_prompt)
1885
1885
1886 # Next, check if we can automatically execute this thing
1886 # Next, check if we can automatically execute this thing
1887
1887
1888 # Allow ! in multi-line statements if multi_line_specials is on:
1888 # Allow ! in multi-line statements if multi_line_specials is on:
1889 if continue_prompt and self.rc.multi_line_specials and \
1889 if continue_prompt and self.rc.multi_line_specials and \
1890 iFun.startswith(self.ESC_SHELL):
1890 iFun.startswith(self.ESC_SHELL):
1891 return self.handle_shell_escape(line,continue_prompt,
1891 return self.handle_shell_escape(line,continue_prompt,
1892 pre=pre,iFun=iFun,
1892 pre=pre,iFun=iFun,
1893 theRest=theRest)
1893 theRest=theRest)
1894
1894
1895 # Let's try to find if the input line is a magic fn
1895 # Let's try to find if the input line is a magic fn
1896 oinfo = None
1896 oinfo = None
1897 if hasattr(self,'magic_'+iFun):
1897 if hasattr(self,'magic_'+iFun):
1898 # WARNING: _ofind uses getattr(), so it can consume generators and
1898 # WARNING: _ofind uses getattr(), so it can consume generators and
1899 # cause other side effects.
1899 # cause other side effects.
1900 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1900 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1901 if oinfo['ismagic']:
1901 if oinfo['ismagic']:
1902 # Be careful not to call magics when a variable assignment is
1902 # Be careful not to call magics when a variable assignment is
1903 # being made (ls='hi', for example)
1903 # being made (ls='hi', for example)
1904 if self.rc.automagic and \
1904 if self.rc.automagic and \
1905 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1905 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1906 (self.rc.multi_line_specials or not continue_prompt):
1906 (self.rc.multi_line_specials or not continue_prompt):
1907 return self.handle_magic(line,continue_prompt,
1907 return self.handle_magic(line,continue_prompt,
1908 pre,iFun,theRest)
1908 pre,iFun,theRest)
1909 else:
1909 else:
1910 return self.handle_normal(line,continue_prompt)
1910 return self.handle_normal(line,continue_prompt)
1911
1911
1912 # If the rest of the line begins with an (in)equality, assginment or
1912 # If the rest of the line begins with an (in)equality, assginment or
1913 # function call, we should not call _ofind but simply execute it.
1913 # function call, we should not call _ofind but simply execute it.
1914 # This avoids spurious geattr() accesses on objects upon assignment.
1914 # This avoids spurious geattr() accesses on objects upon assignment.
1915 #
1915 #
1916 # It also allows users to assign to either alias or magic names true
1916 # It also allows users to assign to either alias or magic names true
1917 # python variables (the magic/alias systems always take second seat to
1917 # python variables (the magic/alias systems always take second seat to
1918 # true python code).
1918 # true python code).
1919 if theRest and theRest[0] in '!=()':
1919 if theRest and theRest[0] in '!=()':
1920 return self.handle_normal(line,continue_prompt)
1920 return self.handle_normal(line,continue_prompt)
1921
1921
1922 if oinfo is None:
1922 if oinfo is None:
1923 # let's try to ensure that _oinfo is ONLY called when autocall is
1923 # let's try to ensure that _oinfo is ONLY called when autocall is
1924 # on. Since it has inevitable potential side effects, at least
1924 # on. Since it has inevitable potential side effects, at least
1925 # having autocall off should be a guarantee to the user that no
1925 # having autocall off should be a guarantee to the user that no
1926 # weird things will happen.
1926 # weird things will happen.
1927
1927
1928 if self.rc.autocall:
1928 if self.rc.autocall:
1929 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1929 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1930 else:
1930 else:
1931 # in this case, all that's left is either an alias or
1931 # in this case, all that's left is either an alias or
1932 # processing the line normally.
1932 # processing the line normally.
1933 if iFun in self.alias_table:
1933 if iFun in self.alias_table:
1934 return self.handle_alias(line,continue_prompt,
1934 return self.handle_alias(line,continue_prompt,
1935 pre,iFun,theRest)
1935 pre,iFun,theRest)
1936
1936
1937 else:
1937 else:
1938 return self.handle_normal(line,continue_prompt)
1938 return self.handle_normal(line,continue_prompt)
1939
1939
1940 if not oinfo['found']:
1940 if not oinfo['found']:
1941 return self.handle_normal(line,continue_prompt)
1941 return self.handle_normal(line,continue_prompt)
1942 else:
1942 else:
1943 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1943 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1944 if oinfo['isalias']:
1944 if oinfo['isalias']:
1945 return self.handle_alias(line,continue_prompt,
1945 return self.handle_alias(line,continue_prompt,
1946 pre,iFun,theRest)
1946 pre,iFun,theRest)
1947
1947
1948 if (self.rc.autocall
1948 if (self.rc.autocall
1949 and
1949 and
1950 (
1950 (
1951 #only consider exclusion re if not "," or ";" autoquoting
1951 #only consider exclusion re if not "," or ";" autoquoting
1952 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1952 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1953 or pre == self.ESC_PAREN) or
1953 or pre == self.ESC_PAREN) or
1954 (not self.re_exclude_auto.match(theRest)))
1954 (not self.re_exclude_auto.match(theRest)))
1955 and
1955 and
1956 self.re_fun_name.match(iFun) and
1956 self.re_fun_name.match(iFun) and
1957 callable(oinfo['obj'])) :
1957 callable(oinfo['obj'])) :
1958 #print 'going auto' # dbg
1958 #print 'going auto' # dbg
1959 return self.handle_auto(line,continue_prompt,
1959 return self.handle_auto(line,continue_prompt,
1960 pre,iFun,theRest,oinfo['obj'])
1960 pre,iFun,theRest,oinfo['obj'])
1961 else:
1961 else:
1962 #print 'was callable?', callable(oinfo['obj']) # dbg
1962 #print 'was callable?', callable(oinfo['obj']) # dbg
1963 return self.handle_normal(line,continue_prompt)
1963 return self.handle_normal(line,continue_prompt)
1964
1964
1965 # If we get here, we have a normal Python line. Log and return.
1965 # If we get here, we have a normal Python line. Log and return.
1966 return self.handle_normal(line,continue_prompt)
1966 return self.handle_normal(line,continue_prompt)
1967
1967
1968 def _prefilter_dumb(self, line, continue_prompt):
1968 def _prefilter_dumb(self, line, continue_prompt):
1969 """simple prefilter function, for debugging"""
1969 """simple prefilter function, for debugging"""
1970 return self.handle_normal(line,continue_prompt)
1970 return self.handle_normal(line,continue_prompt)
1971
1971
1972 # Set the default prefilter() function (this can be user-overridden)
1972 # Set the default prefilter() function (this can be user-overridden)
1973 prefilter = _prefilter
1973 prefilter = _prefilter
1974
1974
1975 def handle_normal(self,line,continue_prompt=None,
1975 def handle_normal(self,line,continue_prompt=None,
1976 pre=None,iFun=None,theRest=None):
1976 pre=None,iFun=None,theRest=None):
1977 """Handle normal input lines. Use as a template for handlers."""
1977 """Handle normal input lines. Use as a template for handlers."""
1978
1978
1979 # With autoindent on, we need some way to exit the input loop, and I
1979 # With autoindent on, we need some way to exit the input loop, and I
1980 # don't want to force the user to have to backspace all the way to
1980 # don't want to force the user to have to backspace all the way to
1981 # clear the line. The rule will be in this case, that either two
1981 # clear the line. The rule will be in this case, that either two
1982 # lines of pure whitespace in a row, or a line of pure whitespace but
1982 # lines of pure whitespace in a row, or a line of pure whitespace but
1983 # of a size different to the indent level, will exit the input loop.
1983 # of a size different to the indent level, will exit the input loop.
1984
1984
1985 if (continue_prompt and self.autoindent and line.isspace() and
1985 if (continue_prompt and self.autoindent and line.isspace() and
1986 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1986 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1987 (self.buffer[-1]).isspace() )):
1987 (self.buffer[-1]).isspace() )):
1988 line = ''
1988 line = ''
1989
1989
1990 self.log(line,continue_prompt)
1990 self.log(line,continue_prompt)
1991 return line
1991 return line
1992
1992
1993 def handle_alias(self,line,continue_prompt=None,
1993 def handle_alias(self,line,continue_prompt=None,
1994 pre=None,iFun=None,theRest=None):
1994 pre=None,iFun=None,theRest=None):
1995 """Handle alias input lines. """
1995 """Handle alias input lines. """
1996
1996
1997 # pre is needed, because it carries the leading whitespace. Otherwise
1997 # pre is needed, because it carries the leading whitespace. Otherwise
1998 # aliases won't work in indented sections.
1998 # aliases won't work in indented sections.
1999 transformed = self.transform_alias(iFun, theRest)
1999 transformed = self.transform_alias(iFun, theRest)
2000 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2000 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2001 self.log(line_out,continue_prompt)
2001 self.log(line_out,continue_prompt)
2002 return line_out
2002 return line_out
2003
2003
2004 def handle_shell_escape(self, line, continue_prompt=None,
2004 def handle_shell_escape(self, line, continue_prompt=None,
2005 pre=None,iFun=None,theRest=None):
2005 pre=None,iFun=None,theRest=None):
2006 """Execute the line in a shell, empty return value"""
2006 """Execute the line in a shell, empty return value"""
2007
2007
2008 #print 'line in :', `line` # dbg
2008 #print 'line in :', `line` # dbg
2009 # Example of a special handler. Others follow a similar pattern.
2009 # Example of a special handler. Others follow a similar pattern.
2010 if line.lstrip().startswith('!!'):
2010 if line.lstrip().startswith('!!'):
2011 # rewrite iFun/theRest to properly hold the call to %sx and
2011 # rewrite iFun/theRest to properly hold the call to %sx and
2012 # the actual command to be executed, so handle_magic can work
2012 # the actual command to be executed, so handle_magic can work
2013 # correctly
2013 # correctly
2014 theRest = '%s %s' % (iFun[2:],theRest)
2014 theRest = '%s %s' % (iFun[2:],theRest)
2015 iFun = 'sx'
2015 iFun = 'sx'
2016 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2016 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2017 line.lstrip()[2:]),
2017 line.lstrip()[2:]),
2018 continue_prompt,pre,iFun,theRest)
2018 continue_prompt,pre,iFun,theRest)
2019 else:
2019 else:
2020 cmd=line.lstrip().lstrip('!')
2020 cmd=line.lstrip().lstrip('!')
2021 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2021 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2022 # update cache/log and return
2022 # update cache/log and return
2023 self.log(line_out,continue_prompt)
2023 self.log(line_out,continue_prompt)
2024 return line_out
2024 return line_out
2025
2025
2026 def handle_magic(self, line, continue_prompt=None,
2026 def handle_magic(self, line, continue_prompt=None,
2027 pre=None,iFun=None,theRest=None):
2027 pre=None,iFun=None,theRest=None):
2028 """Execute magic functions."""
2028 """Execute magic functions."""
2029
2029
2030
2030
2031 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2031 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2032 self.log(cmd,continue_prompt)
2032 self.log(cmd,continue_prompt)
2033 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2033 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2034 return cmd
2034 return cmd
2035
2035
2036 def handle_auto(self, line, continue_prompt=None,
2036 def handle_auto(self, line, continue_prompt=None,
2037 pre=None,iFun=None,theRest=None,obj=None):
2037 pre=None,iFun=None,theRest=None,obj=None):
2038 """Hande lines which can be auto-executed, quoting if requested."""
2038 """Hande lines which can be auto-executed, quoting if requested."""
2039
2039
2040 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2040 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2041
2041
2042 # This should only be active for single-line input!
2042 # This should only be active for single-line input!
2043 if continue_prompt:
2043 if continue_prompt:
2044 self.log(line,continue_prompt)
2044 self.log(line,continue_prompt)
2045 return line
2045 return line
2046
2046
2047 auto_rewrite = True
2047 auto_rewrite = True
2048
2048
2049 if pre == self.ESC_QUOTE:
2049 if pre == self.ESC_QUOTE:
2050 # Auto-quote splitting on whitespace
2050 # Auto-quote splitting on whitespace
2051 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2051 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2052 elif pre == self.ESC_QUOTE2:
2052 elif pre == self.ESC_QUOTE2:
2053 # Auto-quote whole string
2053 # Auto-quote whole string
2054 newcmd = '%s("%s")' % (iFun,theRest)
2054 newcmd = '%s("%s")' % (iFun,theRest)
2055 elif pre == self.ESC_PAREN:
2055 elif pre == self.ESC_PAREN:
2056 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2056 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2057 else:
2057 else:
2058 # Auto-paren.
2058 # Auto-paren.
2059 # We only apply it to argument-less calls if the autocall
2059 # We only apply it to argument-less calls if the autocall
2060 # parameter is set to 2. We only need to check that autocall is <
2060 # parameter is set to 2. We only need to check that autocall is <
2061 # 2, since this function isn't called unless it's at least 1.
2061 # 2, since this function isn't called unless it's at least 1.
2062 if not theRest and (self.rc.autocall < 2):
2062 if not theRest and (self.rc.autocall < 2):
2063 newcmd = '%s %s' % (iFun,theRest)
2063 newcmd = '%s %s' % (iFun,theRest)
2064 auto_rewrite = False
2064 auto_rewrite = False
2065 else:
2065 else:
2066 if theRest.startswith('['):
2066 if theRest.startswith('['):
2067 if hasattr(obj,'__getitem__'):
2067 if hasattr(obj,'__getitem__'):
2068 # Don't autocall in this case: item access for an object
2068 # Don't autocall in this case: item access for an object
2069 # which is BOTH callable and implements __getitem__.
2069 # which is BOTH callable and implements __getitem__.
2070 newcmd = '%s %s' % (iFun,theRest)
2070 newcmd = '%s %s' % (iFun,theRest)
2071 auto_rewrite = False
2071 auto_rewrite = False
2072 else:
2072 else:
2073 # if the object doesn't support [] access, go ahead and
2073 # if the object doesn't support [] access, go ahead and
2074 # autocall
2074 # autocall
2075 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2075 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2076 elif theRest.endswith(';'):
2076 elif theRest.endswith(';'):
2077 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2077 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2078 else:
2078 else:
2079 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2079 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2080
2080
2081 if auto_rewrite:
2081 if auto_rewrite:
2082 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2082 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2083 # log what is now valid Python, not the actual user input (without the
2083 # log what is now valid Python, not the actual user input (without the
2084 # final newline)
2084 # final newline)
2085 self.log(newcmd,continue_prompt)
2085 self.log(newcmd,continue_prompt)
2086 return newcmd
2086 return newcmd
2087
2087
2088 def handle_help(self, line, continue_prompt=None,
2088 def handle_help(self, line, continue_prompt=None,
2089 pre=None,iFun=None,theRest=None):
2089 pre=None,iFun=None,theRest=None):
2090 """Try to get some help for the object.
2090 """Try to get some help for the object.
2091
2091
2092 obj? or ?obj -> basic information.
2092 obj? or ?obj -> basic information.
2093 obj?? or ??obj -> more details.
2093 obj?? or ??obj -> more details.
2094 """
2094 """
2095
2095
2096 # We need to make sure that we don't process lines which would be
2096 # We need to make sure that we don't process lines which would be
2097 # otherwise valid python, such as "x=1 # what?"
2097 # otherwise valid python, such as "x=1 # what?"
2098 try:
2098 try:
2099 codeop.compile_command(line)
2099 codeop.compile_command(line)
2100 except SyntaxError:
2100 except SyntaxError:
2101 # We should only handle as help stuff which is NOT valid syntax
2101 # We should only handle as help stuff which is NOT valid syntax
2102 if line[0]==self.ESC_HELP:
2102 if line[0]==self.ESC_HELP:
2103 line = line[1:]
2103 line = line[1:]
2104 elif line[-1]==self.ESC_HELP:
2104 elif line[-1]==self.ESC_HELP:
2105 line = line[:-1]
2105 line = line[:-1]
2106 self.log('#?'+line)
2106 self.log('#?'+line)
2107 if line:
2107 if line:
2108 self.magic_pinfo(line)
2108 self.magic_pinfo(line)
2109 else:
2109 else:
2110 page(self.usage,screen_lines=self.rc.screen_length)
2110 page(self.usage,screen_lines=self.rc.screen_length)
2111 return '' # Empty string is needed here!
2111 return '' # Empty string is needed here!
2112 except:
2112 except:
2113 # Pass any other exceptions through to the normal handler
2113 # Pass any other exceptions through to the normal handler
2114 return self.handle_normal(line,continue_prompt)
2114 return self.handle_normal(line,continue_prompt)
2115 else:
2115 else:
2116 # If the code compiles ok, we should handle it normally
2116 # If the code compiles ok, we should handle it normally
2117 return self.handle_normal(line,continue_prompt)
2117 return self.handle_normal(line,continue_prompt)
2118
2118
2119 def getapi(self):
2119 def getapi(self):
2120 """ Get an IPApi object for this shell instance
2120 """ Get an IPApi object for this shell instance
2121
2121
2122 Getting an IPApi object is always preferable to accessing the shell
2122 Getting an IPApi object is always preferable to accessing the shell
2123 directly, but this holds true especially for extensions.
2123 directly, but this holds true especially for extensions.
2124
2124
2125 It should always be possible to implement an extension with IPApi
2125 It should always be possible to implement an extension with IPApi
2126 alone. If not, contact maintainer to request an addition.
2126 alone. If not, contact maintainer to request an addition.
2127
2127
2128 """
2128 """
2129 return self.api
2129 return self.api
2130
2130
2131 def handle_emacs(self,line,continue_prompt=None,
2131 def handle_emacs(self,line,continue_prompt=None,
2132 pre=None,iFun=None,theRest=None):
2132 pre=None,iFun=None,theRest=None):
2133 """Handle input lines marked by python-mode."""
2133 """Handle input lines marked by python-mode."""
2134
2134
2135 # Currently, nothing is done. Later more functionality can be added
2135 # Currently, nothing is done. Later more functionality can be added
2136 # here if needed.
2136 # here if needed.
2137
2137
2138 # The input cache shouldn't be updated
2138 # The input cache shouldn't be updated
2139
2139
2140 return line
2140 return line
2141
2141
2142 def mktempfile(self,data=None):
2142 def mktempfile(self,data=None):
2143 """Make a new tempfile and return its filename.
2143 """Make a new tempfile and return its filename.
2144
2144
2145 This makes a call to tempfile.mktemp, but it registers the created
2145 This makes a call to tempfile.mktemp, but it registers the created
2146 filename internally so ipython cleans it up at exit time.
2146 filename internally so ipython cleans it up at exit time.
2147
2147
2148 Optional inputs:
2148 Optional inputs:
2149
2149
2150 - data(None): if data is given, it gets written out to the temp file
2150 - data(None): if data is given, it gets written out to the temp file
2151 immediately, and the file is closed again."""
2151 immediately, and the file is closed again."""
2152
2152
2153 filename = tempfile.mktemp('.py','ipython_edit_')
2153 filename = tempfile.mktemp('.py','ipython_edit_')
2154 self.tempfiles.append(filename)
2154 self.tempfiles.append(filename)
2155
2155
2156 if data:
2156 if data:
2157 tmp_file = open(filename,'w')
2157 tmp_file = open(filename,'w')
2158 tmp_file.write(data)
2158 tmp_file.write(data)
2159 tmp_file.close()
2159 tmp_file.close()
2160 return filename
2160 return filename
2161
2161
2162 def write(self,data):
2162 def write(self,data):
2163 """Write a string to the default output"""
2163 """Write a string to the default output"""
2164 Term.cout.write(data)
2164 Term.cout.write(data)
2165
2165
2166 def write_err(self,data):
2166 def write_err(self,data):
2167 """Write a string to the default error output"""
2167 """Write a string to the default error output"""
2168 Term.cerr.write(data)
2168 Term.cerr.write(data)
2169
2169
2170 def exit(self):
2170 def exit(self):
2171 """Handle interactive exit.
2171 """Handle interactive exit.
2172
2172
2173 This method sets the exit_now attribute."""
2173 This method sets the exit_now attribute."""
2174
2174
2175 if self.rc.confirm_exit:
2175 if self.rc.confirm_exit:
2176 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2176 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2177 self.exit_now = True
2177 self.exit_now = True
2178 else:
2178 else:
2179 self.exit_now = True
2179 self.exit_now = True
2180 return self.exit_now
2180 return self.exit_now
2181
2181
2182 def safe_execfile(self,fname,*where,**kw):
2182 def safe_execfile(self,fname,*where,**kw):
2183 fname = os.path.expanduser(fname)
2183 fname = os.path.expanduser(fname)
2184
2184
2185 # find things also in current directory
2185 # find things also in current directory
2186 dname = os.path.dirname(fname)
2186 dname = os.path.dirname(fname)
2187 if not sys.path.count(dname):
2187 if not sys.path.count(dname):
2188 sys.path.append(dname)
2188 sys.path.append(dname)
2189
2189
2190 try:
2190 try:
2191 xfile = open(fname)
2191 xfile = open(fname)
2192 except:
2192 except:
2193 print >> Term.cerr, \
2193 print >> Term.cerr, \
2194 'Could not open file <%s> for safe execution.' % fname
2194 'Could not open file <%s> for safe execution.' % fname
2195 return None
2195 return None
2196
2196
2197 kw.setdefault('islog',0)
2197 kw.setdefault('islog',0)
2198 kw.setdefault('quiet',1)
2198 kw.setdefault('quiet',1)
2199 kw.setdefault('exit_ignore',0)
2199 kw.setdefault('exit_ignore',0)
2200 first = xfile.readline()
2200 first = xfile.readline()
2201 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2201 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2202 xfile.close()
2202 xfile.close()
2203 # line by line execution
2203 # line by line execution
2204 if first.startswith(loghead) or kw['islog']:
2204 if first.startswith(loghead) or kw['islog']:
2205 print 'Loading log file <%s> one line at a time...' % fname
2205 print 'Loading log file <%s> one line at a time...' % fname
2206 if kw['quiet']:
2206 if kw['quiet']:
2207 stdout_save = sys.stdout
2207 stdout_save = sys.stdout
2208 sys.stdout = StringIO.StringIO()
2208 sys.stdout = StringIO.StringIO()
2209 try:
2209 try:
2210 globs,locs = where[0:2]
2210 globs,locs = where[0:2]
2211 except:
2211 except:
2212 try:
2212 try:
2213 globs = locs = where[0]
2213 globs = locs = where[0]
2214 except:
2214 except:
2215 globs = locs = globals()
2215 globs = locs = globals()
2216 badblocks = []
2216 badblocks = []
2217
2217
2218 # we also need to identify indented blocks of code when replaying
2218 # we also need to identify indented blocks of code when replaying
2219 # logs and put them together before passing them to an exec
2219 # logs and put them together before passing them to an exec
2220 # statement. This takes a bit of regexp and look-ahead work in the
2220 # statement. This takes a bit of regexp and look-ahead work in the
2221 # file. It's easiest if we swallow the whole thing in memory
2221 # file. It's easiest if we swallow the whole thing in memory
2222 # first, and manually walk through the lines list moving the
2222 # first, and manually walk through the lines list moving the
2223 # counter ourselves.
2223 # counter ourselves.
2224 indent_re = re.compile('\s+\S')
2224 indent_re = re.compile('\s+\S')
2225 xfile = open(fname)
2225 xfile = open(fname)
2226 filelines = xfile.readlines()
2226 filelines = xfile.readlines()
2227 xfile.close()
2227 xfile.close()
2228 nlines = len(filelines)
2228 nlines = len(filelines)
2229 lnum = 0
2229 lnum = 0
2230 while lnum < nlines:
2230 while lnum < nlines:
2231 line = filelines[lnum]
2231 line = filelines[lnum]
2232 lnum += 1
2232 lnum += 1
2233 # don't re-insert logger status info into cache
2233 # don't re-insert logger status info into cache
2234 if line.startswith('#log#'):
2234 if line.startswith('#log#'):
2235 continue
2235 continue
2236 else:
2236 else:
2237 # build a block of code (maybe a single line) for execution
2237 # build a block of code (maybe a single line) for execution
2238 block = line
2238 block = line
2239 try:
2239 try:
2240 next = filelines[lnum] # lnum has already incremented
2240 next = filelines[lnum] # lnum has already incremented
2241 except:
2241 except:
2242 next = None
2242 next = None
2243 while next and indent_re.match(next):
2243 while next and indent_re.match(next):
2244 block += next
2244 block += next
2245 lnum += 1
2245 lnum += 1
2246 try:
2246 try:
2247 next = filelines[lnum]
2247 next = filelines[lnum]
2248 except:
2248 except:
2249 next = None
2249 next = None
2250 # now execute the block of one or more lines
2250 # now execute the block of one or more lines
2251 try:
2251 try:
2252 exec block in globs,locs
2252 exec block in globs,locs
2253 except SystemExit:
2253 except SystemExit:
2254 pass
2254 pass
2255 except:
2255 except:
2256 badblocks.append(block.rstrip())
2256 badblocks.append(block.rstrip())
2257 if kw['quiet']: # restore stdout
2257 if kw['quiet']: # restore stdout
2258 sys.stdout.close()
2258 sys.stdout.close()
2259 sys.stdout = stdout_save
2259 sys.stdout = stdout_save
2260 print 'Finished replaying log file <%s>' % fname
2260 print 'Finished replaying log file <%s>' % fname
2261 if badblocks:
2261 if badblocks:
2262 print >> sys.stderr, ('\nThe following lines/blocks in file '
2262 print >> sys.stderr, ('\nThe following lines/blocks in file '
2263 '<%s> reported errors:' % fname)
2263 '<%s> reported errors:' % fname)
2264
2264
2265 for badline in badblocks:
2265 for badline in badblocks:
2266 print >> sys.stderr, badline
2266 print >> sys.stderr, badline
2267 else: # regular file execution
2267 else: # regular file execution
2268 try:
2268 try:
2269 execfile(fname,*where)
2269 execfile(fname,*where)
2270 except SyntaxError:
2270 except SyntaxError:
2271 self.showsyntaxerror()
2271 self.showsyntaxerror()
2272 warn('Failure executing file: <%s>' % fname)
2272 warn('Failure executing file: <%s>' % fname)
2273 except SystemExit,status:
2273 except SystemExit,status:
2274 if not kw['exit_ignore']:
2274 if not kw['exit_ignore']:
2275 self.showtraceback()
2275 self.showtraceback()
2276 warn('Failure executing file: <%s>' % fname)
2276 warn('Failure executing file: <%s>' % fname)
2277 except:
2277 except:
2278 self.showtraceback()
2278 self.showtraceback()
2279 warn('Failure executing file: <%s>' % fname)
2279 warn('Failure executing file: <%s>' % fname)
2280
2280
2281 #************************* end of file <iplib.py> *****************************
2281 #************************* end of file <iplib.py> *****************************
@@ -1,5294 +1,5299 b''
1 2006-03-28 Ville Vainio <vivainio@gmail.com>
1 2006-03-28 Ville Vainio <vivainio@gmail.com>
2
2
3 * iplib.py: Fix quoting of aliases so that only argless ones
4 are quoted
5
6 2006-03-28 Ville Vainio <vivainio@gmail.com>
7
3 * iplib.py: Quote aliases with spaces in the name.
8 * iplib.py: Quote aliases with spaces in the name.
4 "c:\program files\blah\bin" is now legal alias target.
9 "c:\program files\blah\bin" is now legal alias target.
5
10
6 * ext_rehashdir.py: Space no longer allowed as arg
11 * ext_rehashdir.py: Space no longer allowed as arg
7 separator, since space is legal in path names.
12 separator, since space is legal in path names.
8
13
9 2006-03-16 Ville Vainio <vivainio@gmail.com>
14 2006-03-16 Ville Vainio <vivainio@gmail.com>
10
15
11 * upgrade_dir.py: Take path.py from Extensions, correcting
16 * upgrade_dir.py: Take path.py from Extensions, correcting
12 %upgrade magic
17 %upgrade magic
13
18
14 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
19 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
15
20
16 * hooks.py: Only enclose editor binary in quotes if legal and
21 * hooks.py: Only enclose editor binary in quotes if legal and
17 necessary (space in the name, and is an existing file). Fixes a bug
22 necessary (space in the name, and is an existing file). Fixes a bug
18 reported by Zachary Pincus.
23 reported by Zachary Pincus.
19
24
20 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
25 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
21
26
22 * Manual: thanks to a tip on proper color handling for Emacs, by
27 * Manual: thanks to a tip on proper color handling for Emacs, by
23 Eric J Haywiser <ejh1-AT-MIT.EDU>.
28 Eric J Haywiser <ejh1-AT-MIT.EDU>.
24
29
25 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
30 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
26 by applying the provided patch. Thanks to Liu Jin
31 by applying the provided patch. Thanks to Liu Jin
27 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
32 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
28 XEmacs/Linux, I'm trusting the submitter that it actually helps
33 XEmacs/Linux, I'm trusting the submitter that it actually helps
29 under win32/GNU Emacs. Will revisit if any problems are reported.
34 under win32/GNU Emacs. Will revisit if any problems are reported.
30
35
31 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
36 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
32
37
33 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
38 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
34 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
39 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
35
40
36 2006-03-12 Ville Vainio <vivainio@gmail.com>
41 2006-03-12 Ville Vainio <vivainio@gmail.com>
37
42
38 * Magic.py (magic_timeit): Added %timeit magic, contributed by
43 * Magic.py (magic_timeit): Added %timeit magic, contributed by
39 Torsten Marek.
44 Torsten Marek.
40
45
41 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
46 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
42
47
43 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
48 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
44 line ranges works again.
49 line ranges works again.
45
50
46 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
51 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
47
52
48 * IPython/iplib.py (showtraceback): add back sys.last_traceback
53 * IPython/iplib.py (showtraceback): add back sys.last_traceback
49 and friends, after a discussion with Zach Pincus on ipython-user.
54 and friends, after a discussion with Zach Pincus on ipython-user.
50 I'm not 100% sure, but after thinking aobut it quite a bit, it may
55 I'm not 100% sure, but after thinking aobut it quite a bit, it may
51 be OK. Testing with the multithreaded shells didn't reveal any
56 be OK. Testing with the multithreaded shells didn't reveal any
52 problems, but let's keep an eye out.
57 problems, but let's keep an eye out.
53
58
54 In the process, I fixed a few things which were calling
59 In the process, I fixed a few things which were calling
55 self.InteractiveTB() directly (like safe_execfile), which is a
60 self.InteractiveTB() directly (like safe_execfile), which is a
56 mistake: ALL exception reporting should be done by calling
61 mistake: ALL exception reporting should be done by calling
57 self.showtraceback(), which handles state and tab-completion and
62 self.showtraceback(), which handles state and tab-completion and
58 more.
63 more.
59
64
60 2006-03-01 Ville Vainio <vivainio@gmail.com>
65 2006-03-01 Ville Vainio <vivainio@gmail.com>
61
66
62 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
67 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
63 To use, do "from ipipe import *".
68 To use, do "from ipipe import *".
64
69
65 2006-02-24 Ville Vainio <vivainio@gmail.com>
70 2006-02-24 Ville Vainio <vivainio@gmail.com>
66
71
67 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
72 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
68 "cleanly" and safely than the older upgrade mechanism.
73 "cleanly" and safely than the older upgrade mechanism.
69
74
70 2006-02-21 Ville Vainio <vivainio@gmail.com>
75 2006-02-21 Ville Vainio <vivainio@gmail.com>
71
76
72 * Magic.py: %save works again.
77 * Magic.py: %save works again.
73
78
74 2006-02-15 Ville Vainio <vivainio@gmail.com>
79 2006-02-15 Ville Vainio <vivainio@gmail.com>
75
80
76 * Magic.py: %Pprint works again
81 * Magic.py: %Pprint works again
77
82
78 * Extensions/ipy_sane_defaults.py: Provide everything provided
83 * Extensions/ipy_sane_defaults.py: Provide everything provided
79 in default ipythonrc, to make it possible to have a completely empty
84 in default ipythonrc, to make it possible to have a completely empty
80 ipythonrc (and thus completely rc-file free configuration)
85 ipythonrc (and thus completely rc-file free configuration)
81
86
82
87
83 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
88 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
84
89
85 * IPython/hooks.py (editor): quote the call to the editor command,
90 * IPython/hooks.py (editor): quote the call to the editor command,
86 to allow commands with spaces in them. Problem noted by watching
91 to allow commands with spaces in them. Problem noted by watching
87 Ian Oswald's video about textpad under win32 at
92 Ian Oswald's video about textpad under win32 at
88 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
93 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
89
94
90 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
95 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
91 describing magics (we haven't used @ for a loong time).
96 describing magics (we haven't used @ for a loong time).
92
97
93 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
98 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
94 contributed by marienz to close
99 contributed by marienz to close
95 http://www.scipy.net/roundup/ipython/issue53.
100 http://www.scipy.net/roundup/ipython/issue53.
96
101
97 2006-02-10 Ville Vainio <vivainio@gmail.com>
102 2006-02-10 Ville Vainio <vivainio@gmail.com>
98
103
99 * genutils.py: getoutput now works in win32 too
104 * genutils.py: getoutput now works in win32 too
100
105
101 * completer.py: alias and magic completion only invoked
106 * completer.py: alias and magic completion only invoked
102 at the first "item" in the line, to avoid "cd %store"
107 at the first "item" in the line, to avoid "cd %store"
103 nonsense.
108 nonsense.
104
109
105 2006-02-09 Ville Vainio <vivainio@gmail.com>
110 2006-02-09 Ville Vainio <vivainio@gmail.com>
106
111
107 * test/*: Added a unit testing framework (finally).
112 * test/*: Added a unit testing framework (finally).
108 '%run runtests.py' to run test_*.
113 '%run runtests.py' to run test_*.
109
114
110 * ipapi.py: Exposed runlines and set_custom_exc
115 * ipapi.py: Exposed runlines and set_custom_exc
111
116
112 2006-02-07 Ville Vainio <vivainio@gmail.com>
117 2006-02-07 Ville Vainio <vivainio@gmail.com>
113
118
114 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
119 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
115 instead use "f(1 2)" as before.
120 instead use "f(1 2)" as before.
116
121
117 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
122 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
118
123
119 * IPython/demo.py (IPythonDemo): Add new classes to the demo
124 * IPython/demo.py (IPythonDemo): Add new classes to the demo
120 facilities, for demos processed by the IPython input filter
125 facilities, for demos processed by the IPython input filter
121 (IPythonDemo), and for running a script one-line-at-a-time as a
126 (IPythonDemo), and for running a script one-line-at-a-time as a
122 demo, both for pure Python (LineDemo) and for IPython-processed
127 demo, both for pure Python (LineDemo) and for IPython-processed
123 input (IPythonLineDemo). After a request by Dave Kohel, from the
128 input (IPythonLineDemo). After a request by Dave Kohel, from the
124 SAGE team.
129 SAGE team.
125 (Demo.edit): added and edit() method to the demo objects, to edit
130 (Demo.edit): added and edit() method to the demo objects, to edit
126 the in-memory copy of the last executed block.
131 the in-memory copy of the last executed block.
127
132
128 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
133 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
129 processing to %edit, %macro and %save. These commands can now be
134 processing to %edit, %macro and %save. These commands can now be
130 invoked on the unprocessed input as it was typed by the user
135 invoked on the unprocessed input as it was typed by the user
131 (without any prefilters applied). After requests by the SAGE team
136 (without any prefilters applied). After requests by the SAGE team
132 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
137 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
133
138
134 2006-02-01 Ville Vainio <vivainio@gmail.com>
139 2006-02-01 Ville Vainio <vivainio@gmail.com>
135
140
136 * setup.py, eggsetup.py: easy_install ipython==dev works
141 * setup.py, eggsetup.py: easy_install ipython==dev works
137 correctly now (on Linux)
142 correctly now (on Linux)
138
143
139 * ipy_user_conf,ipmaker: user config changes, removed spurious
144 * ipy_user_conf,ipmaker: user config changes, removed spurious
140 warnings
145 warnings
141
146
142 * iplib: if rc.banner is string, use it as is.
147 * iplib: if rc.banner is string, use it as is.
143
148
144 * Magic: %pycat accepts a string argument and pages it's contents.
149 * Magic: %pycat accepts a string argument and pages it's contents.
145
150
146
151
147 2006-01-30 Ville Vainio <vivainio@gmail.com>
152 2006-01-30 Ville Vainio <vivainio@gmail.com>
148
153
149 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
154 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
150 Now %store and bookmarks work through PickleShare, meaning that
155 Now %store and bookmarks work through PickleShare, meaning that
151 concurrent access is possible and all ipython sessions see the
156 concurrent access is possible and all ipython sessions see the
152 same database situation all the time, instead of snapshot of
157 same database situation all the time, instead of snapshot of
153 the situation when the session was started. Hence, %bookmark
158 the situation when the session was started. Hence, %bookmark
154 results are immediately accessible from othes sessions. The database
159 results are immediately accessible from othes sessions. The database
155 is also available for use by user extensions. See:
160 is also available for use by user extensions. See:
156 http://www.python.org/pypi/pickleshare
161 http://www.python.org/pypi/pickleshare
157
162
158 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
163 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
159
164
160 * aliases can now be %store'd
165 * aliases can now be %store'd
161
166
162 * path.py move to Extensions so that pickleshare does not need
167 * path.py move to Extensions so that pickleshare does not need
163 IPython-specific import. Extensions added to pythonpath right
168 IPython-specific import. Extensions added to pythonpath right
164 at __init__.
169 at __init__.
165
170
166 * iplib.py: ipalias deprecated/redundant; aliases are converted and
171 * iplib.py: ipalias deprecated/redundant; aliases are converted and
167 called with _ip.system and the pre-transformed command string.
172 called with _ip.system and the pre-transformed command string.
168
173
169 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
174 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
170
175
171 * IPython/iplib.py (interact): Fix that we were not catching
176 * IPython/iplib.py (interact): Fix that we were not catching
172 KeyboardInterrupt exceptions properly. I'm not quite sure why the
177 KeyboardInterrupt exceptions properly. I'm not quite sure why the
173 logic here had to change, but it's fixed now.
178 logic here had to change, but it's fixed now.
174
179
175 2006-01-29 Ville Vainio <vivainio@gmail.com>
180 2006-01-29 Ville Vainio <vivainio@gmail.com>
176
181
177 * iplib.py: Try to import pyreadline on Windows.
182 * iplib.py: Try to import pyreadline on Windows.
178
183
179 2006-01-27 Ville Vainio <vivainio@gmail.com>
184 2006-01-27 Ville Vainio <vivainio@gmail.com>
180
185
181 * iplib.py: Expose ipapi as _ip in builtin namespace.
186 * iplib.py: Expose ipapi as _ip in builtin namespace.
182 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
187 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
183 and ip_set_hook (-> _ip.set_hook) redundant. % and !
188 and ip_set_hook (-> _ip.set_hook) redundant. % and !
184 syntax now produce _ip.* variant of the commands.
189 syntax now produce _ip.* variant of the commands.
185
190
186 * "_ip.options().autoedit_syntax = 2" automatically throws
191 * "_ip.options().autoedit_syntax = 2" automatically throws
187 user to editor for syntax error correction without prompting.
192 user to editor for syntax error correction without prompting.
188
193
189 2006-01-27 Ville Vainio <vivainio@gmail.com>
194 2006-01-27 Ville Vainio <vivainio@gmail.com>
190
195
191 * ipmaker.py: Give "realistic" sys.argv for scripts (without
196 * ipmaker.py: Give "realistic" sys.argv for scripts (without
192 'ipython' at argv[0]) executed through command line.
197 'ipython' at argv[0]) executed through command line.
193 NOTE: this DEPRECATES calling ipython with multiple scripts
198 NOTE: this DEPRECATES calling ipython with multiple scripts
194 ("ipython a.py b.py c.py")
199 ("ipython a.py b.py c.py")
195
200
196 * iplib.py, hooks.py: Added configurable input prefilter,
201 * iplib.py, hooks.py: Added configurable input prefilter,
197 named 'input_prefilter'. See ext_rescapture.py for example
202 named 'input_prefilter'. See ext_rescapture.py for example
198 usage.
203 usage.
199
204
200 * ext_rescapture.py, Magic.py: Better system command output capture
205 * ext_rescapture.py, Magic.py: Better system command output capture
201 through 'var = !ls' (deprecates user-visible %sc). Same notation
206 through 'var = !ls' (deprecates user-visible %sc). Same notation
202 applies for magics, 'var = %alias' assigns alias list to var.
207 applies for magics, 'var = %alias' assigns alias list to var.
203
208
204 * ipapi.py: added meta() for accessing extension-usable data store.
209 * ipapi.py: added meta() for accessing extension-usable data store.
205
210
206 * iplib.py: added InteractiveShell.getapi(). New magics should be
211 * iplib.py: added InteractiveShell.getapi(). New magics should be
207 written doing self.getapi() instead of using the shell directly.
212 written doing self.getapi() instead of using the shell directly.
208
213
209 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
214 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
210 %store foo >> ~/myfoo.txt to store variables to files (in clean
215 %store foo >> ~/myfoo.txt to store variables to files (in clean
211 textual form, not a restorable pickle).
216 textual form, not a restorable pickle).
212
217
213 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
218 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
214
219
215 * usage.py, Magic.py: added %quickref
220 * usage.py, Magic.py: added %quickref
216
221
217 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
222 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
218
223
219 * GetoptErrors when invoking magics etc. with wrong args
224 * GetoptErrors when invoking magics etc. with wrong args
220 are now more helpful:
225 are now more helpful:
221 GetoptError: option -l not recognized (allowed: "qb" )
226 GetoptError: option -l not recognized (allowed: "qb" )
222
227
223 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
228 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
224
229
225 * IPython/demo.py (Demo.show): Flush stdout after each block, so
230 * IPython/demo.py (Demo.show): Flush stdout after each block, so
226 computationally intensive blocks don't appear to stall the demo.
231 computationally intensive blocks don't appear to stall the demo.
227
232
228 2006-01-24 Ville Vainio <vivainio@gmail.com>
233 2006-01-24 Ville Vainio <vivainio@gmail.com>
229
234
230 * iplib.py, hooks.py: 'result_display' hook can return a non-None
235 * iplib.py, hooks.py: 'result_display' hook can return a non-None
231 value to manipulate resulting history entry.
236 value to manipulate resulting history entry.
232
237
233 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
238 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
234 to instance methods of IPApi class, to make extending an embedded
239 to instance methods of IPApi class, to make extending an embedded
235 IPython feasible. See ext_rehashdir.py for example usage.
240 IPython feasible. See ext_rehashdir.py for example usage.
236
241
237 * Merged 1071-1076 from banches/0.7.1
242 * Merged 1071-1076 from banches/0.7.1
238
243
239
244
240 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
245 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
241
246
242 * tools/release (daystamp): Fix build tools to use the new
247 * tools/release (daystamp): Fix build tools to use the new
243 eggsetup.py script to build lightweight eggs.
248 eggsetup.py script to build lightweight eggs.
244
249
245 * Applied changesets 1062 and 1064 before 0.7.1 release.
250 * Applied changesets 1062 and 1064 before 0.7.1 release.
246
251
247 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
252 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
248 see the raw input history (without conversions like %ls ->
253 see the raw input history (without conversions like %ls ->
249 ipmagic("ls")). After a request from W. Stein, SAGE
254 ipmagic("ls")). After a request from W. Stein, SAGE
250 (http://modular.ucsd.edu/sage) developer. This information is
255 (http://modular.ucsd.edu/sage) developer. This information is
251 stored in the input_hist_raw attribute of the IPython instance, so
256 stored in the input_hist_raw attribute of the IPython instance, so
252 developers can access it if needed (it's an InputList instance).
257 developers can access it if needed (it's an InputList instance).
253
258
254 * Versionstring = 0.7.2.svn
259 * Versionstring = 0.7.2.svn
255
260
256 * eggsetup.py: A separate script for constructing eggs, creates
261 * eggsetup.py: A separate script for constructing eggs, creates
257 proper launch scripts even on Windows (an .exe file in
262 proper launch scripts even on Windows (an .exe file in
258 \python24\scripts).
263 \python24\scripts).
259
264
260 * ipapi.py: launch_new_instance, launch entry point needed for the
265 * ipapi.py: launch_new_instance, launch entry point needed for the
261 egg.
266 egg.
262
267
263 2006-01-23 Ville Vainio <vivainio@gmail.com>
268 2006-01-23 Ville Vainio <vivainio@gmail.com>
264
269
265 * Added %cpaste magic for pasting python code
270 * Added %cpaste magic for pasting python code
266
271
267 2006-01-22 Ville Vainio <vivainio@gmail.com>
272 2006-01-22 Ville Vainio <vivainio@gmail.com>
268
273
269 * Merge from branches/0.7.1 into trunk, revs 1052-1057
274 * Merge from branches/0.7.1 into trunk, revs 1052-1057
270
275
271 * Versionstring = 0.7.2.svn
276 * Versionstring = 0.7.2.svn
272
277
273 * eggsetup.py: A separate script for constructing eggs, creates
278 * eggsetup.py: A separate script for constructing eggs, creates
274 proper launch scripts even on Windows (an .exe file in
279 proper launch scripts even on Windows (an .exe file in
275 \python24\scripts).
280 \python24\scripts).
276
281
277 * ipapi.py: launch_new_instance, launch entry point needed for the
282 * ipapi.py: launch_new_instance, launch entry point needed for the
278 egg.
283 egg.
279
284
280 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
285 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
281
286
282 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
287 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
283 %pfile foo would print the file for foo even if it was a binary.
288 %pfile foo would print the file for foo even if it was a binary.
284 Now, extensions '.so' and '.dll' are skipped.
289 Now, extensions '.so' and '.dll' are skipped.
285
290
286 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
291 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
287 bug, where macros would fail in all threaded modes. I'm not 100%
292 bug, where macros would fail in all threaded modes. I'm not 100%
288 sure, so I'm going to put out an rc instead of making a release
293 sure, so I'm going to put out an rc instead of making a release
289 today, and wait for feedback for at least a few days.
294 today, and wait for feedback for at least a few days.
290
295
291 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
296 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
292 it...) the handling of pasting external code with autoindent on.
297 it...) the handling of pasting external code with autoindent on.
293 To get out of a multiline input, the rule will appear for most
298 To get out of a multiline input, the rule will appear for most
294 users unchanged: two blank lines or change the indent level
299 users unchanged: two blank lines or change the indent level
295 proposed by IPython. But there is a twist now: you can
300 proposed by IPython. But there is a twist now: you can
296 add/subtract only *one or two spaces*. If you add/subtract three
301 add/subtract only *one or two spaces*. If you add/subtract three
297 or more (unless you completely delete the line), IPython will
302 or more (unless you completely delete the line), IPython will
298 accept that line, and you'll need to enter a second one of pure
303 accept that line, and you'll need to enter a second one of pure
299 whitespace. I know it sounds complicated, but I can't find a
304 whitespace. I know it sounds complicated, but I can't find a
300 different solution that covers all the cases, with the right
305 different solution that covers all the cases, with the right
301 heuristics. Hopefully in actual use, nobody will really notice
306 heuristics. Hopefully in actual use, nobody will really notice
302 all these strange rules and things will 'just work'.
307 all these strange rules and things will 'just work'.
303
308
304 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
309 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
305
310
306 * IPython/iplib.py (interact): catch exceptions which can be
311 * IPython/iplib.py (interact): catch exceptions which can be
307 triggered asynchronously by signal handlers. Thanks to an
312 triggered asynchronously by signal handlers. Thanks to an
308 automatic crash report, submitted by Colin Kingsley
313 automatic crash report, submitted by Colin Kingsley
309 <tercel-AT-gentoo.org>.
314 <tercel-AT-gentoo.org>.
310
315
311 2006-01-20 Ville Vainio <vivainio@gmail.com>
316 2006-01-20 Ville Vainio <vivainio@gmail.com>
312
317
313 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
318 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
314 (%rehashdir, very useful, try it out) of how to extend ipython
319 (%rehashdir, very useful, try it out) of how to extend ipython
315 with new magics. Also added Extensions dir to pythonpath to make
320 with new magics. Also added Extensions dir to pythonpath to make
316 importing extensions easy.
321 importing extensions easy.
317
322
318 * %store now complains when trying to store interactively declared
323 * %store now complains when trying to store interactively declared
319 classes / instances of those classes.
324 classes / instances of those classes.
320
325
321 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
326 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
322 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
327 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
323 if they exist, and ipy_user_conf.py with some defaults is created for
328 if they exist, and ipy_user_conf.py with some defaults is created for
324 the user.
329 the user.
325
330
326 * Startup rehashing done by the config file, not InterpreterExec.
331 * Startup rehashing done by the config file, not InterpreterExec.
327 This means system commands are available even without selecting the
332 This means system commands are available even without selecting the
328 pysh profile. It's the sensible default after all.
333 pysh profile. It's the sensible default after all.
329
334
330 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
335 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
331
336
332 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
337 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
333 multiline code with autoindent on working. But I am really not
338 multiline code with autoindent on working. But I am really not
334 sure, so this needs more testing. Will commit a debug-enabled
339 sure, so this needs more testing. Will commit a debug-enabled
335 version for now, while I test it some more, so that Ville and
340 version for now, while I test it some more, so that Ville and
336 others may also catch any problems. Also made
341 others may also catch any problems. Also made
337 self.indent_current_str() a method, to ensure that there's no
342 self.indent_current_str() a method, to ensure that there's no
338 chance of the indent space count and the corresponding string
343 chance of the indent space count and the corresponding string
339 falling out of sync. All code needing the string should just call
344 falling out of sync. All code needing the string should just call
340 the method.
345 the method.
341
346
342 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
347 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
343
348
344 * IPython/Magic.py (magic_edit): fix check for when users don't
349 * IPython/Magic.py (magic_edit): fix check for when users don't
345 save their output files, the try/except was in the wrong section.
350 save their output files, the try/except was in the wrong section.
346
351
347 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
352 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
348
353
349 * IPython/Magic.py (magic_run): fix __file__ global missing from
354 * IPython/Magic.py (magic_run): fix __file__ global missing from
350 script's namespace when executed via %run. After a report by
355 script's namespace when executed via %run. After a report by
351 Vivian.
356 Vivian.
352
357
353 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
358 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
354 when using python 2.4. The parent constructor changed in 2.4, and
359 when using python 2.4. The parent constructor changed in 2.4, and
355 we need to track it directly (we can't call it, as it messes up
360 we need to track it directly (we can't call it, as it messes up
356 readline and tab-completion inside our pdb would stop working).
361 readline and tab-completion inside our pdb would stop working).
357 After a bug report by R. Bernstein <rocky-AT-panix.com>.
362 After a bug report by R. Bernstein <rocky-AT-panix.com>.
358
363
359 2006-01-16 Ville Vainio <vivainio@gmail.com>
364 2006-01-16 Ville Vainio <vivainio@gmail.com>
360
365
361 * Ipython/magic.py:Reverted back to old %edit functionality
366 * Ipython/magic.py:Reverted back to old %edit functionality
362 that returns file contents on exit.
367 that returns file contents on exit.
363
368
364 * IPython/path.py: Added Jason Orendorff's "path" module to
369 * IPython/path.py: Added Jason Orendorff's "path" module to
365 IPython tree, http://www.jorendorff.com/articles/python/path/.
370 IPython tree, http://www.jorendorff.com/articles/python/path/.
366 You can get path objects conveniently through %sc, and !!, e.g.:
371 You can get path objects conveniently through %sc, and !!, e.g.:
367 sc files=ls
372 sc files=ls
368 for p in files.paths: # or files.p
373 for p in files.paths: # or files.p
369 print p,p.mtime
374 print p,p.mtime
370
375
371 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
376 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
372 now work again without considering the exclusion regexp -
377 now work again without considering the exclusion regexp -
373 hence, things like ',foo my/path' turn to 'foo("my/path")'
378 hence, things like ',foo my/path' turn to 'foo("my/path")'
374 instead of syntax error.
379 instead of syntax error.
375
380
376
381
377 2006-01-14 Ville Vainio <vivainio@gmail.com>
382 2006-01-14 Ville Vainio <vivainio@gmail.com>
378
383
379 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
384 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
380 ipapi decorators for python 2.4 users, options() provides access to rc
385 ipapi decorators for python 2.4 users, options() provides access to rc
381 data.
386 data.
382
387
383 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
388 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
384 as path separators (even on Linux ;-). Space character after
389 as path separators (even on Linux ;-). Space character after
385 backslash (as yielded by tab completer) is still space;
390 backslash (as yielded by tab completer) is still space;
386 "%cd long\ name" works as expected.
391 "%cd long\ name" works as expected.
387
392
388 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
393 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
389 as "chain of command", with priority. API stays the same,
394 as "chain of command", with priority. API stays the same,
390 TryNext exception raised by a hook function signals that
395 TryNext exception raised by a hook function signals that
391 current hook failed and next hook should try handling it, as
396 current hook failed and next hook should try handling it, as
392 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
397 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
393 requested configurable display hook, which is now implemented.
398 requested configurable display hook, which is now implemented.
394
399
395 2006-01-13 Ville Vainio <vivainio@gmail.com>
400 2006-01-13 Ville Vainio <vivainio@gmail.com>
396
401
397 * IPython/platutils*.py: platform specific utility functions,
402 * IPython/platutils*.py: platform specific utility functions,
398 so far only set_term_title is implemented (change terminal
403 so far only set_term_title is implemented (change terminal
399 label in windowing systems). %cd now changes the title to
404 label in windowing systems). %cd now changes the title to
400 current dir.
405 current dir.
401
406
402 * IPython/Release.py: Added myself to "authors" list,
407 * IPython/Release.py: Added myself to "authors" list,
403 had to create new files.
408 had to create new files.
404
409
405 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
410 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
406 shell escape; not a known bug but had potential to be one in the
411 shell escape; not a known bug but had potential to be one in the
407 future.
412 future.
408
413
409 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
414 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
410 extension API for IPython! See the module for usage example. Fix
415 extension API for IPython! See the module for usage example. Fix
411 OInspect for docstring-less magic functions.
416 OInspect for docstring-less magic functions.
412
417
413
418
414 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
419 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
415
420
416 * IPython/iplib.py (raw_input): temporarily deactivate all
421 * IPython/iplib.py (raw_input): temporarily deactivate all
417 attempts at allowing pasting of code with autoindent on. It
422 attempts at allowing pasting of code with autoindent on. It
418 introduced bugs (reported by Prabhu) and I can't seem to find a
423 introduced bugs (reported by Prabhu) and I can't seem to find a
419 robust combination which works in all cases. Will have to revisit
424 robust combination which works in all cases. Will have to revisit
420 later.
425 later.
421
426
422 * IPython/genutils.py: remove isspace() function. We've dropped
427 * IPython/genutils.py: remove isspace() function. We've dropped
423 2.2 compatibility, so it's OK to use the string method.
428 2.2 compatibility, so it's OK to use the string method.
424
429
425 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
430 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
426
431
427 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
432 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
428 matching what NOT to autocall on, to include all python binary
433 matching what NOT to autocall on, to include all python binary
429 operators (including things like 'and', 'or', 'is' and 'in').
434 operators (including things like 'and', 'or', 'is' and 'in').
430 Prompted by a bug report on 'foo & bar', but I realized we had
435 Prompted by a bug report on 'foo & bar', but I realized we had
431 many more potential bug cases with other operators. The regexp is
436 many more potential bug cases with other operators. The regexp is
432 self.re_exclude_auto, it's fairly commented.
437 self.re_exclude_auto, it's fairly commented.
433
438
434 2006-01-12 Ville Vainio <vivainio@gmail.com>
439 2006-01-12 Ville Vainio <vivainio@gmail.com>
435
440
436 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
441 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
437 Prettified and hardened string/backslash quoting with ipsystem(),
442 Prettified and hardened string/backslash quoting with ipsystem(),
438 ipalias() and ipmagic(). Now even \ characters are passed to
443 ipalias() and ipmagic(). Now even \ characters are passed to
439 %magics, !shell escapes and aliases exactly as they are in the
444 %magics, !shell escapes and aliases exactly as they are in the
440 ipython command line. Should improve backslash experience,
445 ipython command line. Should improve backslash experience,
441 particularly in Windows (path delimiter for some commands that
446 particularly in Windows (path delimiter for some commands that
442 won't understand '/'), but Unix benefits as well (regexps). %cd
447 won't understand '/'), but Unix benefits as well (regexps). %cd
443 magic still doesn't support backslash path delimiters, though. Also
448 magic still doesn't support backslash path delimiters, though. Also
444 deleted all pretense of supporting multiline command strings in
449 deleted all pretense of supporting multiline command strings in
445 !system or %magic commands. Thanks to Jerry McRae for suggestions.
450 !system or %magic commands. Thanks to Jerry McRae for suggestions.
446
451
447 * doc/build_doc_instructions.txt added. Documentation on how to
452 * doc/build_doc_instructions.txt added. Documentation on how to
448 use doc/update_manual.py, added yesterday. Both files contributed
453 use doc/update_manual.py, added yesterday. Both files contributed
449 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
454 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
450 doc/*.sh for deprecation at a later date.
455 doc/*.sh for deprecation at a later date.
451
456
452 * /ipython.py Added ipython.py to root directory for
457 * /ipython.py Added ipython.py to root directory for
453 zero-installation (tar xzvf ipython.tgz; cd ipython; python
458 zero-installation (tar xzvf ipython.tgz; cd ipython; python
454 ipython.py) and development convenience (no need to kee doing
459 ipython.py) and development convenience (no need to kee doing
455 "setup.py install" between changes).
460 "setup.py install" between changes).
456
461
457 * Made ! and !! shell escapes work (again) in multiline expressions:
462 * Made ! and !! shell escapes work (again) in multiline expressions:
458 if 1:
463 if 1:
459 !ls
464 !ls
460 !!ls
465 !!ls
461
466
462 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
467 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
463
468
464 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
469 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
465 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
470 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
466 module in case-insensitive installation. Was causing crashes
471 module in case-insensitive installation. Was causing crashes
467 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
472 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
468
473
469 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
474 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
470 <marienz-AT-gentoo.org>, closes
475 <marienz-AT-gentoo.org>, closes
471 http://www.scipy.net/roundup/ipython/issue51.
476 http://www.scipy.net/roundup/ipython/issue51.
472
477
473 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
478 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
474
479
475 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
480 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
476 problem of excessive CPU usage under *nix and keyboard lag under
481 problem of excessive CPU usage under *nix and keyboard lag under
477 win32.
482 win32.
478
483
479 2006-01-10 *** Released version 0.7.0
484 2006-01-10 *** Released version 0.7.0
480
485
481 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
486 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
482
487
483 * IPython/Release.py (revision): tag version number to 0.7.0,
488 * IPython/Release.py (revision): tag version number to 0.7.0,
484 ready for release.
489 ready for release.
485
490
486 * IPython/Magic.py (magic_edit): Add print statement to %edit so
491 * IPython/Magic.py (magic_edit): Add print statement to %edit so
487 it informs the user of the name of the temp. file used. This can
492 it informs the user of the name of the temp. file used. This can
488 help if you decide later to reuse that same file, so you know
493 help if you decide later to reuse that same file, so you know
489 where to copy the info from.
494 where to copy the info from.
490
495
491 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
496 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
492
497
493 * setup_bdist_egg.py: little script to build an egg. Added
498 * setup_bdist_egg.py: little script to build an egg. Added
494 support in the release tools as well.
499 support in the release tools as well.
495
500
496 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
501 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
497
502
498 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
503 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
499 version selection (new -wxversion command line and ipythonrc
504 version selection (new -wxversion command line and ipythonrc
500 parameter). Patch contributed by Arnd Baecker
505 parameter). Patch contributed by Arnd Baecker
501 <arnd.baecker-AT-web.de>.
506 <arnd.baecker-AT-web.de>.
502
507
503 * IPython/iplib.py (embed_mainloop): fix tab-completion in
508 * IPython/iplib.py (embed_mainloop): fix tab-completion in
504 embedded instances, for variables defined at the interactive
509 embedded instances, for variables defined at the interactive
505 prompt of the embedded ipython. Reported by Arnd.
510 prompt of the embedded ipython. Reported by Arnd.
506
511
507 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
512 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
508 it can be used as a (stateful) toggle, or with a direct parameter.
513 it can be used as a (stateful) toggle, or with a direct parameter.
509
514
510 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
515 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
511 could be triggered in certain cases and cause the traceback
516 could be triggered in certain cases and cause the traceback
512 printer not to work.
517 printer not to work.
513
518
514 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
519 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
515
520
516 * IPython/iplib.py (_should_recompile): Small fix, closes
521 * IPython/iplib.py (_should_recompile): Small fix, closes
517 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
522 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
518
523
519 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
524 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
520
525
521 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
526 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
522 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
527 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
523 Moad for help with tracking it down.
528 Moad for help with tracking it down.
524
529
525 * IPython/iplib.py (handle_auto): fix autocall handling for
530 * IPython/iplib.py (handle_auto): fix autocall handling for
526 objects which support BOTH __getitem__ and __call__ (so that f [x]
531 objects which support BOTH __getitem__ and __call__ (so that f [x]
527 is left alone, instead of becoming f([x]) automatically).
532 is left alone, instead of becoming f([x]) automatically).
528
533
529 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
534 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
530 Ville's patch.
535 Ville's patch.
531
536
532 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
537 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
533
538
534 * IPython/iplib.py (handle_auto): changed autocall semantics to
539 * IPython/iplib.py (handle_auto): changed autocall semantics to
535 include 'smart' mode, where the autocall transformation is NOT
540 include 'smart' mode, where the autocall transformation is NOT
536 applied if there are no arguments on the line. This allows you to
541 applied if there are no arguments on the line. This allows you to
537 just type 'foo' if foo is a callable to see its internal form,
542 just type 'foo' if foo is a callable to see its internal form,
538 instead of having it called with no arguments (typically a
543 instead of having it called with no arguments (typically a
539 mistake). The old 'full' autocall still exists: for that, you
544 mistake). The old 'full' autocall still exists: for that, you
540 need to set the 'autocall' parameter to 2 in your ipythonrc file.
545 need to set the 'autocall' parameter to 2 in your ipythonrc file.
541
546
542 * IPython/completer.py (Completer.attr_matches): add
547 * IPython/completer.py (Completer.attr_matches): add
543 tab-completion support for Enthoughts' traits. After a report by
548 tab-completion support for Enthoughts' traits. After a report by
544 Arnd and a patch by Prabhu.
549 Arnd and a patch by Prabhu.
545
550
546 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
551 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
547
552
548 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
553 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
549 Schmolck's patch to fix inspect.getinnerframes().
554 Schmolck's patch to fix inspect.getinnerframes().
550
555
551 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
556 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
552 for embedded instances, regarding handling of namespaces and items
557 for embedded instances, regarding handling of namespaces and items
553 added to the __builtin__ one. Multiple embedded instances and
558 added to the __builtin__ one. Multiple embedded instances and
554 recursive embeddings should work better now (though I'm not sure
559 recursive embeddings should work better now (though I'm not sure
555 I've got all the corner cases fixed, that code is a bit of a brain
560 I've got all the corner cases fixed, that code is a bit of a brain
556 twister).
561 twister).
557
562
558 * IPython/Magic.py (magic_edit): added support to edit in-memory
563 * IPython/Magic.py (magic_edit): added support to edit in-memory
559 macros (automatically creates the necessary temp files). %edit
564 macros (automatically creates the necessary temp files). %edit
560 also doesn't return the file contents anymore, it's just noise.
565 also doesn't return the file contents anymore, it's just noise.
561
566
562 * IPython/completer.py (Completer.attr_matches): revert change to
567 * IPython/completer.py (Completer.attr_matches): revert change to
563 complete only on attributes listed in __all__. I realized it
568 complete only on attributes listed in __all__. I realized it
564 cripples the tab-completion system as a tool for exploring the
569 cripples the tab-completion system as a tool for exploring the
565 internals of unknown libraries (it renders any non-__all__
570 internals of unknown libraries (it renders any non-__all__
566 attribute off-limits). I got bit by this when trying to see
571 attribute off-limits). I got bit by this when trying to see
567 something inside the dis module.
572 something inside the dis module.
568
573
569 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
574 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
570
575
571 * IPython/iplib.py (InteractiveShell.__init__): add .meta
576 * IPython/iplib.py (InteractiveShell.__init__): add .meta
572 namespace for users and extension writers to hold data in. This
577 namespace for users and extension writers to hold data in. This
573 follows the discussion in
578 follows the discussion in
574 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
579 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
575
580
576 * IPython/completer.py (IPCompleter.complete): small patch to help
581 * IPython/completer.py (IPCompleter.complete): small patch to help
577 tab-completion under Emacs, after a suggestion by John Barnard
582 tab-completion under Emacs, after a suggestion by John Barnard
578 <barnarj-AT-ccf.org>.
583 <barnarj-AT-ccf.org>.
579
584
580 * IPython/Magic.py (Magic.extract_input_slices): added support for
585 * IPython/Magic.py (Magic.extract_input_slices): added support for
581 the slice notation in magics to use N-M to represent numbers N...M
586 the slice notation in magics to use N-M to represent numbers N...M
582 (closed endpoints). This is used by %macro and %save.
587 (closed endpoints). This is used by %macro and %save.
583
588
584 * IPython/completer.py (Completer.attr_matches): for modules which
589 * IPython/completer.py (Completer.attr_matches): for modules which
585 define __all__, complete only on those. After a patch by Jeffrey
590 define __all__, complete only on those. After a patch by Jeffrey
586 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
591 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
587 speed up this routine.
592 speed up this routine.
588
593
589 * IPython/Logger.py (Logger.log): fix a history handling bug. I
594 * IPython/Logger.py (Logger.log): fix a history handling bug. I
590 don't know if this is the end of it, but the behavior now is
595 don't know if this is the end of it, but the behavior now is
591 certainly much more correct. Note that coupled with macros,
596 certainly much more correct. Note that coupled with macros,
592 slightly surprising (at first) behavior may occur: a macro will in
597 slightly surprising (at first) behavior may occur: a macro will in
593 general expand to multiple lines of input, so upon exiting, the
598 general expand to multiple lines of input, so upon exiting, the
594 in/out counters will both be bumped by the corresponding amount
599 in/out counters will both be bumped by the corresponding amount
595 (as if the macro's contents had been typed interactively). Typing
600 (as if the macro's contents had been typed interactively). Typing
596 %hist will reveal the intermediate (silently processed) lines.
601 %hist will reveal the intermediate (silently processed) lines.
597
602
598 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
603 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
599 pickle to fail (%run was overwriting __main__ and not restoring
604 pickle to fail (%run was overwriting __main__ and not restoring
600 it, but pickle relies on __main__ to operate).
605 it, but pickle relies on __main__ to operate).
601
606
602 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
607 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
603 using properties, but forgot to make the main InteractiveShell
608 using properties, but forgot to make the main InteractiveShell
604 class a new-style class. Properties fail silently, and
609 class a new-style class. Properties fail silently, and
605 misteriously, with old-style class (getters work, but
610 misteriously, with old-style class (getters work, but
606 setters don't do anything).
611 setters don't do anything).
607
612
608 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
613 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
609
614
610 * IPython/Magic.py (magic_history): fix history reporting bug (I
615 * IPython/Magic.py (magic_history): fix history reporting bug (I
611 know some nasties are still there, I just can't seem to find a
616 know some nasties are still there, I just can't seem to find a
612 reproducible test case to track them down; the input history is
617 reproducible test case to track them down; the input history is
613 falling out of sync...)
618 falling out of sync...)
614
619
615 * IPython/iplib.py (handle_shell_escape): fix bug where both
620 * IPython/iplib.py (handle_shell_escape): fix bug where both
616 aliases and system accesses where broken for indented code (such
621 aliases and system accesses where broken for indented code (such
617 as loops).
622 as loops).
618
623
619 * IPython/genutils.py (shell): fix small but critical bug for
624 * IPython/genutils.py (shell): fix small but critical bug for
620 win32 system access.
625 win32 system access.
621
626
622 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
627 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
623
628
624 * IPython/iplib.py (showtraceback): remove use of the
629 * IPython/iplib.py (showtraceback): remove use of the
625 sys.last_{type/value/traceback} structures, which are non
630 sys.last_{type/value/traceback} structures, which are non
626 thread-safe.
631 thread-safe.
627 (_prefilter): change control flow to ensure that we NEVER
632 (_prefilter): change control flow to ensure that we NEVER
628 introspect objects when autocall is off. This will guarantee that
633 introspect objects when autocall is off. This will guarantee that
629 having an input line of the form 'x.y', where access to attribute
634 having an input line of the form 'x.y', where access to attribute
630 'y' has side effects, doesn't trigger the side effect TWICE. It
635 'y' has side effects, doesn't trigger the side effect TWICE. It
631 is important to note that, with autocall on, these side effects
636 is important to note that, with autocall on, these side effects
632 can still happen.
637 can still happen.
633 (ipsystem): new builtin, to complete the ip{magic/alias/system}
638 (ipsystem): new builtin, to complete the ip{magic/alias/system}
634 trio. IPython offers these three kinds of special calls which are
639 trio. IPython offers these three kinds of special calls which are
635 not python code, and it's a good thing to have their call method
640 not python code, and it's a good thing to have their call method
636 be accessible as pure python functions (not just special syntax at
641 be accessible as pure python functions (not just special syntax at
637 the command line). It gives us a better internal implementation
642 the command line). It gives us a better internal implementation
638 structure, as well as exposing these for user scripting more
643 structure, as well as exposing these for user scripting more
639 cleanly.
644 cleanly.
640
645
641 * IPython/macro.py (Macro.__init__): moved macros to a standalone
646 * IPython/macro.py (Macro.__init__): moved macros to a standalone
642 file. Now that they'll be more likely to be used with the
647 file. Now that they'll be more likely to be used with the
643 persistance system (%store), I want to make sure their module path
648 persistance system (%store), I want to make sure their module path
644 doesn't change in the future, so that we don't break things for
649 doesn't change in the future, so that we don't break things for
645 users' persisted data.
650 users' persisted data.
646
651
647 * IPython/iplib.py (autoindent_update): move indentation
652 * IPython/iplib.py (autoindent_update): move indentation
648 management into the _text_ processing loop, not the keyboard
653 management into the _text_ processing loop, not the keyboard
649 interactive one. This is necessary to correctly process non-typed
654 interactive one. This is necessary to correctly process non-typed
650 multiline input (such as macros).
655 multiline input (such as macros).
651
656
652 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
657 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
653 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
658 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
654 which was producing problems in the resulting manual.
659 which was producing problems in the resulting manual.
655 (magic_whos): improve reporting of instances (show their class,
660 (magic_whos): improve reporting of instances (show their class,
656 instead of simply printing 'instance' which isn't terribly
661 instead of simply printing 'instance' which isn't terribly
657 informative).
662 informative).
658
663
659 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
664 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
660 (minor mods) to support network shares under win32.
665 (minor mods) to support network shares under win32.
661
666
662 * IPython/winconsole.py (get_console_size): add new winconsole
667 * IPython/winconsole.py (get_console_size): add new winconsole
663 module and fixes to page_dumb() to improve its behavior under
668 module and fixes to page_dumb() to improve its behavior under
664 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
669 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
665
670
666 * IPython/Magic.py (Macro): simplified Macro class to just
671 * IPython/Magic.py (Macro): simplified Macro class to just
667 subclass list. We've had only 2.2 compatibility for a very long
672 subclass list. We've had only 2.2 compatibility for a very long
668 time, yet I was still avoiding subclassing the builtin types. No
673 time, yet I was still avoiding subclassing the builtin types. No
669 more (I'm also starting to use properties, though I won't shift to
674 more (I'm also starting to use properties, though I won't shift to
670 2.3-specific features quite yet).
675 2.3-specific features quite yet).
671 (magic_store): added Ville's patch for lightweight variable
676 (magic_store): added Ville's patch for lightweight variable
672 persistence, after a request on the user list by Matt Wilkie
677 persistence, after a request on the user list by Matt Wilkie
673 <maphew-AT-gmail.com>. The new %store magic's docstring has full
678 <maphew-AT-gmail.com>. The new %store magic's docstring has full
674 details.
679 details.
675
680
676 * IPython/iplib.py (InteractiveShell.post_config_initialization):
681 * IPython/iplib.py (InteractiveShell.post_config_initialization):
677 changed the default logfile name from 'ipython.log' to
682 changed the default logfile name from 'ipython.log' to
678 'ipython_log.py'. These logs are real python files, and now that
683 'ipython_log.py'. These logs are real python files, and now that
679 we have much better multiline support, people are more likely to
684 we have much better multiline support, people are more likely to
680 want to use them as such. Might as well name them correctly.
685 want to use them as such. Might as well name them correctly.
681
686
682 * IPython/Magic.py: substantial cleanup. While we can't stop
687 * IPython/Magic.py: substantial cleanup. While we can't stop
683 using magics as mixins, due to the existing customizations 'out
688 using magics as mixins, due to the existing customizations 'out
684 there' which rely on the mixin naming conventions, at least I
689 there' which rely on the mixin naming conventions, at least I
685 cleaned out all cross-class name usage. So once we are OK with
690 cleaned out all cross-class name usage. So once we are OK with
686 breaking compatibility, the two systems can be separated.
691 breaking compatibility, the two systems can be separated.
687
692
688 * IPython/Logger.py: major cleanup. This one is NOT a mixin
693 * IPython/Logger.py: major cleanup. This one is NOT a mixin
689 anymore, and the class is a fair bit less hideous as well. New
694 anymore, and the class is a fair bit less hideous as well. New
690 features were also introduced: timestamping of input, and logging
695 features were also introduced: timestamping of input, and logging
691 of output results. These are user-visible with the -t and -o
696 of output results. These are user-visible with the -t and -o
692 options to %logstart. Closes
697 options to %logstart. Closes
693 http://www.scipy.net/roundup/ipython/issue11 and a request by
698 http://www.scipy.net/roundup/ipython/issue11 and a request by
694 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
699 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
695
700
696 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
701 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
697
702
698 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
703 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
699 better hadnle backslashes in paths. See the thread 'More Windows
704 better hadnle backslashes in paths. See the thread 'More Windows
700 questions part 2 - \/ characters revisited' on the iypthon user
705 questions part 2 - \/ characters revisited' on the iypthon user
701 list:
706 list:
702 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
707 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
703
708
704 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
709 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
705
710
706 (InteractiveShell.__init__): change threaded shells to not use the
711 (InteractiveShell.__init__): change threaded shells to not use the
707 ipython crash handler. This was causing more problems than not,
712 ipython crash handler. This was causing more problems than not,
708 as exceptions in the main thread (GUI code, typically) would
713 as exceptions in the main thread (GUI code, typically) would
709 always show up as a 'crash', when they really weren't.
714 always show up as a 'crash', when they really weren't.
710
715
711 The colors and exception mode commands (%colors/%xmode) have been
716 The colors and exception mode commands (%colors/%xmode) have been
712 synchronized to also take this into account, so users can get
717 synchronized to also take this into account, so users can get
713 verbose exceptions for their threaded code as well. I also added
718 verbose exceptions for their threaded code as well. I also added
714 support for activating pdb inside this exception handler as well,
719 support for activating pdb inside this exception handler as well,
715 so now GUI authors can use IPython's enhanced pdb at runtime.
720 so now GUI authors can use IPython's enhanced pdb at runtime.
716
721
717 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
722 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
718 true by default, and add it to the shipped ipythonrc file. Since
723 true by default, and add it to the shipped ipythonrc file. Since
719 this asks the user before proceeding, I think it's OK to make it
724 this asks the user before proceeding, I think it's OK to make it
720 true by default.
725 true by default.
721
726
722 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
727 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
723 of the previous special-casing of input in the eval loop. I think
728 of the previous special-casing of input in the eval loop. I think
724 this is cleaner, as they really are commands and shouldn't have
729 this is cleaner, as they really are commands and shouldn't have
725 a special role in the middle of the core code.
730 a special role in the middle of the core code.
726
731
727 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
732 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
728
733
729 * IPython/iplib.py (edit_syntax_error): added support for
734 * IPython/iplib.py (edit_syntax_error): added support for
730 automatically reopening the editor if the file had a syntax error
735 automatically reopening the editor if the file had a syntax error
731 in it. Thanks to scottt who provided the patch at:
736 in it. Thanks to scottt who provided the patch at:
732 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
737 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
733 version committed).
738 version committed).
734
739
735 * IPython/iplib.py (handle_normal): add suport for multi-line
740 * IPython/iplib.py (handle_normal): add suport for multi-line
736 input with emtpy lines. This fixes
741 input with emtpy lines. This fixes
737 http://www.scipy.net/roundup/ipython/issue43 and a similar
742 http://www.scipy.net/roundup/ipython/issue43 and a similar
738 discussion on the user list.
743 discussion on the user list.
739
744
740 WARNING: a behavior change is necessarily introduced to support
745 WARNING: a behavior change is necessarily introduced to support
741 blank lines: now a single blank line with whitespace does NOT
746 blank lines: now a single blank line with whitespace does NOT
742 break the input loop, which means that when autoindent is on, by
747 break the input loop, which means that when autoindent is on, by
743 default hitting return on the next (indented) line does NOT exit.
748 default hitting return on the next (indented) line does NOT exit.
744
749
745 Instead, to exit a multiline input you can either have:
750 Instead, to exit a multiline input you can either have:
746
751
747 - TWO whitespace lines (just hit return again), or
752 - TWO whitespace lines (just hit return again), or
748 - a single whitespace line of a different length than provided
753 - a single whitespace line of a different length than provided
749 by the autoindent (add or remove a space).
754 by the autoindent (add or remove a space).
750
755
751 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
756 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
752 module to better organize all readline-related functionality.
757 module to better organize all readline-related functionality.
753 I've deleted FlexCompleter and put all completion clases here.
758 I've deleted FlexCompleter and put all completion clases here.
754
759
755 * IPython/iplib.py (raw_input): improve indentation management.
760 * IPython/iplib.py (raw_input): improve indentation management.
756 It is now possible to paste indented code with autoindent on, and
761 It is now possible to paste indented code with autoindent on, and
757 the code is interpreted correctly (though it still looks bad on
762 the code is interpreted correctly (though it still looks bad on
758 screen, due to the line-oriented nature of ipython).
763 screen, due to the line-oriented nature of ipython).
759 (MagicCompleter.complete): change behavior so that a TAB key on an
764 (MagicCompleter.complete): change behavior so that a TAB key on an
760 otherwise empty line actually inserts a tab, instead of completing
765 otherwise empty line actually inserts a tab, instead of completing
761 on the entire global namespace. This makes it easier to use the
766 on the entire global namespace. This makes it easier to use the
762 TAB key for indentation. After a request by Hans Meine
767 TAB key for indentation. After a request by Hans Meine
763 <hans_meine-AT-gmx.net>
768 <hans_meine-AT-gmx.net>
764 (_prefilter): add support so that typing plain 'exit' or 'quit'
769 (_prefilter): add support so that typing plain 'exit' or 'quit'
765 does a sensible thing. Originally I tried to deviate as little as
770 does a sensible thing. Originally I tried to deviate as little as
766 possible from the default python behavior, but even that one may
771 possible from the default python behavior, but even that one may
767 change in this direction (thread on python-dev to that effect).
772 change in this direction (thread on python-dev to that effect).
768 Regardless, ipython should do the right thing even if CPython's
773 Regardless, ipython should do the right thing even if CPython's
769 '>>>' prompt doesn't.
774 '>>>' prompt doesn't.
770 (InteractiveShell): removed subclassing code.InteractiveConsole
775 (InteractiveShell): removed subclassing code.InteractiveConsole
771 class. By now we'd overridden just about all of its methods: I've
776 class. By now we'd overridden just about all of its methods: I've
772 copied the remaining two over, and now ipython is a standalone
777 copied the remaining two over, and now ipython is a standalone
773 class. This will provide a clearer picture for the chainsaw
778 class. This will provide a clearer picture for the chainsaw
774 branch refactoring.
779 branch refactoring.
775
780
776 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
781 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
777
782
778 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
783 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
779 failures for objects which break when dir() is called on them.
784 failures for objects which break when dir() is called on them.
780
785
781 * IPython/FlexCompleter.py (Completer.__init__): Added support for
786 * IPython/FlexCompleter.py (Completer.__init__): Added support for
782 distinct local and global namespaces in the completer API. This
787 distinct local and global namespaces in the completer API. This
783 change allows us top properly handle completion with distinct
788 change allows us top properly handle completion with distinct
784 scopes, including in embedded instances (this had never really
789 scopes, including in embedded instances (this had never really
785 worked correctly).
790 worked correctly).
786
791
787 Note: this introduces a change in the constructor for
792 Note: this introduces a change in the constructor for
788 MagicCompleter, as a new global_namespace parameter is now the
793 MagicCompleter, as a new global_namespace parameter is now the
789 second argument (the others were bumped one position).
794 second argument (the others were bumped one position).
790
795
791 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
796 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
792
797
793 * IPython/iplib.py (embed_mainloop): fix tab-completion in
798 * IPython/iplib.py (embed_mainloop): fix tab-completion in
794 embedded instances (which can be done now thanks to Vivian's
799 embedded instances (which can be done now thanks to Vivian's
795 frame-handling fixes for pdb).
800 frame-handling fixes for pdb).
796 (InteractiveShell.__init__): Fix namespace handling problem in
801 (InteractiveShell.__init__): Fix namespace handling problem in
797 embedded instances. We were overwriting __main__ unconditionally,
802 embedded instances. We were overwriting __main__ unconditionally,
798 and this should only be done for 'full' (non-embedded) IPython;
803 and this should only be done for 'full' (non-embedded) IPython;
799 embedded instances must respect the caller's __main__. Thanks to
804 embedded instances must respect the caller's __main__. Thanks to
800 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
805 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
801
806
802 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
807 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
803
808
804 * setup.py: added download_url to setup(). This registers the
809 * setup.py: added download_url to setup(). This registers the
805 download address at PyPI, which is not only useful to humans
810 download address at PyPI, which is not only useful to humans
806 browsing the site, but is also picked up by setuptools (the Eggs
811 browsing the site, but is also picked up by setuptools (the Eggs
807 machinery). Thanks to Ville and R. Kern for the info/discussion
812 machinery). Thanks to Ville and R. Kern for the info/discussion
808 on this.
813 on this.
809
814
810 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
815 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
811
816
812 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
817 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
813 This brings a lot of nice functionality to the pdb mode, which now
818 This brings a lot of nice functionality to the pdb mode, which now
814 has tab-completion, syntax highlighting, and better stack handling
819 has tab-completion, syntax highlighting, and better stack handling
815 than before. Many thanks to Vivian De Smedt
820 than before. Many thanks to Vivian De Smedt
816 <vivian-AT-vdesmedt.com> for the original patches.
821 <vivian-AT-vdesmedt.com> for the original patches.
817
822
818 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
823 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
819
824
820 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
825 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
821 sequence to consistently accept the banner argument. The
826 sequence to consistently accept the banner argument. The
822 inconsistency was tripping SAGE, thanks to Gary Zablackis
827 inconsistency was tripping SAGE, thanks to Gary Zablackis
823 <gzabl-AT-yahoo.com> for the report.
828 <gzabl-AT-yahoo.com> for the report.
824
829
825 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
830 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
826
831
827 * IPython/iplib.py (InteractiveShell.post_config_initialization):
832 * IPython/iplib.py (InteractiveShell.post_config_initialization):
828 Fix bug where a naked 'alias' call in the ipythonrc file would
833 Fix bug where a naked 'alias' call in the ipythonrc file would
829 cause a crash. Bug reported by Jorgen Stenarson.
834 cause a crash. Bug reported by Jorgen Stenarson.
830
835
831 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
836 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
832
837
833 * IPython/ipmaker.py (make_IPython): cleanups which should improve
838 * IPython/ipmaker.py (make_IPython): cleanups which should improve
834 startup time.
839 startup time.
835
840
836 * IPython/iplib.py (runcode): my globals 'fix' for embedded
841 * IPython/iplib.py (runcode): my globals 'fix' for embedded
837 instances had introduced a bug with globals in normal code. Now
842 instances had introduced a bug with globals in normal code. Now
838 it's working in all cases.
843 it's working in all cases.
839
844
840 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
845 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
841 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
846 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
842 has been introduced to set the default case sensitivity of the
847 has been introduced to set the default case sensitivity of the
843 searches. Users can still select either mode at runtime on a
848 searches. Users can still select either mode at runtime on a
844 per-search basis.
849 per-search basis.
845
850
846 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
851 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
847
852
848 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
853 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
849 attributes in wildcard searches for subclasses. Modified version
854 attributes in wildcard searches for subclasses. Modified version
850 of a patch by Jorgen.
855 of a patch by Jorgen.
851
856
852 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
857 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
853
858
854 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
859 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
855 embedded instances. I added a user_global_ns attribute to the
860 embedded instances. I added a user_global_ns attribute to the
856 InteractiveShell class to handle this.
861 InteractiveShell class to handle this.
857
862
858 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
863 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
859
864
860 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
865 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
861 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
866 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
862 (reported under win32, but may happen also in other platforms).
867 (reported under win32, but may happen also in other platforms).
863 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
868 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
864
869
865 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
870 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
866
871
867 * IPython/Magic.py (magic_psearch): new support for wildcard
872 * IPython/Magic.py (magic_psearch): new support for wildcard
868 patterns. Now, typing ?a*b will list all names which begin with a
873 patterns. Now, typing ?a*b will list all names which begin with a
869 and end in b, for example. The %psearch magic has full
874 and end in b, for example. The %psearch magic has full
870 docstrings. Many thanks to JΓΆrgen Stenarson
875 docstrings. Many thanks to JΓΆrgen Stenarson
871 <jorgen.stenarson-AT-bostream.nu>, author of the patches
876 <jorgen.stenarson-AT-bostream.nu>, author of the patches
872 implementing this functionality.
877 implementing this functionality.
873
878
874 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
879 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
875
880
876 * Manual: fixed long-standing annoyance of double-dashes (as in
881 * Manual: fixed long-standing annoyance of double-dashes (as in
877 --prefix=~, for example) being stripped in the HTML version. This
882 --prefix=~, for example) being stripped in the HTML version. This
878 is a latex2html bug, but a workaround was provided. Many thanks
883 is a latex2html bug, but a workaround was provided. Many thanks
879 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
884 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
880 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
885 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
881 rolling. This seemingly small issue had tripped a number of users
886 rolling. This seemingly small issue had tripped a number of users
882 when first installing, so I'm glad to see it gone.
887 when first installing, so I'm glad to see it gone.
883
888
884 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
889 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
885
890
886 * IPython/Extensions/numeric_formats.py: fix missing import,
891 * IPython/Extensions/numeric_formats.py: fix missing import,
887 reported by Stephen Walton.
892 reported by Stephen Walton.
888
893
889 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
894 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
890
895
891 * IPython/demo.py: finish demo module, fully documented now.
896 * IPython/demo.py: finish demo module, fully documented now.
892
897
893 * IPython/genutils.py (file_read): simple little utility to read a
898 * IPython/genutils.py (file_read): simple little utility to read a
894 file and ensure it's closed afterwards.
899 file and ensure it's closed afterwards.
895
900
896 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
901 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
897
902
898 * IPython/demo.py (Demo.__init__): added support for individually
903 * IPython/demo.py (Demo.__init__): added support for individually
899 tagging blocks for automatic execution.
904 tagging blocks for automatic execution.
900
905
901 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
906 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
902 syntax-highlighted python sources, requested by John.
907 syntax-highlighted python sources, requested by John.
903
908
904 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
909 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
905
910
906 * IPython/demo.py (Demo.again): fix bug where again() blocks after
911 * IPython/demo.py (Demo.again): fix bug where again() blocks after
907 finishing.
912 finishing.
908
913
909 * IPython/genutils.py (shlex_split): moved from Magic to here,
914 * IPython/genutils.py (shlex_split): moved from Magic to here,
910 where all 2.2 compatibility stuff lives. I needed it for demo.py.
915 where all 2.2 compatibility stuff lives. I needed it for demo.py.
911
916
912 * IPython/demo.py (Demo.__init__): added support for silent
917 * IPython/demo.py (Demo.__init__): added support for silent
913 blocks, improved marks as regexps, docstrings written.
918 blocks, improved marks as regexps, docstrings written.
914 (Demo.__init__): better docstring, added support for sys.argv.
919 (Demo.__init__): better docstring, added support for sys.argv.
915
920
916 * IPython/genutils.py (marquee): little utility used by the demo
921 * IPython/genutils.py (marquee): little utility used by the demo
917 code, handy in general.
922 code, handy in general.
918
923
919 * IPython/demo.py (Demo.__init__): new class for interactive
924 * IPython/demo.py (Demo.__init__): new class for interactive
920 demos. Not documented yet, I just wrote it in a hurry for
925 demos. Not documented yet, I just wrote it in a hurry for
921 scipy'05. Will docstring later.
926 scipy'05. Will docstring later.
922
927
923 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
928 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
924
929
925 * IPython/Shell.py (sigint_handler): Drastic simplification which
930 * IPython/Shell.py (sigint_handler): Drastic simplification which
926 also seems to make Ctrl-C work correctly across threads! This is
931 also seems to make Ctrl-C work correctly across threads! This is
927 so simple, that I can't beleive I'd missed it before. Needs more
932 so simple, that I can't beleive I'd missed it before. Needs more
928 testing, though.
933 testing, though.
929 (KBINT): Never mind, revert changes. I'm sure I'd tried something
934 (KBINT): Never mind, revert changes. I'm sure I'd tried something
930 like this before...
935 like this before...
931
936
932 * IPython/genutils.py (get_home_dir): add protection against
937 * IPython/genutils.py (get_home_dir): add protection against
933 non-dirs in win32 registry.
938 non-dirs in win32 registry.
934
939
935 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
940 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
936 bug where dict was mutated while iterating (pysh crash).
941 bug where dict was mutated while iterating (pysh crash).
937
942
938 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
943 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
939
944
940 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
945 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
941 spurious newlines added by this routine. After a report by
946 spurious newlines added by this routine. After a report by
942 F. Mantegazza.
947 F. Mantegazza.
943
948
944 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
949 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
945
950
946 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
951 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
947 calls. These were a leftover from the GTK 1.x days, and can cause
952 calls. These were a leftover from the GTK 1.x days, and can cause
948 problems in certain cases (after a report by John Hunter).
953 problems in certain cases (after a report by John Hunter).
949
954
950 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
955 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
951 os.getcwd() fails at init time. Thanks to patch from David Remahl
956 os.getcwd() fails at init time. Thanks to patch from David Remahl
952 <chmod007-AT-mac.com>.
957 <chmod007-AT-mac.com>.
953 (InteractiveShell.__init__): prevent certain special magics from
958 (InteractiveShell.__init__): prevent certain special magics from
954 being shadowed by aliases. Closes
959 being shadowed by aliases. Closes
955 http://www.scipy.net/roundup/ipython/issue41.
960 http://www.scipy.net/roundup/ipython/issue41.
956
961
957 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
962 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
958
963
959 * IPython/iplib.py (InteractiveShell.complete): Added new
964 * IPython/iplib.py (InteractiveShell.complete): Added new
960 top-level completion method to expose the completion mechanism
965 top-level completion method to expose the completion mechanism
961 beyond readline-based environments.
966 beyond readline-based environments.
962
967
963 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
968 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
964
969
965 * tools/ipsvnc (svnversion): fix svnversion capture.
970 * tools/ipsvnc (svnversion): fix svnversion capture.
966
971
967 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
972 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
968 attribute to self, which was missing. Before, it was set by a
973 attribute to self, which was missing. Before, it was set by a
969 routine which in certain cases wasn't being called, so the
974 routine which in certain cases wasn't being called, so the
970 instance could end up missing the attribute. This caused a crash.
975 instance could end up missing the attribute. This caused a crash.
971 Closes http://www.scipy.net/roundup/ipython/issue40.
976 Closes http://www.scipy.net/roundup/ipython/issue40.
972
977
973 2005-08-16 Fernando Perez <fperez@colorado.edu>
978 2005-08-16 Fernando Perez <fperez@colorado.edu>
974
979
975 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
980 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
976 contains non-string attribute. Closes
981 contains non-string attribute. Closes
977 http://www.scipy.net/roundup/ipython/issue38.
982 http://www.scipy.net/roundup/ipython/issue38.
978
983
979 2005-08-14 Fernando Perez <fperez@colorado.edu>
984 2005-08-14 Fernando Perez <fperez@colorado.edu>
980
985
981 * tools/ipsvnc: Minor improvements, to add changeset info.
986 * tools/ipsvnc: Minor improvements, to add changeset info.
982
987
983 2005-08-12 Fernando Perez <fperez@colorado.edu>
988 2005-08-12 Fernando Perez <fperez@colorado.edu>
984
989
985 * IPython/iplib.py (runsource): remove self.code_to_run_src
990 * IPython/iplib.py (runsource): remove self.code_to_run_src
986 attribute. I realized this is nothing more than
991 attribute. I realized this is nothing more than
987 '\n'.join(self.buffer), and having the same data in two different
992 '\n'.join(self.buffer), and having the same data in two different
988 places is just asking for synchronization bugs. This may impact
993 places is just asking for synchronization bugs. This may impact
989 people who have custom exception handlers, so I need to warn
994 people who have custom exception handlers, so I need to warn
990 ipython-dev about it (F. Mantegazza may use them).
995 ipython-dev about it (F. Mantegazza may use them).
991
996
992 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
997 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
993
998
994 * IPython/genutils.py: fix 2.2 compatibility (generators)
999 * IPython/genutils.py: fix 2.2 compatibility (generators)
995
1000
996 2005-07-18 Fernando Perez <fperez@colorado.edu>
1001 2005-07-18 Fernando Perez <fperez@colorado.edu>
997
1002
998 * IPython/genutils.py (get_home_dir): fix to help users with
1003 * IPython/genutils.py (get_home_dir): fix to help users with
999 invalid $HOME under win32.
1004 invalid $HOME under win32.
1000
1005
1001 2005-07-17 Fernando Perez <fperez@colorado.edu>
1006 2005-07-17 Fernando Perez <fperez@colorado.edu>
1002
1007
1003 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1008 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1004 some old hacks and clean up a bit other routines; code should be
1009 some old hacks and clean up a bit other routines; code should be
1005 simpler and a bit faster.
1010 simpler and a bit faster.
1006
1011
1007 * IPython/iplib.py (interact): removed some last-resort attempts
1012 * IPython/iplib.py (interact): removed some last-resort attempts
1008 to survive broken stdout/stderr. That code was only making it
1013 to survive broken stdout/stderr. That code was only making it
1009 harder to abstract out the i/o (necessary for gui integration),
1014 harder to abstract out the i/o (necessary for gui integration),
1010 and the crashes it could prevent were extremely rare in practice
1015 and the crashes it could prevent were extremely rare in practice
1011 (besides being fully user-induced in a pretty violent manner).
1016 (besides being fully user-induced in a pretty violent manner).
1012
1017
1013 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1018 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1014 Nothing major yet, but the code is simpler to read; this should
1019 Nothing major yet, but the code is simpler to read; this should
1015 make it easier to do more serious modifications in the future.
1020 make it easier to do more serious modifications in the future.
1016
1021
1017 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1022 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1018 which broke in .15 (thanks to a report by Ville).
1023 which broke in .15 (thanks to a report by Ville).
1019
1024
1020 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1025 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1021 be quite correct, I know next to nothing about unicode). This
1026 be quite correct, I know next to nothing about unicode). This
1022 will allow unicode strings to be used in prompts, amongst other
1027 will allow unicode strings to be used in prompts, amongst other
1023 cases. It also will prevent ipython from crashing when unicode
1028 cases. It also will prevent ipython from crashing when unicode
1024 shows up unexpectedly in many places. If ascii encoding fails, we
1029 shows up unexpectedly in many places. If ascii encoding fails, we
1025 assume utf_8. Currently the encoding is not a user-visible
1030 assume utf_8. Currently the encoding is not a user-visible
1026 setting, though it could be made so if there is demand for it.
1031 setting, though it could be made so if there is demand for it.
1027
1032
1028 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1033 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1029
1034
1030 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1035 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1031
1036
1032 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1037 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1033
1038
1034 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1039 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1035 code can work transparently for 2.2/2.3.
1040 code can work transparently for 2.2/2.3.
1036
1041
1037 2005-07-16 Fernando Perez <fperez@colorado.edu>
1042 2005-07-16 Fernando Perez <fperez@colorado.edu>
1038
1043
1039 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1044 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1040 out of the color scheme table used for coloring exception
1045 out of the color scheme table used for coloring exception
1041 tracebacks. This allows user code to add new schemes at runtime.
1046 tracebacks. This allows user code to add new schemes at runtime.
1042 This is a minimally modified version of the patch at
1047 This is a minimally modified version of the patch at
1043 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1048 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1044 for the contribution.
1049 for the contribution.
1045
1050
1046 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1051 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1047 slightly modified version of the patch in
1052 slightly modified version of the patch in
1048 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1053 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1049 to remove the previous try/except solution (which was costlier).
1054 to remove the previous try/except solution (which was costlier).
1050 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1055 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1051
1056
1052 2005-06-08 Fernando Perez <fperez@colorado.edu>
1057 2005-06-08 Fernando Perez <fperez@colorado.edu>
1053
1058
1054 * IPython/iplib.py (write/write_err): Add methods to abstract all
1059 * IPython/iplib.py (write/write_err): Add methods to abstract all
1055 I/O a bit more.
1060 I/O a bit more.
1056
1061
1057 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1062 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1058 warning, reported by Aric Hagberg, fix by JD Hunter.
1063 warning, reported by Aric Hagberg, fix by JD Hunter.
1059
1064
1060 2005-06-02 *** Released version 0.6.15
1065 2005-06-02 *** Released version 0.6.15
1061
1066
1062 2005-06-01 Fernando Perez <fperez@colorado.edu>
1067 2005-06-01 Fernando Perez <fperez@colorado.edu>
1063
1068
1064 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1069 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1065 tab-completion of filenames within open-quoted strings. Note that
1070 tab-completion of filenames within open-quoted strings. Note that
1066 this requires that in ~/.ipython/ipythonrc, users change the
1071 this requires that in ~/.ipython/ipythonrc, users change the
1067 readline delimiters configuration to read:
1072 readline delimiters configuration to read:
1068
1073
1069 readline_remove_delims -/~
1074 readline_remove_delims -/~
1070
1075
1071
1076
1072 2005-05-31 *** Released version 0.6.14
1077 2005-05-31 *** Released version 0.6.14
1073
1078
1074 2005-05-29 Fernando Perez <fperez@colorado.edu>
1079 2005-05-29 Fernando Perez <fperez@colorado.edu>
1075
1080
1076 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1081 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1077 with files not on the filesystem. Reported by Eliyahu Sandler
1082 with files not on the filesystem. Reported by Eliyahu Sandler
1078 <eli@gondolin.net>
1083 <eli@gondolin.net>
1079
1084
1080 2005-05-22 Fernando Perez <fperez@colorado.edu>
1085 2005-05-22 Fernando Perez <fperez@colorado.edu>
1081
1086
1082 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1087 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1083 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1088 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1084
1089
1085 2005-05-19 Fernando Perez <fperez@colorado.edu>
1090 2005-05-19 Fernando Perez <fperez@colorado.edu>
1086
1091
1087 * IPython/iplib.py (safe_execfile): close a file which could be
1092 * IPython/iplib.py (safe_execfile): close a file which could be
1088 left open (causing problems in win32, which locks open files).
1093 left open (causing problems in win32, which locks open files).
1089 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1094 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1090
1095
1091 2005-05-18 Fernando Perez <fperez@colorado.edu>
1096 2005-05-18 Fernando Perez <fperez@colorado.edu>
1092
1097
1093 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1098 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1094 keyword arguments correctly to safe_execfile().
1099 keyword arguments correctly to safe_execfile().
1095
1100
1096 2005-05-13 Fernando Perez <fperez@colorado.edu>
1101 2005-05-13 Fernando Perez <fperez@colorado.edu>
1097
1102
1098 * ipython.1: Added info about Qt to manpage, and threads warning
1103 * ipython.1: Added info about Qt to manpage, and threads warning
1099 to usage page (invoked with --help).
1104 to usage page (invoked with --help).
1100
1105
1101 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1106 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1102 new matcher (it goes at the end of the priority list) to do
1107 new matcher (it goes at the end of the priority list) to do
1103 tab-completion on named function arguments. Submitted by George
1108 tab-completion on named function arguments. Submitted by George
1104 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1109 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1105 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1110 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1106 for more details.
1111 for more details.
1107
1112
1108 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1113 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1109 SystemExit exceptions in the script being run. Thanks to a report
1114 SystemExit exceptions in the script being run. Thanks to a report
1110 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1115 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1111 producing very annoying behavior when running unit tests.
1116 producing very annoying behavior when running unit tests.
1112
1117
1113 2005-05-12 Fernando Perez <fperez@colorado.edu>
1118 2005-05-12 Fernando Perez <fperez@colorado.edu>
1114
1119
1115 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1120 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1116 which I'd broken (again) due to a changed regexp. In the process,
1121 which I'd broken (again) due to a changed regexp. In the process,
1117 added ';' as an escape to auto-quote the whole line without
1122 added ';' as an escape to auto-quote the whole line without
1118 splitting its arguments. Thanks to a report by Jerry McRae
1123 splitting its arguments. Thanks to a report by Jerry McRae
1119 <qrs0xyc02-AT-sneakemail.com>.
1124 <qrs0xyc02-AT-sneakemail.com>.
1120
1125
1121 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1126 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1122 possible crashes caused by a TokenError. Reported by Ed Schofield
1127 possible crashes caused by a TokenError. Reported by Ed Schofield
1123 <schofield-AT-ftw.at>.
1128 <schofield-AT-ftw.at>.
1124
1129
1125 2005-05-06 Fernando Perez <fperez@colorado.edu>
1130 2005-05-06 Fernando Perez <fperez@colorado.edu>
1126
1131
1127 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1132 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1128
1133
1129 2005-04-29 Fernando Perez <fperez@colorado.edu>
1134 2005-04-29 Fernando Perez <fperez@colorado.edu>
1130
1135
1131 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1136 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1132 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1137 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1133 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1138 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1134 which provides support for Qt interactive usage (similar to the
1139 which provides support for Qt interactive usage (similar to the
1135 existing one for WX and GTK). This had been often requested.
1140 existing one for WX and GTK). This had been often requested.
1136
1141
1137 2005-04-14 *** Released version 0.6.13
1142 2005-04-14 *** Released version 0.6.13
1138
1143
1139 2005-04-08 Fernando Perez <fperez@colorado.edu>
1144 2005-04-08 Fernando Perez <fperez@colorado.edu>
1140
1145
1141 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1146 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1142 from _ofind, which gets called on almost every input line. Now,
1147 from _ofind, which gets called on almost every input line. Now,
1143 we only try to get docstrings if they are actually going to be
1148 we only try to get docstrings if they are actually going to be
1144 used (the overhead of fetching unnecessary docstrings can be
1149 used (the overhead of fetching unnecessary docstrings can be
1145 noticeable for certain objects, such as Pyro proxies).
1150 noticeable for certain objects, such as Pyro proxies).
1146
1151
1147 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1152 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1148 for completers. For some reason I had been passing them the state
1153 for completers. For some reason I had been passing them the state
1149 variable, which completers never actually need, and was in
1154 variable, which completers never actually need, and was in
1150 conflict with the rlcompleter API. Custom completers ONLY need to
1155 conflict with the rlcompleter API. Custom completers ONLY need to
1151 take the text parameter.
1156 take the text parameter.
1152
1157
1153 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1158 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1154 work correctly in pysh. I've also moved all the logic which used
1159 work correctly in pysh. I've also moved all the logic which used
1155 to be in pysh.py here, which will prevent problems with future
1160 to be in pysh.py here, which will prevent problems with future
1156 upgrades. However, this time I must warn users to update their
1161 upgrades. However, this time I must warn users to update their
1157 pysh profile to include the line
1162 pysh profile to include the line
1158
1163
1159 import_all IPython.Extensions.InterpreterExec
1164 import_all IPython.Extensions.InterpreterExec
1160
1165
1161 because otherwise things won't work for them. They MUST also
1166 because otherwise things won't work for them. They MUST also
1162 delete pysh.py and the line
1167 delete pysh.py and the line
1163
1168
1164 execfile pysh.py
1169 execfile pysh.py
1165
1170
1166 from their ipythonrc-pysh.
1171 from their ipythonrc-pysh.
1167
1172
1168 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1173 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1169 robust in the face of objects whose dir() returns non-strings
1174 robust in the face of objects whose dir() returns non-strings
1170 (which it shouldn't, but some broken libs like ITK do). Thanks to
1175 (which it shouldn't, but some broken libs like ITK do). Thanks to
1171 a patch by John Hunter (implemented differently, though). Also
1176 a patch by John Hunter (implemented differently, though). Also
1172 minor improvements by using .extend instead of + on lists.
1177 minor improvements by using .extend instead of + on lists.
1173
1178
1174 * pysh.py:
1179 * pysh.py:
1175
1180
1176 2005-04-06 Fernando Perez <fperez@colorado.edu>
1181 2005-04-06 Fernando Perez <fperez@colorado.edu>
1177
1182
1178 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1183 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1179 by default, so that all users benefit from it. Those who don't
1184 by default, so that all users benefit from it. Those who don't
1180 want it can still turn it off.
1185 want it can still turn it off.
1181
1186
1182 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1187 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1183 config file, I'd forgotten about this, so users were getting it
1188 config file, I'd forgotten about this, so users were getting it
1184 off by default.
1189 off by default.
1185
1190
1186 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1191 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1187 consistency. Now magics can be called in multiline statements,
1192 consistency. Now magics can be called in multiline statements,
1188 and python variables can be expanded in magic calls via $var.
1193 and python variables can be expanded in magic calls via $var.
1189 This makes the magic system behave just like aliases or !system
1194 This makes the magic system behave just like aliases or !system
1190 calls.
1195 calls.
1191
1196
1192 2005-03-28 Fernando Perez <fperez@colorado.edu>
1197 2005-03-28 Fernando Perez <fperez@colorado.edu>
1193
1198
1194 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1199 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1195 expensive string additions for building command. Add support for
1200 expensive string additions for building command. Add support for
1196 trailing ';' when autocall is used.
1201 trailing ';' when autocall is used.
1197
1202
1198 2005-03-26 Fernando Perez <fperez@colorado.edu>
1203 2005-03-26 Fernando Perez <fperez@colorado.edu>
1199
1204
1200 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1205 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1201 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1206 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1202 ipython.el robust against prompts with any number of spaces
1207 ipython.el robust against prompts with any number of spaces
1203 (including 0) after the ':' character.
1208 (including 0) after the ':' character.
1204
1209
1205 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1210 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1206 continuation prompt, which misled users to think the line was
1211 continuation prompt, which misled users to think the line was
1207 already indented. Closes debian Bug#300847, reported to me by
1212 already indented. Closes debian Bug#300847, reported to me by
1208 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1213 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1209
1214
1210 2005-03-23 Fernando Perez <fperez@colorado.edu>
1215 2005-03-23 Fernando Perez <fperez@colorado.edu>
1211
1216
1212 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1217 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1213 properly aligned if they have embedded newlines.
1218 properly aligned if they have embedded newlines.
1214
1219
1215 * IPython/iplib.py (runlines): Add a public method to expose
1220 * IPython/iplib.py (runlines): Add a public method to expose
1216 IPython's code execution machinery, so that users can run strings
1221 IPython's code execution machinery, so that users can run strings
1217 as if they had been typed at the prompt interactively.
1222 as if they had been typed at the prompt interactively.
1218 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1223 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1219 methods which can call the system shell, but with python variable
1224 methods which can call the system shell, but with python variable
1220 expansion. The three such methods are: __IPYTHON__.system,
1225 expansion. The three such methods are: __IPYTHON__.system,
1221 .getoutput and .getoutputerror. These need to be documented in a
1226 .getoutput and .getoutputerror. These need to be documented in a
1222 'public API' section (to be written) of the manual.
1227 'public API' section (to be written) of the manual.
1223
1228
1224 2005-03-20 Fernando Perez <fperez@colorado.edu>
1229 2005-03-20 Fernando Perez <fperez@colorado.edu>
1225
1230
1226 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1231 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1227 for custom exception handling. This is quite powerful, and it
1232 for custom exception handling. This is quite powerful, and it
1228 allows for user-installable exception handlers which can trap
1233 allows for user-installable exception handlers which can trap
1229 custom exceptions at runtime and treat them separately from
1234 custom exceptions at runtime and treat them separately from
1230 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1235 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1231 Mantegazza <mantegazza-AT-ill.fr>.
1236 Mantegazza <mantegazza-AT-ill.fr>.
1232 (InteractiveShell.set_custom_completer): public API function to
1237 (InteractiveShell.set_custom_completer): public API function to
1233 add new completers at runtime.
1238 add new completers at runtime.
1234
1239
1235 2005-03-19 Fernando Perez <fperez@colorado.edu>
1240 2005-03-19 Fernando Perez <fperez@colorado.edu>
1236
1241
1237 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1242 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1238 allow objects which provide their docstrings via non-standard
1243 allow objects which provide their docstrings via non-standard
1239 mechanisms (like Pyro proxies) to still be inspected by ipython's
1244 mechanisms (like Pyro proxies) to still be inspected by ipython's
1240 ? system.
1245 ? system.
1241
1246
1242 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1247 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1243 automatic capture system. I tried quite hard to make it work
1248 automatic capture system. I tried quite hard to make it work
1244 reliably, and simply failed. I tried many combinations with the
1249 reliably, and simply failed. I tried many combinations with the
1245 subprocess module, but eventually nothing worked in all needed
1250 subprocess module, but eventually nothing worked in all needed
1246 cases (not blocking stdin for the child, duplicating stdout
1251 cases (not blocking stdin for the child, duplicating stdout
1247 without blocking, etc). The new %sc/%sx still do capture to these
1252 without blocking, etc). The new %sc/%sx still do capture to these
1248 magical list/string objects which make shell use much more
1253 magical list/string objects which make shell use much more
1249 conveninent, so not all is lost.
1254 conveninent, so not all is lost.
1250
1255
1251 XXX - FIX MANUAL for the change above!
1256 XXX - FIX MANUAL for the change above!
1252
1257
1253 (runsource): I copied code.py's runsource() into ipython to modify
1258 (runsource): I copied code.py's runsource() into ipython to modify
1254 it a bit. Now the code object and source to be executed are
1259 it a bit. Now the code object and source to be executed are
1255 stored in ipython. This makes this info accessible to third-party
1260 stored in ipython. This makes this info accessible to third-party
1256 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1261 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1257 Mantegazza <mantegazza-AT-ill.fr>.
1262 Mantegazza <mantegazza-AT-ill.fr>.
1258
1263
1259 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1264 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1260 history-search via readline (like C-p/C-n). I'd wanted this for a
1265 history-search via readline (like C-p/C-n). I'd wanted this for a
1261 long time, but only recently found out how to do it. For users
1266 long time, but only recently found out how to do it. For users
1262 who already have their ipythonrc files made and want this, just
1267 who already have their ipythonrc files made and want this, just
1263 add:
1268 add:
1264
1269
1265 readline_parse_and_bind "\e[A": history-search-backward
1270 readline_parse_and_bind "\e[A": history-search-backward
1266 readline_parse_and_bind "\e[B": history-search-forward
1271 readline_parse_and_bind "\e[B": history-search-forward
1267
1272
1268 2005-03-18 Fernando Perez <fperez@colorado.edu>
1273 2005-03-18 Fernando Perez <fperez@colorado.edu>
1269
1274
1270 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1275 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1271 LSString and SList classes which allow transparent conversions
1276 LSString and SList classes which allow transparent conversions
1272 between list mode and whitespace-separated string.
1277 between list mode and whitespace-separated string.
1273 (magic_r): Fix recursion problem in %r.
1278 (magic_r): Fix recursion problem in %r.
1274
1279
1275 * IPython/genutils.py (LSString): New class to be used for
1280 * IPython/genutils.py (LSString): New class to be used for
1276 automatic storage of the results of all alias/system calls in _o
1281 automatic storage of the results of all alias/system calls in _o
1277 and _e (stdout/err). These provide a .l/.list attribute which
1282 and _e (stdout/err). These provide a .l/.list attribute which
1278 does automatic splitting on newlines. This means that for most
1283 does automatic splitting on newlines. This means that for most
1279 uses, you'll never need to do capturing of output with %sc/%sx
1284 uses, you'll never need to do capturing of output with %sc/%sx
1280 anymore, since ipython keeps this always done for you. Note that
1285 anymore, since ipython keeps this always done for you. Note that
1281 only the LAST results are stored, the _o/e variables are
1286 only the LAST results are stored, the _o/e variables are
1282 overwritten on each call. If you need to save their contents
1287 overwritten on each call. If you need to save their contents
1283 further, simply bind them to any other name.
1288 further, simply bind them to any other name.
1284
1289
1285 2005-03-17 Fernando Perez <fperez@colorado.edu>
1290 2005-03-17 Fernando Perez <fperez@colorado.edu>
1286
1291
1287 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1292 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1288 prompt namespace handling.
1293 prompt namespace handling.
1289
1294
1290 2005-03-16 Fernando Perez <fperez@colorado.edu>
1295 2005-03-16 Fernando Perez <fperez@colorado.edu>
1291
1296
1292 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1297 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1293 classic prompts to be '>>> ' (final space was missing, and it
1298 classic prompts to be '>>> ' (final space was missing, and it
1294 trips the emacs python mode).
1299 trips the emacs python mode).
1295 (BasePrompt.__str__): Added safe support for dynamic prompt
1300 (BasePrompt.__str__): Added safe support for dynamic prompt
1296 strings. Now you can set your prompt string to be '$x', and the
1301 strings. Now you can set your prompt string to be '$x', and the
1297 value of x will be printed from your interactive namespace. The
1302 value of x will be printed from your interactive namespace. The
1298 interpolation syntax includes the full Itpl support, so
1303 interpolation syntax includes the full Itpl support, so
1299 ${foo()+x+bar()} is a valid prompt string now, and the function
1304 ${foo()+x+bar()} is a valid prompt string now, and the function
1300 calls will be made at runtime.
1305 calls will be made at runtime.
1301
1306
1302 2005-03-15 Fernando Perez <fperez@colorado.edu>
1307 2005-03-15 Fernando Perez <fperez@colorado.edu>
1303
1308
1304 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1309 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1305 avoid name clashes in pylab. %hist still works, it just forwards
1310 avoid name clashes in pylab. %hist still works, it just forwards
1306 the call to %history.
1311 the call to %history.
1307
1312
1308 2005-03-02 *** Released version 0.6.12
1313 2005-03-02 *** Released version 0.6.12
1309
1314
1310 2005-03-02 Fernando Perez <fperez@colorado.edu>
1315 2005-03-02 Fernando Perez <fperez@colorado.edu>
1311
1316
1312 * IPython/iplib.py (handle_magic): log magic calls properly as
1317 * IPython/iplib.py (handle_magic): log magic calls properly as
1313 ipmagic() function calls.
1318 ipmagic() function calls.
1314
1319
1315 * IPython/Magic.py (magic_time): Improved %time to support
1320 * IPython/Magic.py (magic_time): Improved %time to support
1316 statements and provide wall-clock as well as CPU time.
1321 statements and provide wall-clock as well as CPU time.
1317
1322
1318 2005-02-27 Fernando Perez <fperez@colorado.edu>
1323 2005-02-27 Fernando Perez <fperez@colorado.edu>
1319
1324
1320 * IPython/hooks.py: New hooks module, to expose user-modifiable
1325 * IPython/hooks.py: New hooks module, to expose user-modifiable
1321 IPython functionality in a clean manner. For now only the editor
1326 IPython functionality in a clean manner. For now only the editor
1322 hook is actually written, and other thigns which I intend to turn
1327 hook is actually written, and other thigns which I intend to turn
1323 into proper hooks aren't yet there. The display and prefilter
1328 into proper hooks aren't yet there. The display and prefilter
1324 stuff, for example, should be hooks. But at least now the
1329 stuff, for example, should be hooks. But at least now the
1325 framework is in place, and the rest can be moved here with more
1330 framework is in place, and the rest can be moved here with more
1326 time later. IPython had had a .hooks variable for a long time for
1331 time later. IPython had had a .hooks variable for a long time for
1327 this purpose, but I'd never actually used it for anything.
1332 this purpose, but I'd never actually used it for anything.
1328
1333
1329 2005-02-26 Fernando Perez <fperez@colorado.edu>
1334 2005-02-26 Fernando Perez <fperez@colorado.edu>
1330
1335
1331 * IPython/ipmaker.py (make_IPython): make the default ipython
1336 * IPython/ipmaker.py (make_IPython): make the default ipython
1332 directory be called _ipython under win32, to follow more the
1337 directory be called _ipython under win32, to follow more the
1333 naming peculiarities of that platform (where buggy software like
1338 naming peculiarities of that platform (where buggy software like
1334 Visual Sourcesafe breaks with .named directories). Reported by
1339 Visual Sourcesafe breaks with .named directories). Reported by
1335 Ville Vainio.
1340 Ville Vainio.
1336
1341
1337 2005-02-23 Fernando Perez <fperez@colorado.edu>
1342 2005-02-23 Fernando Perez <fperez@colorado.edu>
1338
1343
1339 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1344 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1340 auto_aliases for win32 which were causing problems. Users can
1345 auto_aliases for win32 which were causing problems. Users can
1341 define the ones they personally like.
1346 define the ones they personally like.
1342
1347
1343 2005-02-21 Fernando Perez <fperez@colorado.edu>
1348 2005-02-21 Fernando Perez <fperez@colorado.edu>
1344
1349
1345 * IPython/Magic.py (magic_time): new magic to time execution of
1350 * IPython/Magic.py (magic_time): new magic to time execution of
1346 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1351 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1347
1352
1348 2005-02-19 Fernando Perez <fperez@colorado.edu>
1353 2005-02-19 Fernando Perez <fperez@colorado.edu>
1349
1354
1350 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1355 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1351 into keys (for prompts, for example).
1356 into keys (for prompts, for example).
1352
1357
1353 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1358 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1354 prompts in case users want them. This introduces a small behavior
1359 prompts in case users want them. This introduces a small behavior
1355 change: ipython does not automatically add a space to all prompts
1360 change: ipython does not automatically add a space to all prompts
1356 anymore. To get the old prompts with a space, users should add it
1361 anymore. To get the old prompts with a space, users should add it
1357 manually to their ipythonrc file, so for example prompt_in1 should
1362 manually to their ipythonrc file, so for example prompt_in1 should
1358 now read 'In [\#]: ' instead of 'In [\#]:'.
1363 now read 'In [\#]: ' instead of 'In [\#]:'.
1359 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1364 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1360 file) to control left-padding of secondary prompts.
1365 file) to control left-padding of secondary prompts.
1361
1366
1362 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1367 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1363 the profiler can't be imported. Fix for Debian, which removed
1368 the profiler can't be imported. Fix for Debian, which removed
1364 profile.py because of License issues. I applied a slightly
1369 profile.py because of License issues. I applied a slightly
1365 modified version of the original Debian patch at
1370 modified version of the original Debian patch at
1366 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1371 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1367
1372
1368 2005-02-17 Fernando Perez <fperez@colorado.edu>
1373 2005-02-17 Fernando Perez <fperez@colorado.edu>
1369
1374
1370 * IPython/genutils.py (native_line_ends): Fix bug which would
1375 * IPython/genutils.py (native_line_ends): Fix bug which would
1371 cause improper line-ends under win32 b/c I was not opening files
1376 cause improper line-ends under win32 b/c I was not opening files
1372 in binary mode. Bug report and fix thanks to Ville.
1377 in binary mode. Bug report and fix thanks to Ville.
1373
1378
1374 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1379 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1375 trying to catch spurious foo[1] autocalls. My fix actually broke
1380 trying to catch spurious foo[1] autocalls. My fix actually broke
1376 ',/' autoquote/call with explicit escape (bad regexp).
1381 ',/' autoquote/call with explicit escape (bad regexp).
1377
1382
1378 2005-02-15 *** Released version 0.6.11
1383 2005-02-15 *** Released version 0.6.11
1379
1384
1380 2005-02-14 Fernando Perez <fperez@colorado.edu>
1385 2005-02-14 Fernando Perez <fperez@colorado.edu>
1381
1386
1382 * IPython/background_jobs.py: New background job management
1387 * IPython/background_jobs.py: New background job management
1383 subsystem. This is implemented via a new set of classes, and
1388 subsystem. This is implemented via a new set of classes, and
1384 IPython now provides a builtin 'jobs' object for background job
1389 IPython now provides a builtin 'jobs' object for background job
1385 execution. A convenience %bg magic serves as a lightweight
1390 execution. A convenience %bg magic serves as a lightweight
1386 frontend for starting the more common type of calls. This was
1391 frontend for starting the more common type of calls. This was
1387 inspired by discussions with B. Granger and the BackgroundCommand
1392 inspired by discussions with B. Granger and the BackgroundCommand
1388 class described in the book Python Scripting for Computational
1393 class described in the book Python Scripting for Computational
1389 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1394 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1390 (although ultimately no code from this text was used, as IPython's
1395 (although ultimately no code from this text was used, as IPython's
1391 system is a separate implementation).
1396 system is a separate implementation).
1392
1397
1393 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1398 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1394 to control the completion of single/double underscore names
1399 to control the completion of single/double underscore names
1395 separately. As documented in the example ipytonrc file, the
1400 separately. As documented in the example ipytonrc file, the
1396 readline_omit__names variable can now be set to 2, to omit even
1401 readline_omit__names variable can now be set to 2, to omit even
1397 single underscore names. Thanks to a patch by Brian Wong
1402 single underscore names. Thanks to a patch by Brian Wong
1398 <BrianWong-AT-AirgoNetworks.Com>.
1403 <BrianWong-AT-AirgoNetworks.Com>.
1399 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1404 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1400 be autocalled as foo([1]) if foo were callable. A problem for
1405 be autocalled as foo([1]) if foo were callable. A problem for
1401 things which are both callable and implement __getitem__.
1406 things which are both callable and implement __getitem__.
1402 (init_readline): Fix autoindentation for win32. Thanks to a patch
1407 (init_readline): Fix autoindentation for win32. Thanks to a patch
1403 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1408 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1404
1409
1405 2005-02-12 Fernando Perez <fperez@colorado.edu>
1410 2005-02-12 Fernando Perez <fperez@colorado.edu>
1406
1411
1407 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1412 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1408 which I had written long ago to sort out user error messages which
1413 which I had written long ago to sort out user error messages which
1409 may occur during startup. This seemed like a good idea initially,
1414 may occur during startup. This seemed like a good idea initially,
1410 but it has proven a disaster in retrospect. I don't want to
1415 but it has proven a disaster in retrospect. I don't want to
1411 change much code for now, so my fix is to set the internal 'debug'
1416 change much code for now, so my fix is to set the internal 'debug'
1412 flag to true everywhere, whose only job was precisely to control
1417 flag to true everywhere, whose only job was precisely to control
1413 this subsystem. This closes issue 28 (as well as avoiding all
1418 this subsystem. This closes issue 28 (as well as avoiding all
1414 sorts of strange hangups which occur from time to time).
1419 sorts of strange hangups which occur from time to time).
1415
1420
1416 2005-02-07 Fernando Perez <fperez@colorado.edu>
1421 2005-02-07 Fernando Perez <fperez@colorado.edu>
1417
1422
1418 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1423 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1419 previous call produced a syntax error.
1424 previous call produced a syntax error.
1420
1425
1421 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1426 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1422 classes without constructor.
1427 classes without constructor.
1423
1428
1424 2005-02-06 Fernando Perez <fperez@colorado.edu>
1429 2005-02-06 Fernando Perez <fperez@colorado.edu>
1425
1430
1426 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1431 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1427 completions with the results of each matcher, so we return results
1432 completions with the results of each matcher, so we return results
1428 to the user from all namespaces. This breaks with ipython
1433 to the user from all namespaces. This breaks with ipython
1429 tradition, but I think it's a nicer behavior. Now you get all
1434 tradition, but I think it's a nicer behavior. Now you get all
1430 possible completions listed, from all possible namespaces (python,
1435 possible completions listed, from all possible namespaces (python,
1431 filesystem, magics...) After a request by John Hunter
1436 filesystem, magics...) After a request by John Hunter
1432 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1437 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1433
1438
1434 2005-02-05 Fernando Perez <fperez@colorado.edu>
1439 2005-02-05 Fernando Perez <fperez@colorado.edu>
1435
1440
1436 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1441 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1437 the call had quote characters in it (the quotes were stripped).
1442 the call had quote characters in it (the quotes were stripped).
1438
1443
1439 2005-01-31 Fernando Perez <fperez@colorado.edu>
1444 2005-01-31 Fernando Perez <fperez@colorado.edu>
1440
1445
1441 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1446 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1442 Itpl.itpl() to make the code more robust against psyco
1447 Itpl.itpl() to make the code more robust against psyco
1443 optimizations.
1448 optimizations.
1444
1449
1445 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1450 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1446 of causing an exception. Quicker, cleaner.
1451 of causing an exception. Quicker, cleaner.
1447
1452
1448 2005-01-28 Fernando Perez <fperez@colorado.edu>
1453 2005-01-28 Fernando Perez <fperez@colorado.edu>
1449
1454
1450 * scripts/ipython_win_post_install.py (install): hardcode
1455 * scripts/ipython_win_post_install.py (install): hardcode
1451 sys.prefix+'python.exe' as the executable path. It turns out that
1456 sys.prefix+'python.exe' as the executable path. It turns out that
1452 during the post-installation run, sys.executable resolves to the
1457 during the post-installation run, sys.executable resolves to the
1453 name of the binary installer! I should report this as a distutils
1458 name of the binary installer! I should report this as a distutils
1454 bug, I think. I updated the .10 release with this tiny fix, to
1459 bug, I think. I updated the .10 release with this tiny fix, to
1455 avoid annoying the lists further.
1460 avoid annoying the lists further.
1456
1461
1457 2005-01-27 *** Released version 0.6.10
1462 2005-01-27 *** Released version 0.6.10
1458
1463
1459 2005-01-27 Fernando Perez <fperez@colorado.edu>
1464 2005-01-27 Fernando Perez <fperez@colorado.edu>
1460
1465
1461 * IPython/numutils.py (norm): Added 'inf' as optional name for
1466 * IPython/numutils.py (norm): Added 'inf' as optional name for
1462 L-infinity norm, included references to mathworld.com for vector
1467 L-infinity norm, included references to mathworld.com for vector
1463 norm definitions.
1468 norm definitions.
1464 (amin/amax): added amin/amax for array min/max. Similar to what
1469 (amin/amax): added amin/amax for array min/max. Similar to what
1465 pylab ships with after the recent reorganization of names.
1470 pylab ships with after the recent reorganization of names.
1466 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1471 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1467
1472
1468 * ipython.el: committed Alex's recent fixes and improvements.
1473 * ipython.el: committed Alex's recent fixes and improvements.
1469 Tested with python-mode from CVS, and it looks excellent. Since
1474 Tested with python-mode from CVS, and it looks excellent. Since
1470 python-mode hasn't released anything in a while, I'm temporarily
1475 python-mode hasn't released anything in a while, I'm temporarily
1471 putting a copy of today's CVS (v 4.70) of python-mode in:
1476 putting a copy of today's CVS (v 4.70) of python-mode in:
1472 http://ipython.scipy.org/tmp/python-mode.el
1477 http://ipython.scipy.org/tmp/python-mode.el
1473
1478
1474 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1479 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1475 sys.executable for the executable name, instead of assuming it's
1480 sys.executable for the executable name, instead of assuming it's
1476 called 'python.exe' (the post-installer would have produced broken
1481 called 'python.exe' (the post-installer would have produced broken
1477 setups on systems with a differently named python binary).
1482 setups on systems with a differently named python binary).
1478
1483
1479 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1484 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1480 references to os.linesep, to make the code more
1485 references to os.linesep, to make the code more
1481 platform-independent. This is also part of the win32 coloring
1486 platform-independent. This is also part of the win32 coloring
1482 fixes.
1487 fixes.
1483
1488
1484 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1489 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1485 lines, which actually cause coloring bugs because the length of
1490 lines, which actually cause coloring bugs because the length of
1486 the line is very difficult to correctly compute with embedded
1491 the line is very difficult to correctly compute with embedded
1487 escapes. This was the source of all the coloring problems under
1492 escapes. This was the source of all the coloring problems under
1488 Win32. I think that _finally_, Win32 users have a properly
1493 Win32. I think that _finally_, Win32 users have a properly
1489 working ipython in all respects. This would never have happened
1494 working ipython in all respects. This would never have happened
1490 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1495 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1491
1496
1492 2005-01-26 *** Released version 0.6.9
1497 2005-01-26 *** Released version 0.6.9
1493
1498
1494 2005-01-25 Fernando Perez <fperez@colorado.edu>
1499 2005-01-25 Fernando Perez <fperez@colorado.edu>
1495
1500
1496 * setup.py: finally, we have a true Windows installer, thanks to
1501 * setup.py: finally, we have a true Windows installer, thanks to
1497 the excellent work of Viktor Ransmayr
1502 the excellent work of Viktor Ransmayr
1498 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1503 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1499 Windows users. The setup routine is quite a bit cleaner thanks to
1504 Windows users. The setup routine is quite a bit cleaner thanks to
1500 this, and the post-install script uses the proper functions to
1505 this, and the post-install script uses the proper functions to
1501 allow a clean de-installation using the standard Windows Control
1506 allow a clean de-installation using the standard Windows Control
1502 Panel.
1507 Panel.
1503
1508
1504 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1509 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1505 environment variable under all OSes (including win32) if
1510 environment variable under all OSes (including win32) if
1506 available. This will give consistency to win32 users who have set
1511 available. This will give consistency to win32 users who have set
1507 this variable for any reason. If os.environ['HOME'] fails, the
1512 this variable for any reason. If os.environ['HOME'] fails, the
1508 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1513 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1509
1514
1510 2005-01-24 Fernando Perez <fperez@colorado.edu>
1515 2005-01-24 Fernando Perez <fperez@colorado.edu>
1511
1516
1512 * IPython/numutils.py (empty_like): add empty_like(), similar to
1517 * IPython/numutils.py (empty_like): add empty_like(), similar to
1513 zeros_like() but taking advantage of the new empty() Numeric routine.
1518 zeros_like() but taking advantage of the new empty() Numeric routine.
1514
1519
1515 2005-01-23 *** Released version 0.6.8
1520 2005-01-23 *** Released version 0.6.8
1516
1521
1517 2005-01-22 Fernando Perez <fperez@colorado.edu>
1522 2005-01-22 Fernando Perez <fperez@colorado.edu>
1518
1523
1519 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1524 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1520 automatic show() calls. After discussing things with JDH, it
1525 automatic show() calls. After discussing things with JDH, it
1521 turns out there are too many corner cases where this can go wrong.
1526 turns out there are too many corner cases where this can go wrong.
1522 It's best not to try to be 'too smart', and simply have ipython
1527 It's best not to try to be 'too smart', and simply have ipython
1523 reproduce as much as possible the default behavior of a normal
1528 reproduce as much as possible the default behavior of a normal
1524 python shell.
1529 python shell.
1525
1530
1526 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1531 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1527 line-splitting regexp and _prefilter() to avoid calling getattr()
1532 line-splitting regexp and _prefilter() to avoid calling getattr()
1528 on assignments. This closes
1533 on assignments. This closes
1529 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1534 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1530 readline uses getattr(), so a simple <TAB> keypress is still
1535 readline uses getattr(), so a simple <TAB> keypress is still
1531 enough to trigger getattr() calls on an object.
1536 enough to trigger getattr() calls on an object.
1532
1537
1533 2005-01-21 Fernando Perez <fperez@colorado.edu>
1538 2005-01-21 Fernando Perez <fperez@colorado.edu>
1534
1539
1535 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1540 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1536 docstring under pylab so it doesn't mask the original.
1541 docstring under pylab so it doesn't mask the original.
1537
1542
1538 2005-01-21 *** Released version 0.6.7
1543 2005-01-21 *** Released version 0.6.7
1539
1544
1540 2005-01-21 Fernando Perez <fperez@colorado.edu>
1545 2005-01-21 Fernando Perez <fperez@colorado.edu>
1541
1546
1542 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1547 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1543 signal handling for win32 users in multithreaded mode.
1548 signal handling for win32 users in multithreaded mode.
1544
1549
1545 2005-01-17 Fernando Perez <fperez@colorado.edu>
1550 2005-01-17 Fernando Perez <fperez@colorado.edu>
1546
1551
1547 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1552 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1548 instances with no __init__. After a crash report by Norbert Nemec
1553 instances with no __init__. After a crash report by Norbert Nemec
1549 <Norbert-AT-nemec-online.de>.
1554 <Norbert-AT-nemec-online.de>.
1550
1555
1551 2005-01-14 Fernando Perez <fperez@colorado.edu>
1556 2005-01-14 Fernando Perez <fperez@colorado.edu>
1552
1557
1553 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1558 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1554 names for verbose exceptions, when multiple dotted names and the
1559 names for verbose exceptions, when multiple dotted names and the
1555 'parent' object were present on the same line.
1560 'parent' object were present on the same line.
1556
1561
1557 2005-01-11 Fernando Perez <fperez@colorado.edu>
1562 2005-01-11 Fernando Perez <fperez@colorado.edu>
1558
1563
1559 * IPython/genutils.py (flag_calls): new utility to trap and flag
1564 * IPython/genutils.py (flag_calls): new utility to trap and flag
1560 calls in functions. I need it to clean up matplotlib support.
1565 calls in functions. I need it to clean up matplotlib support.
1561 Also removed some deprecated code in genutils.
1566 Also removed some deprecated code in genutils.
1562
1567
1563 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1568 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1564 that matplotlib scripts called with %run, which don't call show()
1569 that matplotlib scripts called with %run, which don't call show()
1565 themselves, still have their plotting windows open.
1570 themselves, still have their plotting windows open.
1566
1571
1567 2005-01-05 Fernando Perez <fperez@colorado.edu>
1572 2005-01-05 Fernando Perez <fperez@colorado.edu>
1568
1573
1569 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1574 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1570 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1575 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1571
1576
1572 2004-12-19 Fernando Perez <fperez@colorado.edu>
1577 2004-12-19 Fernando Perez <fperez@colorado.edu>
1573
1578
1574 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1579 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1575 parent_runcode, which was an eyesore. The same result can be
1580 parent_runcode, which was an eyesore. The same result can be
1576 obtained with Python's regular superclass mechanisms.
1581 obtained with Python's regular superclass mechanisms.
1577
1582
1578 2004-12-17 Fernando Perez <fperez@colorado.edu>
1583 2004-12-17 Fernando Perez <fperez@colorado.edu>
1579
1584
1580 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1585 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1581 reported by Prabhu.
1586 reported by Prabhu.
1582 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1587 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1583 sys.stderr) instead of explicitly calling sys.stderr. This helps
1588 sys.stderr) instead of explicitly calling sys.stderr. This helps
1584 maintain our I/O abstractions clean, for future GUI embeddings.
1589 maintain our I/O abstractions clean, for future GUI embeddings.
1585
1590
1586 * IPython/genutils.py (info): added new utility for sys.stderr
1591 * IPython/genutils.py (info): added new utility for sys.stderr
1587 unified info message handling (thin wrapper around warn()).
1592 unified info message handling (thin wrapper around warn()).
1588
1593
1589 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1594 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1590 composite (dotted) names on verbose exceptions.
1595 composite (dotted) names on verbose exceptions.
1591 (VerboseTB.nullrepr): harden against another kind of errors which
1596 (VerboseTB.nullrepr): harden against another kind of errors which
1592 Python's inspect module can trigger, and which were crashing
1597 Python's inspect module can trigger, and which were crashing
1593 IPython. Thanks to a report by Marco Lombardi
1598 IPython. Thanks to a report by Marco Lombardi
1594 <mlombard-AT-ma010192.hq.eso.org>.
1599 <mlombard-AT-ma010192.hq.eso.org>.
1595
1600
1596 2004-12-13 *** Released version 0.6.6
1601 2004-12-13 *** Released version 0.6.6
1597
1602
1598 2004-12-12 Fernando Perez <fperez@colorado.edu>
1603 2004-12-12 Fernando Perez <fperez@colorado.edu>
1599
1604
1600 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1605 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1601 generated by pygtk upon initialization if it was built without
1606 generated by pygtk upon initialization if it was built without
1602 threads (for matplotlib users). After a crash reported by
1607 threads (for matplotlib users). After a crash reported by
1603 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1608 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1604
1609
1605 * IPython/ipmaker.py (make_IPython): fix small bug in the
1610 * IPython/ipmaker.py (make_IPython): fix small bug in the
1606 import_some parameter for multiple imports.
1611 import_some parameter for multiple imports.
1607
1612
1608 * IPython/iplib.py (ipmagic): simplified the interface of
1613 * IPython/iplib.py (ipmagic): simplified the interface of
1609 ipmagic() to take a single string argument, just as it would be
1614 ipmagic() to take a single string argument, just as it would be
1610 typed at the IPython cmd line.
1615 typed at the IPython cmd line.
1611 (ipalias): Added new ipalias() with an interface identical to
1616 (ipalias): Added new ipalias() with an interface identical to
1612 ipmagic(). This completes exposing a pure python interface to the
1617 ipmagic(). This completes exposing a pure python interface to the
1613 alias and magic system, which can be used in loops or more complex
1618 alias and magic system, which can be used in loops or more complex
1614 code where IPython's automatic line mangling is not active.
1619 code where IPython's automatic line mangling is not active.
1615
1620
1616 * IPython/genutils.py (timing): changed interface of timing to
1621 * IPython/genutils.py (timing): changed interface of timing to
1617 simply run code once, which is the most common case. timings()
1622 simply run code once, which is the most common case. timings()
1618 remains unchanged, for the cases where you want multiple runs.
1623 remains unchanged, for the cases where you want multiple runs.
1619
1624
1620 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1625 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1621 bug where Python2.2 crashes with exec'ing code which does not end
1626 bug where Python2.2 crashes with exec'ing code which does not end
1622 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1627 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1623 before.
1628 before.
1624
1629
1625 2004-12-10 Fernando Perez <fperez@colorado.edu>
1630 2004-12-10 Fernando Perez <fperez@colorado.edu>
1626
1631
1627 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1632 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1628 -t to -T, to accomodate the new -t flag in %run (the %run and
1633 -t to -T, to accomodate the new -t flag in %run (the %run and
1629 %prun options are kind of intermixed, and it's not easy to change
1634 %prun options are kind of intermixed, and it's not easy to change
1630 this with the limitations of python's getopt).
1635 this with the limitations of python's getopt).
1631
1636
1632 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1637 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1633 the execution of scripts. It's not as fine-tuned as timeit.py,
1638 the execution of scripts. It's not as fine-tuned as timeit.py,
1634 but it works from inside ipython (and under 2.2, which lacks
1639 but it works from inside ipython (and under 2.2, which lacks
1635 timeit.py). Optionally a number of runs > 1 can be given for
1640 timeit.py). Optionally a number of runs > 1 can be given for
1636 timing very short-running code.
1641 timing very short-running code.
1637
1642
1638 * IPython/genutils.py (uniq_stable): new routine which returns a
1643 * IPython/genutils.py (uniq_stable): new routine which returns a
1639 list of unique elements in any iterable, but in stable order of
1644 list of unique elements in any iterable, but in stable order of
1640 appearance. I needed this for the ultraTB fixes, and it's a handy
1645 appearance. I needed this for the ultraTB fixes, and it's a handy
1641 utility.
1646 utility.
1642
1647
1643 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1648 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1644 dotted names in Verbose exceptions. This had been broken since
1649 dotted names in Verbose exceptions. This had been broken since
1645 the very start, now x.y will properly be printed in a Verbose
1650 the very start, now x.y will properly be printed in a Verbose
1646 traceback, instead of x being shown and y appearing always as an
1651 traceback, instead of x being shown and y appearing always as an
1647 'undefined global'. Getting this to work was a bit tricky,
1652 'undefined global'. Getting this to work was a bit tricky,
1648 because by default python tokenizers are stateless. Saved by
1653 because by default python tokenizers are stateless. Saved by
1649 python's ability to easily add a bit of state to an arbitrary
1654 python's ability to easily add a bit of state to an arbitrary
1650 function (without needing to build a full-blown callable object).
1655 function (without needing to build a full-blown callable object).
1651
1656
1652 Also big cleanup of this code, which had horrendous runtime
1657 Also big cleanup of this code, which had horrendous runtime
1653 lookups of zillions of attributes for colorization. Moved all
1658 lookups of zillions of attributes for colorization. Moved all
1654 this code into a few templates, which make it cleaner and quicker.
1659 this code into a few templates, which make it cleaner and quicker.
1655
1660
1656 Printout quality was also improved for Verbose exceptions: one
1661 Printout quality was also improved for Verbose exceptions: one
1657 variable per line, and memory addresses are printed (this can be
1662 variable per line, and memory addresses are printed (this can be
1658 quite handy in nasty debugging situations, which is what Verbose
1663 quite handy in nasty debugging situations, which is what Verbose
1659 is for).
1664 is for).
1660
1665
1661 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1666 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1662 the command line as scripts to be loaded by embedded instances.
1667 the command line as scripts to be loaded by embedded instances.
1663 Doing so has the potential for an infinite recursion if there are
1668 Doing so has the potential for an infinite recursion if there are
1664 exceptions thrown in the process. This fixes a strange crash
1669 exceptions thrown in the process. This fixes a strange crash
1665 reported by Philippe MULLER <muller-AT-irit.fr>.
1670 reported by Philippe MULLER <muller-AT-irit.fr>.
1666
1671
1667 2004-12-09 Fernando Perez <fperez@colorado.edu>
1672 2004-12-09 Fernando Perez <fperez@colorado.edu>
1668
1673
1669 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1674 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1670 to reflect new names in matplotlib, which now expose the
1675 to reflect new names in matplotlib, which now expose the
1671 matlab-compatible interface via a pylab module instead of the
1676 matlab-compatible interface via a pylab module instead of the
1672 'matlab' name. The new code is backwards compatible, so users of
1677 'matlab' name. The new code is backwards compatible, so users of
1673 all matplotlib versions are OK. Patch by J. Hunter.
1678 all matplotlib versions are OK. Patch by J. Hunter.
1674
1679
1675 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1680 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1676 of __init__ docstrings for instances (class docstrings are already
1681 of __init__ docstrings for instances (class docstrings are already
1677 automatically printed). Instances with customized docstrings
1682 automatically printed). Instances with customized docstrings
1678 (indep. of the class) are also recognized and all 3 separate
1683 (indep. of the class) are also recognized and all 3 separate
1679 docstrings are printed (instance, class, constructor). After some
1684 docstrings are printed (instance, class, constructor). After some
1680 comments/suggestions by J. Hunter.
1685 comments/suggestions by J. Hunter.
1681
1686
1682 2004-12-05 Fernando Perez <fperez@colorado.edu>
1687 2004-12-05 Fernando Perez <fperez@colorado.edu>
1683
1688
1684 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1689 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1685 warnings when tab-completion fails and triggers an exception.
1690 warnings when tab-completion fails and triggers an exception.
1686
1691
1687 2004-12-03 Fernando Perez <fperez@colorado.edu>
1692 2004-12-03 Fernando Perez <fperez@colorado.edu>
1688
1693
1689 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1694 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1690 be triggered when using 'run -p'. An incorrect option flag was
1695 be triggered when using 'run -p'. An incorrect option flag was
1691 being set ('d' instead of 'D').
1696 being set ('d' instead of 'D').
1692 (manpage): fix missing escaped \- sign.
1697 (manpage): fix missing escaped \- sign.
1693
1698
1694 2004-11-30 *** Released version 0.6.5
1699 2004-11-30 *** Released version 0.6.5
1695
1700
1696 2004-11-30 Fernando Perez <fperez@colorado.edu>
1701 2004-11-30 Fernando Perez <fperez@colorado.edu>
1697
1702
1698 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1703 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1699 setting with -d option.
1704 setting with -d option.
1700
1705
1701 * setup.py (docfiles): Fix problem where the doc glob I was using
1706 * setup.py (docfiles): Fix problem where the doc glob I was using
1702 was COMPLETELY BROKEN. It was giving the right files by pure
1707 was COMPLETELY BROKEN. It was giving the right files by pure
1703 accident, but failed once I tried to include ipython.el. Note:
1708 accident, but failed once I tried to include ipython.el. Note:
1704 glob() does NOT allow you to do exclusion on multiple endings!
1709 glob() does NOT allow you to do exclusion on multiple endings!
1705
1710
1706 2004-11-29 Fernando Perez <fperez@colorado.edu>
1711 2004-11-29 Fernando Perez <fperez@colorado.edu>
1707
1712
1708 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1713 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1709 the manpage as the source. Better formatting & consistency.
1714 the manpage as the source. Better formatting & consistency.
1710
1715
1711 * IPython/Magic.py (magic_run): Added new -d option, to run
1716 * IPython/Magic.py (magic_run): Added new -d option, to run
1712 scripts under the control of the python pdb debugger. Note that
1717 scripts under the control of the python pdb debugger. Note that
1713 this required changing the %prun option -d to -D, to avoid a clash
1718 this required changing the %prun option -d to -D, to avoid a clash
1714 (since %run must pass options to %prun, and getopt is too dumb to
1719 (since %run must pass options to %prun, and getopt is too dumb to
1715 handle options with string values with embedded spaces). Thanks
1720 handle options with string values with embedded spaces). Thanks
1716 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1721 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1717 (magic_who_ls): added type matching to %who and %whos, so that one
1722 (magic_who_ls): added type matching to %who and %whos, so that one
1718 can filter their output to only include variables of certain
1723 can filter their output to only include variables of certain
1719 types. Another suggestion by Matthew.
1724 types. Another suggestion by Matthew.
1720 (magic_whos): Added memory summaries in kb and Mb for arrays.
1725 (magic_whos): Added memory summaries in kb and Mb for arrays.
1721 (magic_who): Improve formatting (break lines every 9 vars).
1726 (magic_who): Improve formatting (break lines every 9 vars).
1722
1727
1723 2004-11-28 Fernando Perez <fperez@colorado.edu>
1728 2004-11-28 Fernando Perez <fperez@colorado.edu>
1724
1729
1725 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1730 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1726 cache when empty lines were present.
1731 cache when empty lines were present.
1727
1732
1728 2004-11-24 Fernando Perez <fperez@colorado.edu>
1733 2004-11-24 Fernando Perez <fperez@colorado.edu>
1729
1734
1730 * IPython/usage.py (__doc__): document the re-activated threading
1735 * IPython/usage.py (__doc__): document the re-activated threading
1731 options for WX and GTK.
1736 options for WX and GTK.
1732
1737
1733 2004-11-23 Fernando Perez <fperez@colorado.edu>
1738 2004-11-23 Fernando Perez <fperez@colorado.edu>
1734
1739
1735 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1740 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1736 the -wthread and -gthread options, along with a new -tk one to try
1741 the -wthread and -gthread options, along with a new -tk one to try
1737 and coordinate Tk threading with wx/gtk. The tk support is very
1742 and coordinate Tk threading with wx/gtk. The tk support is very
1738 platform dependent, since it seems to require Tcl and Tk to be
1743 platform dependent, since it seems to require Tcl and Tk to be
1739 built with threads (Fedora1/2 appears NOT to have it, but in
1744 built with threads (Fedora1/2 appears NOT to have it, but in
1740 Prabhu's Debian boxes it works OK). But even with some Tk
1745 Prabhu's Debian boxes it works OK). But even with some Tk
1741 limitations, this is a great improvement.
1746 limitations, this is a great improvement.
1742
1747
1743 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1748 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1744 info in user prompts. Patch by Prabhu.
1749 info in user prompts. Patch by Prabhu.
1745
1750
1746 2004-11-18 Fernando Perez <fperez@colorado.edu>
1751 2004-11-18 Fernando Perez <fperez@colorado.edu>
1747
1752
1748 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1753 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1749 EOFErrors and bail, to avoid infinite loops if a non-terminating
1754 EOFErrors and bail, to avoid infinite loops if a non-terminating
1750 file is fed into ipython. Patch submitted in issue 19 by user,
1755 file is fed into ipython. Patch submitted in issue 19 by user,
1751 many thanks.
1756 many thanks.
1752
1757
1753 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1758 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1754 autoquote/parens in continuation prompts, which can cause lots of
1759 autoquote/parens in continuation prompts, which can cause lots of
1755 problems. Closes roundup issue 20.
1760 problems. Closes roundup issue 20.
1756
1761
1757 2004-11-17 Fernando Perez <fperez@colorado.edu>
1762 2004-11-17 Fernando Perez <fperez@colorado.edu>
1758
1763
1759 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1764 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1760 reported as debian bug #280505. I'm not sure my local changelog
1765 reported as debian bug #280505. I'm not sure my local changelog
1761 entry has the proper debian format (Jack?).
1766 entry has the proper debian format (Jack?).
1762
1767
1763 2004-11-08 *** Released version 0.6.4
1768 2004-11-08 *** Released version 0.6.4
1764
1769
1765 2004-11-08 Fernando Perez <fperez@colorado.edu>
1770 2004-11-08 Fernando Perez <fperez@colorado.edu>
1766
1771
1767 * IPython/iplib.py (init_readline): Fix exit message for Windows
1772 * IPython/iplib.py (init_readline): Fix exit message for Windows
1768 when readline is active. Thanks to a report by Eric Jones
1773 when readline is active. Thanks to a report by Eric Jones
1769 <eric-AT-enthought.com>.
1774 <eric-AT-enthought.com>.
1770
1775
1771 2004-11-07 Fernando Perez <fperez@colorado.edu>
1776 2004-11-07 Fernando Perez <fperez@colorado.edu>
1772
1777
1773 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1778 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1774 sometimes seen by win2k/cygwin users.
1779 sometimes seen by win2k/cygwin users.
1775
1780
1776 2004-11-06 Fernando Perez <fperez@colorado.edu>
1781 2004-11-06 Fernando Perez <fperez@colorado.edu>
1777
1782
1778 * IPython/iplib.py (interact): Change the handling of %Exit from
1783 * IPython/iplib.py (interact): Change the handling of %Exit from
1779 trying to propagate a SystemExit to an internal ipython flag.
1784 trying to propagate a SystemExit to an internal ipython flag.
1780 This is less elegant than using Python's exception mechanism, but
1785 This is less elegant than using Python's exception mechanism, but
1781 I can't get that to work reliably with threads, so under -pylab
1786 I can't get that to work reliably with threads, so under -pylab
1782 %Exit was hanging IPython. Cross-thread exception handling is
1787 %Exit was hanging IPython. Cross-thread exception handling is
1783 really a bitch. Thaks to a bug report by Stephen Walton
1788 really a bitch. Thaks to a bug report by Stephen Walton
1784 <stephen.walton-AT-csun.edu>.
1789 <stephen.walton-AT-csun.edu>.
1785
1790
1786 2004-11-04 Fernando Perez <fperez@colorado.edu>
1791 2004-11-04 Fernando Perez <fperez@colorado.edu>
1787
1792
1788 * IPython/iplib.py (raw_input_original): store a pointer to the
1793 * IPython/iplib.py (raw_input_original): store a pointer to the
1789 true raw_input to harden against code which can modify it
1794 true raw_input to harden against code which can modify it
1790 (wx.py.PyShell does this and would otherwise crash ipython).
1795 (wx.py.PyShell does this and would otherwise crash ipython).
1791 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1796 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1792
1797
1793 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1798 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1794 Ctrl-C problem, which does not mess up the input line.
1799 Ctrl-C problem, which does not mess up the input line.
1795
1800
1796 2004-11-03 Fernando Perez <fperez@colorado.edu>
1801 2004-11-03 Fernando Perez <fperez@colorado.edu>
1797
1802
1798 * IPython/Release.py: Changed licensing to BSD, in all files.
1803 * IPython/Release.py: Changed licensing to BSD, in all files.
1799 (name): lowercase name for tarball/RPM release.
1804 (name): lowercase name for tarball/RPM release.
1800
1805
1801 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1806 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1802 use throughout ipython.
1807 use throughout ipython.
1803
1808
1804 * IPython/Magic.py (Magic._ofind): Switch to using the new
1809 * IPython/Magic.py (Magic._ofind): Switch to using the new
1805 OInspect.getdoc() function.
1810 OInspect.getdoc() function.
1806
1811
1807 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1812 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1808 of the line currently being canceled via Ctrl-C. It's extremely
1813 of the line currently being canceled via Ctrl-C. It's extremely
1809 ugly, but I don't know how to do it better (the problem is one of
1814 ugly, but I don't know how to do it better (the problem is one of
1810 handling cross-thread exceptions).
1815 handling cross-thread exceptions).
1811
1816
1812 2004-10-28 Fernando Perez <fperez@colorado.edu>
1817 2004-10-28 Fernando Perez <fperez@colorado.edu>
1813
1818
1814 * IPython/Shell.py (signal_handler): add signal handlers to trap
1819 * IPython/Shell.py (signal_handler): add signal handlers to trap
1815 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1820 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1816 report by Francesc Alted.
1821 report by Francesc Alted.
1817
1822
1818 2004-10-21 Fernando Perez <fperez@colorado.edu>
1823 2004-10-21 Fernando Perez <fperez@colorado.edu>
1819
1824
1820 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1825 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1821 to % for pysh syntax extensions.
1826 to % for pysh syntax extensions.
1822
1827
1823 2004-10-09 Fernando Perez <fperez@colorado.edu>
1828 2004-10-09 Fernando Perez <fperez@colorado.edu>
1824
1829
1825 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1830 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1826 arrays to print a more useful summary, without calling str(arr).
1831 arrays to print a more useful summary, without calling str(arr).
1827 This avoids the problem of extremely lengthy computations which
1832 This avoids the problem of extremely lengthy computations which
1828 occur if arr is large, and appear to the user as a system lockup
1833 occur if arr is large, and appear to the user as a system lockup
1829 with 100% cpu activity. After a suggestion by Kristian Sandberg
1834 with 100% cpu activity. After a suggestion by Kristian Sandberg
1830 <Kristian.Sandberg@colorado.edu>.
1835 <Kristian.Sandberg@colorado.edu>.
1831 (Magic.__init__): fix bug in global magic escapes not being
1836 (Magic.__init__): fix bug in global magic escapes not being
1832 correctly set.
1837 correctly set.
1833
1838
1834 2004-10-08 Fernando Perez <fperez@colorado.edu>
1839 2004-10-08 Fernando Perez <fperez@colorado.edu>
1835
1840
1836 * IPython/Magic.py (__license__): change to absolute imports of
1841 * IPython/Magic.py (__license__): change to absolute imports of
1837 ipython's own internal packages, to start adapting to the absolute
1842 ipython's own internal packages, to start adapting to the absolute
1838 import requirement of PEP-328.
1843 import requirement of PEP-328.
1839
1844
1840 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1845 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1841 files, and standardize author/license marks through the Release
1846 files, and standardize author/license marks through the Release
1842 module instead of having per/file stuff (except for files with
1847 module instead of having per/file stuff (except for files with
1843 particular licenses, like the MIT/PSF-licensed codes).
1848 particular licenses, like the MIT/PSF-licensed codes).
1844
1849
1845 * IPython/Debugger.py: remove dead code for python 2.1
1850 * IPython/Debugger.py: remove dead code for python 2.1
1846
1851
1847 2004-10-04 Fernando Perez <fperez@colorado.edu>
1852 2004-10-04 Fernando Perez <fperez@colorado.edu>
1848
1853
1849 * IPython/iplib.py (ipmagic): New function for accessing magics
1854 * IPython/iplib.py (ipmagic): New function for accessing magics
1850 via a normal python function call.
1855 via a normal python function call.
1851
1856
1852 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1857 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1853 from '@' to '%', to accomodate the new @decorator syntax of python
1858 from '@' to '%', to accomodate the new @decorator syntax of python
1854 2.4.
1859 2.4.
1855
1860
1856 2004-09-29 Fernando Perez <fperez@colorado.edu>
1861 2004-09-29 Fernando Perez <fperez@colorado.edu>
1857
1862
1858 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1863 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1859 matplotlib.use to prevent running scripts which try to switch
1864 matplotlib.use to prevent running scripts which try to switch
1860 interactive backends from within ipython. This will just crash
1865 interactive backends from within ipython. This will just crash
1861 the python interpreter, so we can't allow it (but a detailed error
1866 the python interpreter, so we can't allow it (but a detailed error
1862 is given to the user).
1867 is given to the user).
1863
1868
1864 2004-09-28 Fernando Perez <fperez@colorado.edu>
1869 2004-09-28 Fernando Perez <fperez@colorado.edu>
1865
1870
1866 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1871 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1867 matplotlib-related fixes so that using @run with non-matplotlib
1872 matplotlib-related fixes so that using @run with non-matplotlib
1868 scripts doesn't pop up spurious plot windows. This requires
1873 scripts doesn't pop up spurious plot windows. This requires
1869 matplotlib >= 0.63, where I had to make some changes as well.
1874 matplotlib >= 0.63, where I had to make some changes as well.
1870
1875
1871 * IPython/ipmaker.py (make_IPython): update version requirement to
1876 * IPython/ipmaker.py (make_IPython): update version requirement to
1872 python 2.2.
1877 python 2.2.
1873
1878
1874 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1879 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1875 banner arg for embedded customization.
1880 banner arg for embedded customization.
1876
1881
1877 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1882 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1878 explicit uses of __IP as the IPython's instance name. Now things
1883 explicit uses of __IP as the IPython's instance name. Now things
1879 are properly handled via the shell.name value. The actual code
1884 are properly handled via the shell.name value. The actual code
1880 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1885 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1881 is much better than before. I'll clean things completely when the
1886 is much better than before. I'll clean things completely when the
1882 magic stuff gets a real overhaul.
1887 magic stuff gets a real overhaul.
1883
1888
1884 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1889 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1885 minor changes to debian dir.
1890 minor changes to debian dir.
1886
1891
1887 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1892 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1888 pointer to the shell itself in the interactive namespace even when
1893 pointer to the shell itself in the interactive namespace even when
1889 a user-supplied dict is provided. This is needed for embedding
1894 a user-supplied dict is provided. This is needed for embedding
1890 purposes (found by tests with Michel Sanner).
1895 purposes (found by tests with Michel Sanner).
1891
1896
1892 2004-09-27 Fernando Perez <fperez@colorado.edu>
1897 2004-09-27 Fernando Perez <fperez@colorado.edu>
1893
1898
1894 * IPython/UserConfig/ipythonrc: remove []{} from
1899 * IPython/UserConfig/ipythonrc: remove []{} from
1895 readline_remove_delims, so that things like [modname.<TAB> do
1900 readline_remove_delims, so that things like [modname.<TAB> do
1896 proper completion. This disables [].TAB, but that's a less common
1901 proper completion. This disables [].TAB, but that's a less common
1897 case than module names in list comprehensions, for example.
1902 case than module names in list comprehensions, for example.
1898 Thanks to a report by Andrea Riciputi.
1903 Thanks to a report by Andrea Riciputi.
1899
1904
1900 2004-09-09 Fernando Perez <fperez@colorado.edu>
1905 2004-09-09 Fernando Perez <fperez@colorado.edu>
1901
1906
1902 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1907 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1903 blocking problems in win32 and osx. Fix by John.
1908 blocking problems in win32 and osx. Fix by John.
1904
1909
1905 2004-09-08 Fernando Perez <fperez@colorado.edu>
1910 2004-09-08 Fernando Perez <fperez@colorado.edu>
1906
1911
1907 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1912 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1908 for Win32 and OSX. Fix by John Hunter.
1913 for Win32 and OSX. Fix by John Hunter.
1909
1914
1910 2004-08-30 *** Released version 0.6.3
1915 2004-08-30 *** Released version 0.6.3
1911
1916
1912 2004-08-30 Fernando Perez <fperez@colorado.edu>
1917 2004-08-30 Fernando Perez <fperez@colorado.edu>
1913
1918
1914 * setup.py (isfile): Add manpages to list of dependent files to be
1919 * setup.py (isfile): Add manpages to list of dependent files to be
1915 updated.
1920 updated.
1916
1921
1917 2004-08-27 Fernando Perez <fperez@colorado.edu>
1922 2004-08-27 Fernando Perez <fperez@colorado.edu>
1918
1923
1919 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1924 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1920 for now. They don't really work with standalone WX/GTK code
1925 for now. They don't really work with standalone WX/GTK code
1921 (though matplotlib IS working fine with both of those backends).
1926 (though matplotlib IS working fine with both of those backends).
1922 This will neeed much more testing. I disabled most things with
1927 This will neeed much more testing. I disabled most things with
1923 comments, so turning it back on later should be pretty easy.
1928 comments, so turning it back on later should be pretty easy.
1924
1929
1925 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1930 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1926 autocalling of expressions like r'foo', by modifying the line
1931 autocalling of expressions like r'foo', by modifying the line
1927 split regexp. Closes
1932 split regexp. Closes
1928 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1933 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1929 Riley <ipythonbugs-AT-sabi.net>.
1934 Riley <ipythonbugs-AT-sabi.net>.
1930 (InteractiveShell.mainloop): honor --nobanner with banner
1935 (InteractiveShell.mainloop): honor --nobanner with banner
1931 extensions.
1936 extensions.
1932
1937
1933 * IPython/Shell.py: Significant refactoring of all classes, so
1938 * IPython/Shell.py: Significant refactoring of all classes, so
1934 that we can really support ALL matplotlib backends and threading
1939 that we can really support ALL matplotlib backends and threading
1935 models (John spotted a bug with Tk which required this). Now we
1940 models (John spotted a bug with Tk which required this). Now we
1936 should support single-threaded, WX-threads and GTK-threads, both
1941 should support single-threaded, WX-threads and GTK-threads, both
1937 for generic code and for matplotlib.
1942 for generic code and for matplotlib.
1938
1943
1939 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1944 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1940 -pylab, to simplify things for users. Will also remove the pylab
1945 -pylab, to simplify things for users. Will also remove the pylab
1941 profile, since now all of matplotlib configuration is directly
1946 profile, since now all of matplotlib configuration is directly
1942 handled here. This also reduces startup time.
1947 handled here. This also reduces startup time.
1943
1948
1944 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1949 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1945 shell wasn't being correctly called. Also in IPShellWX.
1950 shell wasn't being correctly called. Also in IPShellWX.
1946
1951
1947 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1952 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1948 fine-tune banner.
1953 fine-tune banner.
1949
1954
1950 * IPython/numutils.py (spike): Deprecate these spike functions,
1955 * IPython/numutils.py (spike): Deprecate these spike functions,
1951 delete (long deprecated) gnuplot_exec handler.
1956 delete (long deprecated) gnuplot_exec handler.
1952
1957
1953 2004-08-26 Fernando Perez <fperez@colorado.edu>
1958 2004-08-26 Fernando Perez <fperez@colorado.edu>
1954
1959
1955 * ipython.1: Update for threading options, plus some others which
1960 * ipython.1: Update for threading options, plus some others which
1956 were missing.
1961 were missing.
1957
1962
1958 * IPython/ipmaker.py (__call__): Added -wthread option for
1963 * IPython/ipmaker.py (__call__): Added -wthread option for
1959 wxpython thread handling. Make sure threading options are only
1964 wxpython thread handling. Make sure threading options are only
1960 valid at the command line.
1965 valid at the command line.
1961
1966
1962 * scripts/ipython: moved shell selection into a factory function
1967 * scripts/ipython: moved shell selection into a factory function
1963 in Shell.py, to keep the starter script to a minimum.
1968 in Shell.py, to keep the starter script to a minimum.
1964
1969
1965 2004-08-25 Fernando Perez <fperez@colorado.edu>
1970 2004-08-25 Fernando Perez <fperez@colorado.edu>
1966
1971
1967 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1972 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1968 John. Along with some recent changes he made to matplotlib, the
1973 John. Along with some recent changes he made to matplotlib, the
1969 next versions of both systems should work very well together.
1974 next versions of both systems should work very well together.
1970
1975
1971 2004-08-24 Fernando Perez <fperez@colorado.edu>
1976 2004-08-24 Fernando Perez <fperez@colorado.edu>
1972
1977
1973 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1978 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1974 tried to switch the profiling to using hotshot, but I'm getting
1979 tried to switch the profiling to using hotshot, but I'm getting
1975 strange errors from prof.runctx() there. I may be misreading the
1980 strange errors from prof.runctx() there. I may be misreading the
1976 docs, but it looks weird. For now the profiling code will
1981 docs, but it looks weird. For now the profiling code will
1977 continue to use the standard profiler.
1982 continue to use the standard profiler.
1978
1983
1979 2004-08-23 Fernando Perez <fperez@colorado.edu>
1984 2004-08-23 Fernando Perez <fperez@colorado.edu>
1980
1985
1981 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1986 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1982 threaded shell, by John Hunter. It's not quite ready yet, but
1987 threaded shell, by John Hunter. It's not quite ready yet, but
1983 close.
1988 close.
1984
1989
1985 2004-08-22 Fernando Perez <fperez@colorado.edu>
1990 2004-08-22 Fernando Perez <fperez@colorado.edu>
1986
1991
1987 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1992 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1988 in Magic and ultraTB.
1993 in Magic and ultraTB.
1989
1994
1990 * ipython.1: document threading options in manpage.
1995 * ipython.1: document threading options in manpage.
1991
1996
1992 * scripts/ipython: Changed name of -thread option to -gthread,
1997 * scripts/ipython: Changed name of -thread option to -gthread,
1993 since this is GTK specific. I want to leave the door open for a
1998 since this is GTK specific. I want to leave the door open for a
1994 -wthread option for WX, which will most likely be necessary. This
1999 -wthread option for WX, which will most likely be necessary. This
1995 change affects usage and ipmaker as well.
2000 change affects usage and ipmaker as well.
1996
2001
1997 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2002 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1998 handle the matplotlib shell issues. Code by John Hunter
2003 handle the matplotlib shell issues. Code by John Hunter
1999 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2004 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2000 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2005 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2001 broken (and disabled for end users) for now, but it puts the
2006 broken (and disabled for end users) for now, but it puts the
2002 infrastructure in place.
2007 infrastructure in place.
2003
2008
2004 2004-08-21 Fernando Perez <fperez@colorado.edu>
2009 2004-08-21 Fernando Perez <fperez@colorado.edu>
2005
2010
2006 * ipythonrc-pylab: Add matplotlib support.
2011 * ipythonrc-pylab: Add matplotlib support.
2007
2012
2008 * matplotlib_config.py: new files for matplotlib support, part of
2013 * matplotlib_config.py: new files for matplotlib support, part of
2009 the pylab profile.
2014 the pylab profile.
2010
2015
2011 * IPython/usage.py (__doc__): documented the threading options.
2016 * IPython/usage.py (__doc__): documented the threading options.
2012
2017
2013 2004-08-20 Fernando Perez <fperez@colorado.edu>
2018 2004-08-20 Fernando Perez <fperez@colorado.edu>
2014
2019
2015 * ipython: Modified the main calling routine to handle the -thread
2020 * ipython: Modified the main calling routine to handle the -thread
2016 and -mpthread options. This needs to be done as a top-level hack,
2021 and -mpthread options. This needs to be done as a top-level hack,
2017 because it determines which class to instantiate for IPython
2022 because it determines which class to instantiate for IPython
2018 itself.
2023 itself.
2019
2024
2020 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2025 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2021 classes to support multithreaded GTK operation without blocking,
2026 classes to support multithreaded GTK operation without blocking,
2022 and matplotlib with all backends. This is a lot of still very
2027 and matplotlib with all backends. This is a lot of still very
2023 experimental code, and threads are tricky. So it may still have a
2028 experimental code, and threads are tricky. So it may still have a
2024 few rough edges... This code owes a lot to
2029 few rough edges... This code owes a lot to
2025 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2030 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2026 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2031 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2027 to John Hunter for all the matplotlib work.
2032 to John Hunter for all the matplotlib work.
2028
2033
2029 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2034 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2030 options for gtk thread and matplotlib support.
2035 options for gtk thread and matplotlib support.
2031
2036
2032 2004-08-16 Fernando Perez <fperez@colorado.edu>
2037 2004-08-16 Fernando Perez <fperez@colorado.edu>
2033
2038
2034 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2039 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2035 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2040 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2036 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2041 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2037
2042
2038 2004-08-11 Fernando Perez <fperez@colorado.edu>
2043 2004-08-11 Fernando Perez <fperez@colorado.edu>
2039
2044
2040 * setup.py (isfile): Fix build so documentation gets updated for
2045 * setup.py (isfile): Fix build so documentation gets updated for
2041 rpms (it was only done for .tgz builds).
2046 rpms (it was only done for .tgz builds).
2042
2047
2043 2004-08-10 Fernando Perez <fperez@colorado.edu>
2048 2004-08-10 Fernando Perez <fperez@colorado.edu>
2044
2049
2045 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2050 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2046
2051
2047 * iplib.py : Silence syntax error exceptions in tab-completion.
2052 * iplib.py : Silence syntax error exceptions in tab-completion.
2048
2053
2049 2004-08-05 Fernando Perez <fperez@colorado.edu>
2054 2004-08-05 Fernando Perez <fperez@colorado.edu>
2050
2055
2051 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2056 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2052 'color off' mark for continuation prompts. This was causing long
2057 'color off' mark for continuation prompts. This was causing long
2053 continuation lines to mis-wrap.
2058 continuation lines to mis-wrap.
2054
2059
2055 2004-08-01 Fernando Perez <fperez@colorado.edu>
2060 2004-08-01 Fernando Perez <fperez@colorado.edu>
2056
2061
2057 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2062 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2058 for building ipython to be a parameter. All this is necessary
2063 for building ipython to be a parameter. All this is necessary
2059 right now to have a multithreaded version, but this insane
2064 right now to have a multithreaded version, but this insane
2060 non-design will be cleaned up soon. For now, it's a hack that
2065 non-design will be cleaned up soon. For now, it's a hack that
2061 works.
2066 works.
2062
2067
2063 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2068 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2064 args in various places. No bugs so far, but it's a dangerous
2069 args in various places. No bugs so far, but it's a dangerous
2065 practice.
2070 practice.
2066
2071
2067 2004-07-31 Fernando Perez <fperez@colorado.edu>
2072 2004-07-31 Fernando Perez <fperez@colorado.edu>
2068
2073
2069 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2074 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2070 fix completion of files with dots in their names under most
2075 fix completion of files with dots in their names under most
2071 profiles (pysh was OK because the completion order is different).
2076 profiles (pysh was OK because the completion order is different).
2072
2077
2073 2004-07-27 Fernando Perez <fperez@colorado.edu>
2078 2004-07-27 Fernando Perez <fperez@colorado.edu>
2074
2079
2075 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2080 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2076 keywords manually, b/c the one in keyword.py was removed in python
2081 keywords manually, b/c the one in keyword.py was removed in python
2077 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2082 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2078 This is NOT a bug under python 2.3 and earlier.
2083 This is NOT a bug under python 2.3 and earlier.
2079
2084
2080 2004-07-26 Fernando Perez <fperez@colorado.edu>
2085 2004-07-26 Fernando Perez <fperez@colorado.edu>
2081
2086
2082 * IPython/ultraTB.py (VerboseTB.text): Add another
2087 * IPython/ultraTB.py (VerboseTB.text): Add another
2083 linecache.checkcache() call to try to prevent inspect.py from
2088 linecache.checkcache() call to try to prevent inspect.py from
2084 crashing under python 2.3. I think this fixes
2089 crashing under python 2.3. I think this fixes
2085 http://www.scipy.net/roundup/ipython/issue17.
2090 http://www.scipy.net/roundup/ipython/issue17.
2086
2091
2087 2004-07-26 *** Released version 0.6.2
2092 2004-07-26 *** Released version 0.6.2
2088
2093
2089 2004-07-26 Fernando Perez <fperez@colorado.edu>
2094 2004-07-26 Fernando Perez <fperez@colorado.edu>
2090
2095
2091 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2096 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2092 fail for any number.
2097 fail for any number.
2093 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2098 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2094 empty bookmarks.
2099 empty bookmarks.
2095
2100
2096 2004-07-26 *** Released version 0.6.1
2101 2004-07-26 *** Released version 0.6.1
2097
2102
2098 2004-07-26 Fernando Perez <fperez@colorado.edu>
2103 2004-07-26 Fernando Perez <fperez@colorado.edu>
2099
2104
2100 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2105 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2101
2106
2102 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2107 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2103 escaping '()[]{}' in filenames.
2108 escaping '()[]{}' in filenames.
2104
2109
2105 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2110 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2106 Python 2.2 users who lack a proper shlex.split.
2111 Python 2.2 users who lack a proper shlex.split.
2107
2112
2108 2004-07-19 Fernando Perez <fperez@colorado.edu>
2113 2004-07-19 Fernando Perez <fperez@colorado.edu>
2109
2114
2110 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2115 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2111 for reading readline's init file. I follow the normal chain:
2116 for reading readline's init file. I follow the normal chain:
2112 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2117 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2113 report by Mike Heeter. This closes
2118 report by Mike Heeter. This closes
2114 http://www.scipy.net/roundup/ipython/issue16.
2119 http://www.scipy.net/roundup/ipython/issue16.
2115
2120
2116 2004-07-18 Fernando Perez <fperez@colorado.edu>
2121 2004-07-18 Fernando Perez <fperez@colorado.edu>
2117
2122
2118 * IPython/iplib.py (__init__): Add better handling of '\' under
2123 * IPython/iplib.py (__init__): Add better handling of '\' under
2119 Win32 for filenames. After a patch by Ville.
2124 Win32 for filenames. After a patch by Ville.
2120
2125
2121 2004-07-17 Fernando Perez <fperez@colorado.edu>
2126 2004-07-17 Fernando Perez <fperez@colorado.edu>
2122
2127
2123 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2128 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2124 autocalling would be triggered for 'foo is bar' if foo is
2129 autocalling would be triggered for 'foo is bar' if foo is
2125 callable. I also cleaned up the autocall detection code to use a
2130 callable. I also cleaned up the autocall detection code to use a
2126 regexp, which is faster. Bug reported by Alexander Schmolck.
2131 regexp, which is faster. Bug reported by Alexander Schmolck.
2127
2132
2128 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2133 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2129 '?' in them would confuse the help system. Reported by Alex
2134 '?' in them would confuse the help system. Reported by Alex
2130 Schmolck.
2135 Schmolck.
2131
2136
2132 2004-07-16 Fernando Perez <fperez@colorado.edu>
2137 2004-07-16 Fernando Perez <fperez@colorado.edu>
2133
2138
2134 * IPython/GnuplotInteractive.py (__all__): added plot2.
2139 * IPython/GnuplotInteractive.py (__all__): added plot2.
2135
2140
2136 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2141 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2137 plotting dictionaries, lists or tuples of 1d arrays.
2142 plotting dictionaries, lists or tuples of 1d arrays.
2138
2143
2139 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2144 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2140 optimizations.
2145 optimizations.
2141
2146
2142 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2147 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2143 the information which was there from Janko's original IPP code:
2148 the information which was there from Janko's original IPP code:
2144
2149
2145 03.05.99 20:53 porto.ifm.uni-kiel.de
2150 03.05.99 20:53 porto.ifm.uni-kiel.de
2146 --Started changelog.
2151 --Started changelog.
2147 --make clear do what it say it does
2152 --make clear do what it say it does
2148 --added pretty output of lines from inputcache
2153 --added pretty output of lines from inputcache
2149 --Made Logger a mixin class, simplifies handling of switches
2154 --Made Logger a mixin class, simplifies handling of switches
2150 --Added own completer class. .string<TAB> expands to last history
2155 --Added own completer class. .string<TAB> expands to last history
2151 line which starts with string. The new expansion is also present
2156 line which starts with string. The new expansion is also present
2152 with Ctrl-r from the readline library. But this shows, who this
2157 with Ctrl-r from the readline library. But this shows, who this
2153 can be done for other cases.
2158 can be done for other cases.
2154 --Added convention that all shell functions should accept a
2159 --Added convention that all shell functions should accept a
2155 parameter_string This opens the door for different behaviour for
2160 parameter_string This opens the door for different behaviour for
2156 each function. @cd is a good example of this.
2161 each function. @cd is a good example of this.
2157
2162
2158 04.05.99 12:12 porto.ifm.uni-kiel.de
2163 04.05.99 12:12 porto.ifm.uni-kiel.de
2159 --added logfile rotation
2164 --added logfile rotation
2160 --added new mainloop method which freezes first the namespace
2165 --added new mainloop method which freezes first the namespace
2161
2166
2162 07.05.99 21:24 porto.ifm.uni-kiel.de
2167 07.05.99 21:24 porto.ifm.uni-kiel.de
2163 --added the docreader classes. Now there is a help system.
2168 --added the docreader classes. Now there is a help system.
2164 -This is only a first try. Currently it's not easy to put new
2169 -This is only a first try. Currently it's not easy to put new
2165 stuff in the indices. But this is the way to go. Info would be
2170 stuff in the indices. But this is the way to go. Info would be
2166 better, but HTML is every where and not everybody has an info
2171 better, but HTML is every where and not everybody has an info
2167 system installed and it's not so easy to change html-docs to info.
2172 system installed and it's not so easy to change html-docs to info.
2168 --added global logfile option
2173 --added global logfile option
2169 --there is now a hook for object inspection method pinfo needs to
2174 --there is now a hook for object inspection method pinfo needs to
2170 be provided for this. Can be reached by two '??'.
2175 be provided for this. Can be reached by two '??'.
2171
2176
2172 08.05.99 20:51 porto.ifm.uni-kiel.de
2177 08.05.99 20:51 porto.ifm.uni-kiel.de
2173 --added a README
2178 --added a README
2174 --bug in rc file. Something has changed so functions in the rc
2179 --bug in rc file. Something has changed so functions in the rc
2175 file need to reference the shell and not self. Not clear if it's a
2180 file need to reference the shell and not self. Not clear if it's a
2176 bug or feature.
2181 bug or feature.
2177 --changed rc file for new behavior
2182 --changed rc file for new behavior
2178
2183
2179 2004-07-15 Fernando Perez <fperez@colorado.edu>
2184 2004-07-15 Fernando Perez <fperez@colorado.edu>
2180
2185
2181 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2186 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2182 cache was falling out of sync in bizarre manners when multi-line
2187 cache was falling out of sync in bizarre manners when multi-line
2183 input was present. Minor optimizations and cleanup.
2188 input was present. Minor optimizations and cleanup.
2184
2189
2185 (Logger): Remove old Changelog info for cleanup. This is the
2190 (Logger): Remove old Changelog info for cleanup. This is the
2186 information which was there from Janko's original code:
2191 information which was there from Janko's original code:
2187
2192
2188 Changes to Logger: - made the default log filename a parameter
2193 Changes to Logger: - made the default log filename a parameter
2189
2194
2190 - put a check for lines beginning with !@? in log(). Needed
2195 - put a check for lines beginning with !@? in log(). Needed
2191 (even if the handlers properly log their lines) for mid-session
2196 (even if the handlers properly log their lines) for mid-session
2192 logging activation to work properly. Without this, lines logged
2197 logging activation to work properly. Without this, lines logged
2193 in mid session, which get read from the cache, would end up
2198 in mid session, which get read from the cache, would end up
2194 'bare' (with !@? in the open) in the log. Now they are caught
2199 'bare' (with !@? in the open) in the log. Now they are caught
2195 and prepended with a #.
2200 and prepended with a #.
2196
2201
2197 * IPython/iplib.py (InteractiveShell.init_readline): added check
2202 * IPython/iplib.py (InteractiveShell.init_readline): added check
2198 in case MagicCompleter fails to be defined, so we don't crash.
2203 in case MagicCompleter fails to be defined, so we don't crash.
2199
2204
2200 2004-07-13 Fernando Perez <fperez@colorado.edu>
2205 2004-07-13 Fernando Perez <fperez@colorado.edu>
2201
2206
2202 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2207 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2203 of EPS if the requested filename ends in '.eps'.
2208 of EPS if the requested filename ends in '.eps'.
2204
2209
2205 2004-07-04 Fernando Perez <fperez@colorado.edu>
2210 2004-07-04 Fernando Perez <fperez@colorado.edu>
2206
2211
2207 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2212 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2208 escaping of quotes when calling the shell.
2213 escaping of quotes when calling the shell.
2209
2214
2210 2004-07-02 Fernando Perez <fperez@colorado.edu>
2215 2004-07-02 Fernando Perez <fperez@colorado.edu>
2211
2216
2212 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2217 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2213 gettext not working because we were clobbering '_'. Fixes
2218 gettext not working because we were clobbering '_'. Fixes
2214 http://www.scipy.net/roundup/ipython/issue6.
2219 http://www.scipy.net/roundup/ipython/issue6.
2215
2220
2216 2004-07-01 Fernando Perez <fperez@colorado.edu>
2221 2004-07-01 Fernando Perez <fperez@colorado.edu>
2217
2222
2218 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2223 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2219 into @cd. Patch by Ville.
2224 into @cd. Patch by Ville.
2220
2225
2221 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2226 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2222 new function to store things after ipmaker runs. Patch by Ville.
2227 new function to store things after ipmaker runs. Patch by Ville.
2223 Eventually this will go away once ipmaker is removed and the class
2228 Eventually this will go away once ipmaker is removed and the class
2224 gets cleaned up, but for now it's ok. Key functionality here is
2229 gets cleaned up, but for now it's ok. Key functionality here is
2225 the addition of the persistent storage mechanism, a dict for
2230 the addition of the persistent storage mechanism, a dict for
2226 keeping data across sessions (for now just bookmarks, but more can
2231 keeping data across sessions (for now just bookmarks, but more can
2227 be implemented later).
2232 be implemented later).
2228
2233
2229 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2234 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2230 persistent across sections. Patch by Ville, I modified it
2235 persistent across sections. Patch by Ville, I modified it
2231 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2236 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2232 added a '-l' option to list all bookmarks.
2237 added a '-l' option to list all bookmarks.
2233
2238
2234 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2239 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2235 center for cleanup. Registered with atexit.register(). I moved
2240 center for cleanup. Registered with atexit.register(). I moved
2236 here the old exit_cleanup(). After a patch by Ville.
2241 here the old exit_cleanup(). After a patch by Ville.
2237
2242
2238 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2243 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2239 characters in the hacked shlex_split for python 2.2.
2244 characters in the hacked shlex_split for python 2.2.
2240
2245
2241 * IPython/iplib.py (file_matches): more fixes to filenames with
2246 * IPython/iplib.py (file_matches): more fixes to filenames with
2242 whitespace in them. It's not perfect, but limitations in python's
2247 whitespace in them. It's not perfect, but limitations in python's
2243 readline make it impossible to go further.
2248 readline make it impossible to go further.
2244
2249
2245 2004-06-29 Fernando Perez <fperez@colorado.edu>
2250 2004-06-29 Fernando Perez <fperez@colorado.edu>
2246
2251
2247 * IPython/iplib.py (file_matches): escape whitespace correctly in
2252 * IPython/iplib.py (file_matches): escape whitespace correctly in
2248 filename completions. Bug reported by Ville.
2253 filename completions. Bug reported by Ville.
2249
2254
2250 2004-06-28 Fernando Perez <fperez@colorado.edu>
2255 2004-06-28 Fernando Perez <fperez@colorado.edu>
2251
2256
2252 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2257 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2253 the history file will be called 'history-PROFNAME' (or just
2258 the history file will be called 'history-PROFNAME' (or just
2254 'history' if no profile is loaded). I was getting annoyed at
2259 'history' if no profile is loaded). I was getting annoyed at
2255 getting my Numerical work history clobbered by pysh sessions.
2260 getting my Numerical work history clobbered by pysh sessions.
2256
2261
2257 * IPython/iplib.py (InteractiveShell.__init__): Internal
2262 * IPython/iplib.py (InteractiveShell.__init__): Internal
2258 getoutputerror() function so that we can honor the system_verbose
2263 getoutputerror() function so that we can honor the system_verbose
2259 flag for _all_ system calls. I also added escaping of #
2264 flag for _all_ system calls. I also added escaping of #
2260 characters here to avoid confusing Itpl.
2265 characters here to avoid confusing Itpl.
2261
2266
2262 * IPython/Magic.py (shlex_split): removed call to shell in
2267 * IPython/Magic.py (shlex_split): removed call to shell in
2263 parse_options and replaced it with shlex.split(). The annoying
2268 parse_options and replaced it with shlex.split(). The annoying
2264 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2269 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2265 to backport it from 2.3, with several frail hacks (the shlex
2270 to backport it from 2.3, with several frail hacks (the shlex
2266 module is rather limited in 2.2). Thanks to a suggestion by Ville
2271 module is rather limited in 2.2). Thanks to a suggestion by Ville
2267 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2272 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2268 problem.
2273 problem.
2269
2274
2270 (Magic.magic_system_verbose): new toggle to print the actual
2275 (Magic.magic_system_verbose): new toggle to print the actual
2271 system calls made by ipython. Mainly for debugging purposes.
2276 system calls made by ipython. Mainly for debugging purposes.
2272
2277
2273 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2278 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2274 doesn't support persistence. Reported (and fix suggested) by
2279 doesn't support persistence. Reported (and fix suggested) by
2275 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2280 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2276
2281
2277 2004-06-26 Fernando Perez <fperez@colorado.edu>
2282 2004-06-26 Fernando Perez <fperez@colorado.edu>
2278
2283
2279 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2284 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2280 continue prompts.
2285 continue prompts.
2281
2286
2282 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2287 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2283 function (basically a big docstring) and a few more things here to
2288 function (basically a big docstring) and a few more things here to
2284 speedup startup. pysh.py is now very lightweight. We want because
2289 speedup startup. pysh.py is now very lightweight. We want because
2285 it gets execfile'd, while InterpreterExec gets imported, so
2290 it gets execfile'd, while InterpreterExec gets imported, so
2286 byte-compilation saves time.
2291 byte-compilation saves time.
2287
2292
2288 2004-06-25 Fernando Perez <fperez@colorado.edu>
2293 2004-06-25 Fernando Perez <fperez@colorado.edu>
2289
2294
2290 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2295 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2291 -NUM', which was recently broken.
2296 -NUM', which was recently broken.
2292
2297
2293 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2298 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2294 in multi-line input (but not !!, which doesn't make sense there).
2299 in multi-line input (but not !!, which doesn't make sense there).
2295
2300
2296 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2301 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2297 It's just too useful, and people can turn it off in the less
2302 It's just too useful, and people can turn it off in the less
2298 common cases where it's a problem.
2303 common cases where it's a problem.
2299
2304
2300 2004-06-24 Fernando Perez <fperez@colorado.edu>
2305 2004-06-24 Fernando Perez <fperez@colorado.edu>
2301
2306
2302 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2307 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2303 special syntaxes (like alias calling) is now allied in multi-line
2308 special syntaxes (like alias calling) is now allied in multi-line
2304 input. This is still _very_ experimental, but it's necessary for
2309 input. This is still _very_ experimental, but it's necessary for
2305 efficient shell usage combining python looping syntax with system
2310 efficient shell usage combining python looping syntax with system
2306 calls. For now it's restricted to aliases, I don't think it
2311 calls. For now it's restricted to aliases, I don't think it
2307 really even makes sense to have this for magics.
2312 really even makes sense to have this for magics.
2308
2313
2309 2004-06-23 Fernando Perez <fperez@colorado.edu>
2314 2004-06-23 Fernando Perez <fperez@colorado.edu>
2310
2315
2311 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2316 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2312 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2317 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2313
2318
2314 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2319 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2315 extensions under Windows (after code sent by Gary Bishop). The
2320 extensions under Windows (after code sent by Gary Bishop). The
2316 extensions considered 'executable' are stored in IPython's rc
2321 extensions considered 'executable' are stored in IPython's rc
2317 structure as win_exec_ext.
2322 structure as win_exec_ext.
2318
2323
2319 * IPython/genutils.py (shell): new function, like system() but
2324 * IPython/genutils.py (shell): new function, like system() but
2320 without return value. Very useful for interactive shell work.
2325 without return value. Very useful for interactive shell work.
2321
2326
2322 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2327 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2323 delete aliases.
2328 delete aliases.
2324
2329
2325 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2330 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2326 sure that the alias table doesn't contain python keywords.
2331 sure that the alias table doesn't contain python keywords.
2327
2332
2328 2004-06-21 Fernando Perez <fperez@colorado.edu>
2333 2004-06-21 Fernando Perez <fperez@colorado.edu>
2329
2334
2330 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2335 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2331 non-existent items are found in $PATH. Reported by Thorsten.
2336 non-existent items are found in $PATH. Reported by Thorsten.
2332
2337
2333 2004-06-20 Fernando Perez <fperez@colorado.edu>
2338 2004-06-20 Fernando Perez <fperez@colorado.edu>
2334
2339
2335 * IPython/iplib.py (complete): modified the completer so that the
2340 * IPython/iplib.py (complete): modified the completer so that the
2336 order of priorities can be easily changed at runtime.
2341 order of priorities can be easily changed at runtime.
2337
2342
2338 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2343 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2339 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2344 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2340
2345
2341 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2346 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2342 expand Python variables prepended with $ in all system calls. The
2347 expand Python variables prepended with $ in all system calls. The
2343 same was done to InteractiveShell.handle_shell_escape. Now all
2348 same was done to InteractiveShell.handle_shell_escape. Now all
2344 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2349 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2345 expansion of python variables and expressions according to the
2350 expansion of python variables and expressions according to the
2346 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2351 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2347
2352
2348 Though PEP-215 has been rejected, a similar (but simpler) one
2353 Though PEP-215 has been rejected, a similar (but simpler) one
2349 seems like it will go into Python 2.4, PEP-292 -
2354 seems like it will go into Python 2.4, PEP-292 -
2350 http://www.python.org/peps/pep-0292.html.
2355 http://www.python.org/peps/pep-0292.html.
2351
2356
2352 I'll keep the full syntax of PEP-215, since IPython has since the
2357 I'll keep the full syntax of PEP-215, since IPython has since the
2353 start used Ka-Ping Yee's reference implementation discussed there
2358 start used Ka-Ping Yee's reference implementation discussed there
2354 (Itpl), and I actually like the powerful semantics it offers.
2359 (Itpl), and I actually like the powerful semantics it offers.
2355
2360
2356 In order to access normal shell variables, the $ has to be escaped
2361 In order to access normal shell variables, the $ has to be escaped
2357 via an extra $. For example:
2362 via an extra $. For example:
2358
2363
2359 In [7]: PATH='a python variable'
2364 In [7]: PATH='a python variable'
2360
2365
2361 In [8]: !echo $PATH
2366 In [8]: !echo $PATH
2362 a python variable
2367 a python variable
2363
2368
2364 In [9]: !echo $$PATH
2369 In [9]: !echo $$PATH
2365 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2370 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2366
2371
2367 (Magic.parse_options): escape $ so the shell doesn't evaluate
2372 (Magic.parse_options): escape $ so the shell doesn't evaluate
2368 things prematurely.
2373 things prematurely.
2369
2374
2370 * IPython/iplib.py (InteractiveShell.call_alias): added the
2375 * IPython/iplib.py (InteractiveShell.call_alias): added the
2371 ability for aliases to expand python variables via $.
2376 ability for aliases to expand python variables via $.
2372
2377
2373 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2378 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2374 system, now there's a @rehash/@rehashx pair of magics. These work
2379 system, now there's a @rehash/@rehashx pair of magics. These work
2375 like the csh rehash command, and can be invoked at any time. They
2380 like the csh rehash command, and can be invoked at any time. They
2376 build a table of aliases to everything in the user's $PATH
2381 build a table of aliases to everything in the user's $PATH
2377 (@rehash uses everything, @rehashx is slower but only adds
2382 (@rehash uses everything, @rehashx is slower but only adds
2378 executable files). With this, the pysh.py-based shell profile can
2383 executable files). With this, the pysh.py-based shell profile can
2379 now simply call rehash upon startup, and full access to all
2384 now simply call rehash upon startup, and full access to all
2380 programs in the user's path is obtained.
2385 programs in the user's path is obtained.
2381
2386
2382 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2387 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2383 functionality is now fully in place. I removed the old dynamic
2388 functionality is now fully in place. I removed the old dynamic
2384 code generation based approach, in favor of a much lighter one
2389 code generation based approach, in favor of a much lighter one
2385 based on a simple dict. The advantage is that this allows me to
2390 based on a simple dict. The advantage is that this allows me to
2386 now have thousands of aliases with negligible cost (unthinkable
2391 now have thousands of aliases with negligible cost (unthinkable
2387 with the old system).
2392 with the old system).
2388
2393
2389 2004-06-19 Fernando Perez <fperez@colorado.edu>
2394 2004-06-19 Fernando Perez <fperez@colorado.edu>
2390
2395
2391 * IPython/iplib.py (__init__): extended MagicCompleter class to
2396 * IPython/iplib.py (__init__): extended MagicCompleter class to
2392 also complete (last in priority) on user aliases.
2397 also complete (last in priority) on user aliases.
2393
2398
2394 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2399 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2395 call to eval.
2400 call to eval.
2396 (ItplNS.__init__): Added a new class which functions like Itpl,
2401 (ItplNS.__init__): Added a new class which functions like Itpl,
2397 but allows configuring the namespace for the evaluation to occur
2402 but allows configuring the namespace for the evaluation to occur
2398 in.
2403 in.
2399
2404
2400 2004-06-18 Fernando Perez <fperez@colorado.edu>
2405 2004-06-18 Fernando Perez <fperez@colorado.edu>
2401
2406
2402 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2407 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2403 better message when 'exit' or 'quit' are typed (a common newbie
2408 better message when 'exit' or 'quit' are typed (a common newbie
2404 confusion).
2409 confusion).
2405
2410
2406 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2411 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2407 check for Windows users.
2412 check for Windows users.
2408
2413
2409 * IPython/iplib.py (InteractiveShell.user_setup): removed
2414 * IPython/iplib.py (InteractiveShell.user_setup): removed
2410 disabling of colors for Windows. I'll test at runtime and issue a
2415 disabling of colors for Windows. I'll test at runtime and issue a
2411 warning if Gary's readline isn't found, as to nudge users to
2416 warning if Gary's readline isn't found, as to nudge users to
2412 download it.
2417 download it.
2413
2418
2414 2004-06-16 Fernando Perez <fperez@colorado.edu>
2419 2004-06-16 Fernando Perez <fperez@colorado.edu>
2415
2420
2416 * IPython/genutils.py (Stream.__init__): changed to print errors
2421 * IPython/genutils.py (Stream.__init__): changed to print errors
2417 to sys.stderr. I had a circular dependency here. Now it's
2422 to sys.stderr. I had a circular dependency here. Now it's
2418 possible to run ipython as IDLE's shell (consider this pre-alpha,
2423 possible to run ipython as IDLE's shell (consider this pre-alpha,
2419 since true stdout things end up in the starting terminal instead
2424 since true stdout things end up in the starting terminal instead
2420 of IDLE's out).
2425 of IDLE's out).
2421
2426
2422 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2427 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2423 users who haven't # updated their prompt_in2 definitions. Remove
2428 users who haven't # updated their prompt_in2 definitions. Remove
2424 eventually.
2429 eventually.
2425 (multiple_replace): added credit to original ASPN recipe.
2430 (multiple_replace): added credit to original ASPN recipe.
2426
2431
2427 2004-06-15 Fernando Perez <fperez@colorado.edu>
2432 2004-06-15 Fernando Perez <fperez@colorado.edu>
2428
2433
2429 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2434 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2430 list of auto-defined aliases.
2435 list of auto-defined aliases.
2431
2436
2432 2004-06-13 Fernando Perez <fperez@colorado.edu>
2437 2004-06-13 Fernando Perez <fperez@colorado.edu>
2433
2438
2434 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2439 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2435 install was really requested (so setup.py can be used for other
2440 install was really requested (so setup.py can be used for other
2436 things under Windows).
2441 things under Windows).
2437
2442
2438 2004-06-10 Fernando Perez <fperez@colorado.edu>
2443 2004-06-10 Fernando Perez <fperez@colorado.edu>
2439
2444
2440 * IPython/Logger.py (Logger.create_log): Manually remove any old
2445 * IPython/Logger.py (Logger.create_log): Manually remove any old
2441 backup, since os.remove may fail under Windows. Fixes bug
2446 backup, since os.remove may fail under Windows. Fixes bug
2442 reported by Thorsten.
2447 reported by Thorsten.
2443
2448
2444 2004-06-09 Fernando Perez <fperez@colorado.edu>
2449 2004-06-09 Fernando Perez <fperez@colorado.edu>
2445
2450
2446 * examples/example-embed.py: fixed all references to %n (replaced
2451 * examples/example-embed.py: fixed all references to %n (replaced
2447 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2452 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2448 for all examples and the manual as well.
2453 for all examples and the manual as well.
2449
2454
2450 2004-06-08 Fernando Perez <fperez@colorado.edu>
2455 2004-06-08 Fernando Perez <fperez@colorado.edu>
2451
2456
2452 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2457 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2453 alignment and color management. All 3 prompt subsystems now
2458 alignment and color management. All 3 prompt subsystems now
2454 inherit from BasePrompt.
2459 inherit from BasePrompt.
2455
2460
2456 * tools/release: updates for windows installer build and tag rpms
2461 * tools/release: updates for windows installer build and tag rpms
2457 with python version (since paths are fixed).
2462 with python version (since paths are fixed).
2458
2463
2459 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2464 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2460 which will become eventually obsolete. Also fixed the default
2465 which will become eventually obsolete. Also fixed the default
2461 prompt_in2 to use \D, so at least new users start with the correct
2466 prompt_in2 to use \D, so at least new users start with the correct
2462 defaults.
2467 defaults.
2463 WARNING: Users with existing ipythonrc files will need to apply
2468 WARNING: Users with existing ipythonrc files will need to apply
2464 this fix manually!
2469 this fix manually!
2465
2470
2466 * setup.py: make windows installer (.exe). This is finally the
2471 * setup.py: make windows installer (.exe). This is finally the
2467 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2472 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2468 which I hadn't included because it required Python 2.3 (or recent
2473 which I hadn't included because it required Python 2.3 (or recent
2469 distutils).
2474 distutils).
2470
2475
2471 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2476 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2472 usage of new '\D' escape.
2477 usage of new '\D' escape.
2473
2478
2474 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2479 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2475 lacks os.getuid())
2480 lacks os.getuid())
2476 (CachedOutput.set_colors): Added the ability to turn coloring
2481 (CachedOutput.set_colors): Added the ability to turn coloring
2477 on/off with @colors even for manually defined prompt colors. It
2482 on/off with @colors even for manually defined prompt colors. It
2478 uses a nasty global, but it works safely and via the generic color
2483 uses a nasty global, but it works safely and via the generic color
2479 handling mechanism.
2484 handling mechanism.
2480 (Prompt2.__init__): Introduced new escape '\D' for continuation
2485 (Prompt2.__init__): Introduced new escape '\D' for continuation
2481 prompts. It represents the counter ('\#') as dots.
2486 prompts. It represents the counter ('\#') as dots.
2482 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2487 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2483 need to update their ipythonrc files and replace '%n' with '\D' in
2488 need to update their ipythonrc files and replace '%n' with '\D' in
2484 their prompt_in2 settings everywhere. Sorry, but there's
2489 their prompt_in2 settings everywhere. Sorry, but there's
2485 otherwise no clean way to get all prompts to properly align. The
2490 otherwise no clean way to get all prompts to properly align. The
2486 ipythonrc shipped with IPython has been updated.
2491 ipythonrc shipped with IPython has been updated.
2487
2492
2488 2004-06-07 Fernando Perez <fperez@colorado.edu>
2493 2004-06-07 Fernando Perez <fperez@colorado.edu>
2489
2494
2490 * setup.py (isfile): Pass local_icons option to latex2html, so the
2495 * setup.py (isfile): Pass local_icons option to latex2html, so the
2491 resulting HTML file is self-contained. Thanks to
2496 resulting HTML file is self-contained. Thanks to
2492 dryice-AT-liu.com.cn for the tip.
2497 dryice-AT-liu.com.cn for the tip.
2493
2498
2494 * pysh.py: I created a new profile 'shell', which implements a
2499 * pysh.py: I created a new profile 'shell', which implements a
2495 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2500 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2496 system shell, nor will it become one anytime soon. It's mainly
2501 system shell, nor will it become one anytime soon. It's mainly
2497 meant to illustrate the use of the new flexible bash-like prompts.
2502 meant to illustrate the use of the new flexible bash-like prompts.
2498 I guess it could be used by hardy souls for true shell management,
2503 I guess it could be used by hardy souls for true shell management,
2499 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2504 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2500 profile. This uses the InterpreterExec extension provided by
2505 profile. This uses the InterpreterExec extension provided by
2501 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2506 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2502
2507
2503 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2508 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2504 auto-align itself with the length of the previous input prompt
2509 auto-align itself with the length of the previous input prompt
2505 (taking into account the invisible color escapes).
2510 (taking into account the invisible color escapes).
2506 (CachedOutput.__init__): Large restructuring of this class. Now
2511 (CachedOutput.__init__): Large restructuring of this class. Now
2507 all three prompts (primary1, primary2, output) are proper objects,
2512 all three prompts (primary1, primary2, output) are proper objects,
2508 managed by the 'parent' CachedOutput class. The code is still a
2513 managed by the 'parent' CachedOutput class. The code is still a
2509 bit hackish (all prompts share state via a pointer to the cache),
2514 bit hackish (all prompts share state via a pointer to the cache),
2510 but it's overall far cleaner than before.
2515 but it's overall far cleaner than before.
2511
2516
2512 * IPython/genutils.py (getoutputerror): modified to add verbose,
2517 * IPython/genutils.py (getoutputerror): modified to add verbose,
2513 debug and header options. This makes the interface of all getout*
2518 debug and header options. This makes the interface of all getout*
2514 functions uniform.
2519 functions uniform.
2515 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2520 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2516
2521
2517 * IPython/Magic.py (Magic.default_option): added a function to
2522 * IPython/Magic.py (Magic.default_option): added a function to
2518 allow registering default options for any magic command. This
2523 allow registering default options for any magic command. This
2519 makes it easy to have profiles which customize the magics globally
2524 makes it easy to have profiles which customize the magics globally
2520 for a certain use. The values set through this function are
2525 for a certain use. The values set through this function are
2521 picked up by the parse_options() method, which all magics should
2526 picked up by the parse_options() method, which all magics should
2522 use to parse their options.
2527 use to parse their options.
2523
2528
2524 * IPython/genutils.py (warn): modified the warnings framework to
2529 * IPython/genutils.py (warn): modified the warnings framework to
2525 use the Term I/O class. I'm trying to slowly unify all of
2530 use the Term I/O class. I'm trying to slowly unify all of
2526 IPython's I/O operations to pass through Term.
2531 IPython's I/O operations to pass through Term.
2527
2532
2528 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2533 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2529 the secondary prompt to correctly match the length of the primary
2534 the secondary prompt to correctly match the length of the primary
2530 one for any prompt. Now multi-line code will properly line up
2535 one for any prompt. Now multi-line code will properly line up
2531 even for path dependent prompts, such as the new ones available
2536 even for path dependent prompts, such as the new ones available
2532 via the prompt_specials.
2537 via the prompt_specials.
2533
2538
2534 2004-06-06 Fernando Perez <fperez@colorado.edu>
2539 2004-06-06 Fernando Perez <fperez@colorado.edu>
2535
2540
2536 * IPython/Prompts.py (prompt_specials): Added the ability to have
2541 * IPython/Prompts.py (prompt_specials): Added the ability to have
2537 bash-like special sequences in the prompts, which get
2542 bash-like special sequences in the prompts, which get
2538 automatically expanded. Things like hostname, current working
2543 automatically expanded. Things like hostname, current working
2539 directory and username are implemented already, but it's easy to
2544 directory and username are implemented already, but it's easy to
2540 add more in the future. Thanks to a patch by W.J. van der Laan
2545 add more in the future. Thanks to a patch by W.J. van der Laan
2541 <gnufnork-AT-hetdigitalegat.nl>
2546 <gnufnork-AT-hetdigitalegat.nl>
2542 (prompt_specials): Added color support for prompt strings, so
2547 (prompt_specials): Added color support for prompt strings, so
2543 users can define arbitrary color setups for their prompts.
2548 users can define arbitrary color setups for their prompts.
2544
2549
2545 2004-06-05 Fernando Perez <fperez@colorado.edu>
2550 2004-06-05 Fernando Perez <fperez@colorado.edu>
2546
2551
2547 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2552 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2548 code to load Gary Bishop's readline and configure it
2553 code to load Gary Bishop's readline and configure it
2549 automatically. Thanks to Gary for help on this.
2554 automatically. Thanks to Gary for help on this.
2550
2555
2551 2004-06-01 Fernando Perez <fperez@colorado.edu>
2556 2004-06-01 Fernando Perez <fperez@colorado.edu>
2552
2557
2553 * IPython/Logger.py (Logger.create_log): fix bug for logging
2558 * IPython/Logger.py (Logger.create_log): fix bug for logging
2554 with no filename (previous fix was incomplete).
2559 with no filename (previous fix was incomplete).
2555
2560
2556 2004-05-25 Fernando Perez <fperez@colorado.edu>
2561 2004-05-25 Fernando Perez <fperez@colorado.edu>
2557
2562
2558 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2563 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2559 parens would get passed to the shell.
2564 parens would get passed to the shell.
2560
2565
2561 2004-05-20 Fernando Perez <fperez@colorado.edu>
2566 2004-05-20 Fernando Perez <fperez@colorado.edu>
2562
2567
2563 * IPython/Magic.py (Magic.magic_prun): changed default profile
2568 * IPython/Magic.py (Magic.magic_prun): changed default profile
2564 sort order to 'time' (the more common profiling need).
2569 sort order to 'time' (the more common profiling need).
2565
2570
2566 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2571 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2567 so that source code shown is guaranteed in sync with the file on
2572 so that source code shown is guaranteed in sync with the file on
2568 disk (also changed in psource). Similar fix to the one for
2573 disk (also changed in psource). Similar fix to the one for
2569 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2574 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2570 <yann.ledu-AT-noos.fr>.
2575 <yann.ledu-AT-noos.fr>.
2571
2576
2572 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2577 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2573 with a single option would not be correctly parsed. Closes
2578 with a single option would not be correctly parsed. Closes
2574 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2579 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2575 introduced in 0.6.0 (on 2004-05-06).
2580 introduced in 0.6.0 (on 2004-05-06).
2576
2581
2577 2004-05-13 *** Released version 0.6.0
2582 2004-05-13 *** Released version 0.6.0
2578
2583
2579 2004-05-13 Fernando Perez <fperez@colorado.edu>
2584 2004-05-13 Fernando Perez <fperez@colorado.edu>
2580
2585
2581 * debian/: Added debian/ directory to CVS, so that debian support
2586 * debian/: Added debian/ directory to CVS, so that debian support
2582 is publicly accessible. The debian package is maintained by Jack
2587 is publicly accessible. The debian package is maintained by Jack
2583 Moffit <jack-AT-xiph.org>.
2588 Moffit <jack-AT-xiph.org>.
2584
2589
2585 * Documentation: included the notes about an ipython-based system
2590 * Documentation: included the notes about an ipython-based system
2586 shell (the hypothetical 'pysh') into the new_design.pdf document,
2591 shell (the hypothetical 'pysh') into the new_design.pdf document,
2587 so that these ideas get distributed to users along with the
2592 so that these ideas get distributed to users along with the
2588 official documentation.
2593 official documentation.
2589
2594
2590 2004-05-10 Fernando Perez <fperez@colorado.edu>
2595 2004-05-10 Fernando Perez <fperez@colorado.edu>
2591
2596
2592 * IPython/Logger.py (Logger.create_log): fix recently introduced
2597 * IPython/Logger.py (Logger.create_log): fix recently introduced
2593 bug (misindented line) where logstart would fail when not given an
2598 bug (misindented line) where logstart would fail when not given an
2594 explicit filename.
2599 explicit filename.
2595
2600
2596 2004-05-09 Fernando Perez <fperez@colorado.edu>
2601 2004-05-09 Fernando Perez <fperez@colorado.edu>
2597
2602
2598 * IPython/Magic.py (Magic.parse_options): skip system call when
2603 * IPython/Magic.py (Magic.parse_options): skip system call when
2599 there are no options to look for. Faster, cleaner for the common
2604 there are no options to look for. Faster, cleaner for the common
2600 case.
2605 case.
2601
2606
2602 * Documentation: many updates to the manual: describing Windows
2607 * Documentation: many updates to the manual: describing Windows
2603 support better, Gnuplot updates, credits, misc small stuff. Also
2608 support better, Gnuplot updates, credits, misc small stuff. Also
2604 updated the new_design doc a bit.
2609 updated the new_design doc a bit.
2605
2610
2606 2004-05-06 *** Released version 0.6.0.rc1
2611 2004-05-06 *** Released version 0.6.0.rc1
2607
2612
2608 2004-05-06 Fernando Perez <fperez@colorado.edu>
2613 2004-05-06 Fernando Perez <fperez@colorado.edu>
2609
2614
2610 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2615 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2611 operations to use the vastly more efficient list/''.join() method.
2616 operations to use the vastly more efficient list/''.join() method.
2612 (FormattedTB.text): Fix
2617 (FormattedTB.text): Fix
2613 http://www.scipy.net/roundup/ipython/issue12 - exception source
2618 http://www.scipy.net/roundup/ipython/issue12 - exception source
2614 extract not updated after reload. Thanks to Mike Salib
2619 extract not updated after reload. Thanks to Mike Salib
2615 <msalib-AT-mit.edu> for pinning the source of the problem.
2620 <msalib-AT-mit.edu> for pinning the source of the problem.
2616 Fortunately, the solution works inside ipython and doesn't require
2621 Fortunately, the solution works inside ipython and doesn't require
2617 any changes to python proper.
2622 any changes to python proper.
2618
2623
2619 * IPython/Magic.py (Magic.parse_options): Improved to process the
2624 * IPython/Magic.py (Magic.parse_options): Improved to process the
2620 argument list as a true shell would (by actually using the
2625 argument list as a true shell would (by actually using the
2621 underlying system shell). This way, all @magics automatically get
2626 underlying system shell). This way, all @magics automatically get
2622 shell expansion for variables. Thanks to a comment by Alex
2627 shell expansion for variables. Thanks to a comment by Alex
2623 Schmolck.
2628 Schmolck.
2624
2629
2625 2004-04-04 Fernando Perez <fperez@colorado.edu>
2630 2004-04-04 Fernando Perez <fperez@colorado.edu>
2626
2631
2627 * IPython/iplib.py (InteractiveShell.interact): Added a special
2632 * IPython/iplib.py (InteractiveShell.interact): Added a special
2628 trap for a debugger quit exception, which is basically impossible
2633 trap for a debugger quit exception, which is basically impossible
2629 to handle by normal mechanisms, given what pdb does to the stack.
2634 to handle by normal mechanisms, given what pdb does to the stack.
2630 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2635 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2631
2636
2632 2004-04-03 Fernando Perez <fperez@colorado.edu>
2637 2004-04-03 Fernando Perez <fperez@colorado.edu>
2633
2638
2634 * IPython/genutils.py (Term): Standardized the names of the Term
2639 * IPython/genutils.py (Term): Standardized the names of the Term
2635 class streams to cin/cout/cerr, following C++ naming conventions
2640 class streams to cin/cout/cerr, following C++ naming conventions
2636 (I can't use in/out/err because 'in' is not a valid attribute
2641 (I can't use in/out/err because 'in' is not a valid attribute
2637 name).
2642 name).
2638
2643
2639 * IPython/iplib.py (InteractiveShell.interact): don't increment
2644 * IPython/iplib.py (InteractiveShell.interact): don't increment
2640 the prompt if there's no user input. By Daniel 'Dang' Griffith
2645 the prompt if there's no user input. By Daniel 'Dang' Griffith
2641 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2646 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2642 Francois Pinard.
2647 Francois Pinard.
2643
2648
2644 2004-04-02 Fernando Perez <fperez@colorado.edu>
2649 2004-04-02 Fernando Perez <fperez@colorado.edu>
2645
2650
2646 * IPython/genutils.py (Stream.__init__): Modified to survive at
2651 * IPython/genutils.py (Stream.__init__): Modified to survive at
2647 least importing in contexts where stdin/out/err aren't true file
2652 least importing in contexts where stdin/out/err aren't true file
2648 objects, such as PyCrust (they lack fileno() and mode). However,
2653 objects, such as PyCrust (they lack fileno() and mode). However,
2649 the recovery facilities which rely on these things existing will
2654 the recovery facilities which rely on these things existing will
2650 not work.
2655 not work.
2651
2656
2652 2004-04-01 Fernando Perez <fperez@colorado.edu>
2657 2004-04-01 Fernando Perez <fperez@colorado.edu>
2653
2658
2654 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2659 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2655 use the new getoutputerror() function, so it properly
2660 use the new getoutputerror() function, so it properly
2656 distinguishes stdout/err.
2661 distinguishes stdout/err.
2657
2662
2658 * IPython/genutils.py (getoutputerror): added a function to
2663 * IPython/genutils.py (getoutputerror): added a function to
2659 capture separately the standard output and error of a command.
2664 capture separately the standard output and error of a command.
2660 After a comment from dang on the mailing lists. This code is
2665 After a comment from dang on the mailing lists. This code is
2661 basically a modified version of commands.getstatusoutput(), from
2666 basically a modified version of commands.getstatusoutput(), from
2662 the standard library.
2667 the standard library.
2663
2668
2664 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2669 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2665 '!!' as a special syntax (shorthand) to access @sx.
2670 '!!' as a special syntax (shorthand) to access @sx.
2666
2671
2667 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2672 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2668 command and return its output as a list split on '\n'.
2673 command and return its output as a list split on '\n'.
2669
2674
2670 2004-03-31 Fernando Perez <fperez@colorado.edu>
2675 2004-03-31 Fernando Perez <fperez@colorado.edu>
2671
2676
2672 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2677 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2673 method to dictionaries used as FakeModule instances if they lack
2678 method to dictionaries used as FakeModule instances if they lack
2674 it. At least pydoc in python2.3 breaks for runtime-defined
2679 it. At least pydoc in python2.3 breaks for runtime-defined
2675 functions without this hack. At some point I need to _really_
2680 functions without this hack. At some point I need to _really_
2676 understand what FakeModule is doing, because it's a gross hack.
2681 understand what FakeModule is doing, because it's a gross hack.
2677 But it solves Arnd's problem for now...
2682 But it solves Arnd's problem for now...
2678
2683
2679 2004-02-27 Fernando Perez <fperez@colorado.edu>
2684 2004-02-27 Fernando Perez <fperez@colorado.edu>
2680
2685
2681 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2686 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2682 mode would behave erratically. Also increased the number of
2687 mode would behave erratically. Also increased the number of
2683 possible logs in rotate mod to 999. Thanks to Rod Holland
2688 possible logs in rotate mod to 999. Thanks to Rod Holland
2684 <rhh@StructureLABS.com> for the report and fixes.
2689 <rhh@StructureLABS.com> for the report and fixes.
2685
2690
2686 2004-02-26 Fernando Perez <fperez@colorado.edu>
2691 2004-02-26 Fernando Perez <fperez@colorado.edu>
2687
2692
2688 * IPython/genutils.py (page): Check that the curses module really
2693 * IPython/genutils.py (page): Check that the curses module really
2689 has the initscr attribute before trying to use it. For some
2694 has the initscr attribute before trying to use it. For some
2690 reason, the Solaris curses module is missing this. I think this
2695 reason, the Solaris curses module is missing this. I think this
2691 should be considered a Solaris python bug, but I'm not sure.
2696 should be considered a Solaris python bug, but I'm not sure.
2692
2697
2693 2004-01-17 Fernando Perez <fperez@colorado.edu>
2698 2004-01-17 Fernando Perez <fperez@colorado.edu>
2694
2699
2695 * IPython/genutils.py (Stream.__init__): Changes to try to make
2700 * IPython/genutils.py (Stream.__init__): Changes to try to make
2696 ipython robust against stdin/out/err being closed by the user.
2701 ipython robust against stdin/out/err being closed by the user.
2697 This is 'user error' (and blocks a normal python session, at least
2702 This is 'user error' (and blocks a normal python session, at least
2698 the stdout case). However, Ipython should be able to survive such
2703 the stdout case). However, Ipython should be able to survive such
2699 instances of abuse as gracefully as possible. To simplify the
2704 instances of abuse as gracefully as possible. To simplify the
2700 coding and maintain compatibility with Gary Bishop's Term
2705 coding and maintain compatibility with Gary Bishop's Term
2701 contributions, I've made use of classmethods for this. I think
2706 contributions, I've made use of classmethods for this. I think
2702 this introduces a dependency on python 2.2.
2707 this introduces a dependency on python 2.2.
2703
2708
2704 2004-01-13 Fernando Perez <fperez@colorado.edu>
2709 2004-01-13 Fernando Perez <fperez@colorado.edu>
2705
2710
2706 * IPython/numutils.py (exp_safe): simplified the code a bit and
2711 * IPython/numutils.py (exp_safe): simplified the code a bit and
2707 removed the need for importing the kinds module altogether.
2712 removed the need for importing the kinds module altogether.
2708
2713
2709 2004-01-06 Fernando Perez <fperez@colorado.edu>
2714 2004-01-06 Fernando Perez <fperez@colorado.edu>
2710
2715
2711 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2716 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2712 a magic function instead, after some community feedback. No
2717 a magic function instead, after some community feedback. No
2713 special syntax will exist for it, but its name is deliberately
2718 special syntax will exist for it, but its name is deliberately
2714 very short.
2719 very short.
2715
2720
2716 2003-12-20 Fernando Perez <fperez@colorado.edu>
2721 2003-12-20 Fernando Perez <fperez@colorado.edu>
2717
2722
2718 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2723 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2719 new functionality, to automagically assign the result of a shell
2724 new functionality, to automagically assign the result of a shell
2720 command to a variable. I'll solicit some community feedback on
2725 command to a variable. I'll solicit some community feedback on
2721 this before making it permanent.
2726 this before making it permanent.
2722
2727
2723 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2728 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2724 requested about callables for which inspect couldn't obtain a
2729 requested about callables for which inspect couldn't obtain a
2725 proper argspec. Thanks to a crash report sent by Etienne
2730 proper argspec. Thanks to a crash report sent by Etienne
2726 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2731 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2727
2732
2728 2003-12-09 Fernando Perez <fperez@colorado.edu>
2733 2003-12-09 Fernando Perez <fperez@colorado.edu>
2729
2734
2730 * IPython/genutils.py (page): patch for the pager to work across
2735 * IPython/genutils.py (page): patch for the pager to work across
2731 various versions of Windows. By Gary Bishop.
2736 various versions of Windows. By Gary Bishop.
2732
2737
2733 2003-12-04 Fernando Perez <fperez@colorado.edu>
2738 2003-12-04 Fernando Perez <fperez@colorado.edu>
2734
2739
2735 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2740 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2736 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2741 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2737 While I tested this and it looks ok, there may still be corner
2742 While I tested this and it looks ok, there may still be corner
2738 cases I've missed.
2743 cases I've missed.
2739
2744
2740 2003-12-01 Fernando Perez <fperez@colorado.edu>
2745 2003-12-01 Fernando Perez <fperez@colorado.edu>
2741
2746
2742 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2747 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2743 where a line like 'p,q=1,2' would fail because the automagic
2748 where a line like 'p,q=1,2' would fail because the automagic
2744 system would be triggered for @p.
2749 system would be triggered for @p.
2745
2750
2746 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2751 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2747 cleanups, code unmodified.
2752 cleanups, code unmodified.
2748
2753
2749 * IPython/genutils.py (Term): added a class for IPython to handle
2754 * IPython/genutils.py (Term): added a class for IPython to handle
2750 output. In most cases it will just be a proxy for stdout/err, but
2755 output. In most cases it will just be a proxy for stdout/err, but
2751 having this allows modifications to be made for some platforms,
2756 having this allows modifications to be made for some platforms,
2752 such as handling color escapes under Windows. All of this code
2757 such as handling color escapes under Windows. All of this code
2753 was contributed by Gary Bishop, with minor modifications by me.
2758 was contributed by Gary Bishop, with minor modifications by me.
2754 The actual changes affect many files.
2759 The actual changes affect many files.
2755
2760
2756 2003-11-30 Fernando Perez <fperez@colorado.edu>
2761 2003-11-30 Fernando Perez <fperez@colorado.edu>
2757
2762
2758 * IPython/iplib.py (file_matches): new completion code, courtesy
2763 * IPython/iplib.py (file_matches): new completion code, courtesy
2759 of Jeff Collins. This enables filename completion again under
2764 of Jeff Collins. This enables filename completion again under
2760 python 2.3, which disabled it at the C level.
2765 python 2.3, which disabled it at the C level.
2761
2766
2762 2003-11-11 Fernando Perez <fperez@colorado.edu>
2767 2003-11-11 Fernando Perez <fperez@colorado.edu>
2763
2768
2764 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2769 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2765 for Numeric.array(map(...)), but often convenient.
2770 for Numeric.array(map(...)), but often convenient.
2766
2771
2767 2003-11-05 Fernando Perez <fperez@colorado.edu>
2772 2003-11-05 Fernando Perez <fperez@colorado.edu>
2768
2773
2769 * IPython/numutils.py (frange): Changed a call from int() to
2774 * IPython/numutils.py (frange): Changed a call from int() to
2770 int(round()) to prevent a problem reported with arange() in the
2775 int(round()) to prevent a problem reported with arange() in the
2771 numpy list.
2776 numpy list.
2772
2777
2773 2003-10-06 Fernando Perez <fperez@colorado.edu>
2778 2003-10-06 Fernando Perez <fperez@colorado.edu>
2774
2779
2775 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2780 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2776 prevent crashes if sys lacks an argv attribute (it happens with
2781 prevent crashes if sys lacks an argv attribute (it happens with
2777 embedded interpreters which build a bare-bones sys module).
2782 embedded interpreters which build a bare-bones sys module).
2778 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2783 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2779
2784
2780 2003-09-24 Fernando Perez <fperez@colorado.edu>
2785 2003-09-24 Fernando Perez <fperez@colorado.edu>
2781
2786
2782 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2787 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2783 to protect against poorly written user objects where __getattr__
2788 to protect against poorly written user objects where __getattr__
2784 raises exceptions other than AttributeError. Thanks to a bug
2789 raises exceptions other than AttributeError. Thanks to a bug
2785 report by Oliver Sander <osander-AT-gmx.de>.
2790 report by Oliver Sander <osander-AT-gmx.de>.
2786
2791
2787 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2792 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2788 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2793 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2789
2794
2790 2003-09-09 Fernando Perez <fperez@colorado.edu>
2795 2003-09-09 Fernando Perez <fperez@colorado.edu>
2791
2796
2792 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2797 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2793 unpacking a list whith a callable as first element would
2798 unpacking a list whith a callable as first element would
2794 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2799 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2795 Collins.
2800 Collins.
2796
2801
2797 2003-08-25 *** Released version 0.5.0
2802 2003-08-25 *** Released version 0.5.0
2798
2803
2799 2003-08-22 Fernando Perez <fperez@colorado.edu>
2804 2003-08-22 Fernando Perez <fperez@colorado.edu>
2800
2805
2801 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2806 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2802 improperly defined user exceptions. Thanks to feedback from Mark
2807 improperly defined user exceptions. Thanks to feedback from Mark
2803 Russell <mrussell-AT-verio.net>.
2808 Russell <mrussell-AT-verio.net>.
2804
2809
2805 2003-08-20 Fernando Perez <fperez@colorado.edu>
2810 2003-08-20 Fernando Perez <fperez@colorado.edu>
2806
2811
2807 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2812 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2808 printing so that it would print multi-line string forms starting
2813 printing so that it would print multi-line string forms starting
2809 with a new line. This way the formatting is better respected for
2814 with a new line. This way the formatting is better respected for
2810 objects which work hard to make nice string forms.
2815 objects which work hard to make nice string forms.
2811
2816
2812 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2817 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2813 autocall would overtake data access for objects with both
2818 autocall would overtake data access for objects with both
2814 __getitem__ and __call__.
2819 __getitem__ and __call__.
2815
2820
2816 2003-08-19 *** Released version 0.5.0-rc1
2821 2003-08-19 *** Released version 0.5.0-rc1
2817
2822
2818 2003-08-19 Fernando Perez <fperez@colorado.edu>
2823 2003-08-19 Fernando Perez <fperez@colorado.edu>
2819
2824
2820 * IPython/deep_reload.py (load_tail): single tiny change here
2825 * IPython/deep_reload.py (load_tail): single tiny change here
2821 seems to fix the long-standing bug of dreload() failing to work
2826 seems to fix the long-standing bug of dreload() failing to work
2822 for dotted names. But this module is pretty tricky, so I may have
2827 for dotted names. But this module is pretty tricky, so I may have
2823 missed some subtlety. Needs more testing!.
2828 missed some subtlety. Needs more testing!.
2824
2829
2825 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2830 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2826 exceptions which have badly implemented __str__ methods.
2831 exceptions which have badly implemented __str__ methods.
2827 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2832 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2828 which I've been getting reports about from Python 2.3 users. I
2833 which I've been getting reports about from Python 2.3 users. I
2829 wish I had a simple test case to reproduce the problem, so I could
2834 wish I had a simple test case to reproduce the problem, so I could
2830 either write a cleaner workaround or file a bug report if
2835 either write a cleaner workaround or file a bug report if
2831 necessary.
2836 necessary.
2832
2837
2833 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2838 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2834 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2839 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2835 a bug report by Tjabo Kloppenburg.
2840 a bug report by Tjabo Kloppenburg.
2836
2841
2837 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2842 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2838 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2843 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2839 seems rather unstable. Thanks to a bug report by Tjabo
2844 seems rather unstable. Thanks to a bug report by Tjabo
2840 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2845 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2841
2846
2842 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2847 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2843 this out soon because of the critical fixes in the inner loop for
2848 this out soon because of the critical fixes in the inner loop for
2844 generators.
2849 generators.
2845
2850
2846 * IPython/Magic.py (Magic.getargspec): removed. This (and
2851 * IPython/Magic.py (Magic.getargspec): removed. This (and
2847 _get_def) have been obsoleted by OInspect for a long time, I
2852 _get_def) have been obsoleted by OInspect for a long time, I
2848 hadn't noticed that they were dead code.
2853 hadn't noticed that they were dead code.
2849 (Magic._ofind): restored _ofind functionality for a few literals
2854 (Magic._ofind): restored _ofind functionality for a few literals
2850 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2855 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2851 for things like "hello".capitalize?, since that would require a
2856 for things like "hello".capitalize?, since that would require a
2852 potentially dangerous eval() again.
2857 potentially dangerous eval() again.
2853
2858
2854 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2859 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2855 logic a bit more to clean up the escapes handling and minimize the
2860 logic a bit more to clean up the escapes handling and minimize the
2856 use of _ofind to only necessary cases. The interactive 'feel' of
2861 use of _ofind to only necessary cases. The interactive 'feel' of
2857 IPython should have improved quite a bit with the changes in
2862 IPython should have improved quite a bit with the changes in
2858 _prefilter and _ofind (besides being far safer than before).
2863 _prefilter and _ofind (besides being far safer than before).
2859
2864
2860 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2865 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2861 obscure, never reported). Edit would fail to find the object to
2866 obscure, never reported). Edit would fail to find the object to
2862 edit under some circumstances.
2867 edit under some circumstances.
2863 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2868 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2864 which were causing double-calling of generators. Those eval calls
2869 which were causing double-calling of generators. Those eval calls
2865 were _very_ dangerous, since code with side effects could be
2870 were _very_ dangerous, since code with side effects could be
2866 triggered. As they say, 'eval is evil'... These were the
2871 triggered. As they say, 'eval is evil'... These were the
2867 nastiest evals in IPython. Besides, _ofind is now far simpler,
2872 nastiest evals in IPython. Besides, _ofind is now far simpler,
2868 and it should also be quite a bit faster. Its use of inspect is
2873 and it should also be quite a bit faster. Its use of inspect is
2869 also safer, so perhaps some of the inspect-related crashes I've
2874 also safer, so perhaps some of the inspect-related crashes I've
2870 seen lately with Python 2.3 might be taken care of. That will
2875 seen lately with Python 2.3 might be taken care of. That will
2871 need more testing.
2876 need more testing.
2872
2877
2873 2003-08-17 Fernando Perez <fperez@colorado.edu>
2878 2003-08-17 Fernando Perez <fperez@colorado.edu>
2874
2879
2875 * IPython/iplib.py (InteractiveShell._prefilter): significant
2880 * IPython/iplib.py (InteractiveShell._prefilter): significant
2876 simplifications to the logic for handling user escapes. Faster
2881 simplifications to the logic for handling user escapes. Faster
2877 and simpler code.
2882 and simpler code.
2878
2883
2879 2003-08-14 Fernando Perez <fperez@colorado.edu>
2884 2003-08-14 Fernando Perez <fperez@colorado.edu>
2880
2885
2881 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2886 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2882 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2887 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2883 but it should be quite a bit faster. And the recursive version
2888 but it should be quite a bit faster. And the recursive version
2884 generated O(log N) intermediate storage for all rank>1 arrays,
2889 generated O(log N) intermediate storage for all rank>1 arrays,
2885 even if they were contiguous.
2890 even if they were contiguous.
2886 (l1norm): Added this function.
2891 (l1norm): Added this function.
2887 (norm): Added this function for arbitrary norms (including
2892 (norm): Added this function for arbitrary norms (including
2888 l-infinity). l1 and l2 are still special cases for convenience
2893 l-infinity). l1 and l2 are still special cases for convenience
2889 and speed.
2894 and speed.
2890
2895
2891 2003-08-03 Fernando Perez <fperez@colorado.edu>
2896 2003-08-03 Fernando Perez <fperez@colorado.edu>
2892
2897
2893 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2898 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2894 exceptions, which now raise PendingDeprecationWarnings in Python
2899 exceptions, which now raise PendingDeprecationWarnings in Python
2895 2.3. There were some in Magic and some in Gnuplot2.
2900 2.3. There were some in Magic and some in Gnuplot2.
2896
2901
2897 2003-06-30 Fernando Perez <fperez@colorado.edu>
2902 2003-06-30 Fernando Perez <fperez@colorado.edu>
2898
2903
2899 * IPython/genutils.py (page): modified to call curses only for
2904 * IPython/genutils.py (page): modified to call curses only for
2900 terminals where TERM=='xterm'. After problems under many other
2905 terminals where TERM=='xterm'. After problems under many other
2901 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2906 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2902
2907
2903 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2908 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2904 would be triggered when readline was absent. This was just an old
2909 would be triggered when readline was absent. This was just an old
2905 debugging statement I'd forgotten to take out.
2910 debugging statement I'd forgotten to take out.
2906
2911
2907 2003-06-20 Fernando Perez <fperez@colorado.edu>
2912 2003-06-20 Fernando Perez <fperez@colorado.edu>
2908
2913
2909 * IPython/genutils.py (clock): modified to return only user time
2914 * IPython/genutils.py (clock): modified to return only user time
2910 (not counting system time), after a discussion on scipy. While
2915 (not counting system time), after a discussion on scipy. While
2911 system time may be a useful quantity occasionally, it may much
2916 system time may be a useful quantity occasionally, it may much
2912 more easily be skewed by occasional swapping or other similar
2917 more easily be skewed by occasional swapping or other similar
2913 activity.
2918 activity.
2914
2919
2915 2003-06-05 Fernando Perez <fperez@colorado.edu>
2920 2003-06-05 Fernando Perez <fperez@colorado.edu>
2916
2921
2917 * IPython/numutils.py (identity): new function, for building
2922 * IPython/numutils.py (identity): new function, for building
2918 arbitrary rank Kronecker deltas (mostly backwards compatible with
2923 arbitrary rank Kronecker deltas (mostly backwards compatible with
2919 Numeric.identity)
2924 Numeric.identity)
2920
2925
2921 2003-06-03 Fernando Perez <fperez@colorado.edu>
2926 2003-06-03 Fernando Perez <fperez@colorado.edu>
2922
2927
2923 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2928 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2924 arguments passed to magics with spaces, to allow trailing '\' to
2929 arguments passed to magics with spaces, to allow trailing '\' to
2925 work normally (mainly for Windows users).
2930 work normally (mainly for Windows users).
2926
2931
2927 2003-05-29 Fernando Perez <fperez@colorado.edu>
2932 2003-05-29 Fernando Perez <fperez@colorado.edu>
2928
2933
2929 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2934 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2930 instead of pydoc.help. This fixes a bizarre behavior where
2935 instead of pydoc.help. This fixes a bizarre behavior where
2931 printing '%s' % locals() would trigger the help system. Now
2936 printing '%s' % locals() would trigger the help system. Now
2932 ipython behaves like normal python does.
2937 ipython behaves like normal python does.
2933
2938
2934 Note that if one does 'from pydoc import help', the bizarre
2939 Note that if one does 'from pydoc import help', the bizarre
2935 behavior returns, but this will also happen in normal python, so
2940 behavior returns, but this will also happen in normal python, so
2936 it's not an ipython bug anymore (it has to do with how pydoc.help
2941 it's not an ipython bug anymore (it has to do with how pydoc.help
2937 is implemented).
2942 is implemented).
2938
2943
2939 2003-05-22 Fernando Perez <fperez@colorado.edu>
2944 2003-05-22 Fernando Perez <fperez@colorado.edu>
2940
2945
2941 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2946 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2942 return [] instead of None when nothing matches, also match to end
2947 return [] instead of None when nothing matches, also match to end
2943 of line. Patch by Gary Bishop.
2948 of line. Patch by Gary Bishop.
2944
2949
2945 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2950 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2946 protection as before, for files passed on the command line. This
2951 protection as before, for files passed on the command line. This
2947 prevents the CrashHandler from kicking in if user files call into
2952 prevents the CrashHandler from kicking in if user files call into
2948 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2953 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2949 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2954 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2950
2955
2951 2003-05-20 *** Released version 0.4.0
2956 2003-05-20 *** Released version 0.4.0
2952
2957
2953 2003-05-20 Fernando Perez <fperez@colorado.edu>
2958 2003-05-20 Fernando Perez <fperez@colorado.edu>
2954
2959
2955 * setup.py: added support for manpages. It's a bit hackish b/c of
2960 * setup.py: added support for manpages. It's a bit hackish b/c of
2956 a bug in the way the bdist_rpm distutils target handles gzipped
2961 a bug in the way the bdist_rpm distutils target handles gzipped
2957 manpages, but it works. After a patch by Jack.
2962 manpages, but it works. After a patch by Jack.
2958
2963
2959 2003-05-19 Fernando Perez <fperez@colorado.edu>
2964 2003-05-19 Fernando Perez <fperez@colorado.edu>
2960
2965
2961 * IPython/numutils.py: added a mockup of the kinds module, since
2966 * IPython/numutils.py: added a mockup of the kinds module, since
2962 it was recently removed from Numeric. This way, numutils will
2967 it was recently removed from Numeric. This way, numutils will
2963 work for all users even if they are missing kinds.
2968 work for all users even if they are missing kinds.
2964
2969
2965 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2970 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2966 failure, which can occur with SWIG-wrapped extensions. After a
2971 failure, which can occur with SWIG-wrapped extensions. After a
2967 crash report from Prabhu.
2972 crash report from Prabhu.
2968
2973
2969 2003-05-16 Fernando Perez <fperez@colorado.edu>
2974 2003-05-16 Fernando Perez <fperez@colorado.edu>
2970
2975
2971 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2976 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2972 protect ipython from user code which may call directly
2977 protect ipython from user code which may call directly
2973 sys.excepthook (this looks like an ipython crash to the user, even
2978 sys.excepthook (this looks like an ipython crash to the user, even
2974 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2979 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2975 This is especially important to help users of WxWindows, but may
2980 This is especially important to help users of WxWindows, but may
2976 also be useful in other cases.
2981 also be useful in other cases.
2977
2982
2978 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2983 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2979 an optional tb_offset to be specified, and to preserve exception
2984 an optional tb_offset to be specified, and to preserve exception
2980 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2985 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2981
2986
2982 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2987 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2983
2988
2984 2003-05-15 Fernando Perez <fperez@colorado.edu>
2989 2003-05-15 Fernando Perez <fperez@colorado.edu>
2985
2990
2986 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2991 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2987 installing for a new user under Windows.
2992 installing for a new user under Windows.
2988
2993
2989 2003-05-12 Fernando Perez <fperez@colorado.edu>
2994 2003-05-12 Fernando Perez <fperez@colorado.edu>
2990
2995
2991 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2996 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2992 handler for Emacs comint-based lines. Currently it doesn't do
2997 handler for Emacs comint-based lines. Currently it doesn't do
2993 much (but importantly, it doesn't update the history cache). In
2998 much (but importantly, it doesn't update the history cache). In
2994 the future it may be expanded if Alex needs more functionality
2999 the future it may be expanded if Alex needs more functionality
2995 there.
3000 there.
2996
3001
2997 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3002 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2998 info to crash reports.
3003 info to crash reports.
2999
3004
3000 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3005 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3001 just like Python's -c. Also fixed crash with invalid -color
3006 just like Python's -c. Also fixed crash with invalid -color
3002 option value at startup. Thanks to Will French
3007 option value at startup. Thanks to Will French
3003 <wfrench-AT-bestweb.net> for the bug report.
3008 <wfrench-AT-bestweb.net> for the bug report.
3004
3009
3005 2003-05-09 Fernando Perez <fperez@colorado.edu>
3010 2003-05-09 Fernando Perez <fperez@colorado.edu>
3006
3011
3007 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3012 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3008 to EvalDict (it's a mapping, after all) and simplified its code
3013 to EvalDict (it's a mapping, after all) and simplified its code
3009 quite a bit, after a nice discussion on c.l.py where Gustavo
3014 quite a bit, after a nice discussion on c.l.py where Gustavo
3010 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3015 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3011
3016
3012 2003-04-30 Fernando Perez <fperez@colorado.edu>
3017 2003-04-30 Fernando Perez <fperez@colorado.edu>
3013
3018
3014 * IPython/genutils.py (timings_out): modified it to reduce its
3019 * IPython/genutils.py (timings_out): modified it to reduce its
3015 overhead in the common reps==1 case.
3020 overhead in the common reps==1 case.
3016
3021
3017 2003-04-29 Fernando Perez <fperez@colorado.edu>
3022 2003-04-29 Fernando Perez <fperez@colorado.edu>
3018
3023
3019 * IPython/genutils.py (timings_out): Modified to use the resource
3024 * IPython/genutils.py (timings_out): Modified to use the resource
3020 module, which avoids the wraparound problems of time.clock().
3025 module, which avoids the wraparound problems of time.clock().
3021
3026
3022 2003-04-17 *** Released version 0.2.15pre4
3027 2003-04-17 *** Released version 0.2.15pre4
3023
3028
3024 2003-04-17 Fernando Perez <fperez@colorado.edu>
3029 2003-04-17 Fernando Perez <fperez@colorado.edu>
3025
3030
3026 * setup.py (scriptfiles): Split windows-specific stuff over to a
3031 * setup.py (scriptfiles): Split windows-specific stuff over to a
3027 separate file, in an attempt to have a Windows GUI installer.
3032 separate file, in an attempt to have a Windows GUI installer.
3028 That didn't work, but part of the groundwork is done.
3033 That didn't work, but part of the groundwork is done.
3029
3034
3030 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3035 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3031 indent/unindent with 4 spaces. Particularly useful in combination
3036 indent/unindent with 4 spaces. Particularly useful in combination
3032 with the new auto-indent option.
3037 with the new auto-indent option.
3033
3038
3034 2003-04-16 Fernando Perez <fperez@colorado.edu>
3039 2003-04-16 Fernando Perez <fperez@colorado.edu>
3035
3040
3036 * IPython/Magic.py: various replacements of self.rc for
3041 * IPython/Magic.py: various replacements of self.rc for
3037 self.shell.rc. A lot more remains to be done to fully disentangle
3042 self.shell.rc. A lot more remains to be done to fully disentangle
3038 this class from the main Shell class.
3043 this class from the main Shell class.
3039
3044
3040 * IPython/GnuplotRuntime.py: added checks for mouse support so
3045 * IPython/GnuplotRuntime.py: added checks for mouse support so
3041 that we don't try to enable it if the current gnuplot doesn't
3046 that we don't try to enable it if the current gnuplot doesn't
3042 really support it. Also added checks so that we don't try to
3047 really support it. Also added checks so that we don't try to
3043 enable persist under Windows (where Gnuplot doesn't recognize the
3048 enable persist under Windows (where Gnuplot doesn't recognize the
3044 option).
3049 option).
3045
3050
3046 * IPython/iplib.py (InteractiveShell.interact): Added optional
3051 * IPython/iplib.py (InteractiveShell.interact): Added optional
3047 auto-indenting code, after a patch by King C. Shu
3052 auto-indenting code, after a patch by King C. Shu
3048 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3053 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3049 get along well with pasting indented code. If I ever figure out
3054 get along well with pasting indented code. If I ever figure out
3050 how to make that part go well, it will become on by default.
3055 how to make that part go well, it will become on by default.
3051
3056
3052 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3057 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3053 crash ipython if there was an unmatched '%' in the user's prompt
3058 crash ipython if there was an unmatched '%' in the user's prompt
3054 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3059 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3055
3060
3056 * IPython/iplib.py (InteractiveShell.interact): removed the
3061 * IPython/iplib.py (InteractiveShell.interact): removed the
3057 ability to ask the user whether he wants to crash or not at the
3062 ability to ask the user whether he wants to crash or not at the
3058 'last line' exception handler. Calling functions at that point
3063 'last line' exception handler. Calling functions at that point
3059 changes the stack, and the error reports would have incorrect
3064 changes the stack, and the error reports would have incorrect
3060 tracebacks.
3065 tracebacks.
3061
3066
3062 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3067 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3063 pass through a peger a pretty-printed form of any object. After a
3068 pass through a peger a pretty-printed form of any object. After a
3064 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3069 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3065
3070
3066 2003-04-14 Fernando Perez <fperez@colorado.edu>
3071 2003-04-14 Fernando Perez <fperez@colorado.edu>
3067
3072
3068 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3073 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3069 all files in ~ would be modified at first install (instead of
3074 all files in ~ would be modified at first install (instead of
3070 ~/.ipython). This could be potentially disastrous, as the
3075 ~/.ipython). This could be potentially disastrous, as the
3071 modification (make line-endings native) could damage binary files.
3076 modification (make line-endings native) could damage binary files.
3072
3077
3073 2003-04-10 Fernando Perez <fperez@colorado.edu>
3078 2003-04-10 Fernando Perez <fperez@colorado.edu>
3074
3079
3075 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3080 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3076 handle only lines which are invalid python. This now means that
3081 handle only lines which are invalid python. This now means that
3077 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3082 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3078 for the bug report.
3083 for the bug report.
3079
3084
3080 2003-04-01 Fernando Perez <fperez@colorado.edu>
3085 2003-04-01 Fernando Perez <fperez@colorado.edu>
3081
3086
3082 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3087 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3083 where failing to set sys.last_traceback would crash pdb.pm().
3088 where failing to set sys.last_traceback would crash pdb.pm().
3084 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3089 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3085 report.
3090 report.
3086
3091
3087 2003-03-25 Fernando Perez <fperez@colorado.edu>
3092 2003-03-25 Fernando Perez <fperez@colorado.edu>
3088
3093
3089 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3094 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3090 before printing it (it had a lot of spurious blank lines at the
3095 before printing it (it had a lot of spurious blank lines at the
3091 end).
3096 end).
3092
3097
3093 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3098 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3094 output would be sent 21 times! Obviously people don't use this
3099 output would be sent 21 times! Obviously people don't use this
3095 too often, or I would have heard about it.
3100 too often, or I would have heard about it.
3096
3101
3097 2003-03-24 Fernando Perez <fperez@colorado.edu>
3102 2003-03-24 Fernando Perez <fperez@colorado.edu>
3098
3103
3099 * setup.py (scriptfiles): renamed the data_files parameter from
3104 * setup.py (scriptfiles): renamed the data_files parameter from
3100 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3105 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3101 for the patch.
3106 for the patch.
3102
3107
3103 2003-03-20 Fernando Perez <fperez@colorado.edu>
3108 2003-03-20 Fernando Perez <fperez@colorado.edu>
3104
3109
3105 * IPython/genutils.py (error): added error() and fatal()
3110 * IPython/genutils.py (error): added error() and fatal()
3106 functions.
3111 functions.
3107
3112
3108 2003-03-18 *** Released version 0.2.15pre3
3113 2003-03-18 *** Released version 0.2.15pre3
3109
3114
3110 2003-03-18 Fernando Perez <fperez@colorado.edu>
3115 2003-03-18 Fernando Perez <fperez@colorado.edu>
3111
3116
3112 * setupext/install_data_ext.py
3117 * setupext/install_data_ext.py
3113 (install_data_ext.initialize_options): Class contributed by Jack
3118 (install_data_ext.initialize_options): Class contributed by Jack
3114 Moffit for fixing the old distutils hack. He is sending this to
3119 Moffit for fixing the old distutils hack. He is sending this to
3115 the distutils folks so in the future we may not need it as a
3120 the distutils folks so in the future we may not need it as a
3116 private fix.
3121 private fix.
3117
3122
3118 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3123 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3119 changes for Debian packaging. See his patch for full details.
3124 changes for Debian packaging. See his patch for full details.
3120 The old distutils hack of making the ipythonrc* files carry a
3125 The old distutils hack of making the ipythonrc* files carry a
3121 bogus .py extension is gone, at last. Examples were moved to a
3126 bogus .py extension is gone, at last. Examples were moved to a
3122 separate subdir under doc/, and the separate executable scripts
3127 separate subdir under doc/, and the separate executable scripts
3123 now live in their own directory. Overall a great cleanup. The
3128 now live in their own directory. Overall a great cleanup. The
3124 manual was updated to use the new files, and setup.py has been
3129 manual was updated to use the new files, and setup.py has been
3125 fixed for this setup.
3130 fixed for this setup.
3126
3131
3127 * IPython/PyColorize.py (Parser.usage): made non-executable and
3132 * IPython/PyColorize.py (Parser.usage): made non-executable and
3128 created a pycolor wrapper around it to be included as a script.
3133 created a pycolor wrapper around it to be included as a script.
3129
3134
3130 2003-03-12 *** Released version 0.2.15pre2
3135 2003-03-12 *** Released version 0.2.15pre2
3131
3136
3132 2003-03-12 Fernando Perez <fperez@colorado.edu>
3137 2003-03-12 Fernando Perez <fperez@colorado.edu>
3133
3138
3134 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3139 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3135 long-standing problem with garbage characters in some terminals.
3140 long-standing problem with garbage characters in some terminals.
3136 The issue was really that the \001 and \002 escapes must _only_ be
3141 The issue was really that the \001 and \002 escapes must _only_ be
3137 passed to input prompts (which call readline), but _never_ to
3142 passed to input prompts (which call readline), but _never_ to
3138 normal text to be printed on screen. I changed ColorANSI to have
3143 normal text to be printed on screen. I changed ColorANSI to have
3139 two classes: TermColors and InputTermColors, each with the
3144 two classes: TermColors and InputTermColors, each with the
3140 appropriate escapes for input prompts or normal text. The code in
3145 appropriate escapes for input prompts or normal text. The code in
3141 Prompts.py got slightly more complicated, but this very old and
3146 Prompts.py got slightly more complicated, but this very old and
3142 annoying bug is finally fixed.
3147 annoying bug is finally fixed.
3143
3148
3144 All the credit for nailing down the real origin of this problem
3149 All the credit for nailing down the real origin of this problem
3145 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3150 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3146 *Many* thanks to him for spending quite a bit of effort on this.
3151 *Many* thanks to him for spending quite a bit of effort on this.
3147
3152
3148 2003-03-05 *** Released version 0.2.15pre1
3153 2003-03-05 *** Released version 0.2.15pre1
3149
3154
3150 2003-03-03 Fernando Perez <fperez@colorado.edu>
3155 2003-03-03 Fernando Perez <fperez@colorado.edu>
3151
3156
3152 * IPython/FakeModule.py: Moved the former _FakeModule to a
3157 * IPython/FakeModule.py: Moved the former _FakeModule to a
3153 separate file, because it's also needed by Magic (to fix a similar
3158 separate file, because it's also needed by Magic (to fix a similar
3154 pickle-related issue in @run).
3159 pickle-related issue in @run).
3155
3160
3156 2003-03-02 Fernando Perez <fperez@colorado.edu>
3161 2003-03-02 Fernando Perez <fperez@colorado.edu>
3157
3162
3158 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3163 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3159 the autocall option at runtime.
3164 the autocall option at runtime.
3160 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3165 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3161 across Magic.py to start separating Magic from InteractiveShell.
3166 across Magic.py to start separating Magic from InteractiveShell.
3162 (Magic._ofind): Fixed to return proper namespace for dotted
3167 (Magic._ofind): Fixed to return proper namespace for dotted
3163 names. Before, a dotted name would always return 'not currently
3168 names. Before, a dotted name would always return 'not currently
3164 defined', because it would find the 'parent'. s.x would be found,
3169 defined', because it would find the 'parent'. s.x would be found,
3165 but since 'x' isn't defined by itself, it would get confused.
3170 but since 'x' isn't defined by itself, it would get confused.
3166 (Magic.magic_run): Fixed pickling problems reported by Ralf
3171 (Magic.magic_run): Fixed pickling problems reported by Ralf
3167 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3172 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3168 that I'd used when Mike Heeter reported similar issues at the
3173 that I'd used when Mike Heeter reported similar issues at the
3169 top-level, but now for @run. It boils down to injecting the
3174 top-level, but now for @run. It boils down to injecting the
3170 namespace where code is being executed with something that looks
3175 namespace where code is being executed with something that looks
3171 enough like a module to fool pickle.dump(). Since a pickle stores
3176 enough like a module to fool pickle.dump(). Since a pickle stores
3172 a named reference to the importing module, we need this for
3177 a named reference to the importing module, we need this for
3173 pickles to save something sensible.
3178 pickles to save something sensible.
3174
3179
3175 * IPython/ipmaker.py (make_IPython): added an autocall option.
3180 * IPython/ipmaker.py (make_IPython): added an autocall option.
3176
3181
3177 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3182 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3178 the auto-eval code. Now autocalling is an option, and the code is
3183 the auto-eval code. Now autocalling is an option, and the code is
3179 also vastly safer. There is no more eval() involved at all.
3184 also vastly safer. There is no more eval() involved at all.
3180
3185
3181 2003-03-01 Fernando Perez <fperez@colorado.edu>
3186 2003-03-01 Fernando Perez <fperez@colorado.edu>
3182
3187
3183 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3188 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3184 dict with named keys instead of a tuple.
3189 dict with named keys instead of a tuple.
3185
3190
3186 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3191 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3187
3192
3188 * setup.py (make_shortcut): Fixed message about directories
3193 * setup.py (make_shortcut): Fixed message about directories
3189 created during Windows installation (the directories were ok, just
3194 created during Windows installation (the directories were ok, just
3190 the printed message was misleading). Thanks to Chris Liechti
3195 the printed message was misleading). Thanks to Chris Liechti
3191 <cliechti-AT-gmx.net> for the heads up.
3196 <cliechti-AT-gmx.net> for the heads up.
3192
3197
3193 2003-02-21 Fernando Perez <fperez@colorado.edu>
3198 2003-02-21 Fernando Perez <fperez@colorado.edu>
3194
3199
3195 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3200 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3196 of ValueError exception when checking for auto-execution. This
3201 of ValueError exception when checking for auto-execution. This
3197 one is raised by things like Numeric arrays arr.flat when the
3202 one is raised by things like Numeric arrays arr.flat when the
3198 array is non-contiguous.
3203 array is non-contiguous.
3199
3204
3200 2003-01-31 Fernando Perez <fperez@colorado.edu>
3205 2003-01-31 Fernando Perez <fperez@colorado.edu>
3201
3206
3202 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3207 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3203 not return any value at all (even though the command would get
3208 not return any value at all (even though the command would get
3204 executed).
3209 executed).
3205 (xsys): Flush stdout right after printing the command to ensure
3210 (xsys): Flush stdout right after printing the command to ensure
3206 proper ordering of commands and command output in the total
3211 proper ordering of commands and command output in the total
3207 output.
3212 output.
3208 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3213 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3209 system/getoutput as defaults. The old ones are kept for
3214 system/getoutput as defaults. The old ones are kept for
3210 compatibility reasons, so no code which uses this library needs
3215 compatibility reasons, so no code which uses this library needs
3211 changing.
3216 changing.
3212
3217
3213 2003-01-27 *** Released version 0.2.14
3218 2003-01-27 *** Released version 0.2.14
3214
3219
3215 2003-01-25 Fernando Perez <fperez@colorado.edu>
3220 2003-01-25 Fernando Perez <fperez@colorado.edu>
3216
3221
3217 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3222 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3218 functions defined in previous edit sessions could not be re-edited
3223 functions defined in previous edit sessions could not be re-edited
3219 (because the temp files were immediately removed). Now temp files
3224 (because the temp files were immediately removed). Now temp files
3220 are removed only at IPython's exit.
3225 are removed only at IPython's exit.
3221 (Magic.magic_run): Improved @run to perform shell-like expansions
3226 (Magic.magic_run): Improved @run to perform shell-like expansions
3222 on its arguments (~users and $VARS). With this, @run becomes more
3227 on its arguments (~users and $VARS). With this, @run becomes more
3223 like a normal command-line.
3228 like a normal command-line.
3224
3229
3225 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3230 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3226 bugs related to embedding and cleaned up that code. A fairly
3231 bugs related to embedding and cleaned up that code. A fairly
3227 important one was the impossibility to access the global namespace
3232 important one was the impossibility to access the global namespace
3228 through the embedded IPython (only local variables were visible).
3233 through the embedded IPython (only local variables were visible).
3229
3234
3230 2003-01-14 Fernando Perez <fperez@colorado.edu>
3235 2003-01-14 Fernando Perez <fperez@colorado.edu>
3231
3236
3232 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3237 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3233 auto-calling to be a bit more conservative. Now it doesn't get
3238 auto-calling to be a bit more conservative. Now it doesn't get
3234 triggered if any of '!=()<>' are in the rest of the input line, to
3239 triggered if any of '!=()<>' are in the rest of the input line, to
3235 allow comparing callables. Thanks to Alex for the heads up.
3240 allow comparing callables. Thanks to Alex for the heads up.
3236
3241
3237 2003-01-07 Fernando Perez <fperez@colorado.edu>
3242 2003-01-07 Fernando Perez <fperez@colorado.edu>
3238
3243
3239 * IPython/genutils.py (page): fixed estimation of the number of
3244 * IPython/genutils.py (page): fixed estimation of the number of
3240 lines in a string to be paged to simply count newlines. This
3245 lines in a string to be paged to simply count newlines. This
3241 prevents over-guessing due to embedded escape sequences. A better
3246 prevents over-guessing due to embedded escape sequences. A better
3242 long-term solution would involve stripping out the control chars
3247 long-term solution would involve stripping out the control chars
3243 for the count, but it's potentially so expensive I just don't
3248 for the count, but it's potentially so expensive I just don't
3244 think it's worth doing.
3249 think it's worth doing.
3245
3250
3246 2002-12-19 *** Released version 0.2.14pre50
3251 2002-12-19 *** Released version 0.2.14pre50
3247
3252
3248 2002-12-19 Fernando Perez <fperez@colorado.edu>
3253 2002-12-19 Fernando Perez <fperez@colorado.edu>
3249
3254
3250 * tools/release (version): Changed release scripts to inform
3255 * tools/release (version): Changed release scripts to inform
3251 Andrea and build a NEWS file with a list of recent changes.
3256 Andrea and build a NEWS file with a list of recent changes.
3252
3257
3253 * IPython/ColorANSI.py (__all__): changed terminal detection
3258 * IPython/ColorANSI.py (__all__): changed terminal detection
3254 code. Seems to work better for xterms without breaking
3259 code. Seems to work better for xterms without breaking
3255 konsole. Will need more testing to determine if WinXP and Mac OSX
3260 konsole. Will need more testing to determine if WinXP and Mac OSX
3256 also work ok.
3261 also work ok.
3257
3262
3258 2002-12-18 *** Released version 0.2.14pre49
3263 2002-12-18 *** Released version 0.2.14pre49
3259
3264
3260 2002-12-18 Fernando Perez <fperez@colorado.edu>
3265 2002-12-18 Fernando Perez <fperez@colorado.edu>
3261
3266
3262 * Docs: added new info about Mac OSX, from Andrea.
3267 * Docs: added new info about Mac OSX, from Andrea.
3263
3268
3264 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3269 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3265 allow direct plotting of python strings whose format is the same
3270 allow direct plotting of python strings whose format is the same
3266 of gnuplot data files.
3271 of gnuplot data files.
3267
3272
3268 2002-12-16 Fernando Perez <fperez@colorado.edu>
3273 2002-12-16 Fernando Perez <fperez@colorado.edu>
3269
3274
3270 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3275 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3271 value of exit question to be acknowledged.
3276 value of exit question to be acknowledged.
3272
3277
3273 2002-12-03 Fernando Perez <fperez@colorado.edu>
3278 2002-12-03 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * IPython/ipmaker.py: removed generators, which had been added
3280 * IPython/ipmaker.py: removed generators, which had been added
3276 by mistake in an earlier debugging run. This was causing trouble
3281 by mistake in an earlier debugging run. This was causing trouble
3277 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3282 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3278 for pointing this out.
3283 for pointing this out.
3279
3284
3280 2002-11-17 Fernando Perez <fperez@colorado.edu>
3285 2002-11-17 Fernando Perez <fperez@colorado.edu>
3281
3286
3282 * Manual: updated the Gnuplot section.
3287 * Manual: updated the Gnuplot section.
3283
3288
3284 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3289 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3285 a much better split of what goes in Runtime and what goes in
3290 a much better split of what goes in Runtime and what goes in
3286 Interactive.
3291 Interactive.
3287
3292
3288 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3293 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3289 being imported from iplib.
3294 being imported from iplib.
3290
3295
3291 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3296 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3292 for command-passing. Now the global Gnuplot instance is called
3297 for command-passing. Now the global Gnuplot instance is called
3293 'gp' instead of 'g', which was really a far too fragile and
3298 'gp' instead of 'g', which was really a far too fragile and
3294 common name.
3299 common name.
3295
3300
3296 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3301 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3297 bounding boxes generated by Gnuplot for square plots.
3302 bounding boxes generated by Gnuplot for square plots.
3298
3303
3299 * IPython/genutils.py (popkey): new function added. I should
3304 * IPython/genutils.py (popkey): new function added. I should
3300 suggest this on c.l.py as a dict method, it seems useful.
3305 suggest this on c.l.py as a dict method, it seems useful.
3301
3306
3302 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3307 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3303 to transparently handle PostScript generation. MUCH better than
3308 to transparently handle PostScript generation. MUCH better than
3304 the previous plot_eps/replot_eps (which I removed now). The code
3309 the previous plot_eps/replot_eps (which I removed now). The code
3305 is also fairly clean and well documented now (including
3310 is also fairly clean and well documented now (including
3306 docstrings).
3311 docstrings).
3307
3312
3308 2002-11-13 Fernando Perez <fperez@colorado.edu>
3313 2002-11-13 Fernando Perez <fperez@colorado.edu>
3309
3314
3310 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3315 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3311 (inconsistent with options).
3316 (inconsistent with options).
3312
3317
3313 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3318 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3314 manually disabled, I don't know why. Fixed it.
3319 manually disabled, I don't know why. Fixed it.
3315 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3320 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3316 eps output.
3321 eps output.
3317
3322
3318 2002-11-12 Fernando Perez <fperez@colorado.edu>
3323 2002-11-12 Fernando Perez <fperez@colorado.edu>
3319
3324
3320 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3325 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3321 don't propagate up to caller. Fixes crash reported by François
3326 don't propagate up to caller. Fixes crash reported by François
3322 Pinard.
3327 Pinard.
3323
3328
3324 2002-11-09 Fernando Perez <fperez@colorado.edu>
3329 2002-11-09 Fernando Perez <fperez@colorado.edu>
3325
3330
3326 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3331 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3327 history file for new users.
3332 history file for new users.
3328 (make_IPython): fixed bug where initial install would leave the
3333 (make_IPython): fixed bug where initial install would leave the
3329 user running in the .ipython dir.
3334 user running in the .ipython dir.
3330 (make_IPython): fixed bug where config dir .ipython would be
3335 (make_IPython): fixed bug where config dir .ipython would be
3331 created regardless of the given -ipythondir option. Thanks to Cory
3336 created regardless of the given -ipythondir option. Thanks to Cory
3332 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3337 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3333
3338
3334 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3339 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3335 type confirmations. Will need to use it in all of IPython's code
3340 type confirmations. Will need to use it in all of IPython's code
3336 consistently.
3341 consistently.
3337
3342
3338 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3343 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3339 context to print 31 lines instead of the default 5. This will make
3344 context to print 31 lines instead of the default 5. This will make
3340 the crash reports extremely detailed in case the problem is in
3345 the crash reports extremely detailed in case the problem is in
3341 libraries I don't have access to.
3346 libraries I don't have access to.
3342
3347
3343 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3348 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3344 line of defense' code to still crash, but giving users fair
3349 line of defense' code to still crash, but giving users fair
3345 warning. I don't want internal errors to go unreported: if there's
3350 warning. I don't want internal errors to go unreported: if there's
3346 an internal problem, IPython should crash and generate a full
3351 an internal problem, IPython should crash and generate a full
3347 report.
3352 report.
3348
3353
3349 2002-11-08 Fernando Perez <fperez@colorado.edu>
3354 2002-11-08 Fernando Perez <fperez@colorado.edu>
3350
3355
3351 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3356 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3352 otherwise uncaught exceptions which can appear if people set
3357 otherwise uncaught exceptions which can appear if people set
3353 sys.stdout to something badly broken. Thanks to a crash report
3358 sys.stdout to something badly broken. Thanks to a crash report
3354 from henni-AT-mail.brainbot.com.
3359 from henni-AT-mail.brainbot.com.
3355
3360
3356 2002-11-04 Fernando Perez <fperez@colorado.edu>
3361 2002-11-04 Fernando Perez <fperez@colorado.edu>
3357
3362
3358 * IPython/iplib.py (InteractiveShell.interact): added
3363 * IPython/iplib.py (InteractiveShell.interact): added
3359 __IPYTHON__active to the builtins. It's a flag which goes on when
3364 __IPYTHON__active to the builtins. It's a flag which goes on when
3360 the interaction starts and goes off again when it stops. This
3365 the interaction starts and goes off again when it stops. This
3361 allows embedding code to detect being inside IPython. Before this
3366 allows embedding code to detect being inside IPython. Before this
3362 was done via __IPYTHON__, but that only shows that an IPython
3367 was done via __IPYTHON__, but that only shows that an IPython
3363 instance has been created.
3368 instance has been created.
3364
3369
3365 * IPython/Magic.py (Magic.magic_env): I realized that in a
3370 * IPython/Magic.py (Magic.magic_env): I realized that in a
3366 UserDict, instance.data holds the data as a normal dict. So I
3371 UserDict, instance.data holds the data as a normal dict. So I
3367 modified @env to return os.environ.data instead of rebuilding a
3372 modified @env to return os.environ.data instead of rebuilding a
3368 dict by hand.
3373 dict by hand.
3369
3374
3370 2002-11-02 Fernando Perez <fperez@colorado.edu>
3375 2002-11-02 Fernando Perez <fperez@colorado.edu>
3371
3376
3372 * IPython/genutils.py (warn): changed so that level 1 prints no
3377 * IPython/genutils.py (warn): changed so that level 1 prints no
3373 header. Level 2 is now the default (with 'WARNING' header, as
3378 header. Level 2 is now the default (with 'WARNING' header, as
3374 before). I think I tracked all places where changes were needed in
3379 before). I think I tracked all places where changes were needed in
3375 IPython, but outside code using the old level numbering may have
3380 IPython, but outside code using the old level numbering may have
3376 broken.
3381 broken.
3377
3382
3378 * IPython/iplib.py (InteractiveShell.runcode): added this to
3383 * IPython/iplib.py (InteractiveShell.runcode): added this to
3379 handle the tracebacks in SystemExit traps correctly. The previous
3384 handle the tracebacks in SystemExit traps correctly. The previous
3380 code (through interact) was printing more of the stack than
3385 code (through interact) was printing more of the stack than
3381 necessary, showing IPython internal code to the user.
3386 necessary, showing IPython internal code to the user.
3382
3387
3383 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3388 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3384 default. Now that the default at the confirmation prompt is yes,
3389 default. Now that the default at the confirmation prompt is yes,
3385 it's not so intrusive. François' argument that ipython sessions
3390 it's not so intrusive. François' argument that ipython sessions
3386 tend to be complex enough not to lose them from an accidental C-d,
3391 tend to be complex enough not to lose them from an accidental C-d,
3387 is a valid one.
3392 is a valid one.
3388
3393
3389 * IPython/iplib.py (InteractiveShell.interact): added a
3394 * IPython/iplib.py (InteractiveShell.interact): added a
3390 showtraceback() call to the SystemExit trap, and modified the exit
3395 showtraceback() call to the SystemExit trap, and modified the exit
3391 confirmation to have yes as the default.
3396 confirmation to have yes as the default.
3392
3397
3393 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3398 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3394 this file. It's been gone from the code for a long time, this was
3399 this file. It's been gone from the code for a long time, this was
3395 simply leftover junk.
3400 simply leftover junk.
3396
3401
3397 2002-11-01 Fernando Perez <fperez@colorado.edu>
3402 2002-11-01 Fernando Perez <fperez@colorado.edu>
3398
3403
3399 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3404 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3400 added. If set, IPython now traps EOF and asks for
3405 added. If set, IPython now traps EOF and asks for
3401 confirmation. After a request by François Pinard.
3406 confirmation. After a request by François Pinard.
3402
3407
3403 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3408 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3404 of @abort, and with a new (better) mechanism for handling the
3409 of @abort, and with a new (better) mechanism for handling the
3405 exceptions.
3410 exceptions.
3406
3411
3407 2002-10-27 Fernando Perez <fperez@colorado.edu>
3412 2002-10-27 Fernando Perez <fperez@colorado.edu>
3408
3413
3409 * IPython/usage.py (__doc__): updated the --help information and
3414 * IPython/usage.py (__doc__): updated the --help information and
3410 the ipythonrc file to indicate that -log generates
3415 the ipythonrc file to indicate that -log generates
3411 ./ipython.log. Also fixed the corresponding info in @logstart.
3416 ./ipython.log. Also fixed the corresponding info in @logstart.
3412 This and several other fixes in the manuals thanks to reports by
3417 This and several other fixes in the manuals thanks to reports by
3413 François Pinard <pinard-AT-iro.umontreal.ca>.
3418 François Pinard <pinard-AT-iro.umontreal.ca>.
3414
3419
3415 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3420 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3416 refer to @logstart (instead of @log, which doesn't exist).
3421 refer to @logstart (instead of @log, which doesn't exist).
3417
3422
3418 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3423 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3419 AttributeError crash. Thanks to Christopher Armstrong
3424 AttributeError crash. Thanks to Christopher Armstrong
3420 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3425 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3421 introduced recently (in 0.2.14pre37) with the fix to the eval
3426 introduced recently (in 0.2.14pre37) with the fix to the eval
3422 problem mentioned below.
3427 problem mentioned below.
3423
3428
3424 2002-10-17 Fernando Perez <fperez@colorado.edu>
3429 2002-10-17 Fernando Perez <fperez@colorado.edu>
3425
3430
3426 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3431 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3427 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3432 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3428
3433
3429 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3434 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3430 this function to fix a problem reported by Alex Schmolck. He saw
3435 this function to fix a problem reported by Alex Schmolck. He saw
3431 it with list comprehensions and generators, which were getting
3436 it with list comprehensions and generators, which were getting
3432 called twice. The real problem was an 'eval' call in testing for
3437 called twice. The real problem was an 'eval' call in testing for
3433 automagic which was evaluating the input line silently.
3438 automagic which was evaluating the input line silently.
3434
3439
3435 This is a potentially very nasty bug, if the input has side
3440 This is a potentially very nasty bug, if the input has side
3436 effects which must not be repeated. The code is much cleaner now,
3441 effects which must not be repeated. The code is much cleaner now,
3437 without any blanket 'except' left and with a regexp test for
3442 without any blanket 'except' left and with a regexp test for
3438 actual function names.
3443 actual function names.
3439
3444
3440 But an eval remains, which I'm not fully comfortable with. I just
3445 But an eval remains, which I'm not fully comfortable with. I just
3441 don't know how to find out if an expression could be a callable in
3446 don't know how to find out if an expression could be a callable in
3442 the user's namespace without doing an eval on the string. However
3447 the user's namespace without doing an eval on the string. However
3443 that string is now much more strictly checked so that no code
3448 that string is now much more strictly checked so that no code
3444 slips by, so the eval should only happen for things that can
3449 slips by, so the eval should only happen for things that can
3445 really be only function/method names.
3450 really be only function/method names.
3446
3451
3447 2002-10-15 Fernando Perez <fperez@colorado.edu>
3452 2002-10-15 Fernando Perez <fperez@colorado.edu>
3448
3453
3449 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3454 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3450 OSX information to main manual, removed README_Mac_OSX file from
3455 OSX information to main manual, removed README_Mac_OSX file from
3451 distribution. Also updated credits for recent additions.
3456 distribution. Also updated credits for recent additions.
3452
3457
3453 2002-10-10 Fernando Perez <fperez@colorado.edu>
3458 2002-10-10 Fernando Perez <fperez@colorado.edu>
3454
3459
3455 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3460 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3456 terminal-related issues. Many thanks to Andrea Riciputi
3461 terminal-related issues. Many thanks to Andrea Riciputi
3457 <andrea.riciputi-AT-libero.it> for writing it.
3462 <andrea.riciputi-AT-libero.it> for writing it.
3458
3463
3459 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3464 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3460 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3465 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3461
3466
3462 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3467 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3463 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3468 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3464 <syver-en-AT-online.no> who both submitted patches for this problem.
3469 <syver-en-AT-online.no> who both submitted patches for this problem.
3465
3470
3466 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3471 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3467 global embedding to make sure that things don't overwrite user
3472 global embedding to make sure that things don't overwrite user
3468 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3473 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3469
3474
3470 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3475 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3471 compatibility. Thanks to Hayden Callow
3476 compatibility. Thanks to Hayden Callow
3472 <h.callow-AT-elec.canterbury.ac.nz>
3477 <h.callow-AT-elec.canterbury.ac.nz>
3473
3478
3474 2002-10-04 Fernando Perez <fperez@colorado.edu>
3479 2002-10-04 Fernando Perez <fperez@colorado.edu>
3475
3480
3476 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3481 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3477 Gnuplot.File objects.
3482 Gnuplot.File objects.
3478
3483
3479 2002-07-23 Fernando Perez <fperez@colorado.edu>
3484 2002-07-23 Fernando Perez <fperez@colorado.edu>
3480
3485
3481 * IPython/genutils.py (timing): Added timings() and timing() for
3486 * IPython/genutils.py (timing): Added timings() and timing() for
3482 quick access to the most commonly needed data, the execution
3487 quick access to the most commonly needed data, the execution
3483 times. Old timing() renamed to timings_out().
3488 times. Old timing() renamed to timings_out().
3484
3489
3485 2002-07-18 Fernando Perez <fperez@colorado.edu>
3490 2002-07-18 Fernando Perez <fperez@colorado.edu>
3486
3491
3487 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3492 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3488 bug with nested instances disrupting the parent's tab completion.
3493 bug with nested instances disrupting the parent's tab completion.
3489
3494
3490 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3495 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3491 all_completions code to begin the emacs integration.
3496 all_completions code to begin the emacs integration.
3492
3497
3493 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3498 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3494 argument to allow titling individual arrays when plotting.
3499 argument to allow titling individual arrays when plotting.
3495
3500
3496 2002-07-15 Fernando Perez <fperez@colorado.edu>
3501 2002-07-15 Fernando Perez <fperez@colorado.edu>
3497
3502
3498 * setup.py (make_shortcut): changed to retrieve the value of
3503 * setup.py (make_shortcut): changed to retrieve the value of
3499 'Program Files' directory from the registry (this value changes in
3504 'Program Files' directory from the registry (this value changes in
3500 non-english versions of Windows). Thanks to Thomas Fanslau
3505 non-english versions of Windows). Thanks to Thomas Fanslau
3501 <tfanslau-AT-gmx.de> for the report.
3506 <tfanslau-AT-gmx.de> for the report.
3502
3507
3503 2002-07-10 Fernando Perez <fperez@colorado.edu>
3508 2002-07-10 Fernando Perez <fperez@colorado.edu>
3504
3509
3505 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3510 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3506 a bug in pdb, which crashes if a line with only whitespace is
3511 a bug in pdb, which crashes if a line with only whitespace is
3507 entered. Bug report submitted to sourceforge.
3512 entered. Bug report submitted to sourceforge.
3508
3513
3509 2002-07-09 Fernando Perez <fperez@colorado.edu>
3514 2002-07-09 Fernando Perez <fperez@colorado.edu>
3510
3515
3511 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3516 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3512 reporting exceptions (it's a bug in inspect.py, I just set a
3517 reporting exceptions (it's a bug in inspect.py, I just set a
3513 workaround).
3518 workaround).
3514
3519
3515 2002-07-08 Fernando Perez <fperez@colorado.edu>
3520 2002-07-08 Fernando Perez <fperez@colorado.edu>
3516
3521
3517 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3522 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3518 __IPYTHON__ in __builtins__ to show up in user_ns.
3523 __IPYTHON__ in __builtins__ to show up in user_ns.
3519
3524
3520 2002-07-03 Fernando Perez <fperez@colorado.edu>
3525 2002-07-03 Fernando Perez <fperez@colorado.edu>
3521
3526
3522 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3527 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3523 name from @gp_set_instance to @gp_set_default.
3528 name from @gp_set_instance to @gp_set_default.
3524
3529
3525 * IPython/ipmaker.py (make_IPython): default editor value set to
3530 * IPython/ipmaker.py (make_IPython): default editor value set to
3526 '0' (a string), to match the rc file. Otherwise will crash when
3531 '0' (a string), to match the rc file. Otherwise will crash when
3527 .strip() is called on it.
3532 .strip() is called on it.
3528
3533
3529
3534
3530 2002-06-28 Fernando Perez <fperez@colorado.edu>
3535 2002-06-28 Fernando Perez <fperez@colorado.edu>
3531
3536
3532 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3537 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3533 of files in current directory when a file is executed via
3538 of files in current directory when a file is executed via
3534 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3539 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3535
3540
3536 * setup.py (manfiles): fix for rpm builds, submitted by RA
3541 * setup.py (manfiles): fix for rpm builds, submitted by RA
3537 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3542 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3538
3543
3539 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3544 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3540 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3545 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3541 string!). A. Schmolck caught this one.
3546 string!). A. Schmolck caught this one.
3542
3547
3543 2002-06-27 Fernando Perez <fperez@colorado.edu>
3548 2002-06-27 Fernando Perez <fperez@colorado.edu>
3544
3549
3545 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3550 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3546 defined files at the cmd line. __name__ wasn't being set to
3551 defined files at the cmd line. __name__ wasn't being set to
3547 __main__.
3552 __main__.
3548
3553
3549 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3554 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3550 regular lists and tuples besides Numeric arrays.
3555 regular lists and tuples besides Numeric arrays.
3551
3556
3552 * IPython/Prompts.py (CachedOutput.__call__): Added output
3557 * IPython/Prompts.py (CachedOutput.__call__): Added output
3553 supression for input ending with ';'. Similar to Mathematica and
3558 supression for input ending with ';'. Similar to Mathematica and
3554 Matlab. The _* vars and Out[] list are still updated, just like
3559 Matlab. The _* vars and Out[] list are still updated, just like
3555 Mathematica behaves.
3560 Mathematica behaves.
3556
3561
3557 2002-06-25 Fernando Perez <fperez@colorado.edu>
3562 2002-06-25 Fernando Perez <fperez@colorado.edu>
3558
3563
3559 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3564 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3560 .ini extensions for profiels under Windows.
3565 .ini extensions for profiels under Windows.
3561
3566
3562 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3567 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3563 string form. Fix contributed by Alexander Schmolck
3568 string form. Fix contributed by Alexander Schmolck
3564 <a.schmolck-AT-gmx.net>
3569 <a.schmolck-AT-gmx.net>
3565
3570
3566 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3571 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3567 pre-configured Gnuplot instance.
3572 pre-configured Gnuplot instance.
3568
3573
3569 2002-06-21 Fernando Perez <fperez@colorado.edu>
3574 2002-06-21 Fernando Perez <fperez@colorado.edu>
3570
3575
3571 * IPython/numutils.py (exp_safe): new function, works around the
3576 * IPython/numutils.py (exp_safe): new function, works around the
3572 underflow problems in Numeric.
3577 underflow problems in Numeric.
3573 (log2): New fn. Safe log in base 2: returns exact integer answer
3578 (log2): New fn. Safe log in base 2: returns exact integer answer
3574 for exact integer powers of 2.
3579 for exact integer powers of 2.
3575
3580
3576 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3581 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3577 properly.
3582 properly.
3578
3583
3579 2002-06-20 Fernando Perez <fperez@colorado.edu>
3584 2002-06-20 Fernando Perez <fperez@colorado.edu>
3580
3585
3581 * IPython/genutils.py (timing): new function like
3586 * IPython/genutils.py (timing): new function like
3582 Mathematica's. Similar to time_test, but returns more info.
3587 Mathematica's. Similar to time_test, but returns more info.
3583
3588
3584 2002-06-18 Fernando Perez <fperez@colorado.edu>
3589 2002-06-18 Fernando Perez <fperez@colorado.edu>
3585
3590
3586 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3591 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3587 according to Mike Heeter's suggestions.
3592 according to Mike Heeter's suggestions.
3588
3593
3589 2002-06-16 Fernando Perez <fperez@colorado.edu>
3594 2002-06-16 Fernando Perez <fperez@colorado.edu>
3590
3595
3591 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3596 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3592 system. GnuplotMagic is gone as a user-directory option. New files
3597 system. GnuplotMagic is gone as a user-directory option. New files
3593 make it easier to use all the gnuplot stuff both from external
3598 make it easier to use all the gnuplot stuff both from external
3594 programs as well as from IPython. Had to rewrite part of
3599 programs as well as from IPython. Had to rewrite part of
3595 hardcopy() b/c of a strange bug: often the ps files simply don't
3600 hardcopy() b/c of a strange bug: often the ps files simply don't
3596 get created, and require a repeat of the command (often several
3601 get created, and require a repeat of the command (often several
3597 times).
3602 times).
3598
3603
3599 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3604 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3600 resolve output channel at call time, so that if sys.stderr has
3605 resolve output channel at call time, so that if sys.stderr has
3601 been redirected by user this gets honored.
3606 been redirected by user this gets honored.
3602
3607
3603 2002-06-13 Fernando Perez <fperez@colorado.edu>
3608 2002-06-13 Fernando Perez <fperez@colorado.edu>
3604
3609
3605 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3610 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3606 IPShell. Kept a copy with the old names to avoid breaking people's
3611 IPShell. Kept a copy with the old names to avoid breaking people's
3607 embedded code.
3612 embedded code.
3608
3613
3609 * IPython/ipython: simplified it to the bare minimum after
3614 * IPython/ipython: simplified it to the bare minimum after
3610 Holger's suggestions. Added info about how to use it in
3615 Holger's suggestions. Added info about how to use it in
3611 PYTHONSTARTUP.
3616 PYTHONSTARTUP.
3612
3617
3613 * IPython/Shell.py (IPythonShell): changed the options passing
3618 * IPython/Shell.py (IPythonShell): changed the options passing
3614 from a string with funky %s replacements to a straight list. Maybe
3619 from a string with funky %s replacements to a straight list. Maybe
3615 a bit more typing, but it follows sys.argv conventions, so there's
3620 a bit more typing, but it follows sys.argv conventions, so there's
3616 less special-casing to remember.
3621 less special-casing to remember.
3617
3622
3618 2002-06-12 Fernando Perez <fperez@colorado.edu>
3623 2002-06-12 Fernando Perez <fperez@colorado.edu>
3619
3624
3620 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3625 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3621 command. Thanks to a suggestion by Mike Heeter.
3626 command. Thanks to a suggestion by Mike Heeter.
3622 (Magic.magic_pfile): added behavior to look at filenames if given
3627 (Magic.magic_pfile): added behavior to look at filenames if given
3623 arg is not a defined object.
3628 arg is not a defined object.
3624 (Magic.magic_save): New @save function to save code snippets. Also
3629 (Magic.magic_save): New @save function to save code snippets. Also
3625 a Mike Heeter idea.
3630 a Mike Heeter idea.
3626
3631
3627 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3632 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3628 plot() and replot(). Much more convenient now, especially for
3633 plot() and replot(). Much more convenient now, especially for
3629 interactive use.
3634 interactive use.
3630
3635
3631 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3636 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3632 filenames.
3637 filenames.
3633
3638
3634 2002-06-02 Fernando Perez <fperez@colorado.edu>
3639 2002-06-02 Fernando Perez <fperez@colorado.edu>
3635
3640
3636 * IPython/Struct.py (Struct.__init__): modified to admit
3641 * IPython/Struct.py (Struct.__init__): modified to admit
3637 initialization via another struct.
3642 initialization via another struct.
3638
3643
3639 * IPython/genutils.py (SystemExec.__init__): New stateful
3644 * IPython/genutils.py (SystemExec.__init__): New stateful
3640 interface to xsys and bq. Useful for writing system scripts.
3645 interface to xsys and bq. Useful for writing system scripts.
3641
3646
3642 2002-05-30 Fernando Perez <fperez@colorado.edu>
3647 2002-05-30 Fernando Perez <fperez@colorado.edu>
3643
3648
3644 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3649 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3645 documents. This will make the user download smaller (it's getting
3650 documents. This will make the user download smaller (it's getting
3646 too big).
3651 too big).
3647
3652
3648 2002-05-29 Fernando Perez <fperez@colorado.edu>
3653 2002-05-29 Fernando Perez <fperez@colorado.edu>
3649
3654
3650 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3655 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3651 fix problems with shelve and pickle. Seems to work, but I don't
3656 fix problems with shelve and pickle. Seems to work, but I don't
3652 know if corner cases break it. Thanks to Mike Heeter
3657 know if corner cases break it. Thanks to Mike Heeter
3653 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3658 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3654
3659
3655 2002-05-24 Fernando Perez <fperez@colorado.edu>
3660 2002-05-24 Fernando Perez <fperez@colorado.edu>
3656
3661
3657 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3662 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3658 macros having broken.
3663 macros having broken.
3659
3664
3660 2002-05-21 Fernando Perez <fperez@colorado.edu>
3665 2002-05-21 Fernando Perez <fperez@colorado.edu>
3661
3666
3662 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3667 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3663 introduced logging bug: all history before logging started was
3668 introduced logging bug: all history before logging started was
3664 being written one character per line! This came from the redesign
3669 being written one character per line! This came from the redesign
3665 of the input history as a special list which slices to strings,
3670 of the input history as a special list which slices to strings,
3666 not to lists.
3671 not to lists.
3667
3672
3668 2002-05-20 Fernando Perez <fperez@colorado.edu>
3673 2002-05-20 Fernando Perez <fperez@colorado.edu>
3669
3674
3670 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3675 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3671 be an attribute of all classes in this module. The design of these
3676 be an attribute of all classes in this module. The design of these
3672 classes needs some serious overhauling.
3677 classes needs some serious overhauling.
3673
3678
3674 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3679 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3675 which was ignoring '_' in option names.
3680 which was ignoring '_' in option names.
3676
3681
3677 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3682 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3678 'Verbose_novars' to 'Context' and made it the new default. It's a
3683 'Verbose_novars' to 'Context' and made it the new default. It's a
3679 bit more readable and also safer than verbose.
3684 bit more readable and also safer than verbose.
3680
3685
3681 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3686 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3682 triple-quoted strings.
3687 triple-quoted strings.
3683
3688
3684 * IPython/OInspect.py (__all__): new module exposing the object
3689 * IPython/OInspect.py (__all__): new module exposing the object
3685 introspection facilities. Now the corresponding magics are dummy
3690 introspection facilities. Now the corresponding magics are dummy
3686 wrappers around this. Having this module will make it much easier
3691 wrappers around this. Having this module will make it much easier
3687 to put these functions into our modified pdb.
3692 to put these functions into our modified pdb.
3688 This new object inspector system uses the new colorizing module,
3693 This new object inspector system uses the new colorizing module,
3689 so source code and other things are nicely syntax highlighted.
3694 so source code and other things are nicely syntax highlighted.
3690
3695
3691 2002-05-18 Fernando Perez <fperez@colorado.edu>
3696 2002-05-18 Fernando Perez <fperez@colorado.edu>
3692
3697
3693 * IPython/ColorANSI.py: Split the coloring tools into a separate
3698 * IPython/ColorANSI.py: Split the coloring tools into a separate
3694 module so I can use them in other code easier (they were part of
3699 module so I can use them in other code easier (they were part of
3695 ultraTB).
3700 ultraTB).
3696
3701
3697 2002-05-17 Fernando Perez <fperez@colorado.edu>
3702 2002-05-17 Fernando Perez <fperez@colorado.edu>
3698
3703
3699 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3704 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3700 fixed it to set the global 'g' also to the called instance, as
3705 fixed it to set the global 'g' also to the called instance, as
3701 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3706 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3702 user's 'g' variables).
3707 user's 'g' variables).
3703
3708
3704 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3709 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3705 global variables (aliases to _ih,_oh) so that users which expect
3710 global variables (aliases to _ih,_oh) so that users which expect
3706 In[5] or Out[7] to work aren't unpleasantly surprised.
3711 In[5] or Out[7] to work aren't unpleasantly surprised.
3707 (InputList.__getslice__): new class to allow executing slices of
3712 (InputList.__getslice__): new class to allow executing slices of
3708 input history directly. Very simple class, complements the use of
3713 input history directly. Very simple class, complements the use of
3709 macros.
3714 macros.
3710
3715
3711 2002-05-16 Fernando Perez <fperez@colorado.edu>
3716 2002-05-16 Fernando Perez <fperez@colorado.edu>
3712
3717
3713 * setup.py (docdirbase): make doc directory be just doc/IPython
3718 * setup.py (docdirbase): make doc directory be just doc/IPython
3714 without version numbers, it will reduce clutter for users.
3719 without version numbers, it will reduce clutter for users.
3715
3720
3716 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3721 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3717 execfile call to prevent possible memory leak. See for details:
3722 execfile call to prevent possible memory leak. See for details:
3718 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3723 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3719
3724
3720 2002-05-15 Fernando Perez <fperez@colorado.edu>
3725 2002-05-15 Fernando Perez <fperez@colorado.edu>
3721
3726
3722 * IPython/Magic.py (Magic.magic_psource): made the object
3727 * IPython/Magic.py (Magic.magic_psource): made the object
3723 introspection names be more standard: pdoc, pdef, pfile and
3728 introspection names be more standard: pdoc, pdef, pfile and
3724 psource. They all print/page their output, and it makes
3729 psource. They all print/page their output, and it makes
3725 remembering them easier. Kept old names for compatibility as
3730 remembering them easier. Kept old names for compatibility as
3726 aliases.
3731 aliases.
3727
3732
3728 2002-05-14 Fernando Perez <fperez@colorado.edu>
3733 2002-05-14 Fernando Perez <fperez@colorado.edu>
3729
3734
3730 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3735 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3731 what the mouse problem was. The trick is to use gnuplot with temp
3736 what the mouse problem was. The trick is to use gnuplot with temp
3732 files and NOT with pipes (for data communication), because having
3737 files and NOT with pipes (for data communication), because having
3733 both pipes and the mouse on is bad news.
3738 both pipes and the mouse on is bad news.
3734
3739
3735 2002-05-13 Fernando Perez <fperez@colorado.edu>
3740 2002-05-13 Fernando Perez <fperez@colorado.edu>
3736
3741
3737 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3742 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3738 bug. Information would be reported about builtins even when
3743 bug. Information would be reported about builtins even when
3739 user-defined functions overrode them.
3744 user-defined functions overrode them.
3740
3745
3741 2002-05-11 Fernando Perez <fperez@colorado.edu>
3746 2002-05-11 Fernando Perez <fperez@colorado.edu>
3742
3747
3743 * IPython/__init__.py (__all__): removed FlexCompleter from
3748 * IPython/__init__.py (__all__): removed FlexCompleter from
3744 __all__ so that things don't fail in platforms without readline.
3749 __all__ so that things don't fail in platforms without readline.
3745
3750
3746 2002-05-10 Fernando Perez <fperez@colorado.edu>
3751 2002-05-10 Fernando Perez <fperez@colorado.edu>
3747
3752
3748 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3753 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3749 it requires Numeric, effectively making Numeric a dependency for
3754 it requires Numeric, effectively making Numeric a dependency for
3750 IPython.
3755 IPython.
3751
3756
3752 * Released 0.2.13
3757 * Released 0.2.13
3753
3758
3754 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3759 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3755 profiler interface. Now all the major options from the profiler
3760 profiler interface. Now all the major options from the profiler
3756 module are directly supported in IPython, both for single
3761 module are directly supported in IPython, both for single
3757 expressions (@prun) and for full programs (@run -p).
3762 expressions (@prun) and for full programs (@run -p).
3758
3763
3759 2002-05-09 Fernando Perez <fperez@colorado.edu>
3764 2002-05-09 Fernando Perez <fperez@colorado.edu>
3760
3765
3761 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3766 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3762 magic properly formatted for screen.
3767 magic properly formatted for screen.
3763
3768
3764 * setup.py (make_shortcut): Changed things to put pdf version in
3769 * setup.py (make_shortcut): Changed things to put pdf version in
3765 doc/ instead of doc/manual (had to change lyxport a bit).
3770 doc/ instead of doc/manual (had to change lyxport a bit).
3766
3771
3767 * IPython/Magic.py (Profile.string_stats): made profile runs go
3772 * IPython/Magic.py (Profile.string_stats): made profile runs go
3768 through pager (they are long and a pager allows searching, saving,
3773 through pager (they are long and a pager allows searching, saving,
3769 etc.)
3774 etc.)
3770
3775
3771 2002-05-08 Fernando Perez <fperez@colorado.edu>
3776 2002-05-08 Fernando Perez <fperez@colorado.edu>
3772
3777
3773 * Released 0.2.12
3778 * Released 0.2.12
3774
3779
3775 2002-05-06 Fernando Perez <fperez@colorado.edu>
3780 2002-05-06 Fernando Perez <fperez@colorado.edu>
3776
3781
3777 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3782 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3778 introduced); 'hist n1 n2' was broken.
3783 introduced); 'hist n1 n2' was broken.
3779 (Magic.magic_pdb): added optional on/off arguments to @pdb
3784 (Magic.magic_pdb): added optional on/off arguments to @pdb
3780 (Magic.magic_run): added option -i to @run, which executes code in
3785 (Magic.magic_run): added option -i to @run, which executes code in
3781 the IPython namespace instead of a clean one. Also added @irun as
3786 the IPython namespace instead of a clean one. Also added @irun as
3782 an alias to @run -i.
3787 an alias to @run -i.
3783
3788
3784 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3789 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3785 fixed (it didn't really do anything, the namespaces were wrong).
3790 fixed (it didn't really do anything, the namespaces were wrong).
3786
3791
3787 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3792 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3788
3793
3789 * IPython/__init__.py (__all__): Fixed package namespace, now
3794 * IPython/__init__.py (__all__): Fixed package namespace, now
3790 'import IPython' does give access to IPython.<all> as
3795 'import IPython' does give access to IPython.<all> as
3791 expected. Also renamed __release__ to Release.
3796 expected. Also renamed __release__ to Release.
3792
3797
3793 * IPython/Debugger.py (__license__): created new Pdb class which
3798 * IPython/Debugger.py (__license__): created new Pdb class which
3794 functions like a drop-in for the normal pdb.Pdb but does NOT
3799 functions like a drop-in for the normal pdb.Pdb but does NOT
3795 import readline by default. This way it doesn't muck up IPython's
3800 import readline by default. This way it doesn't muck up IPython's
3796 readline handling, and now tab-completion finally works in the
3801 readline handling, and now tab-completion finally works in the
3797 debugger -- sort of. It completes things globally visible, but the
3802 debugger -- sort of. It completes things globally visible, but the
3798 completer doesn't track the stack as pdb walks it. That's a bit
3803 completer doesn't track the stack as pdb walks it. That's a bit
3799 tricky, and I'll have to implement it later.
3804 tricky, and I'll have to implement it later.
3800
3805
3801 2002-05-05 Fernando Perez <fperez@colorado.edu>
3806 2002-05-05 Fernando Perez <fperez@colorado.edu>
3802
3807
3803 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3808 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3804 magic docstrings when printed via ? (explicit \'s were being
3809 magic docstrings when printed via ? (explicit \'s were being
3805 printed).
3810 printed).
3806
3811
3807 * IPython/ipmaker.py (make_IPython): fixed namespace
3812 * IPython/ipmaker.py (make_IPython): fixed namespace
3808 identification bug. Now variables loaded via logs or command-line
3813 identification bug. Now variables loaded via logs or command-line
3809 files are recognized in the interactive namespace by @who.
3814 files are recognized in the interactive namespace by @who.
3810
3815
3811 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3816 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3812 log replay system stemming from the string form of Structs.
3817 log replay system stemming from the string form of Structs.
3813
3818
3814 * IPython/Magic.py (Macro.__init__): improved macros to properly
3819 * IPython/Magic.py (Macro.__init__): improved macros to properly
3815 handle magic commands in them.
3820 handle magic commands in them.
3816 (Magic.magic_logstart): usernames are now expanded so 'logstart
3821 (Magic.magic_logstart): usernames are now expanded so 'logstart
3817 ~/mylog' now works.
3822 ~/mylog' now works.
3818
3823
3819 * IPython/iplib.py (complete): fixed bug where paths starting with
3824 * IPython/iplib.py (complete): fixed bug where paths starting with
3820 '/' would be completed as magic names.
3825 '/' would be completed as magic names.
3821
3826
3822 2002-05-04 Fernando Perez <fperez@colorado.edu>
3827 2002-05-04 Fernando Perez <fperez@colorado.edu>
3823
3828
3824 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3829 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3825 allow running full programs under the profiler's control.
3830 allow running full programs under the profiler's control.
3826
3831
3827 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3832 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3828 mode to report exceptions verbosely but without formatting
3833 mode to report exceptions verbosely but without formatting
3829 variables. This addresses the issue of ipython 'freezing' (it's
3834 variables. This addresses the issue of ipython 'freezing' (it's
3830 not frozen, but caught in an expensive formatting loop) when huge
3835 not frozen, but caught in an expensive formatting loop) when huge
3831 variables are in the context of an exception.
3836 variables are in the context of an exception.
3832 (VerboseTB.text): Added '--->' markers at line where exception was
3837 (VerboseTB.text): Added '--->' markers at line where exception was
3833 triggered. Much clearer to read, especially in NoColor modes.
3838 triggered. Much clearer to read, especially in NoColor modes.
3834
3839
3835 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3840 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3836 implemented in reverse when changing to the new parse_options().
3841 implemented in reverse when changing to the new parse_options().
3837
3842
3838 2002-05-03 Fernando Perez <fperez@colorado.edu>
3843 2002-05-03 Fernando Perez <fperez@colorado.edu>
3839
3844
3840 * IPython/Magic.py (Magic.parse_options): new function so that
3845 * IPython/Magic.py (Magic.parse_options): new function so that
3841 magics can parse options easier.
3846 magics can parse options easier.
3842 (Magic.magic_prun): new function similar to profile.run(),
3847 (Magic.magic_prun): new function similar to profile.run(),
3843 suggested by Chris Hart.
3848 suggested by Chris Hart.
3844 (Magic.magic_cd): fixed behavior so that it only changes if
3849 (Magic.magic_cd): fixed behavior so that it only changes if
3845 directory actually is in history.
3850 directory actually is in history.
3846
3851
3847 * IPython/usage.py (__doc__): added information about potential
3852 * IPython/usage.py (__doc__): added information about potential
3848 slowness of Verbose exception mode when there are huge data
3853 slowness of Verbose exception mode when there are huge data
3849 structures to be formatted (thanks to Archie Paulson).
3854 structures to be formatted (thanks to Archie Paulson).
3850
3855
3851 * IPython/ipmaker.py (make_IPython): Changed default logging
3856 * IPython/ipmaker.py (make_IPython): Changed default logging
3852 (when simply called with -log) to use curr_dir/ipython.log in
3857 (when simply called with -log) to use curr_dir/ipython.log in
3853 rotate mode. Fixed crash which was occuring with -log before
3858 rotate mode. Fixed crash which was occuring with -log before
3854 (thanks to Jim Boyle).
3859 (thanks to Jim Boyle).
3855
3860
3856 2002-05-01 Fernando Perez <fperez@colorado.edu>
3861 2002-05-01 Fernando Perez <fperez@colorado.edu>
3857
3862
3858 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3863 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3859 was nasty -- though somewhat of a corner case).
3864 was nasty -- though somewhat of a corner case).
3860
3865
3861 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3866 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3862 text (was a bug).
3867 text (was a bug).
3863
3868
3864 2002-04-30 Fernando Perez <fperez@colorado.edu>
3869 2002-04-30 Fernando Perez <fperez@colorado.edu>
3865
3870
3866 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3871 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3867 a print after ^D or ^C from the user so that the In[] prompt
3872 a print after ^D or ^C from the user so that the In[] prompt
3868 doesn't over-run the gnuplot one.
3873 doesn't over-run the gnuplot one.
3869
3874
3870 2002-04-29 Fernando Perez <fperez@colorado.edu>
3875 2002-04-29 Fernando Perez <fperez@colorado.edu>
3871
3876
3872 * Released 0.2.10
3877 * Released 0.2.10
3873
3878
3874 * IPython/__release__.py (version): get date dynamically.
3879 * IPython/__release__.py (version): get date dynamically.
3875
3880
3876 * Misc. documentation updates thanks to Arnd's comments. Also ran
3881 * Misc. documentation updates thanks to Arnd's comments. Also ran
3877 a full spellcheck on the manual (hadn't been done in a while).
3882 a full spellcheck on the manual (hadn't been done in a while).
3878
3883
3879 2002-04-27 Fernando Perez <fperez@colorado.edu>
3884 2002-04-27 Fernando Perez <fperez@colorado.edu>
3880
3885
3881 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3886 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3882 starting a log in mid-session would reset the input history list.
3887 starting a log in mid-session would reset the input history list.
3883
3888
3884 2002-04-26 Fernando Perez <fperez@colorado.edu>
3889 2002-04-26 Fernando Perez <fperez@colorado.edu>
3885
3890
3886 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3891 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3887 all files were being included in an update. Now anything in
3892 all files were being included in an update. Now anything in
3888 UserConfig that matches [A-Za-z]*.py will go (this excludes
3893 UserConfig that matches [A-Za-z]*.py will go (this excludes
3889 __init__.py)
3894 __init__.py)
3890
3895
3891 2002-04-25 Fernando Perez <fperez@colorado.edu>
3896 2002-04-25 Fernando Perez <fperez@colorado.edu>
3892
3897
3893 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3898 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3894 to __builtins__ so that any form of embedded or imported code can
3899 to __builtins__ so that any form of embedded or imported code can
3895 test for being inside IPython.
3900 test for being inside IPython.
3896
3901
3897 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3902 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3898 changed to GnuplotMagic because it's now an importable module,
3903 changed to GnuplotMagic because it's now an importable module,
3899 this makes the name follow that of the standard Gnuplot module.
3904 this makes the name follow that of the standard Gnuplot module.
3900 GnuplotMagic can now be loaded at any time in mid-session.
3905 GnuplotMagic can now be loaded at any time in mid-session.
3901
3906
3902 2002-04-24 Fernando Perez <fperez@colorado.edu>
3907 2002-04-24 Fernando Perez <fperez@colorado.edu>
3903
3908
3904 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3909 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3905 the globals (IPython has its own namespace) and the
3910 the globals (IPython has its own namespace) and the
3906 PhysicalQuantity stuff is much better anyway.
3911 PhysicalQuantity stuff is much better anyway.
3907
3912
3908 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3913 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3909 embedding example to standard user directory for
3914 embedding example to standard user directory for
3910 distribution. Also put it in the manual.
3915 distribution. Also put it in the manual.
3911
3916
3912 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3917 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3913 instance as first argument (so it doesn't rely on some obscure
3918 instance as first argument (so it doesn't rely on some obscure
3914 hidden global).
3919 hidden global).
3915
3920
3916 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3921 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3917 delimiters. While it prevents ().TAB from working, it allows
3922 delimiters. While it prevents ().TAB from working, it allows
3918 completions in open (... expressions. This is by far a more common
3923 completions in open (... expressions. This is by far a more common
3919 case.
3924 case.
3920
3925
3921 2002-04-23 Fernando Perez <fperez@colorado.edu>
3926 2002-04-23 Fernando Perez <fperez@colorado.edu>
3922
3927
3923 * IPython/Extensions/InterpreterPasteInput.py: new
3928 * IPython/Extensions/InterpreterPasteInput.py: new
3924 syntax-processing module for pasting lines with >>> or ... at the
3929 syntax-processing module for pasting lines with >>> or ... at the
3925 start.
3930 start.
3926
3931
3927 * IPython/Extensions/PhysicalQ_Interactive.py
3932 * IPython/Extensions/PhysicalQ_Interactive.py
3928 (PhysicalQuantityInteractive.__int__): fixed to work with either
3933 (PhysicalQuantityInteractive.__int__): fixed to work with either
3929 Numeric or math.
3934 Numeric or math.
3930
3935
3931 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3936 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3932 provided profiles. Now we have:
3937 provided profiles. Now we have:
3933 -math -> math module as * and cmath with its own namespace.
3938 -math -> math module as * and cmath with its own namespace.
3934 -numeric -> Numeric as *, plus gnuplot & grace
3939 -numeric -> Numeric as *, plus gnuplot & grace
3935 -physics -> same as before
3940 -physics -> same as before
3936
3941
3937 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3942 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3938 user-defined magics wouldn't be found by @magic if they were
3943 user-defined magics wouldn't be found by @magic if they were
3939 defined as class methods. Also cleaned up the namespace search
3944 defined as class methods. Also cleaned up the namespace search
3940 logic and the string building (to use %s instead of many repeated
3945 logic and the string building (to use %s instead of many repeated
3941 string adds).
3946 string adds).
3942
3947
3943 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3948 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3944 of user-defined magics to operate with class methods (cleaner, in
3949 of user-defined magics to operate with class methods (cleaner, in
3945 line with the gnuplot code).
3950 line with the gnuplot code).
3946
3951
3947 2002-04-22 Fernando Perez <fperez@colorado.edu>
3952 2002-04-22 Fernando Perez <fperez@colorado.edu>
3948
3953
3949 * setup.py: updated dependency list so that manual is updated when
3954 * setup.py: updated dependency list so that manual is updated when
3950 all included files change.
3955 all included files change.
3951
3956
3952 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3957 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3953 the delimiter removal option (the fix is ugly right now).
3958 the delimiter removal option (the fix is ugly right now).
3954
3959
3955 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3960 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3956 all of the math profile (quicker loading, no conflict between
3961 all of the math profile (quicker loading, no conflict between
3957 g-9.8 and g-gnuplot).
3962 g-9.8 and g-gnuplot).
3958
3963
3959 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3964 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3960 name of post-mortem files to IPython_crash_report.txt.
3965 name of post-mortem files to IPython_crash_report.txt.
3961
3966
3962 * Cleanup/update of the docs. Added all the new readline info and
3967 * Cleanup/update of the docs. Added all the new readline info and
3963 formatted all lists as 'real lists'.
3968 formatted all lists as 'real lists'.
3964
3969
3965 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3970 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3966 tab-completion options, since the full readline parse_and_bind is
3971 tab-completion options, since the full readline parse_and_bind is
3967 now accessible.
3972 now accessible.
3968
3973
3969 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3974 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3970 handling of readline options. Now users can specify any string to
3975 handling of readline options. Now users can specify any string to
3971 be passed to parse_and_bind(), as well as the delimiters to be
3976 be passed to parse_and_bind(), as well as the delimiters to be
3972 removed.
3977 removed.
3973 (InteractiveShell.__init__): Added __name__ to the global
3978 (InteractiveShell.__init__): Added __name__ to the global
3974 namespace so that things like Itpl which rely on its existence
3979 namespace so that things like Itpl which rely on its existence
3975 don't crash.
3980 don't crash.
3976 (InteractiveShell._prefilter): Defined the default with a _ so
3981 (InteractiveShell._prefilter): Defined the default with a _ so
3977 that prefilter() is easier to override, while the default one
3982 that prefilter() is easier to override, while the default one
3978 remains available.
3983 remains available.
3979
3984
3980 2002-04-18 Fernando Perez <fperez@colorado.edu>
3985 2002-04-18 Fernando Perez <fperez@colorado.edu>
3981
3986
3982 * Added information about pdb in the docs.
3987 * Added information about pdb in the docs.
3983
3988
3984 2002-04-17 Fernando Perez <fperez@colorado.edu>
3989 2002-04-17 Fernando Perez <fperez@colorado.edu>
3985
3990
3986 * IPython/ipmaker.py (make_IPython): added rc_override option to
3991 * IPython/ipmaker.py (make_IPython): added rc_override option to
3987 allow passing config options at creation time which may override
3992 allow passing config options at creation time which may override
3988 anything set in the config files or command line. This is
3993 anything set in the config files or command line. This is
3989 particularly useful for configuring embedded instances.
3994 particularly useful for configuring embedded instances.
3990
3995
3991 2002-04-15 Fernando Perez <fperez@colorado.edu>
3996 2002-04-15 Fernando Perez <fperez@colorado.edu>
3992
3997
3993 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3998 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3994 crash embedded instances because of the input cache falling out of
3999 crash embedded instances because of the input cache falling out of
3995 sync with the output counter.
4000 sync with the output counter.
3996
4001
3997 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4002 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3998 mode which calls pdb after an uncaught exception in IPython itself.
4003 mode which calls pdb after an uncaught exception in IPython itself.
3999
4004
4000 2002-04-14 Fernando Perez <fperez@colorado.edu>
4005 2002-04-14 Fernando Perez <fperez@colorado.edu>
4001
4006
4002 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4007 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4003 readline, fix it back after each call.
4008 readline, fix it back after each call.
4004
4009
4005 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4010 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4006 method to force all access via __call__(), which guarantees that
4011 method to force all access via __call__(), which guarantees that
4007 traceback references are properly deleted.
4012 traceback references are properly deleted.
4008
4013
4009 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4014 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4010 improve printing when pprint is in use.
4015 improve printing when pprint is in use.
4011
4016
4012 2002-04-13 Fernando Perez <fperez@colorado.edu>
4017 2002-04-13 Fernando Perez <fperez@colorado.edu>
4013
4018
4014 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4019 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4015 exceptions aren't caught anymore. If the user triggers one, he
4020 exceptions aren't caught anymore. If the user triggers one, he
4016 should know why he's doing it and it should go all the way up,
4021 should know why he's doing it and it should go all the way up,
4017 just like any other exception. So now @abort will fully kill the
4022 just like any other exception. So now @abort will fully kill the
4018 embedded interpreter and the embedding code (unless that happens
4023 embedded interpreter and the embedding code (unless that happens
4019 to catch SystemExit).
4024 to catch SystemExit).
4020
4025
4021 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4026 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4022 and a debugger() method to invoke the interactive pdb debugger
4027 and a debugger() method to invoke the interactive pdb debugger
4023 after printing exception information. Also added the corresponding
4028 after printing exception information. Also added the corresponding
4024 -pdb option and @pdb magic to control this feature, and updated
4029 -pdb option and @pdb magic to control this feature, and updated
4025 the docs. After a suggestion from Christopher Hart
4030 the docs. After a suggestion from Christopher Hart
4026 (hart-AT-caltech.edu).
4031 (hart-AT-caltech.edu).
4027
4032
4028 2002-04-12 Fernando Perez <fperez@colorado.edu>
4033 2002-04-12 Fernando Perez <fperez@colorado.edu>
4029
4034
4030 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4035 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4031 the exception handlers defined by the user (not the CrashHandler)
4036 the exception handlers defined by the user (not the CrashHandler)
4032 so that user exceptions don't trigger an ipython bug report.
4037 so that user exceptions don't trigger an ipython bug report.
4033
4038
4034 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4039 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4035 configurable (it should have always been so).
4040 configurable (it should have always been so).
4036
4041
4037 2002-03-26 Fernando Perez <fperez@colorado.edu>
4042 2002-03-26 Fernando Perez <fperez@colorado.edu>
4038
4043
4039 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4044 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4040 and there to fix embedding namespace issues. This should all be
4045 and there to fix embedding namespace issues. This should all be
4041 done in a more elegant way.
4046 done in a more elegant way.
4042
4047
4043 2002-03-25 Fernando Perez <fperez@colorado.edu>
4048 2002-03-25 Fernando Perez <fperez@colorado.edu>
4044
4049
4045 * IPython/genutils.py (get_home_dir): Try to make it work under
4050 * IPython/genutils.py (get_home_dir): Try to make it work under
4046 win9x also.
4051 win9x also.
4047
4052
4048 2002-03-20 Fernando Perez <fperez@colorado.edu>
4053 2002-03-20 Fernando Perez <fperez@colorado.edu>
4049
4054
4050 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4055 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4051 sys.displayhook untouched upon __init__.
4056 sys.displayhook untouched upon __init__.
4052
4057
4053 2002-03-19 Fernando Perez <fperez@colorado.edu>
4058 2002-03-19 Fernando Perez <fperez@colorado.edu>
4054
4059
4055 * Released 0.2.9 (for embedding bug, basically).
4060 * Released 0.2.9 (for embedding bug, basically).
4056
4061
4057 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4062 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4058 exceptions so that enclosing shell's state can be restored.
4063 exceptions so that enclosing shell's state can be restored.
4059
4064
4060 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4065 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4061 naming conventions in the .ipython/ dir.
4066 naming conventions in the .ipython/ dir.
4062
4067
4063 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4068 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4064 from delimiters list so filenames with - in them get expanded.
4069 from delimiters list so filenames with - in them get expanded.
4065
4070
4066 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4071 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4067 sys.displayhook not being properly restored after an embedded call.
4072 sys.displayhook not being properly restored after an embedded call.
4068
4073
4069 2002-03-18 Fernando Perez <fperez@colorado.edu>
4074 2002-03-18 Fernando Perez <fperez@colorado.edu>
4070
4075
4071 * Released 0.2.8
4076 * Released 0.2.8
4072
4077
4073 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4078 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4074 some files weren't being included in a -upgrade.
4079 some files weren't being included in a -upgrade.
4075 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4080 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4076 on' so that the first tab completes.
4081 on' so that the first tab completes.
4077 (InteractiveShell.handle_magic): fixed bug with spaces around
4082 (InteractiveShell.handle_magic): fixed bug with spaces around
4078 quotes breaking many magic commands.
4083 quotes breaking many magic commands.
4079
4084
4080 * setup.py: added note about ignoring the syntax error messages at
4085 * setup.py: added note about ignoring the syntax error messages at
4081 installation.
4086 installation.
4082
4087
4083 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4088 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4084 streamlining the gnuplot interface, now there's only one magic @gp.
4089 streamlining the gnuplot interface, now there's only one magic @gp.
4085
4090
4086 2002-03-17 Fernando Perez <fperez@colorado.edu>
4091 2002-03-17 Fernando Perez <fperez@colorado.edu>
4087
4092
4088 * IPython/UserConfig/magic_gnuplot.py: new name for the
4093 * IPython/UserConfig/magic_gnuplot.py: new name for the
4089 example-magic_pm.py file. Much enhanced system, now with a shell
4094 example-magic_pm.py file. Much enhanced system, now with a shell
4090 for communicating directly with gnuplot, one command at a time.
4095 for communicating directly with gnuplot, one command at a time.
4091
4096
4092 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4097 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4093 setting __name__=='__main__'.
4098 setting __name__=='__main__'.
4094
4099
4095 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4100 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4096 mini-shell for accessing gnuplot from inside ipython. Should
4101 mini-shell for accessing gnuplot from inside ipython. Should
4097 extend it later for grace access too. Inspired by Arnd's
4102 extend it later for grace access too. Inspired by Arnd's
4098 suggestion.
4103 suggestion.
4099
4104
4100 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4105 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4101 calling magic functions with () in their arguments. Thanks to Arnd
4106 calling magic functions with () in their arguments. Thanks to Arnd
4102 Baecker for pointing this to me.
4107 Baecker for pointing this to me.
4103
4108
4104 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4109 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4105 infinitely for integer or complex arrays (only worked with floats).
4110 infinitely for integer or complex arrays (only worked with floats).
4106
4111
4107 2002-03-16 Fernando Perez <fperez@colorado.edu>
4112 2002-03-16 Fernando Perez <fperez@colorado.edu>
4108
4113
4109 * setup.py: Merged setup and setup_windows into a single script
4114 * setup.py: Merged setup and setup_windows into a single script
4110 which properly handles things for windows users.
4115 which properly handles things for windows users.
4111
4116
4112 2002-03-15 Fernando Perez <fperez@colorado.edu>
4117 2002-03-15 Fernando Perez <fperez@colorado.edu>
4113
4118
4114 * Big change to the manual: now the magics are all automatically
4119 * Big change to the manual: now the magics are all automatically
4115 documented. This information is generated from their docstrings
4120 documented. This information is generated from their docstrings
4116 and put in a latex file included by the manual lyx file. This way
4121 and put in a latex file included by the manual lyx file. This way
4117 we get always up to date information for the magics. The manual
4122 we get always up to date information for the magics. The manual
4118 now also has proper version information, also auto-synced.
4123 now also has proper version information, also auto-synced.
4119
4124
4120 For this to work, an undocumented --magic_docstrings option was added.
4125 For this to work, an undocumented --magic_docstrings option was added.
4121
4126
4122 2002-03-13 Fernando Perez <fperez@colorado.edu>
4127 2002-03-13 Fernando Perez <fperez@colorado.edu>
4123
4128
4124 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4129 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4125 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4130 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4126
4131
4127 2002-03-12 Fernando Perez <fperez@colorado.edu>
4132 2002-03-12 Fernando Perez <fperez@colorado.edu>
4128
4133
4129 * IPython/ultraTB.py (TermColors): changed color escapes again to
4134 * IPython/ultraTB.py (TermColors): changed color escapes again to
4130 fix the (old, reintroduced) line-wrapping bug. Basically, if
4135 fix the (old, reintroduced) line-wrapping bug. Basically, if
4131 \001..\002 aren't given in the color escapes, lines get wrapped
4136 \001..\002 aren't given in the color escapes, lines get wrapped
4132 weirdly. But giving those screws up old xterms and emacs terms. So
4137 weirdly. But giving those screws up old xterms and emacs terms. So
4133 I added some logic for emacs terms to be ok, but I can't identify old
4138 I added some logic for emacs terms to be ok, but I can't identify old
4134 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4139 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4135
4140
4136 2002-03-10 Fernando Perez <fperez@colorado.edu>
4141 2002-03-10 Fernando Perez <fperez@colorado.edu>
4137
4142
4138 * IPython/usage.py (__doc__): Various documentation cleanups and
4143 * IPython/usage.py (__doc__): Various documentation cleanups and
4139 updates, both in usage docstrings and in the manual.
4144 updates, both in usage docstrings and in the manual.
4140
4145
4141 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4146 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4142 handling of caching. Set minimum acceptabe value for having a
4147 handling of caching. Set minimum acceptabe value for having a
4143 cache at 20 values.
4148 cache at 20 values.
4144
4149
4145 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4150 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4146 install_first_time function to a method, renamed it and added an
4151 install_first_time function to a method, renamed it and added an
4147 'upgrade' mode. Now people can update their config directory with
4152 'upgrade' mode. Now people can update their config directory with
4148 a simple command line switch (-upgrade, also new).
4153 a simple command line switch (-upgrade, also new).
4149
4154
4150 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4155 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4151 @file (convenient for automagic users under Python >= 2.2).
4156 @file (convenient for automagic users under Python >= 2.2).
4152 Removed @files (it seemed more like a plural than an abbrev. of
4157 Removed @files (it seemed more like a plural than an abbrev. of
4153 'file show').
4158 'file show').
4154
4159
4155 * IPython/iplib.py (install_first_time): Fixed crash if there were
4160 * IPython/iplib.py (install_first_time): Fixed crash if there were
4156 backup files ('~') in .ipython/ install directory.
4161 backup files ('~') in .ipython/ install directory.
4157
4162
4158 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4163 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4159 system. Things look fine, but these changes are fairly
4164 system. Things look fine, but these changes are fairly
4160 intrusive. Test them for a few days.
4165 intrusive. Test them for a few days.
4161
4166
4162 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4167 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4163 the prompts system. Now all in/out prompt strings are user
4168 the prompts system. Now all in/out prompt strings are user
4164 controllable. This is particularly useful for embedding, as one
4169 controllable. This is particularly useful for embedding, as one
4165 can tag embedded instances with particular prompts.
4170 can tag embedded instances with particular prompts.
4166
4171
4167 Also removed global use of sys.ps1/2, which now allows nested
4172 Also removed global use of sys.ps1/2, which now allows nested
4168 embeddings without any problems. Added command-line options for
4173 embeddings without any problems. Added command-line options for
4169 the prompt strings.
4174 the prompt strings.
4170
4175
4171 2002-03-08 Fernando Perez <fperez@colorado.edu>
4176 2002-03-08 Fernando Perez <fperez@colorado.edu>
4172
4177
4173 * IPython/UserConfig/example-embed-short.py (ipshell): added
4178 * IPython/UserConfig/example-embed-short.py (ipshell): added
4174 example file with the bare minimum code for embedding.
4179 example file with the bare minimum code for embedding.
4175
4180
4176 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4181 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4177 functionality for the embeddable shell to be activated/deactivated
4182 functionality for the embeddable shell to be activated/deactivated
4178 either globally or at each call.
4183 either globally or at each call.
4179
4184
4180 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4185 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4181 rewriting the prompt with '--->' for auto-inputs with proper
4186 rewriting the prompt with '--->' for auto-inputs with proper
4182 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4187 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4183 this is handled by the prompts class itself, as it should.
4188 this is handled by the prompts class itself, as it should.
4184
4189
4185 2002-03-05 Fernando Perez <fperez@colorado.edu>
4190 2002-03-05 Fernando Perez <fperez@colorado.edu>
4186
4191
4187 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4192 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4188 @logstart to avoid name clashes with the math log function.
4193 @logstart to avoid name clashes with the math log function.
4189
4194
4190 * Big updates to X/Emacs section of the manual.
4195 * Big updates to X/Emacs section of the manual.
4191
4196
4192 * Removed ipython_emacs. Milan explained to me how to pass
4197 * Removed ipython_emacs. Milan explained to me how to pass
4193 arguments to ipython through Emacs. Some day I'm going to end up
4198 arguments to ipython through Emacs. Some day I'm going to end up
4194 learning some lisp...
4199 learning some lisp...
4195
4200
4196 2002-03-04 Fernando Perez <fperez@colorado.edu>
4201 2002-03-04 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * IPython/ipython_emacs: Created script to be used as the
4203 * IPython/ipython_emacs: Created script to be used as the
4199 py-python-command Emacs variable so we can pass IPython
4204 py-python-command Emacs variable so we can pass IPython
4200 parameters. I can't figure out how to tell Emacs directly to pass
4205 parameters. I can't figure out how to tell Emacs directly to pass
4201 parameters to IPython, so a dummy shell script will do it.
4206 parameters to IPython, so a dummy shell script will do it.
4202
4207
4203 Other enhancements made for things to work better under Emacs'
4208 Other enhancements made for things to work better under Emacs'
4204 various types of terminals. Many thanks to Milan Zamazal
4209 various types of terminals. Many thanks to Milan Zamazal
4205 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4210 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4206
4211
4207 2002-03-01 Fernando Perez <fperez@colorado.edu>
4212 2002-03-01 Fernando Perez <fperez@colorado.edu>
4208
4213
4209 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4214 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4210 that loading of readline is now optional. This gives better
4215 that loading of readline is now optional. This gives better
4211 control to emacs users.
4216 control to emacs users.
4212
4217
4213 * IPython/ultraTB.py (__date__): Modified color escape sequences
4218 * IPython/ultraTB.py (__date__): Modified color escape sequences
4214 and now things work fine under xterm and in Emacs' term buffers
4219 and now things work fine under xterm and in Emacs' term buffers
4215 (though not shell ones). Well, in emacs you get colors, but all
4220 (though not shell ones). Well, in emacs you get colors, but all
4216 seem to be 'light' colors (no difference between dark and light
4221 seem to be 'light' colors (no difference between dark and light
4217 ones). But the garbage chars are gone, and also in xterms. It
4222 ones). But the garbage chars are gone, and also in xterms. It
4218 seems that now I'm using 'cleaner' ansi sequences.
4223 seems that now I'm using 'cleaner' ansi sequences.
4219
4224
4220 2002-02-21 Fernando Perez <fperez@colorado.edu>
4225 2002-02-21 Fernando Perez <fperez@colorado.edu>
4221
4226
4222 * Released 0.2.7 (mainly to publish the scoping fix).
4227 * Released 0.2.7 (mainly to publish the scoping fix).
4223
4228
4224 * IPython/Logger.py (Logger.logstate): added. A corresponding
4229 * IPython/Logger.py (Logger.logstate): added. A corresponding
4225 @logstate magic was created.
4230 @logstate magic was created.
4226
4231
4227 * IPython/Magic.py: fixed nested scoping problem under Python
4232 * IPython/Magic.py: fixed nested scoping problem under Python
4228 2.1.x (automagic wasn't working).
4233 2.1.x (automagic wasn't working).
4229
4234
4230 2002-02-20 Fernando Perez <fperez@colorado.edu>
4235 2002-02-20 Fernando Perez <fperez@colorado.edu>
4231
4236
4232 * Released 0.2.6.
4237 * Released 0.2.6.
4233
4238
4234 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4239 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4235 option so that logs can come out without any headers at all.
4240 option so that logs can come out without any headers at all.
4236
4241
4237 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4242 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4238 SciPy.
4243 SciPy.
4239
4244
4240 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4245 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4241 that embedded IPython calls don't require vars() to be explicitly
4246 that embedded IPython calls don't require vars() to be explicitly
4242 passed. Now they are extracted from the caller's frame (code
4247 passed. Now they are extracted from the caller's frame (code
4243 snatched from Eric Jones' weave). Added better documentation to
4248 snatched from Eric Jones' weave). Added better documentation to
4244 the section on embedding and the example file.
4249 the section on embedding and the example file.
4245
4250
4246 * IPython/genutils.py (page): Changed so that under emacs, it just
4251 * IPython/genutils.py (page): Changed so that under emacs, it just
4247 prints the string. You can then page up and down in the emacs
4252 prints the string. You can then page up and down in the emacs
4248 buffer itself. This is how the builtin help() works.
4253 buffer itself. This is how the builtin help() works.
4249
4254
4250 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4255 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4251 macro scoping: macros need to be executed in the user's namespace
4256 macro scoping: macros need to be executed in the user's namespace
4252 to work as if they had been typed by the user.
4257 to work as if they had been typed by the user.
4253
4258
4254 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4259 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4255 execute automatically (no need to type 'exec...'). They then
4260 execute automatically (no need to type 'exec...'). They then
4256 behave like 'true macros'. The printing system was also modified
4261 behave like 'true macros'. The printing system was also modified
4257 for this to work.
4262 for this to work.
4258
4263
4259 2002-02-19 Fernando Perez <fperez@colorado.edu>
4264 2002-02-19 Fernando Perez <fperez@colorado.edu>
4260
4265
4261 * IPython/genutils.py (page_file): new function for paging files
4266 * IPython/genutils.py (page_file): new function for paging files
4262 in an OS-independent way. Also necessary for file viewing to work
4267 in an OS-independent way. Also necessary for file viewing to work
4263 well inside Emacs buffers.
4268 well inside Emacs buffers.
4264 (page): Added checks for being in an emacs buffer.
4269 (page): Added checks for being in an emacs buffer.
4265 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4270 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4266 same bug in iplib.
4271 same bug in iplib.
4267
4272
4268 2002-02-18 Fernando Perez <fperez@colorado.edu>
4273 2002-02-18 Fernando Perez <fperez@colorado.edu>
4269
4274
4270 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4275 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4271 of readline so that IPython can work inside an Emacs buffer.
4276 of readline so that IPython can work inside an Emacs buffer.
4272
4277
4273 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4278 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4274 method signatures (they weren't really bugs, but it looks cleaner
4279 method signatures (they weren't really bugs, but it looks cleaner
4275 and keeps PyChecker happy).
4280 and keeps PyChecker happy).
4276
4281
4277 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4282 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4278 for implementing various user-defined hooks. Currently only
4283 for implementing various user-defined hooks. Currently only
4279 display is done.
4284 display is done.
4280
4285
4281 * IPython/Prompts.py (CachedOutput._display): changed display
4286 * IPython/Prompts.py (CachedOutput._display): changed display
4282 functions so that they can be dynamically changed by users easily.
4287 functions so that they can be dynamically changed by users easily.
4283
4288
4284 * IPython/Extensions/numeric_formats.py (num_display): added an
4289 * IPython/Extensions/numeric_formats.py (num_display): added an
4285 extension for printing NumPy arrays in flexible manners. It
4290 extension for printing NumPy arrays in flexible manners. It
4286 doesn't do anything yet, but all the structure is in
4291 doesn't do anything yet, but all the structure is in
4287 place. Ultimately the plan is to implement output format control
4292 place. Ultimately the plan is to implement output format control
4288 like in Octave.
4293 like in Octave.
4289
4294
4290 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4295 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4291 methods are found at run-time by all the automatic machinery.
4296 methods are found at run-time by all the automatic machinery.
4292
4297
4293 2002-02-17 Fernando Perez <fperez@colorado.edu>
4298 2002-02-17 Fernando Perez <fperez@colorado.edu>
4294
4299
4295 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4300 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4296 whole file a little.
4301 whole file a little.
4297
4302
4298 * ToDo: closed this document. Now there's a new_design.lyx
4303 * ToDo: closed this document. Now there's a new_design.lyx
4299 document for all new ideas. Added making a pdf of it for the
4304 document for all new ideas. Added making a pdf of it for the
4300 end-user distro.
4305 end-user distro.
4301
4306
4302 * IPython/Logger.py (Logger.switch_log): Created this to replace
4307 * IPython/Logger.py (Logger.switch_log): Created this to replace
4303 logon() and logoff(). It also fixes a nasty crash reported by
4308 logon() and logoff(). It also fixes a nasty crash reported by
4304 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4309 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4305
4310
4306 * IPython/iplib.py (complete): got auto-completion to work with
4311 * IPython/iplib.py (complete): got auto-completion to work with
4307 automagic (I had wanted this for a long time).
4312 automagic (I had wanted this for a long time).
4308
4313
4309 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4314 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4310 to @file, since file() is now a builtin and clashes with automagic
4315 to @file, since file() is now a builtin and clashes with automagic
4311 for @file.
4316 for @file.
4312
4317
4313 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4318 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4314 of this was previously in iplib, which had grown to more than 2000
4319 of this was previously in iplib, which had grown to more than 2000
4315 lines, way too long. No new functionality, but it makes managing
4320 lines, way too long. No new functionality, but it makes managing
4316 the code a bit easier.
4321 the code a bit easier.
4317
4322
4318 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4323 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4319 information to crash reports.
4324 information to crash reports.
4320
4325
4321 2002-02-12 Fernando Perez <fperez@colorado.edu>
4326 2002-02-12 Fernando Perez <fperez@colorado.edu>
4322
4327
4323 * Released 0.2.5.
4328 * Released 0.2.5.
4324
4329
4325 2002-02-11 Fernando Perez <fperez@colorado.edu>
4330 2002-02-11 Fernando Perez <fperez@colorado.edu>
4326
4331
4327 * Wrote a relatively complete Windows installer. It puts
4332 * Wrote a relatively complete Windows installer. It puts
4328 everything in place, creates Start Menu entries and fixes the
4333 everything in place, creates Start Menu entries and fixes the
4329 color issues. Nothing fancy, but it works.
4334 color issues. Nothing fancy, but it works.
4330
4335
4331 2002-02-10 Fernando Perez <fperez@colorado.edu>
4336 2002-02-10 Fernando Perez <fperez@colorado.edu>
4332
4337
4333 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4338 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4334 os.path.expanduser() call so that we can type @run ~/myfile.py and
4339 os.path.expanduser() call so that we can type @run ~/myfile.py and
4335 have thigs work as expected.
4340 have thigs work as expected.
4336
4341
4337 * IPython/genutils.py (page): fixed exception handling so things
4342 * IPython/genutils.py (page): fixed exception handling so things
4338 work both in Unix and Windows correctly. Quitting a pager triggers
4343 work both in Unix and Windows correctly. Quitting a pager triggers
4339 an IOError/broken pipe in Unix, and in windows not finding a pager
4344 an IOError/broken pipe in Unix, and in windows not finding a pager
4340 is also an IOError, so I had to actually look at the return value
4345 is also an IOError, so I had to actually look at the return value
4341 of the exception, not just the exception itself. Should be ok now.
4346 of the exception, not just the exception itself. Should be ok now.
4342
4347
4343 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4348 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4344 modified to allow case-insensitive color scheme changes.
4349 modified to allow case-insensitive color scheme changes.
4345
4350
4346 2002-02-09 Fernando Perez <fperez@colorado.edu>
4351 2002-02-09 Fernando Perez <fperez@colorado.edu>
4347
4352
4348 * IPython/genutils.py (native_line_ends): new function to leave
4353 * IPython/genutils.py (native_line_ends): new function to leave
4349 user config files with os-native line-endings.
4354 user config files with os-native line-endings.
4350
4355
4351 * README and manual updates.
4356 * README and manual updates.
4352
4357
4353 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4358 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4354 instead of StringType to catch Unicode strings.
4359 instead of StringType to catch Unicode strings.
4355
4360
4356 * IPython/genutils.py (filefind): fixed bug for paths with
4361 * IPython/genutils.py (filefind): fixed bug for paths with
4357 embedded spaces (very common in Windows).
4362 embedded spaces (very common in Windows).
4358
4363
4359 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4364 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4360 files under Windows, so that they get automatically associated
4365 files under Windows, so that they get automatically associated
4361 with a text editor. Windows makes it a pain to handle
4366 with a text editor. Windows makes it a pain to handle
4362 extension-less files.
4367 extension-less files.
4363
4368
4364 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4369 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4365 warning about readline only occur for Posix. In Windows there's no
4370 warning about readline only occur for Posix. In Windows there's no
4366 way to get readline, so why bother with the warning.
4371 way to get readline, so why bother with the warning.
4367
4372
4368 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4373 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4369 for __str__ instead of dir(self), since dir() changed in 2.2.
4374 for __str__ instead of dir(self), since dir() changed in 2.2.
4370
4375
4371 * Ported to Windows! Tested on XP, I suspect it should work fine
4376 * Ported to Windows! Tested on XP, I suspect it should work fine
4372 on NT/2000, but I don't think it will work on 98 et al. That
4377 on NT/2000, but I don't think it will work on 98 et al. That
4373 series of Windows is such a piece of junk anyway that I won't try
4378 series of Windows is such a piece of junk anyway that I won't try
4374 porting it there. The XP port was straightforward, showed a few
4379 porting it there. The XP port was straightforward, showed a few
4375 bugs here and there (fixed all), in particular some string
4380 bugs here and there (fixed all), in particular some string
4376 handling stuff which required considering Unicode strings (which
4381 handling stuff which required considering Unicode strings (which
4377 Windows uses). This is good, but hasn't been too tested :) No
4382 Windows uses). This is good, but hasn't been too tested :) No
4378 fancy installer yet, I'll put a note in the manual so people at
4383 fancy installer yet, I'll put a note in the manual so people at
4379 least make manually a shortcut.
4384 least make manually a shortcut.
4380
4385
4381 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4386 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4382 into a single one, "colors". This now controls both prompt and
4387 into a single one, "colors". This now controls both prompt and
4383 exception color schemes, and can be changed both at startup
4388 exception color schemes, and can be changed both at startup
4384 (either via command-line switches or via ipythonrc files) and at
4389 (either via command-line switches or via ipythonrc files) and at
4385 runtime, with @colors.
4390 runtime, with @colors.
4386 (Magic.magic_run): renamed @prun to @run and removed the old
4391 (Magic.magic_run): renamed @prun to @run and removed the old
4387 @run. The two were too similar to warrant keeping both.
4392 @run. The two were too similar to warrant keeping both.
4388
4393
4389 2002-02-03 Fernando Perez <fperez@colorado.edu>
4394 2002-02-03 Fernando Perez <fperez@colorado.edu>
4390
4395
4391 * IPython/iplib.py (install_first_time): Added comment on how to
4396 * IPython/iplib.py (install_first_time): Added comment on how to
4392 configure the color options for first-time users. Put a <return>
4397 configure the color options for first-time users. Put a <return>
4393 request at the end so that small-terminal users get a chance to
4398 request at the end so that small-terminal users get a chance to
4394 read the startup info.
4399 read the startup info.
4395
4400
4396 2002-01-23 Fernando Perez <fperez@colorado.edu>
4401 2002-01-23 Fernando Perez <fperez@colorado.edu>
4397
4402
4398 * IPython/iplib.py (CachedOutput.update): Changed output memory
4403 * IPython/iplib.py (CachedOutput.update): Changed output memory
4399 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4404 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4400 input history we still use _i. Did this b/c these variable are
4405 input history we still use _i. Did this b/c these variable are
4401 very commonly used in interactive work, so the less we need to
4406 very commonly used in interactive work, so the less we need to
4402 type the better off we are.
4407 type the better off we are.
4403 (Magic.magic_prun): updated @prun to better handle the namespaces
4408 (Magic.magic_prun): updated @prun to better handle the namespaces
4404 the file will run in, including a fix for __name__ not being set
4409 the file will run in, including a fix for __name__ not being set
4405 before.
4410 before.
4406
4411
4407 2002-01-20 Fernando Perez <fperez@colorado.edu>
4412 2002-01-20 Fernando Perez <fperez@colorado.edu>
4408
4413
4409 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4414 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4410 extra garbage for Python 2.2. Need to look more carefully into
4415 extra garbage for Python 2.2. Need to look more carefully into
4411 this later.
4416 this later.
4412
4417
4413 2002-01-19 Fernando Perez <fperez@colorado.edu>
4418 2002-01-19 Fernando Perez <fperez@colorado.edu>
4414
4419
4415 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4420 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4416 display SyntaxError exceptions properly formatted when they occur
4421 display SyntaxError exceptions properly formatted when they occur
4417 (they can be triggered by imported code).
4422 (they can be triggered by imported code).
4418
4423
4419 2002-01-18 Fernando Perez <fperez@colorado.edu>
4424 2002-01-18 Fernando Perez <fperez@colorado.edu>
4420
4425
4421 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4426 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4422 SyntaxError exceptions are reported nicely formatted, instead of
4427 SyntaxError exceptions are reported nicely formatted, instead of
4423 spitting out only offset information as before.
4428 spitting out only offset information as before.
4424 (Magic.magic_prun): Added the @prun function for executing
4429 (Magic.magic_prun): Added the @prun function for executing
4425 programs with command line args inside IPython.
4430 programs with command line args inside IPython.
4426
4431
4427 2002-01-16 Fernando Perez <fperez@colorado.edu>
4432 2002-01-16 Fernando Perez <fperez@colorado.edu>
4428
4433
4429 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4434 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4430 to *not* include the last item given in a range. This brings their
4435 to *not* include the last item given in a range. This brings their
4431 behavior in line with Python's slicing:
4436 behavior in line with Python's slicing:
4432 a[n1:n2] -> a[n1]...a[n2-1]
4437 a[n1:n2] -> a[n1]...a[n2-1]
4433 It may be a bit less convenient, but I prefer to stick to Python's
4438 It may be a bit less convenient, but I prefer to stick to Python's
4434 conventions *everywhere*, so users never have to wonder.
4439 conventions *everywhere*, so users never have to wonder.
4435 (Magic.magic_macro): Added @macro function to ease the creation of
4440 (Magic.magic_macro): Added @macro function to ease the creation of
4436 macros.
4441 macros.
4437
4442
4438 2002-01-05 Fernando Perez <fperez@colorado.edu>
4443 2002-01-05 Fernando Perez <fperez@colorado.edu>
4439
4444
4440 * Released 0.2.4.
4445 * Released 0.2.4.
4441
4446
4442 * IPython/iplib.py (Magic.magic_pdef):
4447 * IPython/iplib.py (Magic.magic_pdef):
4443 (InteractiveShell.safe_execfile): report magic lines and error
4448 (InteractiveShell.safe_execfile): report magic lines and error
4444 lines without line numbers so one can easily copy/paste them for
4449 lines without line numbers so one can easily copy/paste them for
4445 re-execution.
4450 re-execution.
4446
4451
4447 * Updated manual with recent changes.
4452 * Updated manual with recent changes.
4448
4453
4449 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4454 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4450 docstring printing when class? is called. Very handy for knowing
4455 docstring printing when class? is called. Very handy for knowing
4451 how to create class instances (as long as __init__ is well
4456 how to create class instances (as long as __init__ is well
4452 documented, of course :)
4457 documented, of course :)
4453 (Magic.magic_doc): print both class and constructor docstrings.
4458 (Magic.magic_doc): print both class and constructor docstrings.
4454 (Magic.magic_pdef): give constructor info if passed a class and
4459 (Magic.magic_pdef): give constructor info if passed a class and
4455 __call__ info for callable object instances.
4460 __call__ info for callable object instances.
4456
4461
4457 2002-01-04 Fernando Perez <fperez@colorado.edu>
4462 2002-01-04 Fernando Perez <fperez@colorado.edu>
4458
4463
4459 * Made deep_reload() off by default. It doesn't always work
4464 * Made deep_reload() off by default. It doesn't always work
4460 exactly as intended, so it's probably safer to have it off. It's
4465 exactly as intended, so it's probably safer to have it off. It's
4461 still available as dreload() anyway, so nothing is lost.
4466 still available as dreload() anyway, so nothing is lost.
4462
4467
4463 2002-01-02 Fernando Perez <fperez@colorado.edu>
4468 2002-01-02 Fernando Perez <fperez@colorado.edu>
4464
4469
4465 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4470 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4466 so I wanted an updated release).
4471 so I wanted an updated release).
4467
4472
4468 2001-12-27 Fernando Perez <fperez@colorado.edu>
4473 2001-12-27 Fernando Perez <fperez@colorado.edu>
4469
4474
4470 * IPython/iplib.py (InteractiveShell.interact): Added the original
4475 * IPython/iplib.py (InteractiveShell.interact): Added the original
4471 code from 'code.py' for this module in order to change the
4476 code from 'code.py' for this module in order to change the
4472 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4477 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4473 the history cache would break when the user hit Ctrl-C, and
4478 the history cache would break when the user hit Ctrl-C, and
4474 interact() offers no way to add any hooks to it.
4479 interact() offers no way to add any hooks to it.
4475
4480
4476 2001-12-23 Fernando Perez <fperez@colorado.edu>
4481 2001-12-23 Fernando Perez <fperez@colorado.edu>
4477
4482
4478 * setup.py: added check for 'MANIFEST' before trying to remove
4483 * setup.py: added check for 'MANIFEST' before trying to remove
4479 it. Thanks to Sean Reifschneider.
4484 it. Thanks to Sean Reifschneider.
4480
4485
4481 2001-12-22 Fernando Perez <fperez@colorado.edu>
4486 2001-12-22 Fernando Perez <fperez@colorado.edu>
4482
4487
4483 * Released 0.2.2.
4488 * Released 0.2.2.
4484
4489
4485 * Finished (reasonably) writing the manual. Later will add the
4490 * Finished (reasonably) writing the manual. Later will add the
4486 python-standard navigation stylesheets, but for the time being
4491 python-standard navigation stylesheets, but for the time being
4487 it's fairly complete. Distribution will include html and pdf
4492 it's fairly complete. Distribution will include html and pdf
4488 versions.
4493 versions.
4489
4494
4490 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4495 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4491 (MayaVi author).
4496 (MayaVi author).
4492
4497
4493 2001-12-21 Fernando Perez <fperez@colorado.edu>
4498 2001-12-21 Fernando Perez <fperez@colorado.edu>
4494
4499
4495 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4500 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4496 good public release, I think (with the manual and the distutils
4501 good public release, I think (with the manual and the distutils
4497 installer). The manual can use some work, but that can go
4502 installer). The manual can use some work, but that can go
4498 slowly. Otherwise I think it's quite nice for end users. Next
4503 slowly. Otherwise I think it's quite nice for end users. Next
4499 summer, rewrite the guts of it...
4504 summer, rewrite the guts of it...
4500
4505
4501 * Changed format of ipythonrc files to use whitespace as the
4506 * Changed format of ipythonrc files to use whitespace as the
4502 separator instead of an explicit '='. Cleaner.
4507 separator instead of an explicit '='. Cleaner.
4503
4508
4504 2001-12-20 Fernando Perez <fperez@colorado.edu>
4509 2001-12-20 Fernando Perez <fperez@colorado.edu>
4505
4510
4506 * Started a manual in LyX. For now it's just a quick merge of the
4511 * Started a manual in LyX. For now it's just a quick merge of the
4507 various internal docstrings and READMEs. Later it may grow into a
4512 various internal docstrings and READMEs. Later it may grow into a
4508 nice, full-blown manual.
4513 nice, full-blown manual.
4509
4514
4510 * Set up a distutils based installer. Installation should now be
4515 * Set up a distutils based installer. Installation should now be
4511 trivially simple for end-users.
4516 trivially simple for end-users.
4512
4517
4513 2001-12-11 Fernando Perez <fperez@colorado.edu>
4518 2001-12-11 Fernando Perez <fperez@colorado.edu>
4514
4519
4515 * Released 0.2.0. First public release, announced it at
4520 * Released 0.2.0. First public release, announced it at
4516 comp.lang.python. From now on, just bugfixes...
4521 comp.lang.python. From now on, just bugfixes...
4517
4522
4518 * Went through all the files, set copyright/license notices and
4523 * Went through all the files, set copyright/license notices and
4519 cleaned up things. Ready for release.
4524 cleaned up things. Ready for release.
4520
4525
4521 2001-12-10 Fernando Perez <fperez@colorado.edu>
4526 2001-12-10 Fernando Perez <fperez@colorado.edu>
4522
4527
4523 * Changed the first-time installer not to use tarfiles. It's more
4528 * Changed the first-time installer not to use tarfiles. It's more
4524 robust now and less unix-dependent. Also makes it easier for
4529 robust now and less unix-dependent. Also makes it easier for
4525 people to later upgrade versions.
4530 people to later upgrade versions.
4526
4531
4527 * Changed @exit to @abort to reflect the fact that it's pretty
4532 * Changed @exit to @abort to reflect the fact that it's pretty
4528 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4533 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4529 becomes significant only when IPyhton is embedded: in that case,
4534 becomes significant only when IPyhton is embedded: in that case,
4530 C-D closes IPython only, but @abort kills the enclosing program
4535 C-D closes IPython only, but @abort kills the enclosing program
4531 too (unless it had called IPython inside a try catching
4536 too (unless it had called IPython inside a try catching
4532 SystemExit).
4537 SystemExit).
4533
4538
4534 * Created Shell module which exposes the actuall IPython Shell
4539 * Created Shell module which exposes the actuall IPython Shell
4535 classes, currently the normal and the embeddable one. This at
4540 classes, currently the normal and the embeddable one. This at
4536 least offers a stable interface we won't need to change when
4541 least offers a stable interface we won't need to change when
4537 (later) the internals are rewritten. That rewrite will be confined
4542 (later) the internals are rewritten. That rewrite will be confined
4538 to iplib and ipmaker, but the Shell interface should remain as is.
4543 to iplib and ipmaker, but the Shell interface should remain as is.
4539
4544
4540 * Added embed module which offers an embeddable IPShell object,
4545 * Added embed module which offers an embeddable IPShell object,
4541 useful to fire up IPython *inside* a running program. Great for
4546 useful to fire up IPython *inside* a running program. Great for
4542 debugging or dynamical data analysis.
4547 debugging or dynamical data analysis.
4543
4548
4544 2001-12-08 Fernando Perez <fperez@colorado.edu>
4549 2001-12-08 Fernando Perez <fperez@colorado.edu>
4545
4550
4546 * Fixed small bug preventing seeing info from methods of defined
4551 * Fixed small bug preventing seeing info from methods of defined
4547 objects (incorrect namespace in _ofind()).
4552 objects (incorrect namespace in _ofind()).
4548
4553
4549 * Documentation cleanup. Moved the main usage docstrings to a
4554 * Documentation cleanup. Moved the main usage docstrings to a
4550 separate file, usage.py (cleaner to maintain, and hopefully in the
4555 separate file, usage.py (cleaner to maintain, and hopefully in the
4551 future some perlpod-like way of producing interactive, man and
4556 future some perlpod-like way of producing interactive, man and
4552 html docs out of it will be found).
4557 html docs out of it will be found).
4553
4558
4554 * Added @profile to see your profile at any time.
4559 * Added @profile to see your profile at any time.
4555
4560
4556 * Added @p as an alias for 'print'. It's especially convenient if
4561 * Added @p as an alias for 'print'. It's especially convenient if
4557 using automagic ('p x' prints x).
4562 using automagic ('p x' prints x).
4558
4563
4559 * Small cleanups and fixes after a pychecker run.
4564 * Small cleanups and fixes after a pychecker run.
4560
4565
4561 * Changed the @cd command to handle @cd - and @cd -<n> for
4566 * Changed the @cd command to handle @cd - and @cd -<n> for
4562 visiting any directory in _dh.
4567 visiting any directory in _dh.
4563
4568
4564 * Introduced _dh, a history of visited directories. @dhist prints
4569 * Introduced _dh, a history of visited directories. @dhist prints
4565 it out with numbers.
4570 it out with numbers.
4566
4571
4567 2001-12-07 Fernando Perez <fperez@colorado.edu>
4572 2001-12-07 Fernando Perez <fperez@colorado.edu>
4568
4573
4569 * Released 0.1.22
4574 * Released 0.1.22
4570
4575
4571 * Made initialization a bit more robust against invalid color
4576 * Made initialization a bit more robust against invalid color
4572 options in user input (exit, not traceback-crash).
4577 options in user input (exit, not traceback-crash).
4573
4578
4574 * Changed the bug crash reporter to write the report only in the
4579 * Changed the bug crash reporter to write the report only in the
4575 user's .ipython directory. That way IPython won't litter people's
4580 user's .ipython directory. That way IPython won't litter people's
4576 hard disks with crash files all over the place. Also print on
4581 hard disks with crash files all over the place. Also print on
4577 screen the necessary mail command.
4582 screen the necessary mail command.
4578
4583
4579 * With the new ultraTB, implemented LightBG color scheme for light
4584 * With the new ultraTB, implemented LightBG color scheme for light
4580 background terminals. A lot of people like white backgrounds, so I
4585 background terminals. A lot of people like white backgrounds, so I
4581 guess we should at least give them something readable.
4586 guess we should at least give them something readable.
4582
4587
4583 2001-12-06 Fernando Perez <fperez@colorado.edu>
4588 2001-12-06 Fernando Perez <fperez@colorado.edu>
4584
4589
4585 * Modified the structure of ultraTB. Now there's a proper class
4590 * Modified the structure of ultraTB. Now there's a proper class
4586 for tables of color schemes which allow adding schemes easily and
4591 for tables of color schemes which allow adding schemes easily and
4587 switching the active scheme without creating a new instance every
4592 switching the active scheme without creating a new instance every
4588 time (which was ridiculous). The syntax for creating new schemes
4593 time (which was ridiculous). The syntax for creating new schemes
4589 is also cleaner. I think ultraTB is finally done, with a clean
4594 is also cleaner. I think ultraTB is finally done, with a clean
4590 class structure. Names are also much cleaner (now there's proper
4595 class structure. Names are also much cleaner (now there's proper
4591 color tables, no need for every variable to also have 'color' in
4596 color tables, no need for every variable to also have 'color' in
4592 its name).
4597 its name).
4593
4598
4594 * Broke down genutils into separate files. Now genutils only
4599 * Broke down genutils into separate files. Now genutils only
4595 contains utility functions, and classes have been moved to their
4600 contains utility functions, and classes have been moved to their
4596 own files (they had enough independent functionality to warrant
4601 own files (they had enough independent functionality to warrant
4597 it): ConfigLoader, OutputTrap, Struct.
4602 it): ConfigLoader, OutputTrap, Struct.
4598
4603
4599 2001-12-05 Fernando Perez <fperez@colorado.edu>
4604 2001-12-05 Fernando Perez <fperez@colorado.edu>
4600
4605
4601 * IPython turns 21! Released version 0.1.21, as a candidate for
4606 * IPython turns 21! Released version 0.1.21, as a candidate for
4602 public consumption. If all goes well, release in a few days.
4607 public consumption. If all goes well, release in a few days.
4603
4608
4604 * Fixed path bug (files in Extensions/ directory wouldn't be found
4609 * Fixed path bug (files in Extensions/ directory wouldn't be found
4605 unless IPython/ was explicitly in sys.path).
4610 unless IPython/ was explicitly in sys.path).
4606
4611
4607 * Extended the FlexCompleter class as MagicCompleter to allow
4612 * Extended the FlexCompleter class as MagicCompleter to allow
4608 completion of @-starting lines.
4613 completion of @-starting lines.
4609
4614
4610 * Created __release__.py file as a central repository for release
4615 * Created __release__.py file as a central repository for release
4611 info that other files can read from.
4616 info that other files can read from.
4612
4617
4613 * Fixed small bug in logging: when logging was turned on in
4618 * Fixed small bug in logging: when logging was turned on in
4614 mid-session, old lines with special meanings (!@?) were being
4619 mid-session, old lines with special meanings (!@?) were being
4615 logged without the prepended comment, which is necessary since
4620 logged without the prepended comment, which is necessary since
4616 they are not truly valid python syntax. This should make session
4621 they are not truly valid python syntax. This should make session
4617 restores produce less errors.
4622 restores produce less errors.
4618
4623
4619 * The namespace cleanup forced me to make a FlexCompleter class
4624 * The namespace cleanup forced me to make a FlexCompleter class
4620 which is nothing but a ripoff of rlcompleter, but with selectable
4625 which is nothing but a ripoff of rlcompleter, but with selectable
4621 namespace (rlcompleter only works in __main__.__dict__). I'll try
4626 namespace (rlcompleter only works in __main__.__dict__). I'll try
4622 to submit a note to the authors to see if this change can be
4627 to submit a note to the authors to see if this change can be
4623 incorporated in future rlcompleter releases (Dec.6: done)
4628 incorporated in future rlcompleter releases (Dec.6: done)
4624
4629
4625 * More fixes to namespace handling. It was a mess! Now all
4630 * More fixes to namespace handling. It was a mess! Now all
4626 explicit references to __main__.__dict__ are gone (except when
4631 explicit references to __main__.__dict__ are gone (except when
4627 really needed) and everything is handled through the namespace
4632 really needed) and everything is handled through the namespace
4628 dicts in the IPython instance. We seem to be getting somewhere
4633 dicts in the IPython instance. We seem to be getting somewhere
4629 with this, finally...
4634 with this, finally...
4630
4635
4631 * Small documentation updates.
4636 * Small documentation updates.
4632
4637
4633 * Created the Extensions directory under IPython (with an
4638 * Created the Extensions directory under IPython (with an
4634 __init__.py). Put the PhysicalQ stuff there. This directory should
4639 __init__.py). Put the PhysicalQ stuff there. This directory should
4635 be used for all special-purpose extensions.
4640 be used for all special-purpose extensions.
4636
4641
4637 * File renaming:
4642 * File renaming:
4638 ipythonlib --> ipmaker
4643 ipythonlib --> ipmaker
4639 ipplib --> iplib
4644 ipplib --> iplib
4640 This makes a bit more sense in terms of what these files actually do.
4645 This makes a bit more sense in terms of what these files actually do.
4641
4646
4642 * Moved all the classes and functions in ipythonlib to ipplib, so
4647 * Moved all the classes and functions in ipythonlib to ipplib, so
4643 now ipythonlib only has make_IPython(). This will ease up its
4648 now ipythonlib only has make_IPython(). This will ease up its
4644 splitting in smaller functional chunks later.
4649 splitting in smaller functional chunks later.
4645
4650
4646 * Cleaned up (done, I think) output of @whos. Better column
4651 * Cleaned up (done, I think) output of @whos. Better column
4647 formatting, and now shows str(var) for as much as it can, which is
4652 formatting, and now shows str(var) for as much as it can, which is
4648 typically what one gets with a 'print var'.
4653 typically what one gets with a 'print var'.
4649
4654
4650 2001-12-04 Fernando Perez <fperez@colorado.edu>
4655 2001-12-04 Fernando Perez <fperez@colorado.edu>
4651
4656
4652 * Fixed namespace problems. Now builtin/IPyhton/user names get
4657 * Fixed namespace problems. Now builtin/IPyhton/user names get
4653 properly reported in their namespace. Internal namespace handling
4658 properly reported in their namespace. Internal namespace handling
4654 is finally getting decent (not perfect yet, but much better than
4659 is finally getting decent (not perfect yet, but much better than
4655 the ad-hoc mess we had).
4660 the ad-hoc mess we had).
4656
4661
4657 * Removed -exit option. If people just want to run a python
4662 * Removed -exit option. If people just want to run a python
4658 script, that's what the normal interpreter is for. Less
4663 script, that's what the normal interpreter is for. Less
4659 unnecessary options, less chances for bugs.
4664 unnecessary options, less chances for bugs.
4660
4665
4661 * Added a crash handler which generates a complete post-mortem if
4666 * Added a crash handler which generates a complete post-mortem if
4662 IPython crashes. This will help a lot in tracking bugs down the
4667 IPython crashes. This will help a lot in tracking bugs down the
4663 road.
4668 road.
4664
4669
4665 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4670 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4666 which were boud to functions being reassigned would bypass the
4671 which were boud to functions being reassigned would bypass the
4667 logger, breaking the sync of _il with the prompt counter. This
4672 logger, breaking the sync of _il with the prompt counter. This
4668 would then crash IPython later when a new line was logged.
4673 would then crash IPython later when a new line was logged.
4669
4674
4670 2001-12-02 Fernando Perez <fperez@colorado.edu>
4675 2001-12-02 Fernando Perez <fperez@colorado.edu>
4671
4676
4672 * Made IPython a package. This means people don't have to clutter
4677 * Made IPython a package. This means people don't have to clutter
4673 their sys.path with yet another directory. Changed the INSTALL
4678 their sys.path with yet another directory. Changed the INSTALL
4674 file accordingly.
4679 file accordingly.
4675
4680
4676 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4681 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4677 sorts its output (so @who shows it sorted) and @whos formats the
4682 sorts its output (so @who shows it sorted) and @whos formats the
4678 table according to the width of the first column. Nicer, easier to
4683 table according to the width of the first column. Nicer, easier to
4679 read. Todo: write a generic table_format() which takes a list of
4684 read. Todo: write a generic table_format() which takes a list of
4680 lists and prints it nicely formatted, with optional row/column
4685 lists and prints it nicely formatted, with optional row/column
4681 separators and proper padding and justification.
4686 separators and proper padding and justification.
4682
4687
4683 * Released 0.1.20
4688 * Released 0.1.20
4684
4689
4685 * Fixed bug in @log which would reverse the inputcache list (a
4690 * Fixed bug in @log which would reverse the inputcache list (a
4686 copy operation was missing).
4691 copy operation was missing).
4687
4692
4688 * Code cleanup. @config was changed to use page(). Better, since
4693 * Code cleanup. @config was changed to use page(). Better, since
4689 its output is always quite long.
4694 its output is always quite long.
4690
4695
4691 * Itpl is back as a dependency. I was having too many problems
4696 * Itpl is back as a dependency. I was having too many problems
4692 getting the parametric aliases to work reliably, and it's just
4697 getting the parametric aliases to work reliably, and it's just
4693 easier to code weird string operations with it than playing %()s
4698 easier to code weird string operations with it than playing %()s
4694 games. It's only ~6k, so I don't think it's too big a deal.
4699 games. It's only ~6k, so I don't think it's too big a deal.
4695
4700
4696 * Found (and fixed) a very nasty bug with history. !lines weren't
4701 * Found (and fixed) a very nasty bug with history. !lines weren't
4697 getting cached, and the out of sync caches would crash
4702 getting cached, and the out of sync caches would crash
4698 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4703 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4699 division of labor a bit better. Bug fixed, cleaner structure.
4704 division of labor a bit better. Bug fixed, cleaner structure.
4700
4705
4701 2001-12-01 Fernando Perez <fperez@colorado.edu>
4706 2001-12-01 Fernando Perez <fperez@colorado.edu>
4702
4707
4703 * Released 0.1.19
4708 * Released 0.1.19
4704
4709
4705 * Added option -n to @hist to prevent line number printing. Much
4710 * Added option -n to @hist to prevent line number printing. Much
4706 easier to copy/paste code this way.
4711 easier to copy/paste code this way.
4707
4712
4708 * Created global _il to hold the input list. Allows easy
4713 * Created global _il to hold the input list. Allows easy
4709 re-execution of blocks of code by slicing it (inspired by Janko's
4714 re-execution of blocks of code by slicing it (inspired by Janko's
4710 comment on 'macros').
4715 comment on 'macros').
4711
4716
4712 * Small fixes and doc updates.
4717 * Small fixes and doc updates.
4713
4718
4714 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4719 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4715 much too fragile with automagic. Handles properly multi-line
4720 much too fragile with automagic. Handles properly multi-line
4716 statements and takes parameters.
4721 statements and takes parameters.
4717
4722
4718 2001-11-30 Fernando Perez <fperez@colorado.edu>
4723 2001-11-30 Fernando Perez <fperez@colorado.edu>
4719
4724
4720 * Version 0.1.18 released.
4725 * Version 0.1.18 released.
4721
4726
4722 * Fixed nasty namespace bug in initial module imports.
4727 * Fixed nasty namespace bug in initial module imports.
4723
4728
4724 * Added copyright/license notes to all code files (except
4729 * Added copyright/license notes to all code files (except
4725 DPyGetOpt). For the time being, LGPL. That could change.
4730 DPyGetOpt). For the time being, LGPL. That could change.
4726
4731
4727 * Rewrote a much nicer README, updated INSTALL, cleaned up
4732 * Rewrote a much nicer README, updated INSTALL, cleaned up
4728 ipythonrc-* samples.
4733 ipythonrc-* samples.
4729
4734
4730 * Overall code/documentation cleanup. Basically ready for
4735 * Overall code/documentation cleanup. Basically ready for
4731 release. Only remaining thing: licence decision (LGPL?).
4736 release. Only remaining thing: licence decision (LGPL?).
4732
4737
4733 * Converted load_config to a class, ConfigLoader. Now recursion
4738 * Converted load_config to a class, ConfigLoader. Now recursion
4734 control is better organized. Doesn't include the same file twice.
4739 control is better organized. Doesn't include the same file twice.
4735
4740
4736 2001-11-29 Fernando Perez <fperez@colorado.edu>
4741 2001-11-29 Fernando Perez <fperez@colorado.edu>
4737
4742
4738 * Got input history working. Changed output history variables from
4743 * Got input history working. Changed output history variables from
4739 _p to _o so that _i is for input and _o for output. Just cleaner
4744 _p to _o so that _i is for input and _o for output. Just cleaner
4740 convention.
4745 convention.
4741
4746
4742 * Implemented parametric aliases. This pretty much allows the
4747 * Implemented parametric aliases. This pretty much allows the
4743 alias system to offer full-blown shell convenience, I think.
4748 alias system to offer full-blown shell convenience, I think.
4744
4749
4745 * Version 0.1.17 released, 0.1.18 opened.
4750 * Version 0.1.17 released, 0.1.18 opened.
4746
4751
4747 * dot_ipython/ipythonrc (alias): added documentation.
4752 * dot_ipython/ipythonrc (alias): added documentation.
4748 (xcolor): Fixed small bug (xcolors -> xcolor)
4753 (xcolor): Fixed small bug (xcolors -> xcolor)
4749
4754
4750 * Changed the alias system. Now alias is a magic command to define
4755 * Changed the alias system. Now alias is a magic command to define
4751 aliases just like the shell. Rationale: the builtin magics should
4756 aliases just like the shell. Rationale: the builtin magics should
4752 be there for things deeply connected to IPython's
4757 be there for things deeply connected to IPython's
4753 architecture. And this is a much lighter system for what I think
4758 architecture. And this is a much lighter system for what I think
4754 is the really important feature: allowing users to define quickly
4759 is the really important feature: allowing users to define quickly
4755 magics that will do shell things for them, so they can customize
4760 magics that will do shell things for them, so they can customize
4756 IPython easily to match their work habits. If someone is really
4761 IPython easily to match their work habits. If someone is really
4757 desperate to have another name for a builtin alias, they can
4762 desperate to have another name for a builtin alias, they can
4758 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4763 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4759 works.
4764 works.
4760
4765
4761 2001-11-28 Fernando Perez <fperez@colorado.edu>
4766 2001-11-28 Fernando Perez <fperez@colorado.edu>
4762
4767
4763 * Changed @file so that it opens the source file at the proper
4768 * Changed @file so that it opens the source file at the proper
4764 line. Since it uses less, if your EDITOR environment is
4769 line. Since it uses less, if your EDITOR environment is
4765 configured, typing v will immediately open your editor of choice
4770 configured, typing v will immediately open your editor of choice
4766 right at the line where the object is defined. Not as quick as
4771 right at the line where the object is defined. Not as quick as
4767 having a direct @edit command, but for all intents and purposes it
4772 having a direct @edit command, but for all intents and purposes it
4768 works. And I don't have to worry about writing @edit to deal with
4773 works. And I don't have to worry about writing @edit to deal with
4769 all the editors, less does that.
4774 all the editors, less does that.
4770
4775
4771 * Version 0.1.16 released, 0.1.17 opened.
4776 * Version 0.1.16 released, 0.1.17 opened.
4772
4777
4773 * Fixed some nasty bugs in the page/page_dumb combo that could
4778 * Fixed some nasty bugs in the page/page_dumb combo that could
4774 crash IPython.
4779 crash IPython.
4775
4780
4776 2001-11-27 Fernando Perez <fperez@colorado.edu>
4781 2001-11-27 Fernando Perez <fperez@colorado.edu>
4777
4782
4778 * Version 0.1.15 released, 0.1.16 opened.
4783 * Version 0.1.15 released, 0.1.16 opened.
4779
4784
4780 * Finally got ? and ?? to work for undefined things: now it's
4785 * Finally got ? and ?? to work for undefined things: now it's
4781 possible to type {}.get? and get information about the get method
4786 possible to type {}.get? and get information about the get method
4782 of dicts, or os.path? even if only os is defined (so technically
4787 of dicts, or os.path? even if only os is defined (so technically
4783 os.path isn't). Works at any level. For example, after import os,
4788 os.path isn't). Works at any level. For example, after import os,
4784 os?, os.path?, os.path.abspath? all work. This is great, took some
4789 os?, os.path?, os.path.abspath? all work. This is great, took some
4785 work in _ofind.
4790 work in _ofind.
4786
4791
4787 * Fixed more bugs with logging. The sanest way to do it was to add
4792 * Fixed more bugs with logging. The sanest way to do it was to add
4788 to @log a 'mode' parameter. Killed two in one shot (this mode
4793 to @log a 'mode' parameter. Killed two in one shot (this mode
4789 option was a request of Janko's). I think it's finally clean
4794 option was a request of Janko's). I think it's finally clean
4790 (famous last words).
4795 (famous last words).
4791
4796
4792 * Added a page_dumb() pager which does a decent job of paging on
4797 * Added a page_dumb() pager which does a decent job of paging on
4793 screen, if better things (like less) aren't available. One less
4798 screen, if better things (like less) aren't available. One less
4794 unix dependency (someday maybe somebody will port this to
4799 unix dependency (someday maybe somebody will port this to
4795 windows).
4800 windows).
4796
4801
4797 * Fixed problem in magic_log: would lock of logging out if log
4802 * Fixed problem in magic_log: would lock of logging out if log
4798 creation failed (because it would still think it had succeeded).
4803 creation failed (because it would still think it had succeeded).
4799
4804
4800 * Improved the page() function using curses to auto-detect screen
4805 * Improved the page() function using curses to auto-detect screen
4801 size. Now it can make a much better decision on whether to print
4806 size. Now it can make a much better decision on whether to print
4802 or page a string. Option screen_length was modified: a value 0
4807 or page a string. Option screen_length was modified: a value 0
4803 means auto-detect, and that's the default now.
4808 means auto-detect, and that's the default now.
4804
4809
4805 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4810 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4806 go out. I'll test it for a few days, then talk to Janko about
4811 go out. I'll test it for a few days, then talk to Janko about
4807 licences and announce it.
4812 licences and announce it.
4808
4813
4809 * Fixed the length of the auto-generated ---> prompt which appears
4814 * Fixed the length of the auto-generated ---> prompt which appears
4810 for auto-parens and auto-quotes. Getting this right isn't trivial,
4815 for auto-parens and auto-quotes. Getting this right isn't trivial,
4811 with all the color escapes, different prompt types and optional
4816 with all the color escapes, different prompt types and optional
4812 separators. But it seems to be working in all the combinations.
4817 separators. But it seems to be working in all the combinations.
4813
4818
4814 2001-11-26 Fernando Perez <fperez@colorado.edu>
4819 2001-11-26 Fernando Perez <fperez@colorado.edu>
4815
4820
4816 * Wrote a regexp filter to get option types from the option names
4821 * Wrote a regexp filter to get option types from the option names
4817 string. This eliminates the need to manually keep two duplicate
4822 string. This eliminates the need to manually keep two duplicate
4818 lists.
4823 lists.
4819
4824
4820 * Removed the unneeded check_option_names. Now options are handled
4825 * Removed the unneeded check_option_names. Now options are handled
4821 in a much saner manner and it's easy to visually check that things
4826 in a much saner manner and it's easy to visually check that things
4822 are ok.
4827 are ok.
4823
4828
4824 * Updated version numbers on all files I modified to carry a
4829 * Updated version numbers on all files I modified to carry a
4825 notice so Janko and Nathan have clear version markers.
4830 notice so Janko and Nathan have clear version markers.
4826
4831
4827 * Updated docstring for ultraTB with my changes. I should send
4832 * Updated docstring for ultraTB with my changes. I should send
4828 this to Nathan.
4833 this to Nathan.
4829
4834
4830 * Lots of small fixes. Ran everything through pychecker again.
4835 * Lots of small fixes. Ran everything through pychecker again.
4831
4836
4832 * Made loading of deep_reload an cmd line option. If it's not too
4837 * Made loading of deep_reload an cmd line option. If it's not too
4833 kosher, now people can just disable it. With -nodeep_reload it's
4838 kosher, now people can just disable it. With -nodeep_reload it's
4834 still available as dreload(), it just won't overwrite reload().
4839 still available as dreload(), it just won't overwrite reload().
4835
4840
4836 * Moved many options to the no| form (-opt and -noopt
4841 * Moved many options to the no| form (-opt and -noopt
4837 accepted). Cleaner.
4842 accepted). Cleaner.
4838
4843
4839 * Changed magic_log so that if called with no parameters, it uses
4844 * Changed magic_log so that if called with no parameters, it uses
4840 'rotate' mode. That way auto-generated logs aren't automatically
4845 'rotate' mode. That way auto-generated logs aren't automatically
4841 over-written. For normal logs, now a backup is made if it exists
4846 over-written. For normal logs, now a backup is made if it exists
4842 (only 1 level of backups). A new 'backup' mode was added to the
4847 (only 1 level of backups). A new 'backup' mode was added to the
4843 Logger class to support this. This was a request by Janko.
4848 Logger class to support this. This was a request by Janko.
4844
4849
4845 * Added @logoff/@logon to stop/restart an active log.
4850 * Added @logoff/@logon to stop/restart an active log.
4846
4851
4847 * Fixed a lot of bugs in log saving/replay. It was pretty
4852 * Fixed a lot of bugs in log saving/replay. It was pretty
4848 broken. Now special lines (!@,/) appear properly in the command
4853 broken. Now special lines (!@,/) appear properly in the command
4849 history after a log replay.
4854 history after a log replay.
4850
4855
4851 * Tried and failed to implement full session saving via pickle. My
4856 * Tried and failed to implement full session saving via pickle. My
4852 idea was to pickle __main__.__dict__, but modules can't be
4857 idea was to pickle __main__.__dict__, but modules can't be
4853 pickled. This would be a better alternative to replaying logs, but
4858 pickled. This would be a better alternative to replaying logs, but
4854 seems quite tricky to get to work. Changed -session to be called
4859 seems quite tricky to get to work. Changed -session to be called
4855 -logplay, which more accurately reflects what it does. And if we
4860 -logplay, which more accurately reflects what it does. And if we
4856 ever get real session saving working, -session is now available.
4861 ever get real session saving working, -session is now available.
4857
4862
4858 * Implemented color schemes for prompts also. As for tracebacks,
4863 * Implemented color schemes for prompts also. As for tracebacks,
4859 currently only NoColor and Linux are supported. But now the
4864 currently only NoColor and Linux are supported. But now the
4860 infrastructure is in place, based on a generic ColorScheme
4865 infrastructure is in place, based on a generic ColorScheme
4861 class. So writing and activating new schemes both for the prompts
4866 class. So writing and activating new schemes both for the prompts
4862 and the tracebacks should be straightforward.
4867 and the tracebacks should be straightforward.
4863
4868
4864 * Version 0.1.13 released, 0.1.14 opened.
4869 * Version 0.1.13 released, 0.1.14 opened.
4865
4870
4866 * Changed handling of options for output cache. Now counter is
4871 * Changed handling of options for output cache. Now counter is
4867 hardwired starting at 1 and one specifies the maximum number of
4872 hardwired starting at 1 and one specifies the maximum number of
4868 entries *in the outcache* (not the max prompt counter). This is
4873 entries *in the outcache* (not the max prompt counter). This is
4869 much better, since many statements won't increase the cache
4874 much better, since many statements won't increase the cache
4870 count. It also eliminated some confusing options, now there's only
4875 count. It also eliminated some confusing options, now there's only
4871 one: cache_size.
4876 one: cache_size.
4872
4877
4873 * Added 'alias' magic function and magic_alias option in the
4878 * Added 'alias' magic function and magic_alias option in the
4874 ipythonrc file. Now the user can easily define whatever names he
4879 ipythonrc file. Now the user can easily define whatever names he
4875 wants for the magic functions without having to play weird
4880 wants for the magic functions without having to play weird
4876 namespace games. This gives IPython a real shell-like feel.
4881 namespace games. This gives IPython a real shell-like feel.
4877
4882
4878 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4883 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4879 @ or not).
4884 @ or not).
4880
4885
4881 This was one of the last remaining 'visible' bugs (that I know
4886 This was one of the last remaining 'visible' bugs (that I know
4882 of). I think if I can clean up the session loading so it works
4887 of). I think if I can clean up the session loading so it works
4883 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4888 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4884 about licensing).
4889 about licensing).
4885
4890
4886 2001-11-25 Fernando Perez <fperez@colorado.edu>
4891 2001-11-25 Fernando Perez <fperez@colorado.edu>
4887
4892
4888 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4893 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4889 there's a cleaner distinction between what ? and ?? show.
4894 there's a cleaner distinction between what ? and ?? show.
4890
4895
4891 * Added screen_length option. Now the user can define his own
4896 * Added screen_length option. Now the user can define his own
4892 screen size for page() operations.
4897 screen size for page() operations.
4893
4898
4894 * Implemented magic shell-like functions with automatic code
4899 * Implemented magic shell-like functions with automatic code
4895 generation. Now adding another function is just a matter of adding
4900 generation. Now adding another function is just a matter of adding
4896 an entry to a dict, and the function is dynamically generated at
4901 an entry to a dict, and the function is dynamically generated at
4897 run-time. Python has some really cool features!
4902 run-time. Python has some really cool features!
4898
4903
4899 * Renamed many options to cleanup conventions a little. Now all
4904 * Renamed many options to cleanup conventions a little. Now all
4900 are lowercase, and only underscores where needed. Also in the code
4905 are lowercase, and only underscores where needed. Also in the code
4901 option name tables are clearer.
4906 option name tables are clearer.
4902
4907
4903 * Changed prompts a little. Now input is 'In [n]:' instead of
4908 * Changed prompts a little. Now input is 'In [n]:' instead of
4904 'In[n]:='. This allows it the numbers to be aligned with the
4909 'In[n]:='. This allows it the numbers to be aligned with the
4905 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4910 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4906 Python (it was a Mathematica thing). The '...' continuation prompt
4911 Python (it was a Mathematica thing). The '...' continuation prompt
4907 was also changed a little to align better.
4912 was also changed a little to align better.
4908
4913
4909 * Fixed bug when flushing output cache. Not all _p<n> variables
4914 * Fixed bug when flushing output cache. Not all _p<n> variables
4910 exist, so their deletion needs to be wrapped in a try:
4915 exist, so their deletion needs to be wrapped in a try:
4911
4916
4912 * Figured out how to properly use inspect.formatargspec() (it
4917 * Figured out how to properly use inspect.formatargspec() (it
4913 requires the args preceded by *). So I removed all the code from
4918 requires the args preceded by *). So I removed all the code from
4914 _get_pdef in Magic, which was just replicating that.
4919 _get_pdef in Magic, which was just replicating that.
4915
4920
4916 * Added test to prefilter to allow redefining magic function names
4921 * Added test to prefilter to allow redefining magic function names
4917 as variables. This is ok, since the @ form is always available,
4922 as variables. This is ok, since the @ form is always available,
4918 but whe should allow the user to define a variable called 'ls' if
4923 but whe should allow the user to define a variable called 'ls' if
4919 he needs it.
4924 he needs it.
4920
4925
4921 * Moved the ToDo information from README into a separate ToDo.
4926 * Moved the ToDo information from README into a separate ToDo.
4922
4927
4923 * General code cleanup and small bugfixes. I think it's close to a
4928 * General code cleanup and small bugfixes. I think it's close to a
4924 state where it can be released, obviously with a big 'beta'
4929 state where it can be released, obviously with a big 'beta'
4925 warning on it.
4930 warning on it.
4926
4931
4927 * Got the magic function split to work. Now all magics are defined
4932 * Got the magic function split to work. Now all magics are defined
4928 in a separate class. It just organizes things a bit, and now
4933 in a separate class. It just organizes things a bit, and now
4929 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4934 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4930 was too long).
4935 was too long).
4931
4936
4932 * Changed @clear to @reset to avoid potential confusions with
4937 * Changed @clear to @reset to avoid potential confusions with
4933 the shell command clear. Also renamed @cl to @clear, which does
4938 the shell command clear. Also renamed @cl to @clear, which does
4934 exactly what people expect it to from their shell experience.
4939 exactly what people expect it to from their shell experience.
4935
4940
4936 Added a check to the @reset command (since it's so
4941 Added a check to the @reset command (since it's so
4937 destructive, it's probably a good idea to ask for confirmation).
4942 destructive, it's probably a good idea to ask for confirmation).
4938 But now reset only works for full namespace resetting. Since the
4943 But now reset only works for full namespace resetting. Since the
4939 del keyword is already there for deleting a few specific
4944 del keyword is already there for deleting a few specific
4940 variables, I don't see the point of having a redundant magic
4945 variables, I don't see the point of having a redundant magic
4941 function for the same task.
4946 function for the same task.
4942
4947
4943 2001-11-24 Fernando Perez <fperez@colorado.edu>
4948 2001-11-24 Fernando Perez <fperez@colorado.edu>
4944
4949
4945 * Updated the builtin docs (esp. the ? ones).
4950 * Updated the builtin docs (esp. the ? ones).
4946
4951
4947 * Ran all the code through pychecker. Not terribly impressed with
4952 * Ran all the code through pychecker. Not terribly impressed with
4948 it: lots of spurious warnings and didn't really find anything of
4953 it: lots of spurious warnings and didn't really find anything of
4949 substance (just a few modules being imported and not used).
4954 substance (just a few modules being imported and not used).
4950
4955
4951 * Implemented the new ultraTB functionality into IPython. New
4956 * Implemented the new ultraTB functionality into IPython. New
4952 option: xcolors. This chooses color scheme. xmode now only selects
4957 option: xcolors. This chooses color scheme. xmode now only selects
4953 between Plain and Verbose. Better orthogonality.
4958 between Plain and Verbose. Better orthogonality.
4954
4959
4955 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4960 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4956 mode and color scheme for the exception handlers. Now it's
4961 mode and color scheme for the exception handlers. Now it's
4957 possible to have the verbose traceback with no coloring.
4962 possible to have the verbose traceback with no coloring.
4958
4963
4959 2001-11-23 Fernando Perez <fperez@colorado.edu>
4964 2001-11-23 Fernando Perez <fperez@colorado.edu>
4960
4965
4961 * Version 0.1.12 released, 0.1.13 opened.
4966 * Version 0.1.12 released, 0.1.13 opened.
4962
4967
4963 * Removed option to set auto-quote and auto-paren escapes by
4968 * Removed option to set auto-quote and auto-paren escapes by
4964 user. The chances of breaking valid syntax are just too high. If
4969 user. The chances of breaking valid syntax are just too high. If
4965 someone *really* wants, they can always dig into the code.
4970 someone *really* wants, they can always dig into the code.
4966
4971
4967 * Made prompt separators configurable.
4972 * Made prompt separators configurable.
4968
4973
4969 2001-11-22 Fernando Perez <fperez@colorado.edu>
4974 2001-11-22 Fernando Perez <fperez@colorado.edu>
4970
4975
4971 * Small bugfixes in many places.
4976 * Small bugfixes in many places.
4972
4977
4973 * Removed the MyCompleter class from ipplib. It seemed redundant
4978 * Removed the MyCompleter class from ipplib. It seemed redundant
4974 with the C-p,C-n history search functionality. Less code to
4979 with the C-p,C-n history search functionality. Less code to
4975 maintain.
4980 maintain.
4976
4981
4977 * Moved all the original ipython.py code into ipythonlib.py. Right
4982 * Moved all the original ipython.py code into ipythonlib.py. Right
4978 now it's just one big dump into a function called make_IPython, so
4983 now it's just one big dump into a function called make_IPython, so
4979 no real modularity has been gained. But at least it makes the
4984 no real modularity has been gained. But at least it makes the
4980 wrapper script tiny, and since ipythonlib is a module, it gets
4985 wrapper script tiny, and since ipythonlib is a module, it gets
4981 compiled and startup is much faster.
4986 compiled and startup is much faster.
4982
4987
4983 This is a reasobably 'deep' change, so we should test it for a
4988 This is a reasobably 'deep' change, so we should test it for a
4984 while without messing too much more with the code.
4989 while without messing too much more with the code.
4985
4990
4986 2001-11-21 Fernando Perez <fperez@colorado.edu>
4991 2001-11-21 Fernando Perez <fperez@colorado.edu>
4987
4992
4988 * Version 0.1.11 released, 0.1.12 opened for further work.
4993 * Version 0.1.11 released, 0.1.12 opened for further work.
4989
4994
4990 * Removed dependency on Itpl. It was only needed in one place. It
4995 * Removed dependency on Itpl. It was only needed in one place. It
4991 would be nice if this became part of python, though. It makes life
4996 would be nice if this became part of python, though. It makes life
4992 *a lot* easier in some cases.
4997 *a lot* easier in some cases.
4993
4998
4994 * Simplified the prefilter code a bit. Now all handlers are
4999 * Simplified the prefilter code a bit. Now all handlers are
4995 expected to explicitly return a value (at least a blank string).
5000 expected to explicitly return a value (at least a blank string).
4996
5001
4997 * Heavy edits in ipplib. Removed the help system altogether. Now
5002 * Heavy edits in ipplib. Removed the help system altogether. Now
4998 obj?/?? is used for inspecting objects, a magic @doc prints
5003 obj?/?? is used for inspecting objects, a magic @doc prints
4999 docstrings, and full-blown Python help is accessed via the 'help'
5004 docstrings, and full-blown Python help is accessed via the 'help'
5000 keyword. This cleans up a lot of code (less to maintain) and does
5005 keyword. This cleans up a lot of code (less to maintain) and does
5001 the job. Since 'help' is now a standard Python component, might as
5006 the job. Since 'help' is now a standard Python component, might as
5002 well use it and remove duplicate functionality.
5007 well use it and remove duplicate functionality.
5003
5008
5004 Also removed the option to use ipplib as a standalone program. By
5009 Also removed the option to use ipplib as a standalone program. By
5005 now it's too dependent on other parts of IPython to function alone.
5010 now it's too dependent on other parts of IPython to function alone.
5006
5011
5007 * Fixed bug in genutils.pager. It would crash if the pager was
5012 * Fixed bug in genutils.pager. It would crash if the pager was
5008 exited immediately after opening (broken pipe).
5013 exited immediately after opening (broken pipe).
5009
5014
5010 * Trimmed down the VerboseTB reporting a little. The header is
5015 * Trimmed down the VerboseTB reporting a little. The header is
5011 much shorter now and the repeated exception arguments at the end
5016 much shorter now and the repeated exception arguments at the end
5012 have been removed. For interactive use the old header seemed a bit
5017 have been removed. For interactive use the old header seemed a bit
5013 excessive.
5018 excessive.
5014
5019
5015 * Fixed small bug in output of @whos for variables with multi-word
5020 * Fixed small bug in output of @whos for variables with multi-word
5016 types (only first word was displayed).
5021 types (only first word was displayed).
5017
5022
5018 2001-11-17 Fernando Perez <fperez@colorado.edu>
5023 2001-11-17 Fernando Perez <fperez@colorado.edu>
5019
5024
5020 * Version 0.1.10 released, 0.1.11 opened for further work.
5025 * Version 0.1.10 released, 0.1.11 opened for further work.
5021
5026
5022 * Modified dirs and friends. dirs now *returns* the stack (not
5027 * Modified dirs and friends. dirs now *returns* the stack (not
5023 prints), so one can manipulate it as a variable. Convenient to
5028 prints), so one can manipulate it as a variable. Convenient to
5024 travel along many directories.
5029 travel along many directories.
5025
5030
5026 * Fixed bug in magic_pdef: would only work with functions with
5031 * Fixed bug in magic_pdef: would only work with functions with
5027 arguments with default values.
5032 arguments with default values.
5028
5033
5029 2001-11-14 Fernando Perez <fperez@colorado.edu>
5034 2001-11-14 Fernando Perez <fperez@colorado.edu>
5030
5035
5031 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5036 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5032 example with IPython. Various other minor fixes and cleanups.
5037 example with IPython. Various other minor fixes and cleanups.
5033
5038
5034 * Version 0.1.9 released, 0.1.10 opened for further work.
5039 * Version 0.1.9 released, 0.1.10 opened for further work.
5035
5040
5036 * Added sys.path to the list of directories searched in the
5041 * Added sys.path to the list of directories searched in the
5037 execfile= option. It used to be the current directory and the
5042 execfile= option. It used to be the current directory and the
5038 user's IPYTHONDIR only.
5043 user's IPYTHONDIR only.
5039
5044
5040 2001-11-13 Fernando Perez <fperez@colorado.edu>
5045 2001-11-13 Fernando Perez <fperez@colorado.edu>
5041
5046
5042 * Reinstated the raw_input/prefilter separation that Janko had
5047 * Reinstated the raw_input/prefilter separation that Janko had
5043 initially. This gives a more convenient setup for extending the
5048 initially. This gives a more convenient setup for extending the
5044 pre-processor from the outside: raw_input always gets a string,
5049 pre-processor from the outside: raw_input always gets a string,
5045 and prefilter has to process it. We can then redefine prefilter
5050 and prefilter has to process it. We can then redefine prefilter
5046 from the outside and implement extensions for special
5051 from the outside and implement extensions for special
5047 purposes.
5052 purposes.
5048
5053
5049 Today I got one for inputting PhysicalQuantity objects
5054 Today I got one for inputting PhysicalQuantity objects
5050 (from Scientific) without needing any function calls at
5055 (from Scientific) without needing any function calls at
5051 all. Extremely convenient, and it's all done as a user-level
5056 all. Extremely convenient, and it's all done as a user-level
5052 extension (no IPython code was touched). Now instead of:
5057 extension (no IPython code was touched). Now instead of:
5053 a = PhysicalQuantity(4.2,'m/s**2')
5058 a = PhysicalQuantity(4.2,'m/s**2')
5054 one can simply say
5059 one can simply say
5055 a = 4.2 m/s**2
5060 a = 4.2 m/s**2
5056 or even
5061 or even
5057 a = 4.2 m/s^2
5062 a = 4.2 m/s^2
5058
5063
5059 I use this, but it's also a proof of concept: IPython really is
5064 I use this, but it's also a proof of concept: IPython really is
5060 fully user-extensible, even at the level of the parsing of the
5065 fully user-extensible, even at the level of the parsing of the
5061 command line. It's not trivial, but it's perfectly doable.
5066 command line. It's not trivial, but it's perfectly doable.
5062
5067
5063 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5068 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5064 the problem of modules being loaded in the inverse order in which
5069 the problem of modules being loaded in the inverse order in which
5065 they were defined in
5070 they were defined in
5066
5071
5067 * Version 0.1.8 released, 0.1.9 opened for further work.
5072 * Version 0.1.8 released, 0.1.9 opened for further work.
5068
5073
5069 * Added magics pdef, source and file. They respectively show the
5074 * Added magics pdef, source and file. They respectively show the
5070 definition line ('prototype' in C), source code and full python
5075 definition line ('prototype' in C), source code and full python
5071 file for any callable object. The object inspector oinfo uses
5076 file for any callable object. The object inspector oinfo uses
5072 these to show the same information.
5077 these to show the same information.
5073
5078
5074 * Version 0.1.7 released, 0.1.8 opened for further work.
5079 * Version 0.1.7 released, 0.1.8 opened for further work.
5075
5080
5076 * Separated all the magic functions into a class called Magic. The
5081 * Separated all the magic functions into a class called Magic. The
5077 InteractiveShell class was becoming too big for Xemacs to handle
5082 InteractiveShell class was becoming too big for Xemacs to handle
5078 (de-indenting a line would lock it up for 10 seconds while it
5083 (de-indenting a line would lock it up for 10 seconds while it
5079 backtracked on the whole class!)
5084 backtracked on the whole class!)
5080
5085
5081 FIXME: didn't work. It can be done, but right now namespaces are
5086 FIXME: didn't work. It can be done, but right now namespaces are
5082 all messed up. Do it later (reverted it for now, so at least
5087 all messed up. Do it later (reverted it for now, so at least
5083 everything works as before).
5088 everything works as before).
5084
5089
5085 * Got the object introspection system (magic_oinfo) working! I
5090 * Got the object introspection system (magic_oinfo) working! I
5086 think this is pretty much ready for release to Janko, so he can
5091 think this is pretty much ready for release to Janko, so he can
5087 test it for a while and then announce it. Pretty much 100% of what
5092 test it for a while and then announce it. Pretty much 100% of what
5088 I wanted for the 'phase 1' release is ready. Happy, tired.
5093 I wanted for the 'phase 1' release is ready. Happy, tired.
5089
5094
5090 2001-11-12 Fernando Perez <fperez@colorado.edu>
5095 2001-11-12 Fernando Perez <fperez@colorado.edu>
5091
5096
5092 * Version 0.1.6 released, 0.1.7 opened for further work.
5097 * Version 0.1.6 released, 0.1.7 opened for further work.
5093
5098
5094 * Fixed bug in printing: it used to test for truth before
5099 * Fixed bug in printing: it used to test for truth before
5095 printing, so 0 wouldn't print. Now checks for None.
5100 printing, so 0 wouldn't print. Now checks for None.
5096
5101
5097 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5102 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5098 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5103 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5099 reaches by hand into the outputcache. Think of a better way to do
5104 reaches by hand into the outputcache. Think of a better way to do
5100 this later.
5105 this later.
5101
5106
5102 * Various small fixes thanks to Nathan's comments.
5107 * Various small fixes thanks to Nathan's comments.
5103
5108
5104 * Changed magic_pprint to magic_Pprint. This way it doesn't
5109 * Changed magic_pprint to magic_Pprint. This way it doesn't
5105 collide with pprint() and the name is consistent with the command
5110 collide with pprint() and the name is consistent with the command
5106 line option.
5111 line option.
5107
5112
5108 * Changed prompt counter behavior to be fully like
5113 * Changed prompt counter behavior to be fully like
5109 Mathematica's. That is, even input that doesn't return a result
5114 Mathematica's. That is, even input that doesn't return a result
5110 raises the prompt counter. The old behavior was kind of confusing
5115 raises the prompt counter. The old behavior was kind of confusing
5111 (getting the same prompt number several times if the operation
5116 (getting the same prompt number several times if the operation
5112 didn't return a result).
5117 didn't return a result).
5113
5118
5114 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5119 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5115
5120
5116 * Fixed -Classic mode (wasn't working anymore).
5121 * Fixed -Classic mode (wasn't working anymore).
5117
5122
5118 * Added colored prompts using Nathan's new code. Colors are
5123 * Added colored prompts using Nathan's new code. Colors are
5119 currently hardwired, they can be user-configurable. For
5124 currently hardwired, they can be user-configurable. For
5120 developers, they can be chosen in file ipythonlib.py, at the
5125 developers, they can be chosen in file ipythonlib.py, at the
5121 beginning of the CachedOutput class def.
5126 beginning of the CachedOutput class def.
5122
5127
5123 2001-11-11 Fernando Perez <fperez@colorado.edu>
5128 2001-11-11 Fernando Perez <fperez@colorado.edu>
5124
5129
5125 * Version 0.1.5 released, 0.1.6 opened for further work.
5130 * Version 0.1.5 released, 0.1.6 opened for further work.
5126
5131
5127 * Changed magic_env to *return* the environment as a dict (not to
5132 * Changed magic_env to *return* the environment as a dict (not to
5128 print it). This way it prints, but it can also be processed.
5133 print it). This way it prints, but it can also be processed.
5129
5134
5130 * Added Verbose exception reporting to interactive
5135 * Added Verbose exception reporting to interactive
5131 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5136 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5132 traceback. Had to make some changes to the ultraTB file. This is
5137 traceback. Had to make some changes to the ultraTB file. This is
5133 probably the last 'big' thing in my mental todo list. This ties
5138 probably the last 'big' thing in my mental todo list. This ties
5134 in with the next entry:
5139 in with the next entry:
5135
5140
5136 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5141 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5137 has to specify is Plain, Color or Verbose for all exception
5142 has to specify is Plain, Color or Verbose for all exception
5138 handling.
5143 handling.
5139
5144
5140 * Removed ShellServices option. All this can really be done via
5145 * Removed ShellServices option. All this can really be done via
5141 the magic system. It's easier to extend, cleaner and has automatic
5146 the magic system. It's easier to extend, cleaner and has automatic
5142 namespace protection and documentation.
5147 namespace protection and documentation.
5143
5148
5144 2001-11-09 Fernando Perez <fperez@colorado.edu>
5149 2001-11-09 Fernando Perez <fperez@colorado.edu>
5145
5150
5146 * Fixed bug in output cache flushing (missing parameter to
5151 * Fixed bug in output cache flushing (missing parameter to
5147 __init__). Other small bugs fixed (found using pychecker).
5152 __init__). Other small bugs fixed (found using pychecker).
5148
5153
5149 * Version 0.1.4 opened for bugfixing.
5154 * Version 0.1.4 opened for bugfixing.
5150
5155
5151 2001-11-07 Fernando Perez <fperez@colorado.edu>
5156 2001-11-07 Fernando Perez <fperez@colorado.edu>
5152
5157
5153 * Version 0.1.3 released, mainly because of the raw_input bug.
5158 * Version 0.1.3 released, mainly because of the raw_input bug.
5154
5159
5155 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5160 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5156 and when testing for whether things were callable, a call could
5161 and when testing for whether things were callable, a call could
5157 actually be made to certain functions. They would get called again
5162 actually be made to certain functions. They would get called again
5158 once 'really' executed, with a resulting double call. A disaster
5163 once 'really' executed, with a resulting double call. A disaster
5159 in many cases (list.reverse() would never work!).
5164 in many cases (list.reverse() would never work!).
5160
5165
5161 * Removed prefilter() function, moved its code to raw_input (which
5166 * Removed prefilter() function, moved its code to raw_input (which
5162 after all was just a near-empty caller for prefilter). This saves
5167 after all was just a near-empty caller for prefilter). This saves
5163 a function call on every prompt, and simplifies the class a tiny bit.
5168 a function call on every prompt, and simplifies the class a tiny bit.
5164
5169
5165 * Fix _ip to __ip name in magic example file.
5170 * Fix _ip to __ip name in magic example file.
5166
5171
5167 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5172 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5168 work with non-gnu versions of tar.
5173 work with non-gnu versions of tar.
5169
5174
5170 2001-11-06 Fernando Perez <fperez@colorado.edu>
5175 2001-11-06 Fernando Perez <fperez@colorado.edu>
5171
5176
5172 * Version 0.1.2. Just to keep track of the recent changes.
5177 * Version 0.1.2. Just to keep track of the recent changes.
5173
5178
5174 * Fixed nasty bug in output prompt routine. It used to check 'if
5179 * Fixed nasty bug in output prompt routine. It used to check 'if
5175 arg != None...'. Problem is, this fails if arg implements a
5180 arg != None...'. Problem is, this fails if arg implements a
5176 special comparison (__cmp__) which disallows comparing to
5181 special comparison (__cmp__) which disallows comparing to
5177 None. Found it when trying to use the PhysicalQuantity module from
5182 None. Found it when trying to use the PhysicalQuantity module from
5178 ScientificPython.
5183 ScientificPython.
5179
5184
5180 2001-11-05 Fernando Perez <fperez@colorado.edu>
5185 2001-11-05 Fernando Perez <fperez@colorado.edu>
5181
5186
5182 * Also added dirs. Now the pushd/popd/dirs family functions
5187 * Also added dirs. Now the pushd/popd/dirs family functions
5183 basically like the shell, with the added convenience of going home
5188 basically like the shell, with the added convenience of going home
5184 when called with no args.
5189 when called with no args.
5185
5190
5186 * pushd/popd slightly modified to mimic shell behavior more
5191 * pushd/popd slightly modified to mimic shell behavior more
5187 closely.
5192 closely.
5188
5193
5189 * Added env,pushd,popd from ShellServices as magic functions. I
5194 * Added env,pushd,popd from ShellServices as magic functions. I
5190 think the cleanest will be to port all desired functions from
5195 think the cleanest will be to port all desired functions from
5191 ShellServices as magics and remove ShellServices altogether. This
5196 ShellServices as magics and remove ShellServices altogether. This
5192 will provide a single, clean way of adding functionality
5197 will provide a single, clean way of adding functionality
5193 (shell-type or otherwise) to IP.
5198 (shell-type or otherwise) to IP.
5194
5199
5195 2001-11-04 Fernando Perez <fperez@colorado.edu>
5200 2001-11-04 Fernando Perez <fperez@colorado.edu>
5196
5201
5197 * Added .ipython/ directory to sys.path. This way users can keep
5202 * Added .ipython/ directory to sys.path. This way users can keep
5198 customizations there and access them via import.
5203 customizations there and access them via import.
5199
5204
5200 2001-11-03 Fernando Perez <fperez@colorado.edu>
5205 2001-11-03 Fernando Perez <fperez@colorado.edu>
5201
5206
5202 * Opened version 0.1.1 for new changes.
5207 * Opened version 0.1.1 for new changes.
5203
5208
5204 * Changed version number to 0.1.0: first 'public' release, sent to
5209 * Changed version number to 0.1.0: first 'public' release, sent to
5205 Nathan and Janko.
5210 Nathan and Janko.
5206
5211
5207 * Lots of small fixes and tweaks.
5212 * Lots of small fixes and tweaks.
5208
5213
5209 * Minor changes to whos format. Now strings are shown, snipped if
5214 * Minor changes to whos format. Now strings are shown, snipped if
5210 too long.
5215 too long.
5211
5216
5212 * Changed ShellServices to work on __main__ so they show up in @who
5217 * Changed ShellServices to work on __main__ so they show up in @who
5213
5218
5214 * Help also works with ? at the end of a line:
5219 * Help also works with ? at the end of a line:
5215 ?sin and sin?
5220 ?sin and sin?
5216 both produce the same effect. This is nice, as often I use the
5221 both produce the same effect. This is nice, as often I use the
5217 tab-complete to find the name of a method, but I used to then have
5222 tab-complete to find the name of a method, but I used to then have
5218 to go to the beginning of the line to put a ? if I wanted more
5223 to go to the beginning of the line to put a ? if I wanted more
5219 info. Now I can just add the ? and hit return. Convenient.
5224 info. Now I can just add the ? and hit return. Convenient.
5220
5225
5221 2001-11-02 Fernando Perez <fperez@colorado.edu>
5226 2001-11-02 Fernando Perez <fperez@colorado.edu>
5222
5227
5223 * Python version check (>=2.1) added.
5228 * Python version check (>=2.1) added.
5224
5229
5225 * Added LazyPython documentation. At this point the docs are quite
5230 * Added LazyPython documentation. At this point the docs are quite
5226 a mess. A cleanup is in order.
5231 a mess. A cleanup is in order.
5227
5232
5228 * Auto-installer created. For some bizarre reason, the zipfiles
5233 * Auto-installer created. For some bizarre reason, the zipfiles
5229 module isn't working on my system. So I made a tar version
5234 module isn't working on my system. So I made a tar version
5230 (hopefully the command line options in various systems won't kill
5235 (hopefully the command line options in various systems won't kill
5231 me).
5236 me).
5232
5237
5233 * Fixes to Struct in genutils. Now all dictionary-like methods are
5238 * Fixes to Struct in genutils. Now all dictionary-like methods are
5234 protected (reasonably).
5239 protected (reasonably).
5235
5240
5236 * Added pager function to genutils and changed ? to print usage
5241 * Added pager function to genutils and changed ? to print usage
5237 note through it (it was too long).
5242 note through it (it was too long).
5238
5243
5239 * Added the LazyPython functionality. Works great! I changed the
5244 * Added the LazyPython functionality. Works great! I changed the
5240 auto-quote escape to ';', it's on home row and next to '. But
5245 auto-quote escape to ';', it's on home row and next to '. But
5241 both auto-quote and auto-paren (still /) escapes are command-line
5246 both auto-quote and auto-paren (still /) escapes are command-line
5242 parameters.
5247 parameters.
5243
5248
5244
5249
5245 2001-11-01 Fernando Perez <fperez@colorado.edu>
5250 2001-11-01 Fernando Perez <fperez@colorado.edu>
5246
5251
5247 * Version changed to 0.0.7. Fairly large change: configuration now
5252 * Version changed to 0.0.7. Fairly large change: configuration now
5248 is all stored in a directory, by default .ipython. There, all
5253 is all stored in a directory, by default .ipython. There, all
5249 config files have normal looking names (not .names)
5254 config files have normal looking names (not .names)
5250
5255
5251 * Version 0.0.6 Released first to Lucas and Archie as a test
5256 * Version 0.0.6 Released first to Lucas and Archie as a test
5252 run. Since it's the first 'semi-public' release, change version to
5257 run. Since it's the first 'semi-public' release, change version to
5253 > 0.0.6 for any changes now.
5258 > 0.0.6 for any changes now.
5254
5259
5255 * Stuff I had put in the ipplib.py changelog:
5260 * Stuff I had put in the ipplib.py changelog:
5256
5261
5257 Changes to InteractiveShell:
5262 Changes to InteractiveShell:
5258
5263
5259 - Made the usage message a parameter.
5264 - Made the usage message a parameter.
5260
5265
5261 - Require the name of the shell variable to be given. It's a bit
5266 - Require the name of the shell variable to be given. It's a bit
5262 of a hack, but allows the name 'shell' not to be hardwire in the
5267 of a hack, but allows the name 'shell' not to be hardwire in the
5263 magic (@) handler, which is problematic b/c it requires
5268 magic (@) handler, which is problematic b/c it requires
5264 polluting the global namespace with 'shell'. This in turn is
5269 polluting the global namespace with 'shell'. This in turn is
5265 fragile: if a user redefines a variable called shell, things
5270 fragile: if a user redefines a variable called shell, things
5266 break.
5271 break.
5267
5272
5268 - magic @: all functions available through @ need to be defined
5273 - magic @: all functions available through @ need to be defined
5269 as magic_<name>, even though they can be called simply as
5274 as magic_<name>, even though they can be called simply as
5270 @<name>. This allows the special command @magic to gather
5275 @<name>. This allows the special command @magic to gather
5271 information automatically about all existing magic functions,
5276 information automatically about all existing magic functions,
5272 even if they are run-time user extensions, by parsing the shell
5277 even if they are run-time user extensions, by parsing the shell
5273 instance __dict__ looking for special magic_ names.
5278 instance __dict__ looking for special magic_ names.
5274
5279
5275 - mainloop: added *two* local namespace parameters. This allows
5280 - mainloop: added *two* local namespace parameters. This allows
5276 the class to differentiate between parameters which were there
5281 the class to differentiate between parameters which were there
5277 before and after command line initialization was processed. This
5282 before and after command line initialization was processed. This
5278 way, later @who can show things loaded at startup by the
5283 way, later @who can show things loaded at startup by the
5279 user. This trick was necessary to make session saving/reloading
5284 user. This trick was necessary to make session saving/reloading
5280 really work: ideally after saving/exiting/reloading a session,
5285 really work: ideally after saving/exiting/reloading a session,
5281 *everythin* should look the same, including the output of @who. I
5286 *everythin* should look the same, including the output of @who. I
5282 was only able to make this work with this double namespace
5287 was only able to make this work with this double namespace
5283 trick.
5288 trick.
5284
5289
5285 - added a header to the logfile which allows (almost) full
5290 - added a header to the logfile which allows (almost) full
5286 session restoring.
5291 session restoring.
5287
5292
5288 - prepend lines beginning with @ or !, with a and log
5293 - prepend lines beginning with @ or !, with a and log
5289 them. Why? !lines: may be useful to know what you did @lines:
5294 them. Why? !lines: may be useful to know what you did @lines:
5290 they may affect session state. So when restoring a session, at
5295 they may affect session state. So when restoring a session, at
5291 least inform the user of their presence. I couldn't quite get
5296 least inform the user of their presence. I couldn't quite get
5292 them to properly re-execute, but at least the user is warned.
5297 them to properly re-execute, but at least the user is warned.
5293
5298
5294 * Started ChangeLog.
5299 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now